@m3-baseui/react-tailwind 1.0.4 → 1.2.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 (55) hide show
  1. package/dist/bottom-app-bar.d.ts +62 -0
  2. package/dist/bottom-app-bar.js +51 -0
  3. package/dist/bottom-app-bar.js.map +1 -0
  4. package/dist/bottom-sheet.d.ts +101 -0
  5. package/dist/bottom-sheet.js +70 -0
  6. package/dist/bottom-sheet.js.map +1 -0
  7. package/dist/button-group.d.ts +48 -0
  8. package/dist/button-group.js +58 -0
  9. package/dist/button-group.js.map +1 -0
  10. package/dist/carousel.d.ts +115 -0
  11. package/dist/carousel.js +63 -0
  12. package/dist/carousel.js.map +1 -0
  13. package/dist/chip.js +5 -2
  14. package/dist/chip.js.map +1 -1
  15. package/dist/date-picker.d.ts +188 -0
  16. package/dist/date-picker.js +151 -0
  17. package/dist/date-picker.js.map +1 -0
  18. package/dist/fab-menu.d.ts +132 -0
  19. package/dist/fab-menu.js +116 -0
  20. package/dist/fab-menu.js.map +1 -0
  21. package/dist/icon-button.js +4 -1
  22. package/dist/icon-button.js.map +1 -1
  23. package/dist/index.d.ts +15 -1
  24. package/dist/index.js +654 -11
  25. package/dist/index.js.map +1 -1
  26. package/dist/loading-indicator.d.ts +68 -0
  27. package/dist/loading-indicator.js +61 -0
  28. package/dist/loading-indicator.js.map +1 -0
  29. package/dist/menu.d.ts +5 -5
  30. package/dist/navigation-bar.d.ts +5 -5
  31. package/dist/navigation-rail.d.ts +101 -0
  32. package/dist/navigation-rail.js +92 -0
  33. package/dist/navigation-rail.js.map +1 -0
  34. package/dist/search.d.ts +148 -0
  35. package/dist/search.js +105 -0
  36. package/dist/search.js.map +1 -0
  37. package/dist/segmented-button.d.ts +5 -5
  38. package/dist/select.d.ts +5 -5
  39. package/dist/side-sheet.d.ts +112 -0
  40. package/dist/side-sheet.js +90 -0
  41. package/dist/side-sheet.js.map +1 -0
  42. package/dist/split-button.d.ts +201 -0
  43. package/dist/split-button.js +126 -0
  44. package/dist/split-button.js.map +1 -0
  45. package/dist/time-picker.d.ts +144 -0
  46. package/dist/time-picker.js +101 -0
  47. package/dist/time-picker.js.map +1 -0
  48. package/dist/toolbar.d.ts +73 -0
  49. package/dist/toolbar.js +55 -0
  50. package/dist/toolbar.js.map +1 -0
  51. package/dist/top-app-bar.d.ts +147 -0
  52. package/dist/top-app-bar.js +68 -0
  53. package/dist/top-app-bar.js.map +1 -0
  54. package/package.json +71 -1
  55. package/styles/preset.css +15 -0
