@noxlovette/material 0.6.0 → 0.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 (176) hide show
  1. package/claude-skill/material-design/SKILL.md +5 -2
  2. package/claude-skill/material-design/references/accessibility-checklist.md +5 -0
  3. package/claude-skill/material-design/references/component-patterns.md +24 -3
  4. package/claude-skill/material-design/references/motion-guide.md +53 -11
  5. package/claude-skill/material-design/references/tokens-and-styles.md +4 -0
  6. package/dist/animation/TransitionPatterns.stories.svelte +50 -0
  7. package/dist/animation/containerTransform.js +10 -4
  8. package/dist/animation/reducedMotion.d.ts +2 -0
  9. package/dist/animation/reducedMotion.js +2 -0
  10. package/dist/animation/sharedAxisTransition.d.ts +20 -3
  11. package/dist/animation/sharedAxisTransition.js +67 -8
  12. package/dist/attachments/drag.d.ts +52 -0
  13. package/dist/attachments/drag.js +217 -0
  14. package/dist/attachments/index.d.ts +1 -0
  15. package/dist/attachments/index.js +1 -0
  16. package/dist/components/badge/theme.js +1 -1
  17. package/dist/components/buttons/button-group/theme.d.ts +1 -1
  18. package/dist/components/buttons/button-group/theme.js +1 -1
  19. package/dist/components/buttons/connected/theme.d.ts +1 -1
  20. package/dist/components/buttons/connected/theme.js +1 -1
  21. package/dist/components/buttons/split-button/SplitButton.svelte +1 -1
  22. package/dist/components/buttons/split-button/theme.d.ts +1 -1
  23. package/dist/components/buttons/split-button/theme.js +1 -1
  24. package/dist/components/buttons/theme.d.ts +1 -1
  25. package/dist/components/buttons/theme.js +3 -3
  26. package/dist/components/cards/theme.js +1 -1
  27. package/dist/components/chips/Chip.mdx +24 -11
  28. package/dist/components/chips/Chip.stories.svelte +10 -0
  29. package/dist/components/chips/Chip.svelte +58 -18
  30. package/dist/components/chips/Chip.svelte.d.ts +3 -1
  31. package/dist/components/chips/ChipGroup.stories.svelte +73 -0
  32. package/dist/components/chips/ChipGroup.stories.svelte.d.ts +4 -0
  33. package/dist/components/chips/ChipGroup.svelte +242 -0
  34. package/dist/components/chips/ChipGroup.svelte.d.ts +33 -0
  35. package/dist/components/chips/index.d.ts +1 -0
  36. package/dist/components/chips/index.js +1 -0
  37. package/dist/components/chips/theme.d.ts +183 -22
  38. package/dist/components/chips/theme.js +117 -26
  39. package/dist/components/chips/types.d.ts +36 -2
  40. package/dist/components/containers/action-rail/theme.d.ts +1 -1
  41. package/dist/components/containers/action-rail/theme.js +2 -2
  42. package/dist/components/containers/app/theme.d.ts +2 -2
  43. package/dist/components/containers/app/theme.js +2 -2
  44. package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +1 -1
  45. package/dist/components/containers/bottom-sheet/theme.d.ts +1 -1
  46. package/dist/components/containers/bottom-sheet/theme.js +2 -2
  47. package/dist/components/containers/carousel/theme.d.ts +1 -1
  48. package/dist/components/containers/carousel/theme.js +1 -1
  49. package/dist/components/containers/context-menu/theme.d.ts +1 -1
  50. package/dist/components/containers/context-menu/theme.js +2 -2
  51. package/dist/components/containers/dialogue/Dialogue.svelte +1 -1
  52. package/dist/components/containers/dialogue/theme.d.ts +1 -1
  53. package/dist/components/containers/dialogue/theme.js +3 -3
  54. package/dist/components/containers/dialogue/types.d.ts +1 -1
  55. package/dist/components/containers/divider/theme.d.ts +1 -1
  56. package/dist/components/containers/divider/theme.js +1 -1
  57. package/dist/components/containers/link-preview/theme.d.ts +1 -1
  58. package/dist/components/containers/link-preview/theme.js +2 -2
  59. package/dist/components/containers/list/List.svelte +8 -2
  60. package/dist/components/containers/list/ListItem.mdx +6 -0
  61. package/dist/components/containers/list/ListItem.svelte +77 -2
  62. package/dist/components/containers/list/context.d.ts +14 -0
  63. package/dist/components/containers/list/theme.d.ts +7 -1
  64. package/dist/components/containers/list/theme.js +11 -3
  65. package/dist/components/containers/menu/Menu.svelte +1 -1
  66. package/dist/components/containers/menu/MenuSub.svelte +1 -1
  67. package/dist/components/containers/menu/theme.d.ts +1 -1
  68. package/dist/components/containers/menu/theme.js +1 -1
  69. package/dist/components/containers/pane/DraggablePane.svelte +25 -63
  70. package/dist/components/containers/pane/Pane.svelte +1 -1
  71. package/dist/components/containers/pane/theme.d.ts +1 -1
  72. package/dist/components/containers/pane/theme.js +35 -9
  73. package/dist/components/containers/popover/theme.d.ts +4 -4
  74. package/dist/components/containers/popover/theme.js +2 -2
  75. package/dist/components/containers/scroll-area/theme.js +1 -1
  76. package/dist/components/containers/side-sheet/theme.d.ts +1 -1
  77. package/dist/components/containers/side-sheet/theme.js +1 -1
  78. package/dist/components/date/theme.d.ts +7 -7
  79. package/dist/components/date/theme.js +1 -1
  80. package/dist/components/forms/checkbox/theme.d.ts +1 -1
  81. package/dist/components/forms/checkbox/theme.js +2 -2
  82. package/dist/components/forms/command/theme.d.ts +4 -4
  83. package/dist/components/forms/command/theme.js +1 -1
  84. package/dist/components/forms/pin/theme.d.ts +1 -1
  85. package/dist/components/forms/pin/theme.js +1 -1
  86. package/dist/components/forms/radio-group/theme.d.ts +1 -1
  87. package/dist/components/forms/radio-group/theme.js +1 -1
  88. package/dist/components/forms/search/theme.d.ts +1 -1
  89. package/dist/components/forms/search/theme.js +1 -1
  90. package/dist/components/forms/select/Select.svelte +2 -2
  91. package/dist/components/forms/select/theme.d.ts +1 -1
  92. package/dist/components/forms/select/theme.js +2 -2
  93. package/dist/components/forms/slider/theme.d.ts +1 -1
  94. package/dist/components/forms/slider/theme.js +1 -1
  95. package/dist/components/forms/switch/theme.d.ts +1 -1
  96. package/dist/components/forms/switch/theme.js +1 -1
  97. package/dist/components/forms/textfield/theme.d.ts +1 -1
  98. package/dist/components/forms/textfield/theme.js +1 -1
  99. package/dist/components/forms/toggle-group/theme.d.ts +1 -1
  100. package/dist/components/forms/toggle-group/theme.js +1 -1
  101. package/dist/components/forms/tooltip/theme.d.ts +1 -1
  102. package/dist/components/forms/tooltip/theme.js +2 -2
  103. package/dist/components/misc/Avatar.stories.svelte +56 -7
  104. package/dist/components/misc/Avatar.stories.svelte.d.ts +2 -17
  105. package/dist/components/misc/Avatar.svelte +82 -8
  106. package/dist/components/misc/Avatar.svelte.d.ts +5 -0
  107. package/dist/components/misc/ThemeSwitcher.svelte +1 -1
  108. package/dist/components/misc/theme.d.ts +6 -0
  109. package/dist/components/misc/theme.js +6 -4
  110. package/dist/components/misc/types.d.ts +17 -1
  111. package/dist/components/nav/appbar/theme.d.ts +1 -1
  112. package/dist/components/nav/appbar/theme.js +3 -2
  113. package/dist/components/nav/breadcrumb/theme.d.ts +1 -1
  114. package/dist/components/nav/breadcrumb/theme.js +1 -1
  115. package/dist/components/nav/currentRoute.d.ts +11 -0
  116. package/dist/components/nav/currentRoute.js +28 -0
  117. package/dist/components/nav/navbar/NavbarItem.svelte +3 -6
  118. package/dist/components/nav/navbar/theme.d.ts +3 -3
  119. package/dist/components/nav/navbar/theme.js +2 -2
  120. package/dist/components/nav/rail/Rail.mdx +65 -23
  121. package/dist/components/nav/rail/Rail.stories.svelte +24 -4
  122. package/dist/components/nav/rail/Rail.stories.svelte.d.ts +2 -17
  123. package/dist/components/nav/rail/Rail.svelte +165 -48
  124. package/dist/components/nav/rail/Rail.svelte.d.ts +6 -3
  125. package/dist/components/nav/rail/RailItem.svelte +122 -65
  126. package/dist/components/nav/rail/RailItem.svelte.d.ts +3 -2
  127. package/dist/components/nav/rail/theme.d.ts +70 -85
  128. package/dist/components/nav/rail/theme.js +80 -67
  129. package/dist/components/nav/rail/types.d.ts +4 -0
  130. package/dist/components/nav/tabs/Tabs.stories.svelte +2 -1
  131. package/dist/components/nav/tabs/theme.d.ts +1 -1
  132. package/dist/components/nav/tabs/theme.js +1 -1
  133. package/dist/components/pill/theme.d.ts +1 -1
  134. package/dist/components/pill/theme.js +1 -1
  135. package/dist/components/progress/LinearProgress.svelte +1 -1
  136. package/dist/components/snackbar/theme.d.ts +1 -1
  137. package/dist/components/snackbar/theme.js +2 -2
  138. package/dist/components/table/theme.d.ts +1 -1
  139. package/dist/components/table/theme.js +1 -1
  140. package/dist/components/time/TimeField.svelte +1 -1
  141. package/dist/components/time/theme.d.ts +1 -1
  142. package/dist/components/time/theme.js +1 -1
  143. package/dist/components/toolbar/theme.d.ts +1 -1
  144. package/dist/components/toolbar/theme.js +2 -2
  145. package/dist/components/typography/body/theme.d.ts +1 -1
  146. package/dist/components/typography/body/theme.js +1 -1
  147. package/dist/components/typography/display/theme.d.ts +1 -1
  148. package/dist/components/typography/display/theme.js +1 -1
  149. package/dist/components/typography/headline/theme.d.ts +1 -1
  150. package/dist/components/typography/headline/theme.js +1 -1
  151. package/dist/components/typography/kbd/theme.d.ts +1 -1
  152. package/dist/components/typography/kbd/theme.js +1 -1
  153. package/dist/components/typography/label/theme.js +1 -1
  154. package/dist/components/typography/title/theme.d.ts +1 -1
  155. package/dist/components/typography/title/theme.js +1 -1
  156. package/dist/index.css +3 -0
  157. package/dist/styles/components.css +50 -0
  158. package/dist/styles/icon.css +13 -0
  159. package/dist/styles/layers.css +33 -0
  160. package/dist/utils/icon/Icon.stories.svelte +97 -0
  161. package/dist/utils/icon/Icon.stories.svelte.d.ts +4 -0
  162. package/dist/utils/icon/Icon.svelte +101 -12
  163. package/dist/utils/icon/Icon.svelte.d.ts +9 -0
  164. package/dist/utils/icon/MaterialSymbolsProvider.svelte +11 -4
  165. package/dist/utils/icon/base-icons.d.ts +1 -1
  166. package/dist/utils/icon/base-icons.js +1 -1
  167. package/dist/utils/icon/icon-names.d.ts +2 -0
  168. package/dist/utils/icon/icon-names.js +2 -0
  169. package/dist/utils/icon/swap.d.ts +6 -0
  170. package/dist/utils/icon/swap.js +45 -0
  171. package/dist/utils/icon/theme.d.ts +1 -1
  172. package/dist/utils/icon/theme.js +1 -1
  173. package/dist/utils/icon/types.d.ts +59 -7
  174. package/dist/utils/tv.d.ts +5 -0
  175. package/dist/utils/tv.js +20 -0
  176. package/package.json +2 -1
