m3-svelte 5.4.0 → 5.7.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 (47) hide show
  1. package/package/buttons/Button.svelte +15 -10
  2. package/package/buttons/Button.svelte.d.ts +6 -6
  3. package/package/buttons/SplitButton.svelte +4 -4
  4. package/package/buttons/SplitButton.svelte.d.ts +2 -2
  5. package/package/containers/Card.svelte +2 -3
  6. package/package/containers/Card.svelte.d.ts +2 -3
  7. package/package/containers/Dialog.svelte +35 -37
  8. package/package/containers/Dialog.svelte.d.ts +4 -0
  9. package/package/containers/ListItem.svelte +36 -47
  10. package/package/containers/ListItem.svelte.d.ts +3 -3
  11. package/package/containers/Snackbar.svelte +2 -2
  12. package/package/containers/Snackbar.svelte.d.ts +2 -2
  13. package/package/containers/SnackbarItem.svelte +2 -2
  14. package/package/containers/SnackbarItem.svelte.d.ts +2 -2
  15. package/package/forms/Checkbox.svelte +3 -2
  16. package/package/forms/Checkbox.svelte.d.ts +2 -2
  17. package/package/forms/Chip.svelte +20 -13
  18. package/package/forms/Chip.svelte.d.ts +3 -3
  19. package/package/forms/DateField.svelte +1 -1
  20. package/package/forms/DateFieldOutlined.svelte +1 -1
  21. package/package/forms/LinearProgressIndeterminate.svelte +2 -2
  22. package/package/forms/LinearProgressIndeterminate.svelte.d.ts +2 -2
  23. package/package/forms/RadioAnim1.svelte +3 -2
  24. package/package/forms/RadioAnim1.svelte.d.ts +2 -2
  25. package/package/forms/RadioAnim2.svelte +3 -2
  26. package/package/forms/RadioAnim2.svelte.d.ts +2 -2
  27. package/package/forms/RadioAnim3.svelte +3 -2
  28. package/package/forms/RadioAnim3.svelte.d.ts +2 -2
  29. package/package/forms/Select.svelte +2 -1
  30. package/package/forms/SelectOutlined.svelte +3 -3
  31. package/package/forms/Slider.svelte +127 -147
  32. package/package/forms/Slider.svelte.d.ts +1 -1
  33. package/package/forms/SliderTicks.svelte +2 -2
  34. package/package/forms/SliderTicks.svelte.d.ts +2 -2
  35. package/package/forms/TextField.svelte +5 -4
  36. package/package/forms/TextFieldMultiline.svelte +5 -4
  37. package/package/forms/TextFieldOutlined.svelte +8 -4
  38. package/package/forms/TextFieldOutlinedMultiline.svelte +8 -4
  39. package/package/forms/WavyLinearProgress.svelte +5 -7
  40. package/package/index.d.ts +1 -0
  41. package/package/index.js +1 -0
  42. package/package/misc/_icon.svelte +14 -1
  43. package/package/misc/typing-utils.d.ts +4 -1
  44. package/package/nav/NavCMLXItem.svelte +4 -2
  45. package/package/utils/badge.d.ts +11 -0
  46. package/package/utils/badge.js +30 -0
  47. package/package.json +10 -10
@@ -47,7 +47,7 @@
47
47
  {...extra}
48
48
  defaultValue={extra.defaultValue}
49
49
  ></textarea>
50
- <!-- TODO: once https://github.com/sveltejs/svelte/pull/16481 is finished, remove the defaultvalue thing -->
50
+ <!-- TODO/deprecated: once https://github.com/sveltejs/svelte/pull/16481 is finished, remove the defaultvalue thing -->
51
51
  <div class="layer"></div>
52
52
  <label class="m3-font-body-large" for={id}>{label}</label>
