m3-svelte 4.6.7 → 5.1.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 (46) hide show
  1. package/package/buttons/Button.svelte +3 -13
  2. package/package/buttons/Button.svelte.d.ts +3 -6
  3. package/package/buttons/FAB.svelte +3 -5
  4. package/package/buttons/FAB.svelte.d.ts +2 -3
  5. package/package/buttons/SplitButton.svelte +3 -3
  6. package/package/buttons/SplitButton.svelte.d.ts +1 -1
  7. package/package/containers/Card.svelte +9 -10
  8. package/package/containers/Card.svelte.d.ts +3 -4
  9. package/package/containers/Dialog.svelte +1 -1
  10. package/package/containers/ListItem.svelte +9 -21
  11. package/package/containers/ListItem.svelte.d.ts +5 -6
  12. package/package/containers/MenuItem.svelte +3 -3
  13. package/package/containers/MenuItem.svelte.d.ts +1 -1
  14. package/package/containers/Snackbar.svelte +11 -2
  15. package/package/containers/Snackbar.svelte.d.ts +1 -0
  16. package/package/containers/StandardSideSheet.svelte +1 -1
  17. package/package/forms/Chip.svelte +3 -5
  18. package/package/forms/Chip.svelte.d.ts +2 -3
  19. package/package/{utils → forms}/DateField.svelte +12 -11
  20. package/package/{utils → forms}/DateField.svelte.d.ts +3 -2
  21. package/package/{utils → forms}/DateFieldOutlined.svelte +14 -15
  22. package/package/{utils → forms}/DateFieldOutlined.svelte.d.ts +3 -2
  23. package/package/forms/Slider.svelte +207 -31
  24. package/package/forms/Slider.svelte.d.ts +7 -1
  25. package/package/forms/SliderTicks.svelte +8 -238
  26. package/package/forms/SliderTicks.svelte.d.ts +9 -5
  27. package/package/forms/TextField.svelte +13 -31
  28. package/package/forms/TextField.svelte.d.ts +5 -8
  29. package/package/forms/TextFieldMultiline.svelte +1 -3
  30. package/package/forms/TextFieldOutlined.svelte +15 -36
  31. package/package/forms/TextFieldOutlined.svelte.d.ts +5 -8
  32. package/package/forms/TextFieldOutlinedMultiline.svelte +3 -7
  33. package/package/forms/_picker/Actions.svelte +3 -3
  34. package/package/forms/_picker/CalendarPicker.svelte +1 -1
  35. package/package/forms/_picker/FocusPicker.svelte +6 -1
  36. package/package/forms/_picker/Item.svelte +3 -3
  37. package/package/forms/_picker/Item.svelte.d.ts +1 -1
  38. package/package/index.d.ts +2 -3
  39. package/package/index.js +2 -3
  40. package/package/misc/_ripple.svelte +4 -4
  41. package/package/misc/_ripplesimple.svelte +4 -4
  42. package/package/misc/typing-utils.d.ts +3 -0
  43. package/package/misc/typing-utils.js +1 -0
  44. package/package/nav/NavCMLXItem.svelte +1 -0
  45. package/package/utils/ChipChooser.svelte +1 -1
  46. package/package.json +2 -2
@@ -1,23 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { IconifyIcon } from "@iconify/types";
3
- import Icon from "../misc/_icon.svelte";
4
3
  import type { HTMLInputAttributes } from "svelte/elements";
5
-
6
- type TrailingProps =
7
- | {
8
- trailingIcon: IconifyIcon;
9
- trailingClick: () => void;
10
- }
11
- | {
12
- trailingIcon?: undefined;
13
- trailingClick?: undefined;
14
- };
4
+ import Icon from "../misc/_icon.svelte";
5
+ import Layer from "../misc/Layer.svelte";
6
+ import type { ButtonAttrs } from "../misc/typing-utils";
15
7
 
