@m3-baseui/react-tailwind 1.4.0 → 3.0.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 (171) hide show
  1. package/dist/{badge.js → components/badge/index.js} +4 -4
  2. package/dist/components/badge/index.js.map +1 -0
  3. package/dist/{bottom-app-bar.d.ts → components/bottom-app-bar/index.d.ts} +22 -21
  4. package/dist/{bottom-app-bar.js → components/bottom-app-bar/index.js} +4 -4
  5. package/dist/components/bottom-app-bar/index.js.map +1 -0
  6. package/dist/{bottom-sheet.d.ts → components/bottom-sheet/index.d.ts} +37 -36
  7. package/dist/{bottom-sheet.js → components/bottom-sheet/index.js} +4 -4
  8. package/dist/components/bottom-sheet/index.js.map +1 -0
  9. package/dist/{button.js → components/button/index.js} +3 -3
  10. package/dist/components/button/index.js.map +1 -0
  11. package/dist/{button-group.js → components/button-group/index.js} +4 -4
  12. package/dist/components/button-group/index.js.map +1 -0
  13. package/dist/{card.js → components/card/index.js} +4 -4
  14. package/dist/components/card/index.js.map +1 -0
  15. package/dist/{carousel.d.ts → components/carousel/index.d.ts} +21 -0
  16. package/dist/{carousel.js → components/carousel/index.js} +11 -5
  17. package/dist/components/carousel/index.js.map +1 -0
  18. package/dist/{checkbox.d.ts → components/checkbox/index.d.ts} +22 -21
  19. package/dist/{checkbox.js → components/checkbox/index.js} +3 -3
  20. package/dist/components/checkbox/index.js.map +1 -0
  21. package/dist/{chip.js → components/chip/index.js} +3 -3
  22. package/dist/components/chip/index.js.map +1 -0
  23. package/dist/components/date-picker/index.d.ts +189 -0
  24. package/dist/{date-picker.js → components/date-picker/index.js} +4 -4
  25. package/dist/components/date-picker/index.js.map +1 -0
  26. package/dist/{dialog.js → components/dialog/index.js} +4 -4
  27. package/dist/components/dialog/index.js.map +1 -0
  28. package/dist/{divider.js → components/divider/index.js} +3 -3
  29. package/dist/components/divider/index.js.map +1 -0
  30. package/dist/{fab.d.ts → components/fab/index.d.ts} +29 -15
  31. package/dist/components/fab/index.js +79 -0
  32. package/dist/components/fab/index.js.map +1 -0
  33. package/dist/{fab-menu.d.ts → components/fab-menu/index.d.ts} +0 -21
  34. package/dist/{fab-menu.js → components/fab-menu/index.js} +49 -18
  35. package/dist/components/fab-menu/index.js.map +1 -0
  36. package/dist/{icon-button.js → components/icon-button/index.js} +3 -3
  37. package/dist/components/icon-button/index.js.map +1 -0
  38. package/dist/components/item/index.d.ts +95 -0
  39. package/dist/{item.js → components/item/index.js} +3 -3
  40. package/dist/components/item/index.js.map +1 -0
  41. package/dist/{list.js → components/list/index.js} +3 -3
  42. package/dist/components/list/index.js.map +1 -0
  43. package/dist/{loading-indicator.js → components/loading-indicator/index.js} +4 -4
  44. package/dist/components/loading-indicator/index.js.map +1 -0
  45. package/dist/{menu.d.ts → components/menu/index.d.ts} +61 -60
  46. package/dist/components/menu/index.js +179 -0
  47. package/dist/components/menu/index.js.map +1 -0
  48. package/dist/components/navigation-bar/index.d.ts +92 -0
  49. package/dist/{navigation-bar.js → components/navigation-bar/index.js} +3 -3
  50. package/dist/components/navigation-bar/index.js.map +1 -0
  51. package/dist/{navigation-drawer.js → components/navigation-drawer/index.js} +4 -4
  52. package/dist/components/navigation-drawer/index.js.map +1 -0
  53. package/dist/components/navigation-rail/index.d.ts +102 -0
  54. package/dist/{navigation-rail.js → components/navigation-rail/index.js} +4 -4
  55. package/dist/components/navigation-rail/index.js.map +1 -0
  56. package/dist/components/progress/index.d.ts +127 -0
  57. package/dist/components/progress/index.js +101 -0
  58. package/dist/components/progress/index.js.map +1 -0
  59. package/dist/{radio.d.ts → components/radio/index.d.ts} +17 -16
  60. package/dist/{radio.js → components/radio/index.js} +3 -3
  61. package/dist/components/radio/index.js.map +1 -0
  62. package/dist/{search.d.ts → components/search/index.d.ts} +62 -61
  63. package/dist/{search.js → components/search/index.js} +4 -4
  64. package/dist/components/search/index.js.map +1 -0
  65. package/dist/{segmented-button.d.ts → components/segmented-button/index.d.ts} +32 -31
  66. package/dist/{segmented-button.js → components/segmented-button/index.js} +4 -4
  67. package/dist/components/segmented-button/index.js.map +1 -0
  68. package/dist/components/select/index.d.ts +235 -0
  69. package/dist/components/select/index.js +260 -0
  70. package/dist/components/select/index.js.map +1 -0
  71. package/dist/{side-sheet.js → components/side-sheet/index.js} +4 -4
  72. package/dist/components/side-sheet/index.js.map +1 -0
  73. package/dist/{slider.d.ts → components/slider/index.d.ts} +52 -51
  74. package/dist/{slider.js → components/slider/index.js} +4 -4
  75. package/dist/components/slider/index.js.map +1 -0
  76. package/dist/{snackbar.d.ts → components/snackbar/index.d.ts} +42 -41
  77. package/dist/{snackbar.js → components/snackbar/index.js} +3 -3
  78. package/dist/components/snackbar/index.js.map +1 -0
  79. package/dist/{split-button.js → components/split-button/index.js} +4 -4
  80. package/dist/components/split-button/index.js.map +1 -0
  81. package/dist/components/switch/index.d.ts +73 -0
  82. package/dist/{switch.js → components/switch/index.js} +3 -3
  83. package/dist/components/switch/index.js.map +1 -0
  84. package/dist/{tabs.js → components/tabs/index.js} +4 -4
  85. package/dist/components/tabs/index.js.map +1 -0
  86. package/dist/{textfield.d.ts → components/textfield/index.d.ts} +7 -1
  87. package/dist/{textfield.js → components/textfield/index.js} +35 -13
  88. package/dist/components/textfield/index.js.map +1 -0
  89. package/dist/components/time-picker/index.d.ts +153 -0
  90. package/dist/{time-picker.js → components/time-picker/index.js} +28 -13
  91. package/dist/components/time-picker/index.js.map +1 -0
  92. package/dist/{toolbar.js → components/toolbar/index.js} +4 -4
  93. package/dist/components/toolbar/index.js.map +1 -0
  94. package/dist/{tooltip.d.ts → components/tooltip/index.d.ts} +47 -46
  95. package/dist/{tooltip.js → components/tooltip/index.js} +4 -4
  96. package/dist/components/tooltip/index.js.map +1 -0
  97. package/dist/{top-app-bar.js → components/top-app-bar/index.js} +4 -4
  98. package/dist/components/top-app-bar/index.js.map +1 -0
  99. package/dist/index.d.ts +40 -39
  100. package/dist/index.js +382 -130
  101. package/dist/index.js.map +1 -1
  102. package/package.json +151 -151
  103. package/styles/preset.css +75 -7
  104. package/styles/theme.css +2 -0
  105. package/styles/tokens.css +2 -0
  106. package/dist/badge.js.map +0 -1
  107. package/dist/bottom-app-bar.js.map +0 -1
  108. package/dist/bottom-sheet.js.map +0 -1
  109. package/dist/button-group.js.map +0 -1
  110. package/dist/button.js.map +0 -1
  111. package/dist/card.js.map +0 -1
  112. package/dist/carousel.js.map +0 -1
  113. package/dist/checkbox.js.map +0 -1
  114. package/dist/chip.js.map +0 -1
  115. package/dist/date-picker.d.ts +0 -188
  116. package/dist/date-picker.js.map +0 -1
  117. package/dist/dialog.js.map +0 -1
  118. package/dist/divider.js.map +0 -1
  119. package/dist/fab-menu.js.map +0 -1
  120. package/dist/fab.js +0 -47
  121. package/dist/fab.js.map +0 -1
  122. package/dist/icon-button.js.map +0 -1
  123. package/dist/item.d.ts +0 -94
  124. package/dist/item.js.map +0 -1
  125. package/dist/list.js.map +0 -1
  126. package/dist/loading-indicator.js.map +0 -1
  127. package/dist/menu.js +0 -114
  128. package/dist/menu.js.map +0 -1
  129. package/dist/navigation-bar.d.ts +0 -91
  130. package/dist/navigation-bar.js.map +0 -1
  131. package/dist/navigation-drawer.js.map +0 -1
  132. package/dist/navigation-rail.d.ts +0 -101
  133. package/dist/navigation-rail.js.map +0 -1
  134. package/dist/progress.d.ts +0 -118
  135. package/dist/progress.js +0 -62
  136. package/dist/progress.js.map +0 -1
  137. package/dist/radio.js.map +0 -1
  138. package/dist/search.js.map +0 -1
  139. package/dist/segmented-button.js.map +0 -1
  140. package/dist/select.d.ts +0 -125
  141. package/dist/select.js +0 -99
  142. package/dist/select.js.map +0 -1
  143. package/dist/side-sheet.js.map +0 -1
  144. package/dist/slider.js.map +0 -1
  145. package/dist/snackbar.js.map +0 -1
  146. package/dist/split-button.js.map +0 -1
  147. package/dist/switch.d.ts +0 -72
  148. package/dist/switch.js.map +0 -1
  149. package/dist/tabs.js.map +0 -1
  150. package/dist/textfield.js.map +0 -1
  151. package/dist/time-picker.d.ts +0 -144
  152. package/dist/time-picker.js.map +0 -1
  153. package/dist/toolbar.js.map +0 -1
  154. package/dist/tooltip.js.map +0 -1
  155. package/dist/top-app-bar.js.map +0 -1
  156. /package/dist/{badge.d.ts → components/badge/index.d.ts} +0 -0
  157. /package/dist/{button.d.ts → components/button/index.d.ts} +0 -0
  158. /package/dist/{button-group.d.ts → components/button-group/index.d.ts} +0 -0
  159. /package/dist/{card.d.ts → components/card/index.d.ts} +0 -0
  160. /package/dist/{chip.d.ts → components/chip/index.d.ts} +0 -0
  161. /package/dist/{dialog.d.ts → components/dialog/index.d.ts} +0 -0
  162. /package/dist/{divider.d.ts → components/divider/index.d.ts} +0 -0
  163. /package/dist/{icon-button.d.ts → components/icon-button/index.d.ts} +0 -0
  164. /package/dist/{list.d.ts → components/list/index.d.ts} +0 -0
  165. /package/dist/{loading-indicator.d.ts → components/loading-indicator/index.d.ts} +0 -0
  166. /package/dist/{navigation-drawer.d.ts → components/navigation-drawer/index.d.ts} +0 -0
  167. /package/dist/{side-sheet.d.ts → components/side-sheet/index.d.ts} +0 -0
  168. /package/dist/{split-button.d.ts → components/split-button/index.d.ts} +0 -0
  169. /package/dist/{tabs.d.ts → components/tabs/index.d.ts} +0 -0
  170. /package/dist/{toolbar.d.ts → components/toolbar/index.d.ts} +0 -0
  171. /package/dist/{top-app-bar.d.ts → components/top-app-bar/index.d.ts} +0 -0