53
53
  {#if leadingIcon}
@@ -61,7 +61,11 @@
61
61
  do this: <TextFieldOutlinedMultiline --m3-util-background="rgb(var(--m3-scheme-surface-container))" />
62
62
  */
63
63
  :root {
64
- --m3-textfield-outlined-shape: var(--m3-util-rounding-extra-small);
64
+ /* "textfield" is deprecated */
65
+ --m3-field-outlined-shape: var(
66
+ --m3-textfield-outlined-shape,
67
+ var(--m3-util-rounding-extra-small)
68
+ );
65
69
  }
66
70
  .m3-container {
67
71
  display: inline-flex;
@@ -78,7 +82,7 @@
78
82
  border: none;
79
83
  outline: none;
80
84
  padding: 1rem;
81
- border-radius: var(--m3-textfield-outlined-shape);
85
+ border-radius: var(--m3-field-outlined-shape);
82
86
  background-color: transparent;
83
87
  color: rgb(var(--m3-scheme-on-surface));
84
88
  resize: none;
@@ -118,7 +122,7 @@
118
122
  position: absolute;
119
123
  inset: 0;
120
124
  border: 1px solid rgb(var(--error, var(--m3-scheme-outline)));
121
- border-radius: var(--m3-textfield-outlined-shape);
125
+ border-radius: var(--m3-field-outlined-shape);
122
126
  pointer-events: none;
123
127
  transition: all 100ms;
124
128
  &:is(textarea:enabled:hover ~ .layer) {
@@ -26,16 +26,14 @@
26
26
  };
27
27
 
28
28
  onMount(() => {
29
- let mounted = true;
30
29
  const start = performance.now();
31
- const update = () => {
32
- if (!mounted) return;
33
-
30
+ let id: number;
31
+ const updateTime = () => {
34
32
  time = performance.now() - start;
35
- requestAnimationFrame(update);
33
+ id = requestAnimationFrame(updateTime);
36
34
  };
37
- update();
38
- return () => (mounted = false);
35
+ updateTime();
36
+ return () => cancelAnimationFrame(id);
39
37
  });
40
38
  </script>
41
39
 
@@ -49,5 +49,6 @@ export { default as Tabs } from "./nav/Tabs.svelte";
49
49
  export { default as TabsLink } from "./nav/TabsLink.svelte";
50
50
  export { default as VariableTabs } from "./nav/VariableTabs.svelte";
51
51
  export { default as VariableTabsLink } from "./nav/VariableTabsLink.svelte";
52
+ export * from "./utils/badge.js";
52
53
  export { default as ChipChooser } from "./utils/ChipChooser.svelte";
53
54
  export { default as Divider } from "./utils/Divider.svelte";
package/package/index.js CHANGED
@@ -48,5 +48,6 @@ export { default as Tabs } from "./nav/Tabs.svelte";
48
48
  export { default as TabsLink } from "./nav/TabsLink.svelte";
49
49
  export { default as VariableTabs } from "./nav/VariableTabs.svelte";
50
50
  export { default as VariableTabsLink } from "./nav/VariableTabsLink.svelte";
51
+ export * from "./utils/badge.js";
51
52
  export { default as ChipChooser } from "./utils/ChipChooser.svelte";
52
53
  export { default as Divider } from "./utils/Divider.svelte";
@@ -14,6 +14,19 @@
14
14
  } = $props();
15
15
  </script>
16
16
 
17
- <svg {width} {height} class={clazz} viewBox="0 0 {icon.width} {icon.height}">
17
+ <svg
18
+ {width}
19
+ {height}
20
+ class={clazz}
21
+ data-badge={icon.body.includes("<!--badge-->") ? "" : undefined}
22
+ viewBox="0 0 {icon.width} {icon.height}"
23
+ >
18
24
  {@html icon.body}
19
25
  </svg>
26
+
27
+ <style>
28
+ /* deprecated: eventually want to just do this for all icons */
29
+ svg[data-badge] {
30
+ overflow: visible;
31
+ }
32
+ </style>
@@ -1,3 +1,6 @@
1
- import type { HTMLButtonAttributes } from "svelte/elements";
1
+ import type { HTMLLabelAttributes, HTMLAnchorAttributes, HTMLButtonAttributes, HTMLAttributes } from "svelte/elements";
2
+ export type LabelAttrs = HTMLLabelAttributes & Required<Pick<HTMLLabelAttributes, "for">>;
3
+ export type AnchorAttrs = HTMLAnchorAttributes & Required<Pick<HTMLAnchorAttributes, "href">>;
2
4
  export type NotButton<T> = Omit<T, "onclick">;
3
5
  export type ButtonAttrs = HTMLButtonAttributes & Required<Pick<HTMLButtonAttributes, "onclick">>;
6
+ export type DivAttrs = NotButton<HTMLAttributes<HTMLDivElement>>;
@@ -106,6 +106,9 @@
106
106
  color: rgb(var(--m3-scheme-on-secondary-container));
107
107
  }
108
108
  }
109
+ &:is(.large .content) {
110
+ padding-block: 0.375rem;
111
+ }
109
112
  &:is(.expanded .content) {
110
113
  gap: 0.75rem;
111
114
  }