@@ -1,25 +1,77 @@
1
1
  import type { HTMLAttributes } from 'svelte/elements';
2
2
  import Icon from './Icon.svelte';
3
+ import type { MaterialSymbolName } from './icon-names.js';
3
4
  import type { LoadingIndicatorVariants } from './theme.js';
5
+ export type { MaterialSymbolName };
4
6
  export type IconMD = typeof Icon;
5
7
  export type IconVariant = 'outlined' | 'rounded' | 'sharp';
6
- export type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
7
- export type IconProps = HTMLAttributes<HTMLSpanElement> & {
8
- name: string;
8
+ /** `inline` follows the surrounding text size; the rest are 16, 20, 24, 40 and 48dp. */
9
+ export type IconSize = 'inline' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
+ export type IconProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'> & {
11
+ /** Material Symbols name, e.g. `favorite`. A typo is a type error. Browse them in the Icons guide. */
12
+ name: MaterialSymbolName;
13
+ /**
14
+ * Rendered size. Also picks the optical size (20, 24, 40, 48) unless `opsz` is set.
15
+ * @default 'md'
16
+ */
9
17
  size?: IconSize;
18
+ /**
19
+ * Outlined suits dense UIs and light type; rounded pairs with round shapes and heavier type;
20
+ * sharp with rectangular, 0dp-corner designs. Use one style per product.
21
+ * @default 'rounded'
22
+ */
10
23
  variant?: IconVariant;
11
- fill?: 0 | 1;
24
+ /**
25
+ * 0 (outlined) to 1 (filled). Use it for state, e.g. 1 on a selected navigation item; changes
26
+ * animate.
27
+ * @default 0
28
+ */
29
+ fill?: number;
30
+ /**
31
+ * Stroke weight, 100 to 700. Match the weight of adjacent text, keep it consistent across a
32
+ * screen, and don't go below 200 at 24dp.
33
+ * @default 400
34
+ */
12
35
  wght?: number;
13
- grad?: number;
36
+ /**
37
+ * Fine thickness adjustment, -50 to 200. `'auto'` is 0 on light schemes and -25 on dark ones,
38
+ * which offsets the glow of light-on-dark icons. Use a positive grade for emphasis, or match a
39
+ * text font's grade.
40
+ * @default 'auto'
41
+ */
42
+ grad?: number | 'auto';
43
+ /** Optical size, 20 to 48. Defaults to the one matching `size`. */
14
44
  opsz?: number;
45
+ /**
46
+ * How a change of `name` plays. `'none'` swaps the glyph at once. `'fade'` crossfades: the old
47
+ * glyph shrinks and fades out while the new one grows in on a spring. `'rotate'` adds a
48
+ * quarter turn, for a toggle between two states of one control (menu ↔ menu_open,
49
+ * add ↔ close). Under reduced motion both are a plain crossfade. Leave it off for icons that
50
+ * change with data, such as rows in a list.
51
+ * @default 'none'
52
+ */
53
+ transition?: IconTransition;
15
54
  };