16
8
  let {
17
- label: _label,
9
+ label,
18
10
  leadingIcon,
19
- trailingIcon,
20
- trailingClick,
11
+ trailing,
21
12
  disabled = false,
22
13
  required = false,
23
14
  error = false,
@@ -27,22 +18,20 @@
27
18
  }: {
28
19
  label: string;
29
20
  leadingIcon?: IconifyIcon;
21
+ trailing?: { icon: IconifyIcon } & ButtonAttrs;
30
22
  disabled?: boolean;
31
23
  required?: boolean;
32
24
  error?: boolean;
33
25
  value?: string;
34
26
  enter?: () => void;
35
- } & TrailingProps &
36
- HTMLInputAttributes = $props();
27
+ } & HTMLInputAttributes = $props();
37
28
  const id = $props.id();
38
-
39
- let label = $derived(_label || extra.name); // TODO: next breaking version, drop name backsupport
40
29
  </script>
41
30
 
42
31
  <div
43
32
  class="m3-container"
44
33
  class:leading-icon={leadingIcon}
45
- class:trailing-icon={trailingIcon}
34
+ class:trailing-icon={trailing}
46
35
  class:error
47
36
  >
48
37
  <input
@@ -62,9 +51,11 @@
62
51
  {#if leadingIcon}
63
52
  <Icon icon={leadingIcon} class="leading" />
64
53
  {/if}
65
- {#if trailingIcon}
66
- <button onclick={trailingClick} class="trailing">
67
- <Icon icon={trailingIcon} />
54
+ {#if trailing}
55
+ {@const { icon, ...extra } = trailing}
56
+ <button type="button" class="trailing" {...extra}>
57
+ <Layer />
58
+ <Icon {icon} />
68
59
  </button>
69
60
  {/if}
70
61
  </div>
@@ -175,15 +166,6 @@
175
166
  height: 0.125rem;
176
167
  background-color: rgb(var(--error, var(--m3-scheme-primary)));
177
168
  }
178
- @media (hover: hover) {
179
- button:hover {
180
- background-color: rgb(var(--m3-scheme-on-surface-variant) / 0.08);
181
- }
182
- }
183
- button:focus-visible,
184
- button:active {
185
- background-color: rgb(var(--m3-scheme-on-surface-variant) / 0.12);
186
- }
187
169
 
188
170
  .leading-icon > input {
189
171
  padding-left: 3.25rem;
@@ -1,21 +1,18 @@
1
1
  import type { IconifyIcon } from "@iconify/types";
2
2
  import type { HTMLInputAttributes } from "svelte/elements";
3
- type TrailingProps = {
4
- trailingIcon: IconifyIcon;
5
- trailingClick: () => void;
6
- } | {
7
- trailingIcon?: undefined;
8
- trailingClick?: undefined;
9
- };
3
+ import type { ButtonAttrs } from "../misc/typing-utils";
10
4
  type $$ComponentProps = {
11
5
  label: string;
12
6
  leadingIcon?: IconifyIcon;
7
+ trailing?: {
8
+ icon: IconifyIcon;
9
+ } & ButtonAttrs;
13
10
  disabled?: boolean;
14
11
  required?: boolean;
15
12
  error?: boolean;
16
13
  value?: string;
17
14
  enter?: () => void;
18
- } & TrailingProps & HTMLInputAttributes;
15
+ } & HTMLInputAttributes;
19
16
  declare const TextField: import("svelte").Component<$$ComponentProps, {}, "value">;
20
17
  type TextField = ReturnType<typeof TextField>;
21
18
  export default TextField;
@@ -4,7 +4,7 @@
4
4
  import type { HTMLTextareaAttributes } from "svelte/elements";
5
5
 
6
6
  let {
7
- label: _label,
7
+ label,
8
8
  leadingIcon,
9
9
  disabled = false,
10
10
  required = false,
@@ -34,8 +34,6 @@
34
34
  },
35
35
  };
36
36
  };
37
-
38
- let label = $derived(_label || extra.name); // TODO: next breaking version, drop name backsupport
39
37
  </script>
40
38
 
41
39
  <div class="m3-container" class:leading-icon={leadingIcon} class:error use:resize>
@@ -1,23 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { IconifyIcon } from "@iconify/types";
3
- import Icon from "../misc/_icon.svelte";
4
3
  import type { HTMLInputAttributes } from "svelte/elements";