@@ -148,7 +151,6 @@
148
151
  &.large {
149
152
  flex-direction: column;
150
153
  min-height: 4rem;
151
- padding-block: 0.375rem;
152
154
  }
153
155
  &.expanded {
154
156
  height: 3.5rem;
@@ -229,10 +231,10 @@
229
231
  flex-direction: column;
230
232
  text-align: center;
231
233
  min-height: 4rem;
232
- padding-block: 0.375rem;
233
234
 
234
235
  .content {
235
236
  flex-direction: column;
237
+ padding-block: 0.375rem;
236
238
 
237
239
  &.selected {
238
240
  color: rgb(var(--m3-scheme-secondary));
@@ -0,0 +1,11 @@
1
+ import type { IconifyIcon } from "@iconify/types";
2
+ export declare const addBadge: (icon: IconifyIcon, n?: number) => {
3
+ body: string;
4
+ left?: number;
5
+ top?: number;
6
+ width?: number;
7
+ height?: number;
8
+ rotate?: number;
9
+ hFlip?: boolean;
10
+ vFlip?: boolean;
11
+ };
@@ -0,0 +1,30 @@
1
+ export const addBadge = (icon, n) => {
2
+ const { width, height } = icon;
3
+ if (!width || !height)
4
+ throw new Error("Icon must have icon and height");
5
+ let badge;
6
+ if (n) {
7
+ const x = width - 12;
8
+ const y = 14 - 16; // 14 down, 16 up
9
+ const max = 999;
10
+ const text = n > max ? `${max}+` : n.toString();
11
+ badge =
12
+ `<!--badge--><foreignObject x="${x}" y="${y}" width="40" height="16">` +
13
+ `<div class="m3-font-label-small" style="${[
14
+ "background-color:rgb(var(--m3-scheme-error))",
15
+ "color:rgb(var(--m3-scheme-on-error))",
16
+ "width:max-content",
17
+ "padding-inline:4px",
18
+ "border-radius:var(--m3-util-rounding-full)",
19
+ ].join(";")}">` +
20
+ text +
21
+ `</div>`;
22
+ }
23
+ else {
24
+ badge = `<circle cx="${width - 3}" cy="3" r="3" fill="rgb(var(--m3-scheme-error))"/>`;
25
+ }
26
+ return {
27
+ ...icon,
28
+ body: icon.body + badge,
29
+ };
30
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "m3-svelte",
3
- "version": "5.4.0",
3
+ "version": "5.7.0",
4
4
  "license": "Apache-2.0 OR GPL-3.0-only",
5
5
  "repository": "KTibow/m3-svelte",
6
6
  "author": {
@@ -36,16 +36,16 @@
36
36
  "dependencies": {
37
37
  "@iconify/types": "^2.0.0",
38
38
  "@ktibow/iconset-material-symbols": "^0.0.1755063979",
39
- "@ktibow/material-color-utilities-nightly": "^0.3.11755481233385",
40
- "svelte": "^5.38.2"
39
+ "@ktibow/material-color-utilities-nightly": "^0.3.11756690739504",
40
+ "svelte": "^5.38.6"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@eslint/compat": "^1.3.2",
44
- "@eslint/js": "^9.33.0",
44
+ "@eslint/js": "^9.34.0",
45
45
  "@sveltejs/adapter-static": "^3.0.9",
46
- "@sveltejs/kit": "^2.32.0",
47
- "@sveltejs/package": "^2.4.1",
48
- "@sveltejs/vite-plugin-svelte": "^6.1.2",
46
+ "@sveltejs/kit": "^2.37.0",
47
+ "@sveltejs/package": "^2.5.0",
48
+ "@sveltejs/vite-plugin-svelte": "^6.1.3",
49
49
  "eslint": "^9.27.0",
50
50
  "eslint-config-prettier": "^10.1.8",
51
51
  "eslint-plugin-svelte": "^3.11.0",
@@ -55,10 +55,10 @@
55
55
  "prettier-plugin-svelte": "^3.4.0",
56
56
  "publint": "^0.3.12",
57
57
  "svelte-check": "^4.3.1",
58
- "svelte-highlight": "^7.8.3",
58
+ "svelte-highlight": "^7.8.4",
59
59
  "typescript": "^5.9.2",
60
- "typescript-eslint": "^8.40.0",
61
- "vite": "^7.1.2"
60
+ "typescript-eslint": "^8.41.0",
61
+ "vite": "^7.1.4"
62
62
  },
63
63
  "keywords": [
64
64
  "svelte",