package/dist/search.js ADDED
@@ -0,0 +1,105 @@
1
+ "use client";
2
+ import { createSearch } from '@m3-baseui/core';
3
+ import { tv as tv$1 } from 'tailwind-variants';
4
+
5
+ // src/search.ts
6
+ var TYPESCALE = [
7
+ "display-large",
8
+ "display-medium",
9
+ "display-small",
10
+ "headline-large",
11
+ "headline-medium",
12
+ "headline-small",
13
+ "title-large",
14
+ "title-medium",
15
+ "title-small",
16
+ "body-large",
17
+ "body-medium",
18
+ "body-small",
19
+ "label-large",
20
+ "label-medium",
21
+ "label-small"
22
+ ];
23
+ var tv = (options, config) => tv$1(options, {
24
+ ...config,
25
+ twMergeConfig: {
26
+ extend: {
27
+ classGroups: {
28
+ "font-size": [{ text: [...TYPESCALE] }]
29
+ }
30
+ }
31
+ }
32
+ });
33
+
34
+ // src/search.ts
35
+ var searchTv = tv({
36
+ slots: {
37
+ bar: [
38
+ "flex items-center gap-1 h-14 min-w-[360px] max-w-full pl-4 pr-2",
39
+ "bg-surface-container-high text-on-surface rounded-full",
40
+ "transition-shadow duration-150 ease-standard",
41
+ "focus-within:shadow-level1"
42
+ ],
43
+ icon: [
44
+ "inline-flex shrink-0 items-center justify-center text-on-surface-variant",
45
+ "[&>svg]:size-6"
46
+ ],
47
+ input: [
48
+ "flex-1 min-w-0 h-full bg-transparent border-0 outline-none",
49
+ "text-body-large text-on-surface placeholder:text-on-surface-variant"
50
+ ],
51
+ clear: [
52
+ "relative inline-flex shrink-0 items-center justify-center size-10 rounded-full overflow-hidden",
53
+ "text-on-surface-variant cursor-pointer outline-none [&>svg]:size-6",
54
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
55
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
56
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
57
+ "active:before:opacity-[var(--md-sys-state-pressed)]"
58
+ ],
59
+ popup: [
60
+ "w-[var(--anchor-width)] min-w-[360px] max-h-[min(72vh,480px)] overflow-y-auto py-2",
61
+ "bg-surface-container-high text-on-surface rounded-large shadow-level3",
62
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
63
+ "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
64
+ "data-[ending-style]:opacity-0",
65
+ "focus:outline-none"
66
+ ],
67
+ list: ["outline-none"],
68
+ item: [
69
+ "group relative grid grid-cols-[24px_1fr_24px] items-center gap-4 h-14 px-4 overflow-hidden",
70
+ "cursor-pointer select-none outline-none text-body-large text-on-surface",
71
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
72
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
73
+ "data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
74
+ "data-[selected]:before:opacity-[var(--md-sys-state-pressed)]",
75
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
76
+ "data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none",
77
+ "[&_[data-slot=search-leading]]:inline-flex [&_[data-slot=search-leading]]:text-on-surface-variant [&_[data-slot=search-leading]>svg]:size-6"
78
+ ],
79
+ itemIndicator: [
80
+ "inline-flex items-center justify-center text-on-surface",
81
+ "invisible group-data-[selected]:visible"
82
+ ],
83
+ empty: ["px-4 py-3 text-body-medium text-on-surface-variant"],
84
+ separator: ["my-2 h-px border-0 bg-outline-variant"],
85
+ groupLabel: ["px-4 py-2 text-label-small text-on-surface-variant"]
86
+ }
87
+ });
88
+ var s = searchTv();
89
+ var Search = createSearch({
90
+ bar: s.bar(),
91
+ icon: s.icon(),
92
+ input: s.input(),
93
+ clear: s.clear(),
94
+ popup: s.popup(),
95
+ list: s.list(),
96
+ item: s.item(),
97
+ itemIndicator: s.itemIndicator(),
98
+ empty: s.empty(),
99
+ separator: s.separator(),
100
+ groupLabel: s.groupLabel()
101
+ });
102
+
103
+ export { Search, searchTv };
104
+ //# sourceMappingURL=search.js.map
105
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tv.ts","../src/search.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,WAAW,EAAA,CAAG;AAAA,EACzB,KAAA,EAAO;AAAA,IACL,GAAA,EAAK;AAAA,MACH,iEAAA;AAAA,MACA,wDAAA;AAAA,MACA,8CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,0EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,4DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,gGAAA;AAAA,MACA,oEAAA;AAAA,MACA,4IAAA;AAAA,MACA,kDAAA;AAAA,MACA,0DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,oFAAA;AAAA,MACA,uEAAA;AAAA,MACA,4FAAA;AAAA,MACA,gEAAA;AAAA,MACA,+BAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM,CAAC,cAAc,CAAA;AAAA,IACrB,IAAA,EAAM;AAAA,MACJ,4FAAA;AAAA,MACA,yEAAA;AAAA,MACA,4IAAA;AAAA,MACA,kDAAA;AAAA,MACA,+DAAA;AAAA,MACA,8DAAA;AAAA,MACA,qDAAA;AAAA,MACA,6GAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,aAAA,EAAe;AAAA,MACb,yDAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO,CAAC,oDAAoD,CAAA;AAAA,IAC5D,SAAA,EAAW,CAAC,uCAAuC,CAAA;AAAA,IACnD,UAAA,EAAY,CAAC,oDAAoD;AAAA;AAErE,CAAC;AAED,IAAM,IAAI,QAAA,EAAS;AACZ,IAAM,SAAS,YAAA,CAAa;AAAA,EACjC,GAAA,EAAK,EAAE,GAAA,EAAI;AAAA,EACX,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,EACb,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,EACb,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,EACb,aAAA,EAAe,EAAE,aAAA,EAAc;AAAA,EAC/B,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,SAAA,EAAW,EAAE,SAAA,EAAU;AAAA,EACvB,UAAA,EAAY,EAAE,UAAA;AAChB,CAAC","file":"search.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 * search.ts — Tailwind classes for the M3 Search (search bar + docked view).\n *\n * Resting bar: surface-container-high pill (full corner, 56dp) with a leading\n * magnifier and a body-large input. The docked view is a surface-container-high\n * popup (elevation 3) whose suggestion rows carry a `before:` state layer keyed\n * to hover + Base UI's data-[highlighted]/data-[selected]. Same DOM + ripple as\n * the VE build.\n */\nimport { createSearch } from '@m3-baseui/core';\nimport { tv } from './tv';\n\nexport const searchTv = tv({\n slots: {\n bar: [\n 'flex items-center gap-1 h-14 min-w-[360px] max-w-full pl-4 pr-2',\n 'bg-surface-container-high text-on-surface rounded-full',\n 'transition-shadow duration-150 ease-standard',\n 'focus-within:shadow-level1',\n ],\n icon: [\n 'inline-flex shrink-0 items-center justify-center text-on-surface-variant',\n '[&>svg]:size-6',\n ],\n input: [\n 'flex-1 min-w-0 h-full bg-transparent border-0 outline-none',\n 'text-body-large text-on-surface placeholder:text-on-surface-variant',\n ],\n clear: [\n 'relative inline-flex shrink-0 items-center justify-center size-10 rounded-full overflow-hidden',\n 'text-on-surface-variant cursor-pointer outline-none [&>svg]:size-6',\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 ],\n popup: [\n 'w-[var(--anchor-width)] min-w-[360px] max-h-[min(72vh,480px)] overflow-y-auto py-2',\n 'bg-surface-container-high text-on-surface rounded-large shadow-level3',\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 'focus:outline-none',\n ],\n list: ['outline-none'],\n item: [\n 'group relative grid grid-cols-[24px_1fr_24px] items-center gap-4 h-14 px-4 overflow-hidden',\n 'cursor-pointer select-none outline-none text-body-large text-on-surface',\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 'data-[selected]:before:opacity-[var(--md-sys-state-pressed)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none',\n '[&_[data-slot=search-leading]]:inline-flex [&_[data-slot=search-leading]]:text-on-surface-variant [&_[data-slot=search-leading]>svg]:size-6',\n ],\n itemIndicator: [\n 'inline-flex items-center justify-center text-on-surface',\n 'invisible group-data-[selected]:visible',\n ],\n empty: ['px-4 py-3 text-body-medium text-on-surface-variant'],\n separator: ['my-2 h-px border-0 bg-outline-variant'],\n groupLabel: ['px-4 py-2 text-label-small text-on-surface-variant'],\n },\n});\n\nconst s = searchTv();\nexport const Search = createSearch({\n bar: s.bar(),\n icon: s.icon(),\n input: s.input(),\n clear: s.clear(),\n popup: s.popup(),\n list: s.list(),\n item: s.item(),\n itemIndicator: s.itemIndicator(),\n empty: s.empty(),\n separator: s.separator(),\n groupLabel: s.groupLabel(),\n});\n"]}
@@ -8,8 +8,8 @@ declare const segmentedButtonTv: tailwind_variants.TVReturnType<{
8
8
  [key: string]: {
9
9
  [key: string]: tailwind_variants.ClassValue | {
10
10
  root?: tailwind_variants.ClassValue;
11
- check?: tailwind_variants.ClassValue;
12
11
  label?: tailwind_variants.ClassValue;
12
+ check?: tailwind_variants.ClassValue;
13
13
  icon?: tailwind_variants.ClassValue;
14
14
  item?: tailwind_variants.ClassValue;
15
15
  };
@@ -18,8 +18,8 @@ declare const segmentedButtonTv: tailwind_variants.TVReturnType<{
18
18
  [x: string]: {
19
19
  [x: string]: tailwind_variants.ClassValue | {
20
20
  root?: tailwind_variants.ClassValue;
21
- check?: tailwind_variants.ClassValue;
22
21
  label?: tailwind_variants.ClassValue;
22
+ check?: tailwind_variants.ClassValue;
23
23
  icon?: tailwind_variants.ClassValue;
24
24
  item?: tailwind_variants.ClassValue;
25
25
  };
@@ -34,8 +34,8 @@ declare const segmentedButtonTv: tailwind_variants.TVReturnType<{
34
34
  [key: string]: {
35
35
  [key: string]: tailwind_variants.ClassValue | {
36
36
  root?: tailwind_variants.ClassValue;
37
- check?: tailwind_variants.ClassValue;
38
37
  label?: tailwind_variants.ClassValue;
38
+ check?: tailwind_variants.ClassValue;
39
39
  icon?: tailwind_variants.ClassValue;
40
40
  item?: tailwind_variants.ClassValue;
41
41
  };
@@ -44,8 +44,8 @@ declare const segmentedButtonTv: tailwind_variants.TVReturnType<{
44
44
  [key: string]: {
45
45
  [key: string]: tailwind_variants.ClassValue | {
46
46
  root?: tailwind_variants.ClassValue;
47
- check?: tailwind_variants.ClassValue;
48
47
  label?: tailwind_variants.ClassValue;
48
+ check?: tailwind_variants.ClassValue;
49
49
  icon?: tailwind_variants.ClassValue;
50
50
  item?: tailwind_variants.ClassValue;
51
51
  };
@@ -66,8 +66,8 @@ declare const segmentedButtonTv: tailwind_variants.TVReturnType<{
66
66
  [key: string]: {
67
67
  [key: string]: tailwind_variants.ClassValue | {
68
68
  root?: tailwind_variants.ClassValue;
69
- check?: tailwind_variants.ClassValue;
70
69
  label?: tailwind_variants.ClassValue;
70
+ check?: tailwind_variants.ClassValue;
71
71
  icon?: tailwind_variants.ClassValue;
72
72
  item?: tailwind_variants.ClassValue;
73
73
  };
package/dist/select.d.ts CHANGED
@@ -9,8 +9,8 @@ declare const selectTv: tailwind_variants.TVReturnType<{
9
9
  value?: tailwind_variants.ClassValue;
10
10
  popup?: tailwind_variants.ClassValue;
11
11
  icon?: tailwind_variants.ClassValue;
12
- itemIndicator?: tailwind_variants.ClassValue;
13
12
  item?: tailwind_variants.ClassValue;
13
+ itemIndicator?: tailwind_variants.ClassValue;
14
14
  groupLabel?: tailwind_variants.ClassValue;
15
15
  trigger?: tailwind_variants.ClassValue;
16
16
  scrollUpArrow?: tailwind_variants.ClassValue;
@@ -23,8 +23,8 @@ declare const selectTv: tailwind_variants.TVReturnType<{
23
23
  value?: tailwind_variants.ClassValue;
24
24
  popup?: tailwind_variants.ClassValue;
25
25
  icon?: tailwind_variants.ClassValue;
26
- itemIndicator?: tailwind_variants.ClassValue;
27
26
  item?: tailwind_variants.ClassValue;
27
+ itemIndicator?: tailwind_variants.ClassValue;
28
28
  groupLabel?: tailwind_variants.ClassValue;
29
29
  trigger?: tailwind_variants.ClassValue;
30
30
  scrollUpArrow?: tailwind_variants.ClassValue;
@@ -47,8 +47,8 @@ declare const selectTv: tailwind_variants.TVReturnType<{
47
47
  value?: tailwind_variants.ClassValue;
48
48
  popup?: tailwind_variants.ClassValue;
49
49
  icon?: tailwind_variants.ClassValue;
50
- itemIndicator?: tailwind_variants.ClassValue;
51
50
  item?: tailwind_variants.ClassValue;
51
+ itemIndicator?: tailwind_variants.ClassValue;
52
52
  groupLabel?: tailwind_variants.ClassValue;
53
53
  trigger?: tailwind_variants.ClassValue;
54
54
  scrollUpArrow?: tailwind_variants.ClassValue;
@@ -61,8 +61,8 @@ declare const selectTv: tailwind_variants.TVReturnType<{
61
61
  value?: tailwind_variants.ClassValue;
62
62
  popup?: tailwind_variants.ClassValue;
63
63
  icon?: tailwind_variants.ClassValue;
64
- itemIndicator?: tailwind_variants.ClassValue;
65
64
  item?: tailwind_variants.ClassValue;
65
+ itemIndicator?: tailwind_variants.ClassValue;
66
66
  groupLabel?: tailwind_variants.ClassValue;
67
67
  trigger?: tailwind_variants.ClassValue;
68
68
  scrollUpArrow?: tailwind_variants.ClassValue;
@@ -95,8 +95,8 @@ declare const selectTv: tailwind_variants.TVReturnType<{
95
95
  value?: tailwind_variants.ClassValue;
96
96
  popup?: tailwind_variants.ClassValue;
97
97
  icon?: tailwind_variants.ClassValue;
98
- itemIndicator?: tailwind_variants.ClassValue;
99
98
  item?: tailwind_variants.ClassValue;
99
+ itemIndicator?: tailwind_variants.ClassValue;
100
100
  groupLabel?: tailwind_variants.ClassValue;
101
101
  trigger?: tailwind_variants.ClassValue;
102
102
  scrollUpArrow?: tailwind_variants.ClassValue;
@@ -0,0 +1,112 @@
1
+ import * as react from 'react';
2
+ import * as _base_ui_react from '@base-ui/react';
3
+ import * as _m3_baseui_core from '@m3-baseui/core';
4
+ export { SideSheetSide, SideSheetVariant } from '@m3-baseui/core';
5
+ import * as tailwind_variants from 'tailwind-variants';
6
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
7
+
8
+ declare const sideSheetTv: tailwind_variants.TVReturnType<{
9
+ variant: {
10
+ modal: {
11
+ popup: string[];
12
+ };
13
+ standard: {
14
+ popup: string;
15
+ };
16
+ };
17
+ }, {
18
+ backdrop: string[];
19
+ viewport: string;
20
+ popup: string[];
21
+ header: string;
22
+ title: string[];
23
+ description: string[];
24
+ close: string;
25
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
26
+ variant: {
27
+ modal: {
28
+ popup: string[];
29
+ };
30
+ standard: {
31
+ popup: string;
32
+ };
33
+ };
34
+ }, {
35
+ variant: {
36
+ modal: {
37
+ popup: string[];
38
+ };
39
+ standard: {
40
+ popup: string;
41
+ };
42
+ };
43
+ }>, {
44
+ variant: {
45
+ modal: {
46
+ popup: string[];
47
+ };
48
+ standard: {
49
+ popup: string;
50
+ };
51
+ };
52
+ }, {
53
+ backdrop: string[];
54
+ viewport: string;
55
+ popup: string[];
56
+ header: string;
57
+ title: string[];
58
+ description: string[];
59
+ close: string;
60
+ }, tailwind_variants.TVReturnType<{
61
+ variant: {
62
+ modal: {
63
+ popup: string[];
64
+ };
65
+ standard: {
66
+ popup: string;
67
+ };
68
+ };
69
+ }, {
70
+ backdrop: string[];
71
+ viewport: string;
72
+ popup: string[];
73
+ header: string;
74
+ title: string[];
75
+ description: string[];
76
+ close: string;
77
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
78
+ variant: {
79
+ modal: {
80
+ popup: string[];
81
+ };
82
+ standard: {
83
+ popup: string;
84
+ };
85
+ };
86
+ }, {
87
+ variant: {
88
+ modal: {
89
+ popup: string[];
90
+ };
91
+ standard: {
92
+ popup: string;
93
+ };
94
+ };
95
+ }>, unknown, unknown, undefined>>;
96
+ declare const SideSheet: {
97
+ Root: {
98
+ ({ variant, side, ...props }: _m3_baseui_core.SideSheetOwnProps & Omit<_base_ui_react.DrawerRoot.Props<unknown>, "modal" | "swipeDirection">): React.JSX.Element;
99
+ displayName: string;
100
+ };
101
+ Trigger: _base_ui_react.DrawerTrigger;
102
+ Portal: _base_ui_react.DrawerPortal;
103
+ Backdrop: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.DrawerBackdropProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
104
+ Viewport: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.DrawerViewportProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<unknown>>;
105
+ Popup: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.DrawerPopupProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
106
+ Header: react.ForwardRefExoticComponent<react.HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
107
+ Title: react.ForwardRefExoticComponent<Omit<_base_ui_react.DrawerTitleProps, "ref"> & react.RefAttributes<unknown>>;
108
+ Description: react.ForwardRefExoticComponent<Omit<_base_ui_react.DrawerDescriptionProps, "ref"> & react.RefAttributes<unknown>>;
109
+ Close: react.ForwardRefExoticComponent<Omit<_base_ui_react.DrawerCloseProps, "ref"> & react.RefAttributes<unknown>>;
110
+ };
111
+
112
+ export { SideSheet, sideSheetTv };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { createSideSheet } from '@m3-baseui/core';
3
+ import { tv as tv$1 } from 'tailwind-variants';
4
+
5
+ // src/side-sheet.ts
6
+ var TYPESCALE = [
7
+ "display-large",
8
+ "display-medium",
9
+ "display-small",
10
+ "headline-large",
11
+ "headline-medium",
12
+ "headline-small",
13
+ "title-large",
14
+ "title-medium",
15
+ "title-small",
16
+ "body-large",
17
+ "body-medium",
18
+ "body-small",
19
+ "label-large",
20
+ "label-medium",
21
+ "label-small"
22
+ ];
23
+ var tv = (options, config) => tv$1(options, {
24
+ ...config,
25
+ twMergeConfig: {
26
+ extend: {
27
+ classGroups: {
28
+ "font-size": [{ text: [...TYPESCALE] }]
29
+ }
30
+ }
31
+ }
32
+ });
33
+
34
+ // src/side-sheet.ts
35
+ var sideSheetTv = tv({
36
+ slots: {
37
+ backdrop: [
38
+ "fixed inset-0 z-40 bg-scrim/32",
39
+ "transition-opacity duration-300 ease-emphasized",
40
+ "data-[swiping]:transition-none",
41
+ "data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
42
+ ],
43
+ viewport: "fixed inset-0 z-50 flex items-stretch",
44
+ popup: [
45
+ "box-border h-full w-[320px] max-w-[calc(100vw-56px)]",
46
+ "flex flex-col overflow-y-auto overscroll-contain touch-auto outline-none",
47
+ "bg-surface-container-low text-on-surface",
48
+ "data-[swipe-direction=right]:ml-auto data-[swipe-direction=left]:mr-auto",
49
+ "[transform:translateX(var(--drawer-swipe-movement-x))]",
50
+ "transition-transform duration-300 ease-emphasized",
51
+ "data-[swiping]:select-none",
52
+ "data-[swipe-direction=right]:data-[starting-style]:[transform:translateX(100%)]",
53
+ "data-[swipe-direction=right]:data-[ending-style]:[transform:translateX(100%)]",
54
+ "data-[swipe-direction=left]:data-[starting-style]:[transform:translateX(-100%)]",
55
+ "data-[swipe-direction=left]:data-[ending-style]:[transform:translateX(-100%)]"
56
+ ],
57
+ header: "flex items-center gap-2 min-h-14 px-4 py-2",
58
+ title: ["flex-1 m-0 text-title-large text-on-surface"],
59
+ description: ["m-0 px-6 pb-4 text-body-medium text-on-surface-variant"],
60
+ close: "inline-flex shrink-0"
61
+ },
62
+ variants: {
63
+ variant: {
64
+ modal: {
65
+ popup: [
66
+ "shadow-level1",
67
+ "data-[swipe-direction=right]:rounded-s-large data-[swipe-direction=left]:rounded-e-large"
68
+ ]
69
+ },
70
+ standard: { popup: "shadow-none" }
71
+ }
72
+ },
73
+ defaultVariants: {
74
+ variant: "modal"
75
+ }
76
+ });
77
+ var s = sideSheetTv();
78
+ var SideSheet = createSideSheet({
79
+ backdrop: s.backdrop(),
80
+ viewport: s.viewport(),
81
+ popup: ({ variant }) => sideSheetTv({ variant }).popup(),
82
+ header: s.header(),
83
+ title: s.title(),
84
+ description: s.description(),
85
+ close: s.close()
86
+ });
87
+
88
+ export { SideSheet, sideSheetTv };
89
+ //# sourceMappingURL=side-sheet.js.map
90
+ //# sourceMappingURL=side-sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tv.ts","../src/side-sheet.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,cAAc,EAAA,CAAG;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,gCAAA;AAAA,MACA,iDAAA;AAAA,MACA,gCAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU,uCAAA;AAAA,IACV,KAAA,EAAO;AAAA,MACL,sDAAA;AAAA,MACA,0EAAA;AAAA,MACA,0CAAA;AAAA,MACA,0EAAA;AAAA,MACA,wDAAA;AAAA,MACA,mDAAA;AAAA,MACA,4BAAA;AAAA,MACA,iFAAA;AAAA,MACA,+EAAA;AAAA,MACA,iFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,4CAAA;AAAA,IACR,KAAA,EAAO,CAAC,6CAA6C,CAAA;AAAA,IACrD,WAAA,EAAa,CAAC,wDAAwD,CAAA;AAAA,IACtE,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,KAAA,EAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,eAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,EAAU,EAAE,KAAA,EAAO,aAAA;AAAc;AACnC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAED,IAAM,IAAI,WAAA,EAAY;AACf,IAAM,YAAY,eAAA,CAAgB;AAAA,EACvC,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,QAAA,EAAU,EAAE,QAAA,EAAS;AAAA,EACrB,KAAA,EAAO,CAAC,EAAE,OAAA,EAAQ,KAAM,YAAY,EAAE,OAAA,EAAS,CAAA,CAAE,KAAA,EAAM;AAAA,EACvD,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,WAAA,EAAa,EAAE,WAAA,EAAY;AAAA,EAC3B,KAAA,EAAO,EAAE,KAAA;AACX,CAAC","file":"side-sheet.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 * side-sheet.ts — tailwind-variants slots for the M3 Side sheet.\n *\n * A full-height 320dp `surface-container-low` surface anchored to a side edge.\n * `modal` floats at elevation 1 with the leading edge rounded large (16dp);\n * `standard` sits flush (no elevation). The anchored side is read from Base UI's\n * `data-swipe-direction` on the popup, so one resolver covers both left + right.\n * The popup slides via `--drawer-swipe-movement-x` so the swipe gesture tracks\n * the finger. Same DOM + `data-*` as the VE build.\n */\nimport { createSideSheet } from '@m3-baseui/core';\nimport { tv } from './tv';\n\nexport const sideSheetTv = tv({\n slots: {\n backdrop: [\n 'fixed inset-0 z-40 bg-scrim/32',\n 'transition-opacity duration-300 ease-emphasized',\n 'data-[swiping]:transition-none',\n 'data-[starting-style]:opacity-0 data-[ending-style]:opacity-0',\n ],\n viewport: 'fixed inset-0 z-50 flex items-stretch',\n popup: [\n 'box-border h-full w-[320px] max-w-[calc(100vw-56px)]',\n 'flex flex-col overflow-y-auto overscroll-contain touch-auto outline-none',\n 'bg-surface-container-low text-on-surface',\n 'data-[swipe-direction=right]:ml-auto data-[swipe-direction=left]:mr-auto',\n '[transform:translateX(var(--drawer-swipe-movement-x))]',\n 'transition-transform duration-300 ease-emphasized',\n 'data-[swiping]:select-none',\n 'data-[swipe-direction=right]:data-[starting-style]:[transform:translateX(100%)]',\n 'data-[swipe-direction=right]:data-[ending-style]:[transform:translateX(100%)]',\n 'data-[swipe-direction=left]:data-[starting-style]:[transform:translateX(-100%)]',\n 'data-[swipe-direction=left]:data-[ending-style]:[transform:translateX(-100%)]',\n ],\n header: 'flex items-center gap-2 min-h-14 px-4 py-2',\n title: ['flex-1 m-0 text-title-large text-on-surface'],\n description: ['m-0 px-6 pb-4 text-body-medium text-on-surface-variant'],\n close: 'inline-flex shrink-0',\n },\n variants: {\n variant: {\n modal: {\n popup: [\n 'shadow-level1',\n 'data-[swipe-direction=right]:rounded-s-large data-[swipe-direction=left]:rounded-e-large',\n ],\n },\n standard: { popup: 'shadow-none' },\n },\n },\n defaultVariants: {\n variant: 'modal',\n },\n});\n\nconst s = sideSheetTv();\nexport const SideSheet = createSideSheet({\n backdrop: s.backdrop(),\n viewport: s.viewport(),\n popup: ({ variant }) => sideSheetTv({ variant }).popup(),\n header: s.header(),\n title: s.title(),\n description: s.description(),\n close: s.close(),\n});\nexport type { SideSheetVariant, SideSheetSide } from '@m3-baseui/core';\n"]}
@@ -0,0 +1,201 @@
1
+ import * as _m3_baseui_core from '@m3-baseui/core';
2
+ import * as react from 'react';
3
+ import * as _base_ui_react from '@base-ui/react';
4
+ import * as tailwind_variants from 'tailwind-variants';
5
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
6
+
7
+ declare const splitButtonTv: tailwind_variants.TVReturnType<{
8
+ variant: {
9
+ filled: {
10
+ leading: string[];
11
+ trailing: string[];
12
+ };
13
+ tonal: {
14
+ leading: string[];
15
+ trailing: string[];
16
+ };
17
+ outlined: {
18
+ leading: string[];
19
+ trailing: string[];
20
+ };
21
+ elevated: {
22
+ leading: string[];
23
+ trailing: string[];
24
+ };
25
+ text: {
26
+ leading: string[];
27
+ trailing: string[];
28
+ };
29
+ };
30
+ }, {
31
+ group: string;
32
+ leading: string[];
33
+ trailing: string[];
34
+ chevron: string[];
35
+ popup: string[];
36
+ item: string[];
37
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
38
+ variant: {
39
+ filled: {
40
+ leading: string[];
41
+ trailing: string[];
42
+ };
43
+ tonal: {
44
+ leading: string[];
45
+ trailing: string[];
46
+ };
47
+ outlined: {
48
+ leading: string[];
49
+ trailing: string[];
50
+ };
51
+ elevated: {
52
+ leading: string[];
53
+ trailing: string[];
54
+ };
55
+ text: {
56
+ leading: string[];
57
+ trailing: string[];
58
+ };
59
+ };
60
+ }, {
61
+ variant: {
62
+ filled: {
63
+ leading: string[];
64
+ trailing: string[];
65
+ };
66
+ tonal: {
67
+ leading: string[];
68
+ trailing: string[];
69
+ };
70
+ outlined: {
71
+ leading: string[];
72
+ trailing: string[];
73
+ };
74
+ elevated: {
75
+ leading: string[];
76
+ trailing: string[];
77
+ };
78
+ text: {
79
+ leading: string[];
80
+ trailing: string[];
81
+ };
82
+ };
83
+ }>, {
84
+ variant: {
85
+ filled: {
86
+ leading: string[];
87
+ trailing: string[];
88
+ };
89
+ tonal: {
90
+ leading: string[];
91
+ trailing: string[];
92
+ };
93
+ outlined: {
94
+ leading: string[];
95
+ trailing: string[];
96
+ };
97
+ elevated: {
98
+ leading: string[];
99
+ trailing: string[];
100
+ };
101
+ text: {
102
+ leading: string[];
103
+ trailing: string[];
104
+ };
105
+ };
106
+ }, {
107
+ group: string;
108
+ leading: string[];
109
+ trailing: string[];
110
+ chevron: string[];
111
+ popup: string[];
112
+ item: string[];
113
+ }, tailwind_variants.TVReturnType<{
114
+ variant: {
115
+ filled: {
116
+ leading: string[];
117
+ trailing: string[];
118
+ };
119
+ tonal: {
120
+ leading: string[];
121
+ trailing: string[];
122
+ };
123
+ outlined: {
124
+ leading: string[];
125
+ trailing: string[];
126
+ };
127
+ elevated: {
128
+ leading: string[];
129
+ trailing: string[];
130
+ };
131
+ text: {
132
+ leading: string[];
133
+ trailing: string[];
134
+ };
135
+ };
136
+ }, {
137
+ group: string;
138
+ leading: string[];
139
+ trailing: string[];
140
+ chevron: string[];
141
+ popup: string[];
142
+ item: string[];
143
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
144
+ variant: {
145
+ filled: {
146
+ leading: string[];
147
+ trailing: string[];
148
+ };
149
+ tonal: {
150
+ leading: string[];
151
+ trailing: string[];
152
+ };
153
+ outlined: {
154
+ leading: string[];
155
+ trailing: string[];
156
+ };
157
+ elevated: {
158
+ leading: string[];
159
+ trailing: string[];
160
+ };
161
+ text: {
162
+ leading: string[];
163
+ trailing: string[];
164
+ };
165
+ };
166
+ }, {
167
+ variant: {
168
+ filled: {
169
+ leading: string[];
170
+ trailing: string[];
171
+ };
172
+ tonal: {
173
+ leading: string[];
174
+ trailing: string[];
175
+ };
176
+ outlined: {
177
+ leading: string[];
178
+ trailing: string[];
179
+ };
180
+ elevated: {
181
+ leading: string[];
182
+ trailing: string[];
183
+ };
184
+ text: {
185
+ leading: string[];
186
+ trailing: string[];
187
+ };
188
+ };
189
+ }>, unknown, unknown, undefined>>;
190
+ declare const SplitButton: {
191
+ Root: <Payload>(props: _base_ui_react.MenuRoot.Props<Payload>) => react.JSX.Element;
192
+ Group: react.ForwardRefExoticComponent<_m3_baseui_core.SplitButtonGroupOwnProps & react.HTMLAttributes<HTMLDivElement> & react.RefAttributes<HTMLDivElement>>;
193
+ Leading: react.ForwardRefExoticComponent<_m3_baseui_core.SplitButtonLeadingOwnProps & react.ButtonHTMLAttributes<HTMLButtonElement> & react.RefAttributes<HTMLButtonElement>>;
194
+ Trailing: react.ForwardRefExoticComponent<_m3_baseui_core.SplitButtonTrailingOwnProps & Omit<Omit<_base_ui_react.MenuTriggerProps<unknown> & react.RefAttributes<HTMLElement>, "ref">, "color"> & react.RefAttributes<HTMLButtonElement>>;
195
+ Portal: react.ForwardRefExoticComponent<Omit<_base_ui_react.ContextMenuPortalProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
196
+ Positioner: react.ForwardRefExoticComponent<Omit<_base_ui_react.ContextMenuPositionerProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
197
+ Popup: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuPopupProps, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<unknown>>;
198
+ Item: react.ForwardRefExoticComponent<Omit<Omit<_base_ui_react.ContextMenuItemProps, "ref"> & react.RefAttributes<HTMLElement>, "ref"> & react.RefAttributes<unknown>>;
199
+ };
200
+
201
+ export { SplitButton, splitButtonTv };