@@ -2,7 +2,7 @@
2
2
  import { createFab, createFabMenu } from '@m3-baseui/core';
3
3
  import { tv as tv$1 } from 'tailwind-variants';
4
4
 
5
- // src/fab-menu.ts
5
+ // src/components/fab-menu/fab-menu.ts
6
6
  var TYPESCALE = [
7
7
  "display-large",
8
8
  "display-medium",
@@ -49,38 +49,70 @@ var fabTv = tv$1({
49
49
  "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
50
50
  ],
51
51
  variants: {
52
- size: {
53
- small: "size-10 rounded-medium [&_svg]:size-6",
54
- regular: "size-14 rounded-large [&_svg]:size-6",
55
- large: "size-24 rounded-extra-large [&_svg]:size-9",
56
- extended: "h-14 min-w-20 px-4 gap-3 rounded-large text-label-large [&_svg]:size-6"
57
- },
52
+ // Geometry is set by compoundVariants (size × variant); these keys exist so
53
+ // the resolver can accept them.
54
+ size: { small: "", medium: "", large: "" },
55
+ variant: { standard: "", extended: "" },
58
56
  color: {
59
- surface: "bg-surface-container-high text-primary",
60
57
  primary: "bg-primary-container text-on-primary-container",
61
58
  secondary: "bg-secondary-container text-on-secondary-container",
62
59
  tertiary: "bg-tertiary-container text-on-tertiary-container"
63
60
  }
64
61
  },
62
+ compoundVariants: [
63
+ // ---- Standard (icon-only square): container / corner / icon ----
64
+ { size: "small", variant: "standard", class: "size-14 rounded-large [&_svg]:size-6" },
65
+ // 56 / 16 / 24
66
+ {
67
+ size: "medium",
68
+ variant: "standard",
69
+ class: "size-20 rounded-large-increased [&_svg]:size-7"
70
+ // 80 / 20 / 28
71
+ },
72
+ { size: "large", variant: "standard", class: "size-24 rounded-extra-large [&_svg]:size-8" },
73
+ // 96 / 28 / 32
74
+ // ---- Extended (icon + label pill): height / corner / icon / padding / gap / label ----
75
+ // `min-w-*` keeps the pill affordance for short / text-only labels (wider
76
+ // than tall), matching the pre-Expressive extended FAB which guarded this.
77
+ {
78
+ size: "small",
79
+ variant: "extended",
80
+ class: "h-14 min-w-20 px-4 gap-2 rounded-large text-title-medium [&_svg]:size-6"
81
+ // 56 / 16 / 24 / 16 / 8
82
+ },
83
+ {
84
+ size: "medium",
85
+ variant: "extended",
86
+ class: "h-20 min-w-28 px-[26px] gap-4 rounded-large-increased text-title-large [&_svg]:size-7"
87
+ // 80 / 20 / 28 / 26 / 16
88
+ },
89
+ {
90
+ size: "large",
91
+ variant: "extended",
92
+ class: "h-24 min-w-32 px-7 gap-5 rounded-extra-large text-headline-small [&_svg]:size-8"
93
+ // 96 / 28 / 32 / 28 / 20
94
+ }
95
+ ],
65
96
  defaultVariants: {
66
- size: "regular",
67
- color: "surface"
97
+ size: "small",
98
+ variant: "standard",
99
+ color: "primary"
68
100
  }
69
101
  });