55
+ export type IconTransition = 'none' | 'fade' | 'rotate';
16
56
  export type LoadingIndicatorProps = HTMLAttributes<SVGAElement> & LoadingIndicatorVariants & {
17
57
  size?: number;
18
58
  container?: boolean;
19
59
  center?: boolean;
20
60
  };
21
61
  export type MaterialSymbolsProviderProps = {
22
- icons?: string[];
23
- extraIcons?: string[];
62
+ icons?: MaterialSymbolName[];
63
+ /** Icon names to load on top of `baseIcons`. Ignored when `subset` is false. */
64
+ extraIcons?: MaterialSymbolName[];
65
+ /**
66
+ * Load only the named icons (small, fast) or the whole set of several MB per family, which a
67
+ * page choosing icons at runtime, like an icon picker, needs.
68
+ * @default true
69
+ */
70
+ subset?: boolean;
71
+ /**
72
+ * Which styles to load. Loading only the one your product uses saves a request per style.
73
+ * @default ['rounded', 'outlined', 'sharp']
74
+ */
75
+ families?: IconVariant[];
24
76
  display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
25
77
  };
@@ -0,0 +1,5 @@
1
+ export type { VariantProps } from 'tailwind-variants';
2
+ /** The library's `tv`, with {@link twMergeConfig}. */
3
+ export declare const tv: import("tailwind-variants").TV;
4
+ /** tailwind-merge with the same config, for class lists built outside `tv()`. */
5
+ export declare const twMerge: (...classLists: import("tailwind-merge").ClassNameValue[]) => string;
@@ -0,0 +1,20 @@
1
+ import { extendTailwindMerge } from 'tailwind-merge';
2
+ import { createTV } from 'tailwind-variants';
3
+ /** The layer names from `styles/layers.css`. Keep the two in sync. */
4
+ const LAYERS = ['bar', 'rail', 'sheet', 'fab', 'pane', 'modal', 'snackbar', 'popup'];
5
+ /**
6
+ * What tailwind-merge doesn't know about this library's classes:
7
+ * - `z-layer-*` sets z-index, so a consumer's `class="z-40"` replaces a component's layer.
8
+ * - `*-spacing-<N>` (styles/spacing.css) is a spacing value, so `size-[18px]` or `p-4` replaces
9
+ * `size-spacing-250` or `p-spacing-200` instead of both classes shipping and CSS order deciding.
10
+ */
11
+ const twMergeConfig = {
12
+ extend: {
13
+ theme: { spacing: [(value) => /^spacing-\d+$/.test(value)] },
14
+ classGroups: { z: [{ 'z-layer': LAYERS }] }
15
+ }
16
+ };
17
+ /** The library's `tv`, with {@link twMergeConfig}. */
18
+ export const tv = createTV({ twMergeConfig });
19
+ /** tailwind-merge with the same config, for class lists built outside `tv()`. */
20
+ export const twMerge = extendTailwindMerge(twMergeConfig);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noxlovette/material",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "description": "A Material Design 3 component library for Svelte, built on Bits UI.",
6
6
  "keywords": [
@@ -24,6 +24,7 @@
24
24
  },
25
25
  "scripts": {
26
26
  "build": "bun run generate:springs && svelte-package && bun scripts/copy-skill.ts",
27
+ "generate:icons": "bun scripts/generate-icon-catalog.ts",
27
28
  "generate:springs": "bun scripts/generate-motion-springs.ts && prettier --write src/lib/styles/motion.css",
28
29
  "build:site": "vite build",
29
30
  "watch": "svelte-package --watch",