5
-
6
- type TrailingProps =
7
- | {
8
- trailingIcon: IconifyIcon;
9
- trailingClick: () => void;
10
- }
11
- | {
12
- trailingIcon?: undefined;
13
- trailingClick?: undefined;
14
- };
4
+ import Icon from "../misc/_icon.svelte";
5
+ import Layer from "../misc/Layer.svelte";
6
+ import type { ButtonAttrs } from "../misc/typing-utils";
15
7
 
16
8
  let {
17
- label: _label,
9
+ label,
18
10
  leadingIcon,
19
- trailingIcon,
20
- trailingClick,
11
+ trailing,
21
12
  disabled = false,
22
13
  required = false,
23
14
  error = false,
@@ -27,22 +18,20 @@
27
18
  }: {
28
19
  label: string;
29
20
  leadingIcon?: IconifyIcon;
21
+ trailing?: { icon: IconifyIcon } & ButtonAttrs;
30
22
  disabled?: boolean;
31
23
  required?: boolean;
32
24
  error?: boolean;
33
25
  value?: string;
34
26
  enter?: () => void;
35
- } & TrailingProps &
36
- HTMLInputAttributes = $props();
27
+ } & HTMLInputAttributes = $props();
37
28
  const id = $props.id();
38
-
39
- let label = $derived(_label || extra.name); // TODO: next breaking version, drop name backsupport
40
29
  </script>
41
30
 
42
31
  <div
43
32
  class="m3-container"
44
33
  class:leading-icon={leadingIcon}
45
- class:trailing-icon={trailingIcon}
34
+ class:trailing-icon={trailing}
46
35
  class:error
47
36
  >
48
37
  <input