70
- createFab(({ size, color }) => fabTv({ size, color }));
102
+ createFab(({ size, color, variant }) => fabTv({ size, color, variant }));
71
103
 
72
- // src/fab-menu.ts
104
+ // src/components/fab-menu/fab-menu.ts
73
105
  var fabMenuTv = tv({
74
106
  slots: {
75
107
  popup: [
76
- "flex flex-col items-end gap-2 bg-transparent outline-none",
108
+ "flex flex-col items-end gap-1 bg-transparent outline-none",
77
109
  "origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
78
110
  "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
79
111
  "data-[ending-style]:opacity-0"
80
112
  ],
81
113
  item: [
82
- "relative inline-flex items-center gap-3 h-14 px-4 overflow-hidden box-border",
83
- "cursor-pointer select-none outline-none rounded-full text-label-large",
114
+ "relative inline-flex items-center gap-2 h-14 px-6 overflow-hidden box-border",
115
+ "cursor-pointer select-none outline-none rounded-full text-title-medium",
84
116
  "shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard",
85
117
  "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
86
118
  "hover:before:opacity-[var(--md-sys-state-hover)]",
@@ -96,7 +128,6 @@ var fabMenuTv = tv({
96
128
  },
97
129
  variants: {
98
130
  color: {
99
- surface: { item: "bg-surface-container-high text-primary" },
100
131
  primary: { item: "bg-primary-container text-on-primary-container" },
101
132
  secondary: { item: "bg-secondary-container text-on-secondary-container" },
102
133
  tertiary: { item: "bg-tertiary-container text-on-tertiary-container" }
@@ -112,5 +143,5 @@ var FabMenu = createFabMenu(({ size, color }) => fabTv({ size, color }), {
112
143
  });
113
144
 
114
145
  export { FabMenu, fabMenuTv };
115
- //# sourceMappingURL=fab-menu.js.map
116
- //# sourceMappingURL=fab-menu.js.map
146
+ //# sourceMappingURL=index.js.map
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tv.ts","../../../src/components/fab/fab.ts","../../../src/components/fab-menu/fab-menu.ts"],"names":["baseTv","tv"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * fab.ts — tailwind-variants for the M3 (Expressive) FAB.\n *\n * Three sizes (small 56 / medium 80 / large 96 dp) × two variants (standard\n * icon-only square, extended icon + label pill) × three container colors\n * (primary / secondary / tertiary). Elevation level3 (level4 on hover) and a\n * currentColor state-layer `::before`. The size×variant geometry (container,\n * corner, icon, padding, label typescale) is resolved via compoundVariants so\n * every M3 combination maps to exact dp values. The pointer ripple is added by\n * the factory. Same DOM as the VE build.\n */\nimport { createFab } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\nexport const fabTv = tv({\n base: [\n 'relative inline-flex items-center justify-center box-border overflow-hidden',\n 'border-0 cursor-pointer select-none outline-none',\n 'shadow-level3 hover:shadow-level4',\n 'transition-shadow duration-150 ease-standard',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]',\n // M3 discourages disabled FABs (material-web removed the state). When native\n // disabled is used, apply the same container/label tokens as filled buttons.\n 'disabled:pointer-events-none disabled:shadow-none disabled:before:opacity-0',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:pointer-events-none data-[disabled]:shadow-none data-[disabled]:before:opacity-0',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n variants: {\n // Geometry is set by compoundVariants (size × variant); these keys exist so\n // the resolver can accept them.\n size: { small: '', medium: '', large: '' },\n variant: { standard: '', extended: '' },\n color: {\n primary: 'bg-primary-container text-on-primary-container',\n secondary: 'bg-secondary-container text-on-secondary-container',\n tertiary: 'bg-tertiary-container text-on-tertiary-container',\n },\n },\n compoundVariants: [\n // ---- Standard (icon-only square): container / corner / icon ----\n { size: 'small', variant: 'standard', class: 'size-14 rounded-large [&_svg]:size-6' }, // 56 / 16 / 24\n {\n size: 'medium',\n variant: 'standard',\n class: 'size-20 rounded-large-increased [&_svg]:size-7', // 80 / 20 / 28\n },\n { size: 'large', variant: 'standard', class: 'size-24 rounded-extra-large [&_svg]:size-8' }, // 96 / 28 / 32\n // ---- Extended (icon + label pill): height / corner / icon / padding / gap / label ----\n // `min-w-*` keeps the pill affordance for short / text-only labels (wider\n // than tall), matching the pre-Expressive extended FAB which guarded this.\n {\n size: 'small',\n variant: 'extended',\n class: 'h-14 min-w-20 px-4 gap-2 rounded-large text-title-medium [&_svg]:size-6', // 56 / 16 / 24 / 16 / 8\n },\n {\n size: 'medium',\n variant: 'extended',\n class:\n 'h-20 min-w-28 px-[26px] gap-4 rounded-large-increased text-title-large [&_svg]:size-7', // 80 / 20 / 28 / 26 / 16\n },\n {\n size: 'large',\n variant: 'extended',\n class: 'h-24 min-w-32 px-7 gap-5 rounded-extra-large text-headline-small [&_svg]:size-8', // 96 / 28 / 32 / 28 / 20\n },\n ],\n defaultVariants: {\n size: 'small',\n variant: 'standard',\n color: 'primary',\n },\n});\n\nexport const Fab = createFab(({ size, color, variant }) => fabTv({ size, color, variant }));\nexport type { FabProps, FabSize, FabVariant, FabColor } from '@m3-baseui/core';\n","/**\n * fab-menu.ts — tailwind-variants for the M3 (Expressive) FAB menu.\n *\n * The popup stacks the actions in a right-aligned column (4dp between items) with\n * the M3 menu enter/exit motion; each item is a 56dp full-corner pill (elevation\n * level3, level4 on hover) with a currentColor state-layer `::before`, a 24dp\n * leading icon slot, 24dp leading/trailing padding, an 8dp icon-label gap and a\n * title-medium label. The trigger reuses the FAB resolver. Same DOM + ripple as\n * the VE build.\n */\nimport { createFabMenu } from '@m3-baseui/core';\nimport { tv } from '../../tv';\nimport { fabTv } from '../fab/fab';\n\nexport const fabMenuTv = tv({\n slots: {\n popup: [\n 'flex flex-col items-end gap-1 bg-transparent outline-none',\n 'origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard',\n 'data-[starting-style]:opacity-0 data-[starting-style]:scale-95',\n 'data-[ending-style]:opacity-0',\n ],\n item: [\n 'relative inline-flex items-center gap-2 h-14 px-6 overflow-hidden box-border',\n 'cursor-pointer select-none outline-none rounded-full text-title-medium',\n 'shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n // M3 leading icon (24dp).\n '[&_[data-slot=fab-menu-leading]]:inline-flex [&_[data-slot=fab-menu-leading]>svg]:size-6',\n // M3 discourages disabled FABs; when used, match the filled-button tokens\n // (per-token, not a blanket opacity) and suppress the state layer.\n 'data-[disabled]:pointer-events-none data-[disabled]:shadow-none data-[disabled]:before:opacity-0',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n },\n variants: {\n color: {\n primary: { item: 'bg-primary-container text-on-primary-container' },\n secondary: { item: 'bg-secondary-container text-on-secondary-container' },\n tertiary: { item: 'bg-tertiary-container text-on-tertiary-container' },\n },\n },\n defaultVariants: {\n color: 'primary',\n },\n});\n\nexport const FabMenu = createFabMenu(({ size, color }) => fabTv({ size, color }), {\n popup: fabMenuTv().popup(),\n item: (color) => fabMenuTv({ color }).item(),\n});\n\nexport type { FabMenuTriggerProps, FabMenuItemProps } from '@m3-baseui/core';\n"]}
@@ -2,7 +2,7 @@
2
2
  import { createIconButton } from '@m3-baseui/core';
3
3
  import { tv } from 'tailwind-variants';
4
4
 
5
- // src/icon-button.ts
5
+ // src/components/icon-button/icon-button.ts
6
6
  var WIDTHS = {
7
7
  xs: { narrow: "w-7", default: "w-8", wide: "w-10" },
8
8
  // 28 / 32 / 40
@@ -120,5 +120,5 @@ var IconButton = createIconButton(
120
120
  );
121
121
 
122
122
  export { IconButton, iconButton };
123
- //# sourceMappingURL=icon-button.js.map
124
- //# sourceMappingURL=icon-button.js.map
123
+ //# sourceMappingURL=index.js.map
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/icon-button/icon-button.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * icon-button.ts — tailwind-variants resolver for the M3 Icon Button.\n *\n * 40×40 circular target with a centered icon. The `selected` variant supports\n * toggle icon buttons; when `selected` is undefined the variant's default\n * (filled/active) look is used. Emits the same DOM + ripple as the VE build.\n */\nimport { createIconButton } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\n// M3 Expressive container widths (px) per size × width. Tailwind v4's dynamic\n// spacing scale resolves any integer (e.g. w-13 = 52px, w-46 = 184px).\nconst WIDTHS = {\n xs: { narrow: 'w-7', default: 'w-8', wide: 'w-10' }, // 28 / 32 / 40\n s: { narrow: 'w-8', default: 'w-10', wide: 'w-13' }, // 32 / 40 / 52\n m: { narrow: 'w-12', default: 'w-14', wide: 'w-18' }, // 48 / 56 / 72\n l: { narrow: 'w-16', default: 'w-24', wide: 'w-32' }, // 64 / 96 / 128\n xl: { narrow: 'w-26', default: 'w-34', wide: 'w-46' }, // 104 / 136 / 184\n} as const;\n\nconst widthCompounds = Object.entries(WIDTHS).flatMap(([size, w]) =>\n Object.entries(w).map(([width, klass]) => ({\n size: size as keyof typeof WIDTHS,\n width: width as 'narrow' | 'default' | 'wide',\n class: klass,\n })),\n);\n\nexport const iconButton = tv({\n base: [\n 'relative inline-flex items-center justify-center shrink-0',\n // No `overflow-hidden`: it would clip the 48dp touch target on small sizes.\n // The state layer is already rounded (before:rounded-[inherit]); the ripple\n // self-clips.\n 'rounded-full cursor-pointer select-none border-0 bg-transparent',\n 'transition-[box-shadow,background-color,color] duration-200 ease-standard',\n // State layer overlay\n 'before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none',\n 'before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]',\n // Focus ring (M3: 3px secondary, 2px offset)\n 'focus-visible:outline-[3px] focus-visible:outline-offset-2 focus-visible:outline-secondary',\n // Disabled: no interaction, no state layer. Per-variant disabled colors\n // (container on-surface/12, icon on-surface/38) live on each variant.\n 'disabled:pointer-events-none disabled:before:opacity-0',\n 'data-[disabled]:pointer-events-none data-[disabled]:before:opacity-0',\n ],\n variants: {\n // Disabled icon is on-surface/38 for every variant; filled/tonal disabled\n // container is on-surface/12; outlined disabled outline is on-surface/12\n // (material-web parity).\n variant: {\n standard: [\n 'text-on-surface-variant',\n 'disabled:text-on-surface/38 data-[disabled]:text-on-surface/38',\n ],\n filled: [\n 'bg-primary text-on-primary',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n tonal: [\n 'bg-secondary-container text-on-secondary-container',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n outlined: [\n 'border border-outline text-on-surface-variant',\n 'disabled:border-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:border-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n },\n selected: {\n true: '',\n false: '',\n },\n // Container height + icon size per M3 Expressive size. Width comes from the\n // (size, width) compound variants below.\n size: {\n xs: 'h-8 [&>svg]:size-5',\n s: 'h-10 [&>svg]:size-6',\n m: 'h-14 [&>svg]:size-6',\n l: 'h-24 [&>svg]:size-8',\n xl: 'h-[136px] [&>svg]:size-10',\n },\n width: {\n narrow: '',\n default: '',\n wide: '',\n },\n },\n compoundVariants: [\n ...widthCompounds,\n { variant: 'standard', selected: true, class: 'text-primary' },\n { variant: 'filled', selected: false, class: 'bg-surface-container-highest text-primary' },\n {\n variant: 'tonal',\n selected: false,\n class: 'bg-surface-container-highest text-on-surface-variant',\n },\n {\n variant: 'outlined',\n selected: true,\n class: [\n 'bg-inverse-surface text-inverse-on-surface border-transparent',\n // M3 disabled + selected: faint on-surface/12 container, no outline\n // (icon falls back to on-surface/38 from the variant). NOT transparent.\n 'disabled:bg-on-surface/12 disabled:border-transparent',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:border-transparent',\n ],\n },\n ],\n defaultVariants: {\n variant: 'standard',\n size: 's',\n width: 'default',\n },\n});\n\nexport const IconButton = createIconButton(({ variant, selected, size, width }) =>\n iconButton({ variant, selected, size, width }),\n);\nexport type { IconButtonProps, IconButtonVariant } from '@m3-baseui/core';\n"]}
@@ -0,0 +1,95 @@
1
+ import * as react from 'react';
2
+ import * as _m3_baseui_core from '@m3-baseui/core';
3
+ export { ITEM_LEADING_VARIANTS, ItemLeadingVariant, ItemProps } from '@m3-baseui/core';
4
+ import * as tailwind_variants from 'tailwind-variants';
5
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
6
+ import * as tailwind_merge from 'tailwind-merge';
7
+
8
+ declare const itemTv: tailwind_variants.TVReturnType<{
9
+ [key: string]: {
10
+ [key: string]: tailwind_merge.ClassNameValue | {
11
+ content?: tailwind_merge.ClassNameValue;
12
+ leading?: tailwind_merge.ClassNameValue;
13
+ trailing?: tailwind_merge.ClassNameValue;
14
+ overline?: tailwind_merge.ClassNameValue;
15
+ supporting?: tailwind_merge.ClassNameValue;
16
+ root?: tailwind_merge.ClassNameValue;
17
+ headline?: tailwind_merge.ClassNameValue;
18
+ };
19
+ };
20
+ } | {
21
+ [x: string]: {
22
+ [x: string]: tailwind_merge.ClassNameValue | {
23
+ content?: tailwind_merge.ClassNameValue;
24
+ leading?: tailwind_merge.ClassNameValue;
25
+ trailing?: tailwind_merge.ClassNameValue;
26
+ overline?: tailwind_merge.ClassNameValue;
27
+ supporting?: tailwind_merge.ClassNameValue;
28
+ root?: tailwind_merge.ClassNameValue;
29
+ headline?: tailwind_merge.ClassNameValue;
30
+ };
31
+ };
32
+ } | {}, {
33
+ root: string[];
34
+ leading: string[];
35
+ content: string;
36
+ overline: string;
37
+ headline: string;
38
+ supporting: string;
39
+ trailing: string;
40
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
41
+ [key: string]: {
42
+ [key: string]: tailwind_merge.ClassNameValue | {
43
+ content?: tailwind_merge.ClassNameValue;
44
+ leading?: tailwind_merge.ClassNameValue;
45
+ trailing?: tailwind_merge.ClassNameValue;
46
+ overline?: tailwind_merge.ClassNameValue;
47
+ supporting?: tailwind_merge.ClassNameValue;
48
+ root?: tailwind_merge.ClassNameValue;
49
+ headline?: tailwind_merge.ClassNameValue;
50
+ };
51
+ };
52
+ } | {}>, {
53
+ [key: string]: {
54
+ [key: string]: tailwind_merge.ClassNameValue | {
55
+ content?: tailwind_merge.ClassNameValue;
56
+ leading?: tailwind_merge.ClassNameValue;
57
+ trailing?: tailwind_merge.ClassNameValue;
58
+ overline?: tailwind_merge.ClassNameValue;
59
+ supporting?: tailwind_merge.ClassNameValue;
60
+ root?: tailwind_merge.ClassNameValue;
61
+ headline?: tailwind_merge.ClassNameValue;
62
+ };
63
+ };
64
+ } | {}, {
65
+ root: string[];
66
+ leading: string[];
67
+ content: string;
68
+ overline: string;
69
+ headline: string;
70
+ supporting: string;
71
+ trailing: string;
72
+ }, tailwind_variants.TVReturnType<unknown, {
73
+ root: string[];
74
+ leading: string[];
75
+ content: string;
76
+ overline: string;
77
+ headline: string;
78
+ supporting: string;
79
+ trailing: string;
80
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
81
+ [key: string]: {
82
+ [key: string]: tailwind_merge.ClassNameValue | {
83
+ content?: tailwind_merge.ClassNameValue;
84
+ leading?: tailwind_merge.ClassNameValue;
85
+ trailing?: tailwind_merge.ClassNameValue;
86
+ overline?: tailwind_merge.ClassNameValue;
87
+ supporting?: tailwind_merge.ClassNameValue;
88
+ root?: tailwind_merge.ClassNameValue;
89
+ headline?: tailwind_merge.ClassNameValue;
90
+ };
91
+ };
92
+ } | {}>, unknown, unknown, undefined>>;
93
+ declare const Item: react.ForwardRefExoticComponent<_m3_baseui_core.ItemOwnProps & react.HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
94
+
95
+ export { Item, itemTv };
@@ -3,7 +3,7 @@ import { createItem } from '@m3-baseui/core';
3
3
  export { ITEM_LEADING_VARIANTS } from '@m3-baseui/core';
4
4
  import { tv as tv$1 } from 'tailwind-variants';
5
5
 
6
- // src/item.ts
6
+ // src/components/item/item.ts
7
7
  var TYPESCALE = [
8
8
  "display-large",
9
9
  "display-medium",
@@ -64,5 +64,5 @@ var Item = createItem({
64
64
  });
65
65
 
66
66
  export { Item, itemTv };
67
- //# sourceMappingURL=item.js.map
68
- //# sourceMappingURL=item.js.map
67
+ //# sourceMappingURL=index.js.map
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tv.ts","../../../src/components/item/item.ts"],"names":["baseTv"],"mappings":";;;;;;AAeA,IAAM,SAAA,GAAY;AAAA,EAChB,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAA,GAAS,CAAC,OAAA,EAAS,MAAA,KAC9BA,KAAO,OAAA,EAAS;AAAA,EACd,GAAG,MAAA;AAAA,EACH,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa;AAAA,QACX,WAAA,EAAa,CAAC,EAAE,IAAA,EAAM,CAAC,GAAG,SAAS,GAAG;AAAA;AACxC;AACF;AAEJ,CAAC,CAAA;AChCI,IAAM,SAAS,EAAA,CAAG;AAAA,EACvB,KAAA,EAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,iFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,mFAAA;AAAA,MACA,uDAAA;AAAA;AAAA,MAEA,kEAAA;AAAA,MACA,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS,8BAAA;AAAA,IACT,QAAA,EAAU,0CAAA;AAAA,IACV,QAAA,EAAU,iCAAA;AAAA,IACV,UAAA,EAAY,0CAAA;AAAA,IACZ,QAAA,EAAU;AAAA;AAEd,CAAC;AAED,IAAM,IAAI,MAAA,EAAO;AACV,IAAM,OAAO,UAAA,CAAW;AAAA,EAC7B,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,EACb,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,UAAA,EAAY,EAAE,UAAA,EAAW;AAAA,EACzB,QAAA,EAAU,EAAE,QAAA;AACd,CAAC","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * item.ts — tailwind-variants slots for the M3 Item row primitive.\n *\n * The shared row layout: leading slot, overline/headline/supporting column and\n * trailing slot. Headline is `body-large`/`on-surface`, overline `label-small`,\n * supporting `body-medium`, leading/trailing `on-surface-variant`. Inert by\n * design — interactive surfaces wrap it. Same DOM as the VE build.\n */\nimport { createItem } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport const itemTv = tv({\n slots: {\n root: [\n 'relative flex w-full items-center gap-4 box-border px-4 py-3 min-h-14 text-left',\n 'bg-transparent text-on-surface',\n ],\n leading: [\n 'flex items-center justify-center shrink-0 overflow-hidden text-on-surface-variant',\n '[&_svg]:size-6 [&_img]:size-full [&_img]:object-cover',\n // M3 leading column widths, keyed on the factory's data-leading attribute.\n 'data-[leading=avatar]:size-10 data-[leading=avatar]:rounded-full',\n 'data-[leading=image]:size-14',\n 'data-[leading=video]:w-25 data-[leading=video]:h-14',\n ],\n content: 'flex flex-col min-w-0 flex-1',\n overline: 'text-label-small text-on-surface-variant',\n headline: 'text-body-large text-on-surface',\n supporting: 'text-body-medium text-on-surface-variant',\n trailing: 'flex items-center shrink-0 text-label-small text-on-surface-variant [&_svg]:size-6',\n },\n});\n\nconst s = itemTv();\nexport const Item = createItem({\n root: s.root(),\n leading: s.leading(),\n content: s.content(),\n overline: s.overline(),\n headline: s.headline(),\n supporting: s.supporting(),\n trailing: s.trailing(),\n});\nexport { ITEM_LEADING_VARIANTS } from '@m3-baseui/core';\nexport type { ItemProps, ItemLeadingVariant } from '@m3-baseui/core';\n"]}
@@ -3,7 +3,7 @@ import { createList } from '@m3-baseui/core';
3
3
  export { LIST_LEADING_VARIANTS } from '@m3-baseui/core';
4
4
  import { tv as tv$1 } from 'tailwind-variants';
5
5
 
6
- // src/list.ts
6
+ // src/components/list/list.ts
7
7
  var TYPESCALE = [
8
8
  "display-large",
9
9
  "display-medium",
@@ -96,5 +96,5 @@ var List = createList({
96
96
  });
97
97
 
98
98
  export { List, listTv };
99
- //# sourceMappingURL=list.js.map
100
- //# sourceMappingURL=list.js.map
99
+ //# sourceMappingURL=index.js.map
100
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tv.ts","../../../src/components/list/list.ts"],"names":["baseTv"],"mappings":";;;;;;AAeA,IAAM,SAAA,GAAY;AAAA,EAChB,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAA,GAAS,CAAC,OAAA,EAAS,MAAA,KAC9BA,KAAO,OAAA,EAAS;AAAA,EACd,GAAG,MAAA;AAAA,EACH,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa;AAAA,QACX,WAAA,EAAa,CAAC,EAAE,IAAA,EAAM,CAAC,GAAG,SAAS,GAAG;AAAA;AACxC;AACF;AAEJ,CAAC,CAAA;AC9BI,IAAM,SAAS,EAAA,CAAG;AAAA,EACvB,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,wCAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,yEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,mFAAA;AAAA,MACA,uDAAA;AAAA;AAAA,MAEA,kEAAA;AAAA,MACA,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS,8BAAA;AAAA,IACT,QAAA,EAAU,0EAAA;AAAA,IACV,UAAA,EAAY,mFAAA;AAAA,IACZ,QAAA,EAAU;AAAA,MACR,oFAAA;AAAA,MACA;AAAA;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO;AAAA,MACL,CAAA,EAAG,EAAE,IAAA,EAAM,eAAA,EAAgB;AAAA,MAC3B,CAAA,EAAG,EAAE,IAAA,EAAM,mBAAA,EAAoB;AAAA,MAC/B,CAAA,EAAG,EAAE,IAAA,EAAM,+BAAA;AAAgC,KAC7C;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM;AAAA,UACJ,yDAAA;AAAA,UACA,4IAAA;AAAA,UACA,kDAAA;AAAA,UACA,0DAAA;AAAA,UACA,qDAAA;AAAA,UACA,sEAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,OAAO;AAAC;AACV,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,CAAA;AAAA,IACP,WAAA,EAAa;AAAA;AAEjB,CAAC;AAEM,IAAM,OAAO,UAAA,CAAW;AAAA,EAC7B,IAAA,EAAM,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACpB,IAAA,EAAM,CAAC,EAAE,KAAA,EAAO,aAAY,KAAM;AAChC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,EAAE,KAAA,EAAO,aAAa,CAAA;AACvC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,MACb,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,MACnB,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,MACnB,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,MACrB,UAAA,EAAY,EAAE,UAAA,EAAW;AAAA,MACzB,QAAA,EAAU,EAAE,QAAA;AAAS,KACvB;AAAA,EACF;AACF,CAAC","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * list.ts — tailwind-variants slots for the M3 List.\n *\n * `surface` container with 8dp block padding; rows are 56/72/88dp for\n * one/two/three-line. Interactive rows get a `currentColor` state-layer\n * `::before` (the pointer ripple is added by the factory) and dim per-token when\n * `data-disabled`. Headline is `body-large`/`on-surface`, supporting\n * `body-medium`/`on-surface-variant`, leading/trailing `on-surface-variant`.\n * Same DOM as the VE build.\n */\nimport { createList } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport const listTv = tv({\n slots: {\n root: 'list-none m-0 px-0 py-2 bg-transparent',\n item: [\n 'group relative flex w-full items-center gap-4 box-border px-4 text-left',\n 'bg-transparent border-0 text-on-surface no-underline',\n ],\n leading: [\n 'flex items-center justify-center shrink-0 overflow-hidden text-on-surface-variant',\n '[&_svg]:size-6 [&_img]:size-full [&_img]:object-cover',\n // M3 leading column widths, keyed on the factory's data-leading attribute.\n 'data-[leading=avatar]:size-10 data-[leading=avatar]:rounded-full',\n 'data-[leading=image]:size-14',\n 'data-[leading=video]:w-25 data-[leading=video]:h-14',\n ],\n content: 'flex flex-col min-w-0 flex-1',\n headline: 'text-body-large text-on-surface group-data-[disabled]:text-on-surface/38',\n supporting: 'text-body-medium text-on-surface-variant group-data-[disabled]:text-on-surface/38',\n trailing: [\n 'flex items-center shrink-0 text-label-small text-on-surface-variant [&_svg]:size-6',\n 'group-data-[disabled]:text-on-surface/38',\n ],\n },\n variants: {\n lines: {\n 1: { item: 'min-h-14 py-2' },\n 2: { item: 'min-h-[72px] py-2' },\n 3: { item: 'min-h-[88px] items-start py-3' },\n },\n interactive: {\n true: {\n item: [\n 'cursor-pointer select-none overflow-hidden outline-none',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[disabled]:pointer-events-none data-[disabled]:before:opacity-0',\n 'disabled:pointer-events-none disabled:before:opacity-0',\n ],\n },\n false: {},\n },\n },\n defaultVariants: {\n lines: 1,\n interactive: false,\n },\n});\n\nexport const List = createList({\n root: listTv().root(),\n item: ({ lines, interactive }) => {\n const c = listTv({ lines, interactive });\n return {\n item: c.item(),\n leading: c.leading(),\n content: c.content(),\n headline: c.headline(),\n supporting: c.supporting(),\n trailing: c.trailing(),\n };\n },\n});\nexport { LIST_LEADING_VARIANTS } from '@m3-baseui/core';\nexport type { ListItemProps, ListItemLines, ListLeadingVariant } from '@m3-baseui/core';\n"]}
@@ -2,7 +2,7 @@
2
2
  import { createLoadingIndicator } from '@m3-baseui/core';
3
3
  import { tv as tv$1 } from 'tailwind-variants';
4
4
 
5
- // src/loading-indicator.ts
5
+ // src/components/loading-indicator/loading-indicator.ts
6
6
  var TYPESCALE = [
7
7
  "display-large",
8
8
  "display-medium",
@@ -31,7 +31,7 @@ var tv = (options, config) => tv$1(options, {
31
31
  }
32
32
  });
33
33
 
34
- // src/loading-indicator.ts
34
+ // src/components/loading-indicator/loading-indicator.ts
35
35
  var loadingIndicatorTv = tv({
36
36
  slots: {
37
37
  // The SVG is a fixed 38dp active indicator. Uncontained: the box shrinks to
@@ -57,5 +57,5 @@ var LoadingIndicator = createLoadingIndicator(({ contained }) => {
57
57
  });
58
58
 
59
59
  export { LoadingIndicator, loadingIndicatorTv };
60
- //# sourceMappingURL=loading-indicator.js.map
61
- //# sourceMappingURL=loading-indicator.js.map
60
+ //# sourceMappingURL=index.js.map
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/tv.ts","../../../src/components/loading-indicator/loading-indicator.ts"],"names":["baseTv"],"mappings":";;;;;AAeA,IAAM,SAAA,GAAY;AAAA,EAChB,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAA,GAAS,CAAC,OAAA,EAAS,MAAA,KAC9BA,KAAO,OAAA,EAAS;AAAA,EACd,GAAG,MAAA;AAAA,EACH,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ;AAAA,MACN,WAAA,EAAa;AAAA,QACX,WAAA,EAAa,CAAC,EAAE,IAAA,EAAM,CAAC,GAAG,SAAS,GAAG;AAAA;AACxC;AACF;AAEJ,CAAC,CAAA;;;AC/BI,IAAM,qBAAqB,EAAA,CAAG;AAAA,EACnC,KAAA,EAAO;AAAA;AAAA;AAAA,IAGL,IAAA,EAAM,2EAAA;AAAA,IACN,SAAA,EAAW;AAAA,MACT,cAAA;AAAA;AAAA,MAEA;AAAA;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,EAAE,IAAA,EAAM,6CAAA,EAA8C;AAAA,MAC5D,OAAO;AAAC;AACV,GACF;AAAA,EACA,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA;AAChC,CAAC;AAEM,IAAM,gBAAA,GAAmB,sBAAA,CAAuB,CAAC,EAAE,WAAU,KAAM;AACxE,EAAA,MAAM,CAAA,GAAI,kBAAA,CAAmB,EAAE,SAAA,EAAW,CAAA;AAC1C,EAAA,OAAO,EAAE,MAAM,CAAA,CAAE,IAAA,IAAQ,SAAA,EAAW,CAAA,CAAE,WAAU,EAAE;AACpD,CAAC","file":"index.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * loading-indicator.ts — tailwind-variants slots for the M3 Expressive Loading\n * indicator.\n *\n * A 48dp box holding the morphing `primary` shape; the rotate+scale morph keys\n * off the `m3-loading` keyframe (see preset.css) and always runs (indeterminate\n * only). `contained` puts the shape on a `secondary-container` pill. Same DOM as\n * the VE build.\n */\nimport { createLoadingIndicator } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport const loadingIndicatorTv = tv({\n slots: {\n // The SVG is a fixed 38dp active indicator. Uncontained: the box shrinks to\n // the shape. Contained: a 48dp pill wraps it (5dp inset on each side).\n root: 'inline-flex items-center justify-center [&_svg]:block [&_svg]:size-[38px]',\n indicator: [\n 'fill-primary',\n // Morph + rotate about the shape's own centre (transform-box: fill-box).\n '[transform-box:fill-box] origin-center animate-m3-loading',\n ],\n },\n variants: {\n contained: {\n true: { root: 'size-12 rounded-full bg-secondary-container' },\n false: {},\n },\n },\n defaultVariants: { contained: false },\n});\n\nexport const LoadingIndicator = createLoadingIndicator(({ contained }) => {\n const s = loadingIndicatorTv({ contained });\n return { root: s.root(), indicator: s.indicator() };\n});\nexport type { LoadingIndicatorProps } from '@m3-baseui/core';\n"]}
@@ -1,98 +1,99 @@
1
1
  import * as react from 'react';
2
2
  import * as _base_ui_react from '@base-ui/react';
3
- import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
4
3
  import * as tailwind_variants from 'tailwind-variants';
4
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
5
+ import * as tailwind_merge from 'tailwind-merge';
5
6
 
6
7
  declare const menuTv: tailwind_variants.TVReturnType<{
7
8
  [key: string]: {
8
- [key: string]: tailwind_variants.ClassValue | {
9
- separator?: tailwind_variants.ClassValue;
10
- popup?: tailwind_variants.ClassValue;
11
- item?: tailwind_variants.ClassValue;
12
- itemIndicator?: tailwind_variants.ClassValue;
13
- groupLabel?: tailwind_variants.ClassValue;
14
- submenuTrigger?: tailwind_variants.ClassValue;
15
- checkboxItem?: tailwind_variants.ClassValue;
16
- radioItem?: tailwind_variants.ClassValue;
9
+ [key: string]: tailwind_merge.ClassNameValue | {
10
+ separator?: tailwind_merge.ClassNameValue;
11
+ popup?: tailwind_merge.ClassNameValue;
12
+ itemIndicator?: tailwind_merge.ClassNameValue;
13
+ groupLabel?: tailwind_merge.ClassNameValue;
14
+ item?: tailwind_merge.ClassNameValue;
15
+ submenuTrigger?: tailwind_merge.ClassNameValue;
16
+ checkboxItem?: tailwind_merge.ClassNameValue;
17
+ radioItem?: tailwind_merge.ClassNameValue;
17
18
  };
18
19
  };
19
20
  } | {
20
21
  [x: string]: {
21
- [x: string]: tailwind_variants.ClassValue | {
22
- separator?: tailwind_variants.ClassValue;
23
- popup?: tailwind_variants.ClassValue;
24
- item?: tailwind_variants.ClassValue;
25
- itemIndicator?: tailwind_variants.ClassValue;
26
- groupLabel?: tailwind_variants.ClassValue;
27
- submenuTrigger?: tailwind_variants.ClassValue;
28
- checkboxItem?: tailwind_variants.ClassValue;
29
- radioItem?: tailwind_variants.ClassValue;
22
+ [x: string]: tailwind_merge.ClassNameValue | {
23
+ separator?: tailwind_merge.ClassNameValue;
24
+ popup?: tailwind_merge.ClassNameValue;
25
+ itemIndicator?: tailwind_merge.ClassNameValue;
26
+ groupLabel?: tailwind_merge.ClassNameValue;
27
+ item?: tailwind_merge.ClassNameValue;
28
+ submenuTrigger?: tailwind_merge.ClassNameValue;
29
+ checkboxItem?: tailwind_merge.ClassNameValue;
30
+ radioItem?: tailwind_merge.ClassNameValue;
30
31
  };
31
32
  };
32
33
  } | {}, {
33
- popup: string[];
34
+ popup: string;
34
35
  item: string[];
35
36
  separator: string[];
36
- groupLabel: string[];
37
+ groupLabel: string;
37
38
  submenuTrigger: string[];
38
- checkboxItem: string[];
39
- radioItem: string[];
39
+ checkboxItem: string;
40
+ radioItem: string;
40
41
  itemIndicator: string;
41
42
  }, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
42
43
  [key: string]: {
43
- [key: string]: tailwind_variants.ClassValue | {
44
- separator?: tailwind_variants.ClassValue;
45
- popup?: tailwind_variants.ClassValue;
46
- item?: tailwind_variants.ClassValue;
47
- itemIndicator?: tailwind_variants.ClassValue;
48
- groupLabel?: tailwind_variants.ClassValue;
49
- submenuTrigger?: tailwind_variants.ClassValue;
50
- checkboxItem?: tailwind_variants.ClassValue;
51
- radioItem?: tailwind_variants.ClassValue;
44
+ [key: string]: tailwind_merge.ClassNameValue | {
45
+ separator?: tailwind_merge.ClassNameValue;
46
+ popup?: tailwind_merge.ClassNameValue;
47
+ itemIndicator?: tailwind_merge.ClassNameValue;
48
+ groupLabel?: tailwind_merge.ClassNameValue;
49
+ item?: tailwind_merge.ClassNameValue;
50
+ submenuTrigger?: tailwind_merge.ClassNameValue;
51
+ checkboxItem?: tailwind_merge.ClassNameValue;
52
+ radioItem?: tailwind_merge.ClassNameValue;
52
53
  };
53
54
  };
54
55
  } | {}>, {
55
56
  [key: string]: {
56
- [key: string]: tailwind_variants.ClassValue | {
57
- separator?: tailwind_variants.ClassValue;
58
- popup?: tailwind_variants.ClassValue;
59
- item?: tailwind_variants.ClassValue;
60
- itemIndicator?: tailwind_variants.ClassValue;
61
- groupLabel?: tailwind_variants.ClassValue;
62
- submenuTrigger?: tailwind_variants.ClassValue;
63
- checkboxItem?: tailwind_variants.ClassValue;
64
- radioItem?: tailwind_variants.ClassValue;
57
+ [key: string]: tailwind_merge.ClassNameValue | {
58
+ separator?: tailwind_merge.ClassNameValue;
59
+ popup?: tailwind_merge.ClassNameValue;
60
+ itemIndicator?: tailwind_merge.ClassNameValue;
61
+ groupLabel?: tailwind_merge.ClassNameValue;
62
+ item?: tailwind_merge.ClassNameValue;
63
+ submenuTrigger?: tailwind_merge.ClassNameValue;
64
+ checkboxItem?: tailwind_merge.ClassNameValue;
65
+ radioItem?: tailwind_merge.ClassNameValue;
65
66
  };
66
67
  };
67
68
  } | {}, {
68
- popup: string[];
69
+ popup: string;
69
70
  item: string[];
70
71
  separator: string[];
71
- groupLabel: string[];
72
+ groupLabel: string;
72
73
  submenuTrigger: string[];
73
- checkboxItem: string[];
74
- radioItem: string[];
74
+ checkboxItem: string;
75
+ radioItem: string;
75
76
  itemIndicator: string;
76
77
  }, tailwind_variants.TVReturnType<unknown, {
77
- popup: string[];
78
+ popup: string;
78
79
  item: string[];
79
80
  separator: string[];
80
- groupLabel: string[];
81
+ groupLabel: string;
81
82
  submenuTrigger: string[];
82
- checkboxItem: string[];
83
- radioItem: string[];
83
+ checkboxItem: string;
84
+ radioItem: string;
84
85
  itemIndicator: string;
85
86
  }, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
86
87
  [key: string]: {
87
- [key: string]: tailwind_variants.ClassValue | {
88
- separator?: tailwind_variants.ClassValue;
89
- popup?: tailwind_variants.ClassValue;
90
- item?: tailwind_variants.ClassValue;
91
- itemIndicator?: tailwind_variants.ClassValue;
92
- groupLabel?: tailwind_variants.ClassValue;
93
- submenuTrigger?: tailwind_variants.ClassValue;
94
- checkboxItem?: tailwind_variants.ClassValue;
95
- radioItem?: tailwind_variants.ClassValue;
88
+ [key: string]: tailwind_merge.ClassNameValue | {
89
+ separator?: tailwind_merge.ClassNameValue;
90
+ popup?: tailwind_merge.ClassNameValue;
91
+ itemIndicator?: tailwind_merge.ClassNameValue;
92
+ groupLabel?: tailwind_merge.ClassNameValue;
93
+ item?: tailwind_merge.ClassNameValue;
94
+ submenuTrigger?: tailwind_merge.ClassNameValue;
95
+ checkboxItem?: tailwind_merge.ClassNameValue;
96
+ radioItem?: tailwind_merge.ClassNameValue;
96
97
  };
97
98
  };
98
99
  } | {}>, unknown, unknown, undefined>>;
@@ -100,8 +101,8 @@ declare const Menu: {
100
101
  Root: <Payload>(props: _base_ui_react.MenuRoot.Props<Payload>) => react.JSX.Element;
101
102
  Trigger: _base_ui_react.MenuTrigger;
102
103
  Portal: react.ForwardRefExoticComponent<Omit<_base_ui_react.ContextMenuPortalProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
103
- Positioner: react.ForwardRefExoticComponent<Omit<_base_ui_react.ContextMenuPositionerProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
104
- Popup: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuPopupProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<unknown>>;
104
+ Positioner: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuPositionerProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
105
+ Popup: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuPopupProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
105
106
  Item: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuItemProps, "ref"> & react.RefAttributes<HTMLElement>, "ref"> & react.RefAttributes<unknown>>;
106
107
  Separator: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.SeparatorProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<unknown>>;
107
108
  Group: react.ForwardRefExoticComponent<Omit<_base_ui_react.ContextMenuGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;