@@ -62,9 +51,11 @@
62
51
  {#if leadingIcon}
63
52
  <Icon icon={leadingIcon} class="leading" />
64
53
  {/if}
65
- {#if trailingIcon}
66
- <button onclick={trailingClick} class="trailing">
67
- <Icon icon={trailingIcon} />
54
+ {#if trailing}
55
+ {@const { icon, ...extra } = trailing}
56
+ <button type="button" class="trailing" {...extra}>
57
+ <Layer />
58
+ <Icon {icon} />
68
59
  </button>
69
60
  {/if}
70
61
  </div>
@@ -72,7 +63,7 @@
72
63
  <style>
73
64
  /*
74
65
  want to customize the label's background?
75
- do this: <TextFieldOutlined --m3-util-background="var(--m3-scheme-surface-container)" />
66
+ do this: <TextFieldOutlined --m3-util-background="rgb(var(--m3-scheme-surface-container))" />
76
67
  */
77
68
  :root {
78
69
  --m3-textfield-outlined-shape: var(--m3-util-rounding-extra-small);
@@ -101,9 +92,7 @@
101
92
  left: 0.75rem;
102
93
  top: 1rem;
103
94
  color: rgb(var(--error, var(--m3-scheme-on-surface-variant)));
104
- background-color: rgb(
105
- var(--m3-util-background, var(--m3-scheme-surface))
106
- ); /* TODO: next breaking change, make --m3-util-background a full color and update the comment above */
95
+ background-color: var(--m3-util-background, rgb(var(--m3-scheme-surface)));
107
96
  padding: 0 0.25rem;
108
97
  &:is(input:hover ~ label) {
109
98
  color: rgb(var(--error, var(--m3-scheme-on-surface)));
@@ -172,16 +161,6 @@
172
161
  cursor: pointer;
173
162
  }
174
163
 
175
- @media (hover: hover) {
176
- button:hover {
177
- background-color: rgb(var(--m3-scheme-on-surface-variant) / 0.08);
178
- }
179
- }
180
- button:focus-visible,
181
- button:active {
182
- background-color: rgb(var(--m3-scheme-on-surface-variant) / 0.12);
183
- }
184
-
185
164
  .leading-icon > input {
186
165
  padding-left: 3.25rem;
187
166
  }
@@ -1,21 +1,18 @@
1
1
  import type { IconifyIcon } from "@iconify/types";
2
2
  import type { HTMLInputAttributes } from "svelte/elements";
3
- type TrailingProps = {
4
- trailingIcon: IconifyIcon;
5
- trailingClick: () => void;
6
- } | {
7
- trailingIcon?: undefined;
8
- trailingClick?: undefined;
9
- };
3
+ import type { ButtonAttrs } from "../misc/typing-utils";
10
4
  type $$ComponentProps = {
11
5
  label: string;
12
6
  leadingIcon?: IconifyIcon;
7
+ trailing?: {
8
+ icon: IconifyIcon;
9
+ } & ButtonAttrs;
13
10
  disabled?: boolean;
14
11
  required?: boolean;
15
12
  error?: boolean;
16
13
  value?: string;
17
14
  enter?: () => void;
18
- } & TrailingProps & HTMLInputAttributes;
15
+ } & HTMLInputAttributes;
19
16
  declare const TextFieldOutlined: import("svelte").Component<$$ComponentProps, {}, "value">;
20
17
  type TextFieldOutlined = ReturnType<typeof TextFieldOutlined>;
21
18
  export default TextFieldOutlined;
@@ -4,7 +4,7 @@
4
4
  import type { HTMLTextareaAttributes } from "svelte/elements";
5
5
 
6
6
  let {
7
- label: _label,
7
+ label,
8
8
  leadingIcon,
9
9
  disabled = false,
10
10
  required = false,
@@ -34,8 +34,6 @@
34
34
  },
35
35
  };
36
36
  };
37
-
38
- let label = $derived(_label || extra.name); // TODO: next breaking version, drop name backsupport
39
37
  </script>
40
38
 
41
39
  <div class="m3-container" class:leading-icon={leadingIcon} class:error use:resize>
@@ -60,7 +58,7 @@
60
58
  <style>
61
59
  /*
62
60
  want to customize the label's background?
63
- do this: <TextFieldOutlinedMultiline --m3-util-background="var(--m3-scheme-surface-container)" />
61
+ do this: <TextFieldOutlinedMultiline --m3-util-background="rgb(var(--m3-scheme-surface-container))" />
64
62
  */
65
63
  :root {
66
64
  --m3-textfield-outlined-shape: var(--m3-util-rounding-extra-small);
@@ -90,9 +88,7 @@
90
88
  left: 0.75rem;
91
89
  top: 1rem;
92
90
  color: rgb(var(--error, var(--m3-scheme-on-surface-variant)));
93
- background-color: rgb(
94
- var(--m3-util-background, var(--m3-scheme-surface))
95
- ); /* TODO: next breaking change, make --m3-util-background a full color and update the comment above */
91
+ background-color: var(--m3-util-background, rgb(var(--m3-scheme-surface)));
96
92
  padding: 0 0.25rem;
97
93
  &:is(textarea:hover ~ label) {
98
94
  color: rgb(var(--error, var(--m3-scheme-on-surface)));
@@ -19,11 +19,11 @@
19
19
  <div class="m3-container">
20
20
  {#if clearable}
21
21
  <span class="left">
22
- <Button variant="text" click={clear} type="button">Clear</Button>
22
+ <Button variant="text" onclick={clear} type="button">Clear</Button>
23
23
  </span>
24
24
  {/if}
25
- <Button variant="text" click={cancel} type="button">Cancel</Button>
26
- <Button variant="text" disabled={!clearable && !chosenDate} click={ok} type="button">OK</Button>
25
+ <Button variant="text" onclick={cancel} type="button">Cancel</Button>
26
+ <Button variant="text" disabled={!clearable && !chosenDate} onclick={ok} type="button">OK</Button>
27
27
  </div>
28
28
 
29
29
  <style>
@@ -45,7 +45,7 @@
45
45
  day.day == today.getDate()}
46
46
  selected={!day.disabled && day.iso == chosenDate}
47
47
  label={day.day.toString()}
48
- click={() => (chosenDate = day.iso)}
48
+ onclick={() => (chosenDate = day.iso)}
49
49
  />
50
50
  {/each}
51
51
  </div>
@@ -16,7 +16,12 @@
16
16
 
17
17
  <div class="m3-container">
18
18
  {#each options as { name, selected, activate }}
19
- <button class="m3-font-body-large" onclick={activate} use:conditionalScroll={selected}>
19
+ <button
20
+ type="button"
21
+ class="m3-font-body-large"
22
+ onclick={activate}
23
+ use:conditionalScroll={selected}
24
+ >
20
25
  <Layer />
21
26
  {#if selected}
22
27
  <Icon icon={iconCheck} />
@@ -6,13 +6,13 @@
6
6
  today,
7
7
  selected,
8
8
  label,
9
- click,
9
+ onclick,
10
10
  }: {
11
11
  disabled: boolean;
12
12
  today: boolean;
13
13
  selected: boolean;
14
14
  label: string;
15
- click: () => void;
15
+ onclick: () => void;
16
16
  } = $props();
17
17
  </script>
18
18
 
@@ -22,7 +22,7 @@
22
22
  type="button"
23
23
  class:today
24
24
  class:selected
25
- onclick={click}
25
+ {onclick}
26
26
  >
27
27
  <Layer />
28
28
  {label}
@@ -3,7 +3,7 @@ type $$ComponentProps = {
3
3
  today: boolean;
4
4
  selected: boolean;
5
5
  label: string;
6
- click: () => void;
6
+ onclick: () => void;
7
7
  };
8
8
  declare const Item: import("svelte").Component<$$ComponentProps, {}, "">;
9
9
  type Item = ReturnType<typeof Item>;
@@ -27,13 +27,14 @@ export { default as CircularProgress } from "./forms/CircularProgress.svelte";
27
27
  export { default as CircularProgressEstimate } from "./forms/CircularProgressEstimate.svelte";
28
28
  export { default as CircularProgressIndeterminate } from "./forms/CircularProgressIndeterminate.svelte";
29
29
  export { default as LoadingIndicator } from "./forms/LoadingIndicator.svelte";
30
+ export { default as DateField } from "./forms/DateField.svelte";
31
+ export { default as DateFieldOutlined } from "./forms/DateFieldOutlined.svelte";
30
32
  export { default as RadioAnim1 } from "./forms/RadioAnim1.svelte";
31
33
  export { default as RadioAnim2 } from "./forms/RadioAnim2.svelte";
32
34
  export { default as RadioAnim3 } from "./forms/RadioAnim3.svelte";
33
35
  export { default as Checkbox } from "./forms/Checkbox.svelte";
34
36
  export { default as Switch } from "./forms/Switch.svelte";
35
37
  export { default as Slider } from "./forms/Slider.svelte";
36
- export { default as SliderTicks } from "./forms/SliderTicks.svelte";
37
38
  export { default as TextField } from "./forms/TextField.svelte";
38
39
  export { default as TextFieldMultiline } from "./forms/TextFieldMultiline.svelte";
39
40
  export { default as TextFieldOutlined } from "./forms/TextFieldOutlined.svelte";
@@ -48,5 +49,3 @@ export { default as VariableTabs } from "./nav/VariableTabs.svelte";
48
49
  export { default as VariableTabsLink } from "./nav/VariableTabsLink.svelte";
49
50
  export { default as ChipChooser } from "./utils/ChipChooser.svelte";
50
51
  export { default as Divider } from "./utils/Divider.svelte";
51
- export { default as DateField } from "./utils/DateField.svelte";
52
- export { default as DateFieldOutlined } from "./utils/DateFieldOutlined.svelte";
package/package/index.js CHANGED
@@ -26,13 +26,14 @@ export { default as CircularProgress } from "./forms/CircularProgress.svelte";
26
26
  export { default as CircularProgressEstimate } from "./forms/CircularProgressEstimate.svelte";
27
27
  export { default as CircularProgressIndeterminate } from "./forms/CircularProgressIndeterminate.svelte";
28
28
  export { default as LoadingIndicator } from "./forms/LoadingIndicator.svelte";
29
+ export { default as DateField } from "./forms/DateField.svelte";
30
+ export { default as DateFieldOutlined } from "./forms/DateFieldOutlined.svelte";
29
31
  export { default as RadioAnim1 } from "./forms/RadioAnim1.svelte";
30
32
  export { default as RadioAnim2 } from "./forms/RadioAnim2.svelte";
31
33
  export { default as RadioAnim3 } from "./forms/RadioAnim3.svelte";
32
34
  export { default as Checkbox } from "./forms/Checkbox.svelte";
33
35
  export { default as Switch } from "./forms/Switch.svelte";
34
36
  export { default as Slider } from "./forms/Slider.svelte";
35
- export { default as SliderTicks } from "./forms/SliderTicks.svelte";
36
37
  export { default as TextField } from "./forms/TextField.svelte";
37
38
  export { default as TextFieldMultiline } from "./forms/TextFieldMultiline.svelte";
38
39
  export { default as TextFieldOutlined } from "./forms/TextFieldOutlined.svelte";
@@ -47,5 +48,3 @@ export { default as VariableTabs } from "./nav/VariableTabs.svelte";
47
48
  export { default as VariableTabsLink } from "./nav/VariableTabsLink.svelte";
48
49
  export { default as ChipChooser } from "./utils/ChipChooser.svelte";
49
50
  export { default as Divider } from "./utils/Divider.svelte";
50
- export { default as DateField } from "./utils/DateField.svelte";
51
- export { default as DateFieldOutlined } from "./utils/DateFieldOutlined.svelte";
@@ -160,10 +160,10 @@
160
160
  transition: opacity var(--m3-util-easing-fast);
161
161
 
162
162
  &:not(
163
- :global(input:disabled + label) > .tint,
164
- :global(input:disabled + .layer-container) > .tint,
165
- :global(:disabled) > .tint
166
- ) {
163
+ :global(input:disabled + label) > .tint,
164
+ :global(input:disabled + .layer-container) > .tint,
165
+ :global(:disabled) > .tint
166
+ ) {
167
167
  @media (hover: hover) {
168
168
  &:is(:global(:hover) > .tint) {
169
169
  opacity: 0.08;
@@ -14,10 +14,10 @@
14
14
  transition: opacity var(--m3-util-easing-fast);
15
15
 
16
16
  &:not(
17
- :global(input:disabled + label) > .tint,
18
- :global(input:disabled + .layer-container) > .tint,
19
- :global(:disabled) > .tint
20
- ) {
17
+ :global(input:disabled + label) > .tint,
18
+ :global(input:disabled + .layer-container) > .tint,
19
+ :global(:disabled) > .tint
20
+ ) {
21
21
  @media (hover: hover) {
22
22
  &:is(:global(:hover) > .tint) {
23
23
  opacity: 0.08;
@@ -0,0 +1,3 @@
1
+ import type { HTMLButtonAttributes } from "svelte/elements";
2
+ export type NotButton<T> = Omit<T, "onclick">;
3
+ export type ButtonAttrs = HTMLButtonAttributes & Required<Pick<HTMLButtonAttributes, "onclick">>;
@@ -0,0 +1 @@
1
+ export {};
@@ -18,6 +18,7 @@
18
18
  {#if "click" in props}
19
19
  {@const { variant, icon, text, selected, click, ...extra } = props}
20
20
  <button
21
+ type="button"
21
22
  onclick={click}
22
23
  class="m3-container m3-font-label-medium {variant}"
23
24
  disabled={selected}
@@ -17,7 +17,7 @@
17
17
  {...option}
18
18
  variant="input"
19
19
  selected={chosenOptions.includes(option.value)}
20
- click={() =>
20
+ onclick={() =>
21
21
  chosenOptions.includes(option.value)
22
22
  ? (chosenOptions = chosenOptions.filter((o) => o != option.value))
23
23
  : (chosenOptions = [...chosenOptions, option.value])}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "m3-svelte",
3
- "version": "4.6.7",
3
+ "version": "5.1.0",
4
4
  "license": "Apache-2.0 OR GPL-3.0-only",
5
5
  "repository": "KTibow/m3-svelte",
6
6
  "author": {
@@ -32,7 +32,7 @@
32
32
  "@iconify/types": "^2.0.0",
33
33
  "@ktibow/iconset-material-symbols": "^0.0.1752989765",
34
34
  "@ktibow/material-color-utilities-nightly": "^0.3.11753062248503",
35
- "svelte": "^5.36.13"
35
+ "svelte": "^5.37.3"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@eslint/compat": "^1.3.1",