@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.
- package/dist/{badge.js → components/badge/index.js} +4 -4
- package/dist/components/badge/index.js.map +1 -0
- package/dist/{bottom-app-bar.d.ts → components/bottom-app-bar/index.d.ts} +22 -21
- package/dist/{bottom-app-bar.js → components/bottom-app-bar/index.js} +4 -4
- package/dist/components/bottom-app-bar/index.js.map +1 -0
- package/dist/{bottom-sheet.d.ts → components/bottom-sheet/index.d.ts} +37 -36
- package/dist/{bottom-sheet.js → components/bottom-sheet/index.js} +4 -4
- package/dist/components/bottom-sheet/index.js.map +1 -0
- package/dist/{button.js → components/button/index.js} +3 -3
- package/dist/components/button/index.js.map +1 -0
- package/dist/{button-group.js → components/button-group/index.js} +4 -4
- package/dist/components/button-group/index.js.map +1 -0
- package/dist/{card.js → components/card/index.js} +4 -4
- package/dist/components/card/index.js.map +1 -0
- package/dist/{carousel.d.ts → components/carousel/index.d.ts} +21 -0
- package/dist/{carousel.js → components/carousel/index.js} +11 -5
- package/dist/components/carousel/index.js.map +1 -0
- package/dist/{checkbox.d.ts → components/checkbox/index.d.ts} +22 -21
- package/dist/{checkbox.js → components/checkbox/index.js} +3 -3
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/{chip.js → components/chip/index.js} +3 -3
- package/dist/components/chip/index.js.map +1 -0
- package/dist/components/date-picker/index.d.ts +189 -0
- package/dist/{date-picker.js → components/date-picker/index.js} +4 -4
- package/dist/components/date-picker/index.js.map +1 -0
- package/dist/{dialog.js → components/dialog/index.js} +4 -4
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/{divider.js → components/divider/index.js} +3 -3
- package/dist/components/divider/index.js.map +1 -0
- package/dist/{fab.d.ts → components/fab/index.d.ts} +29 -15
- package/dist/components/fab/index.js +79 -0
- package/dist/components/fab/index.js.map +1 -0
- package/dist/{fab-menu.d.ts → components/fab-menu/index.d.ts} +0 -21
- package/dist/{fab-menu.js → components/fab-menu/index.js} +49 -18
- package/dist/components/fab-menu/index.js.map +1 -0
- package/dist/{icon-button.js → components/icon-button/index.js} +3 -3
- package/dist/components/icon-button/index.js.map +1 -0
- package/dist/components/item/index.d.ts +95 -0
- package/dist/{item.js → components/item/index.js} +3 -3
- package/dist/components/item/index.js.map +1 -0
- package/dist/{list.js → components/list/index.js} +3 -3
- package/dist/components/list/index.js.map +1 -0
- package/dist/{loading-indicator.js → components/loading-indicator/index.js} +4 -4
- package/dist/components/loading-indicator/index.js.map +1 -0
- package/dist/{menu.d.ts → components/menu/index.d.ts} +61 -60
- package/dist/components/menu/index.js +179 -0
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/navigation-bar/index.d.ts +92 -0
- package/dist/{navigation-bar.js → components/navigation-bar/index.js} +3 -3
- package/dist/components/navigation-bar/index.js.map +1 -0
- package/dist/{navigation-drawer.js → components/navigation-drawer/index.js} +4 -4
- package/dist/components/navigation-drawer/index.js.map +1 -0
- package/dist/components/navigation-rail/index.d.ts +102 -0
- package/dist/{navigation-rail.js → components/navigation-rail/index.js} +4 -4
- package/dist/components/navigation-rail/index.js.map +1 -0
- package/dist/components/progress/index.d.ts +127 -0
- package/dist/components/progress/index.js +101 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/{radio.d.ts → components/radio/index.d.ts} +17 -16
- package/dist/{radio.js → components/radio/index.js} +3 -3
- package/dist/components/radio/index.js.map +1 -0
- package/dist/{search.d.ts → components/search/index.d.ts} +62 -61
- package/dist/{search.js → components/search/index.js} +4 -4
- package/dist/components/search/index.js.map +1 -0
- package/dist/{segmented-button.d.ts → components/segmented-button/index.d.ts} +32 -31
- package/dist/{segmented-button.js → components/segmented-button/index.js} +4 -4
- package/dist/components/segmented-button/index.js.map +1 -0
- package/dist/components/select/index.d.ts +235 -0
- package/dist/components/select/index.js +260 -0
- package/dist/components/select/index.js.map +1 -0
- package/dist/{side-sheet.js → components/side-sheet/index.js} +4 -4
- package/dist/components/side-sheet/index.js.map +1 -0
- package/dist/{slider.d.ts → components/slider/index.d.ts} +52 -51
- package/dist/{slider.js → components/slider/index.js} +4 -4
- package/dist/components/slider/index.js.map +1 -0
- package/dist/{snackbar.d.ts → components/snackbar/index.d.ts} +42 -41
- package/dist/{snackbar.js → components/snackbar/index.js} +3 -3
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/{split-button.js → components/split-button/index.js} +4 -4
- package/dist/components/split-button/index.js.map +1 -0
- package/dist/components/switch/index.d.ts +73 -0
- package/dist/{switch.js → components/switch/index.js} +3 -3
- package/dist/components/switch/index.js.map +1 -0
- package/dist/{tabs.js → components/tabs/index.js} +4 -4
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/{textfield.d.ts → components/textfield/index.d.ts} +7 -1
- package/dist/{textfield.js → components/textfield/index.js} +35 -13
- package/dist/components/textfield/index.js.map +1 -0
- package/dist/components/time-picker/index.d.ts +153 -0
- package/dist/{time-picker.js → components/time-picker/index.js} +28 -13
- package/dist/components/time-picker/index.js.map +1 -0
- package/dist/{toolbar.js → components/toolbar/index.js} +4 -4
- package/dist/components/toolbar/index.js.map +1 -0
- package/dist/{tooltip.d.ts → components/tooltip/index.d.ts} +47 -46
- package/dist/{tooltip.js → components/tooltip/index.js} +4 -4
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/{top-app-bar.js → components/top-app-bar/index.js} +4 -4
- package/dist/components/top-app-bar/index.js.map +1 -0
- package/dist/index.d.ts +40 -39
- package/dist/index.js +382 -130
- package/dist/index.js.map +1 -1
- package/package.json +151 -151
- package/styles/preset.css +75 -7
- package/styles/theme.css +2 -0
- package/styles/tokens.css +2 -0
- package/dist/badge.js.map +0 -1
- package/dist/bottom-app-bar.js.map +0 -1
- package/dist/bottom-sheet.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/carousel.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/chip.js.map +0 -1
- package/dist/date-picker.d.ts +0 -188
- package/dist/date-picker.js.map +0 -1
- package/dist/dialog.js.map +0 -1
- package/dist/divider.js.map +0 -1
- package/dist/fab-menu.js.map +0 -1
- package/dist/fab.js +0 -47
- package/dist/fab.js.map +0 -1
- package/dist/icon-button.js.map +0 -1
- package/dist/item.d.ts +0 -94
- package/dist/item.js.map +0 -1
- package/dist/list.js.map +0 -1
- package/dist/loading-indicator.js.map +0 -1
- package/dist/menu.js +0 -114
- package/dist/menu.js.map +0 -1
- package/dist/navigation-bar.d.ts +0 -91
- package/dist/navigation-bar.js.map +0 -1
- package/dist/navigation-drawer.js.map +0 -1
- package/dist/navigation-rail.d.ts +0 -101
- package/dist/navigation-rail.js.map +0 -1
- package/dist/progress.d.ts +0 -118
- package/dist/progress.js +0 -62
- package/dist/progress.js.map +0 -1
- package/dist/radio.js.map +0 -1
- package/dist/search.js.map +0 -1
- package/dist/segmented-button.js.map +0 -1
- package/dist/select.d.ts +0 -125
- package/dist/select.js +0 -99
- package/dist/select.js.map +0 -1
- package/dist/side-sheet.js.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/snackbar.js.map +0 -1
- package/dist/split-button.js.map +0 -1
- package/dist/switch.d.ts +0 -72
- package/dist/switch.js.map +0 -1
- package/dist/tabs.js.map +0 -1
- package/dist/textfield.js.map +0 -1
- package/dist/time-picker.d.ts +0 -144
- package/dist/time-picker.js.map +0 -1
- package/dist/toolbar.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/top-app-bar.js.map +0 -1
- /package/dist/{badge.d.ts → components/badge/index.d.ts} +0 -0
- /package/dist/{button.d.ts → components/button/index.d.ts} +0 -0
- /package/dist/{button-group.d.ts → components/button-group/index.d.ts} +0 -0
- /package/dist/{card.d.ts → components/card/index.d.ts} +0 -0
- /package/dist/{chip.d.ts → components/chip/index.d.ts} +0 -0
- /package/dist/{dialog.d.ts → components/dialog/index.d.ts} +0 -0
- /package/dist/{divider.d.ts → components/divider/index.d.ts} +0 -0
- /package/dist/{icon-button.d.ts → components/icon-button/index.d.ts} +0 -0
- /package/dist/{list.d.ts → components/list/index.d.ts} +0 -0
- /package/dist/{loading-indicator.d.ts → components/loading-indicator/index.d.ts} +0 -0
- /package/dist/{navigation-drawer.d.ts → components/navigation-drawer/index.d.ts} +0 -0
- /package/dist/{side-sheet.d.ts → components/side-sheet/index.d.ts} +0 -0
- /package/dist/{split-button.d.ts → components/split-button/index.d.ts} +0 -0
- /package/dist/{tabs.d.ts → components/tabs/index.d.ts} +0 -0
- /package/dist/{toolbar.d.ts → components/toolbar/index.d.ts} +0 -0
- /package/dist/{top-app-bar.d.ts → components/top-app-bar/index.d.ts} +0 -0
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
import { createTextField } from '@m3-baseui/core';
|
|
3
3
|
import { tv } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/textfield.ts
|
|
5
|
+
// src/components/textfield/textfield.ts
|
|
6
|
+
var iconVisual = "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6";
|
|
6
7
|
var textFieldTv = tv({
|
|
7
8
|
slots: {
|
|
8
9
|
root: "flex flex-col gap-1 min-w-[210px]",
|
|
9
10
|
field: [
|
|
10
|
-
"relative flex items-stretch gap-3 h-14 px-4 box-border",
|
|
11
|
+
"relative flex items-stretch gap-3 h-14 px-4 box-border text-on-surface",
|
|
11
12
|
"transition-[border-color,padding] duration-150 ease-standard",
|
|
12
13
|
"group-data-[disabled]:opacity-[0.38] group-data-[disabled]:pointer-events-none"
|
|
13
14
|
],
|
|
14
|
-
inputWrap: "relative flex-1 flex items-center min-w-0",
|
|
15
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
15
16
|
input: [
|
|
16
17
|
"peer w-full bg-transparent outline-none border-0 p-0 text-body-large text-on-surface",
|
|
17
18
|
"placeholder:text-on-surface-variant"
|
|
@@ -22,8 +23,18 @@ var textFieldTv = tv({
|
|
|
22
23
|
"transition-all duration-150 ease-standard",
|
|
23
24
|
"group-data-[focused]:text-primary group-data-[invalid]:text-error"
|
|
24
25
|
],
|
|
25
|
-
leadingIcon:
|
|
26
|
-
trailingIcon:
|
|
26
|
+
leadingIcon: iconVisual,
|
|
27
|
+
trailingIcon: iconVisual,
|
|
28
|
+
leadingIconButton: [
|
|
29
|
+
iconVisual,
|
|
30
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
31
|
+
"group-data-[disabled]:pointer-events-none"
|
|
32
|
+
],
|
|
33
|
+
trailingIconButton: [
|
|
34
|
+
iconVisual,
|
|
35
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
36
|
+
"group-data-[disabled]:pointer-events-none"
|
|
37
|
+
],
|
|
27
38
|
supporting: [
|
|
28
39
|
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
29
40
|
"group-data-[invalid]:text-error"
|
|
@@ -35,9 +46,15 @@ var textFieldTv = tv({
|
|
|
35
46
|
variant: {
|
|
36
47
|
filled: {
|
|
37
48
|
field: [
|
|
38
|
-
"rounded-t-extra-small bg-surface-container-highest",
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
50
|
+
// M3 filled hover: state layer (on-surface × state-hover) + indicator color.
|
|
51
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
52
|
+
"before:transition-opacity before:duration-100",
|
|
53
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
54
|
+
"group-data-[disabled]:before:opacity-0",
|
|
55
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
56
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
57
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
41
58
|
"group-data-[focused]:border-b-[3px] group-data-[focused]:border-primary group-data-[invalid]:border-error"
|
|
42
59
|
],
|
|
43
60
|
input: "pt-3",
|
|
@@ -48,15 +65,18 @@ var textFieldTv = tv({
|
|
|
48
65
|
},
|
|
49
66
|
outlined: {
|
|
50
67
|
field: [
|
|
51
|
-
|
|
68
|
+
// Outlined hover = outline color only (no container state layer per M3).
|
|
69
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
52
70
|
// M3 outlined focus-outline-width is 3dp (matches Select's trigger);
|
|
53
71
|
// padding drops 2px so content stays steady as the 1dp border grows.
|
|
54
72
|
"group-data-[focused]:border-[3px] group-data-[focused]:border-primary group-data-[focused]:px-[14px]",
|
|
55
73
|
"group-data-[invalid]:border-error"
|
|
56
74
|
],
|
|
57
75
|
label: [
|
|
58
|
-
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:
|
|
59
|
-
"group-data-[
|
|
76
|
+
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:z-[1]",
|
|
77
|
+
"group-data-[focused]:text-body-small group-data-[focused]:bg-surface group-data-[focused]:px-1 group-data-[focused]:leading-none",
|
|
78
|
+
"group-data-[filled]:top-0 group-data-[filled]:-translate-y-1/2 group-data-[filled]:z-[1]",
|
|
79
|
+
"group-data-[filled]:text-body-small group-data-[filled]:bg-surface group-data-[filled]:px-1 group-data-[filled]:leading-none"
|
|
60
80
|
]
|
|
61
81
|
}
|
|
62
82
|
}
|
|
@@ -75,6 +95,8 @@ var TextField = createTextField(({ variant }) => {
|
|
|
75
95
|
label: c.label(),
|
|
76
96
|
leadingIcon: c.leadingIcon(),
|
|
77
97
|
trailingIcon: c.trailingIcon(),
|
|
98
|
+
leadingIconButton: c.leadingIconButton(),
|
|
99
|
+
trailingIconButton: c.trailingIconButton(),
|
|
78
100
|
supporting: c.supporting(),
|
|
79
101
|
supportingText: c.supportingText(),
|
|
80
102
|
counter: c.counter()
|
|
@@ -82,5 +104,5 @@ var TextField = createTextField(({ variant }) => {
|
|
|
82
104
|
});
|
|
83
105
|
|
|
84
106
|
export { TextField, textFieldTv };
|
|
85
|
-
//# sourceMappingURL=
|
|
86
|
-
//# sourceMappingURL=
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
108
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/textfield/textfield.ts"],"names":[],"mappings":";;;;;AAYA,IAAM,UAAA,GACJ,yFAAA;AAEK,IAAM,cAAc,EAAA,CAAG;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,mCAAA;AAAA,IACN,KAAA,EAAO;AAAA,MACL,wEAAA;AAAA,MACA,8DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,SAAA,EAAW,gEAAA;AAAA,IACX,KAAA,EAAO;AAAA,MACL,sFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO;AAAA,MACL,iDAAA;AAAA,MACA,kEAAA;AAAA,MACA,2CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,WAAA,EAAa,UAAA;AAAA,IACb,YAAA,EAAc,UAAA;AAAA,IACd,iBAAA,EAAmB;AAAA,MACjB,UAAA;AAAA,MACA,6DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,UAAA;AAAA,MACA,6DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,yEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,cAAA,EAAgB,SAAA;AAAA,IAChB,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO;AAAA,UACL,oEAAA;AAAA;AAAA,UAEA,uHAAA;AAAA,UACA,+CAAA;AAAA,UACA,kDAAA;AAAA,UACA,wCAAA;AAAA;AAAA,UAEA,4DAAA;AAAA;AAAA,UAEA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO;AAAA,UACL,sGAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,KAAA,EAAO;AAAA;AAAA,UAEL,oFAAA;AAAA;AAAA;AAAA,UAGA,sGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,6FAAA;AAAA,UACA,kIAAA;AAAA,UACA,0FAAA;AAAA,UACA;AAAA;AACF;AACF;AACF,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;AAEM,IAAM,SAAA,GAAY,eAAA,CAAgB,CAAC,EAAE,SAAQ,KAAM;AACxD,EAAA,MAAM,CAAA,GAAI,WAAA,CAAY,EAAE,OAAA,EAAS,CAAA;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,IACb,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,IACf,SAAA,EAAW,EAAE,SAAA,EAAU;AAAA,IACvB,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,IACf,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,IACf,WAAA,EAAa,EAAE,WAAA,EAAY;AAAA,IAC3B,YAAA,EAAc,EAAE,YAAA,EAAa;AAAA,IAC7B,iBAAA,EAAmB,EAAE,iBAAA,EAAkB;AAAA,IACvC,kBAAA,EAAoB,EAAE,kBAAA,EAAmB;AAAA,IACzC,UAAA,EAAY,EAAE,UAAA,EAAW;AAAA,IACzB,cAAA,EAAgB,EAAE,cAAA,EAAe;AAAA,IACjC,OAAA,EAAS,EAAE,OAAA;AAAQ,GACrB;AACF,CAAC","file":"index.js","sourcesContent":["/**\n * textfield.ts — tailwind-variants slots for the M3 TextField.\n *\n * 56dp tall. The floating label and focus/filled border key off Field's\n * `data-focused` / `data-filled` / `data-invalid` via the `group` on Root.\n * Filled = surface-container-highest with a bottom indicator; outlined = a\n * border that thickens to 3dp primary on focus (M3 focus-outline-width). Same\n * DOM as the VE build.\n */\nimport { createTextField } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\nconst iconVisual =\n 'inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6';\n\nexport const textFieldTv = tv({\n slots: {\n root: 'flex flex-col gap-1 min-w-[210px]',\n field: [\n 'relative flex items-stretch gap-3 h-14 px-4 box-border text-on-surface',\n 'transition-[border-color,padding] duration-150 ease-standard',\n 'group-data-[disabled]:opacity-[0.38] group-data-[disabled]:pointer-events-none',\n ],\n inputWrap: 'relative z-0 flex-1 flex items-center min-w-0 overflow-visible',\n input: [\n 'peer w-full bg-transparent outline-none border-0 p-0 text-body-large text-on-surface',\n 'placeholder:text-on-surface-variant',\n ],\n label: [\n 'absolute left-0 pointer-events-none origin-left',\n 'top-1/2 -translate-y-1/2 text-body-large text-on-surface-variant',\n 'transition-all duration-150 ease-standard',\n 'group-data-[focused]:text-primary group-data-[invalid]:text-error',\n ],\n leadingIcon: iconVisual,\n trailingIcon: iconVisual,\n leadingIconButton: [\n iconVisual,\n 'relative size-12 p-0 border-0 bg-transparent cursor-pointer',\n 'group-data-[disabled]:pointer-events-none',\n ],\n trailingIconButton: [\n iconVisual,\n 'relative size-12 p-0 border-0 bg-transparent cursor-pointer',\n 'group-data-[disabled]:pointer-events-none',\n ],\n supporting: [\n 'flex justify-between gap-4 px-4 text-body-small text-on-surface-variant',\n 'group-data-[invalid]:text-error',\n ],\n supportingText: 'min-w-0',\n counter: 'shrink-0 tabular-nums',\n },\n variants: {\n variant: {\n filled: {\n field: [\n 'overflow-hidden rounded-t-extra-small bg-surface-container-highest',\n // M3 filled hover: state layer (on-surface × state-hover) + indicator color.\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 'group-data-[disabled]:before:opacity-0',\n // M3 filled resting active-indicator: 1dp on-surface-variant.\n 'border-b border-on-surface-variant hover:border-on-surface',\n // M3 filled focus-active-indicator-height is 3dp.\n 'group-data-[focused]:border-b-[3px] group-data-[focused]:border-primary group-data-[invalid]:border-error',\n ],\n input: 'pt-3',\n label: [\n 'group-data-[focused]:top-1.5 group-data-[focused]:translate-y-0 group-data-[focused]:text-body-small',\n 'group-data-[filled]:top-1.5 group-data-[filled]:translate-y-0 group-data-[filled]:text-body-small',\n ],\n },\n outlined: {\n field: [\n // Outlined hover = outline color only (no container state layer per M3).\n 'overflow-visible rounded-extra-small border border-outline hover:border-on-surface',\n // M3 outlined focus-outline-width is 3dp (matches Select's trigger);\n // padding drops 2px so content stays steady as the 1dp border grows.\n 'group-data-[focused]:border-[3px] group-data-[focused]:border-primary group-data-[focused]:px-[14px]',\n 'group-data-[invalid]:border-error',\n ],\n label: [\n 'group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:z-[1]',\n 'group-data-[focused]:text-body-small group-data-[focused]:bg-surface group-data-[focused]:px-1 group-data-[focused]:leading-none',\n 'group-data-[filled]:top-0 group-data-[filled]:-translate-y-1/2 group-data-[filled]:z-[1]',\n 'group-data-[filled]:text-body-small group-data-[filled]:bg-surface group-data-[filled]:px-1 group-data-[filled]:leading-none',\n ],\n },\n },\n },\n defaultVariants: {\n variant: 'filled',\n },\n});\n\nexport const TextField = createTextField(({ variant }) => {\n const c = textFieldTv({ variant });\n return {\n root: c.root(),\n field: c.field(),\n inputWrap: c.inputWrap(),\n input: c.input(),\n label: c.label(),\n leadingIcon: c.leadingIcon(),\n trailingIcon: c.trailingIcon(),\n leadingIconButton: c.leadingIconButton(),\n trailingIconButton: c.trailingIconButton(),\n supporting: c.supporting(),\n supportingText: c.supportingText(),\n counter: c.counter(),\n };\n});\n\nexport type { TextFieldIconAction, TextFieldProps, TextFieldVariant } from '@m3-baseui/core';\n"]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import * as _m3_baseui_core from '@m3-baseui/core';
|
|
2
|
+
export { TimePickerVariant, TimeValue } from '@m3-baseui/core';
|
|
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';
|
|
6
|
+
|
|
7
|
+
declare const timePickerTv: tailwind_variants.TVReturnType<{
|
|
8
|
+
[key: string]: {
|
|
9
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
10
|
+
header?: tailwind_merge.ClassNameValue;
|
|
11
|
+
display?: tailwind_merge.ClassNameValue;
|
|
12
|
+
dial?: tailwind_merge.ClassNameValue;
|
|
13
|
+
root?: tailwind_merge.ClassNameValue;
|
|
14
|
+
field?: tailwind_merge.ClassNameValue;
|
|
15
|
+
colon?: tailwind_merge.ClassNameValue;
|
|
16
|
+
periods?: tailwind_merge.ClassNameValue;
|
|
17
|
+
period?: tailwind_merge.ClassNameValue;
|
|
18
|
+
dialNumber?: tailwind_merge.ClassNameValue;
|
|
19
|
+
dialHand?: tailwind_merge.ClassNameValue;
|
|
20
|
+
dialCenter?: tailwind_merge.ClassNameValue;
|
|
21
|
+
inputs?: tailwind_merge.ClassNameValue;
|
|
22
|
+
inputBox?: tailwind_merge.ClassNameValue;
|
|
23
|
+
inputCaption?: tailwind_merge.ClassNameValue;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
} | {
|
|
27
|
+
[x: string]: {
|
|
28
|
+
[x: string]: tailwind_merge.ClassNameValue | {
|
|
29
|
+
header?: tailwind_merge.ClassNameValue;
|
|
30
|
+
display?: tailwind_merge.ClassNameValue;
|
|
31
|
+
dial?: tailwind_merge.ClassNameValue;
|
|
32
|
+
root?: tailwind_merge.ClassNameValue;
|
|
33
|
+
field?: tailwind_merge.ClassNameValue;
|
|
34
|
+
colon?: tailwind_merge.ClassNameValue;
|
|
35
|
+
periods?: tailwind_merge.ClassNameValue;
|
|
36
|
+
period?: tailwind_merge.ClassNameValue;
|
|
37
|
+
dialNumber?: tailwind_merge.ClassNameValue;
|
|
38
|
+
dialHand?: tailwind_merge.ClassNameValue;
|
|
39
|
+
dialCenter?: tailwind_merge.ClassNameValue;
|
|
40
|
+
inputs?: tailwind_merge.ClassNameValue;
|
|
41
|
+
inputBox?: tailwind_merge.ClassNameValue;
|
|
42
|
+
inputCaption?: tailwind_merge.ClassNameValue;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
} | {}, {
|
|
46
|
+
root: string[];
|
|
47
|
+
header: string[];
|
|
48
|
+
display: string[];
|
|
49
|
+
field: string[];
|
|
50
|
+
colon: string[];
|
|
51
|
+
periods: string[];
|
|
52
|
+
period: string[];
|
|
53
|
+
dial: string[];
|
|
54
|
+
dialNumber: string[];
|
|
55
|
+
dialHand: string[];
|
|
56
|
+
dialCenter: string[];
|
|
57
|
+
inputs: string[];
|
|
58
|
+
inputBox: string[];
|
|
59
|
+
inputCaption: string[];
|
|
60
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
61
|
+
[key: string]: {
|
|
62
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
63
|
+
header?: tailwind_merge.ClassNameValue;
|
|
64
|
+
display?: tailwind_merge.ClassNameValue;
|
|
65
|
+
dial?: tailwind_merge.ClassNameValue;
|
|
66
|
+
root?: tailwind_merge.ClassNameValue;
|
|
67
|
+
field?: tailwind_merge.ClassNameValue;
|
|
68
|
+
colon?: tailwind_merge.ClassNameValue;
|
|
69
|
+
periods?: tailwind_merge.ClassNameValue;
|
|
70
|
+
period?: tailwind_merge.ClassNameValue;
|
|
71
|
+
dialNumber?: tailwind_merge.ClassNameValue;
|
|
72
|
+
dialHand?: tailwind_merge.ClassNameValue;
|
|
73
|
+
dialCenter?: tailwind_merge.ClassNameValue;
|
|
74
|
+
inputs?: tailwind_merge.ClassNameValue;
|
|
75
|
+
inputBox?: tailwind_merge.ClassNameValue;
|
|
76
|
+
inputCaption?: tailwind_merge.ClassNameValue;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
} | {}>, {
|
|
80
|
+
[key: string]: {
|
|
81
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
82
|
+
header?: tailwind_merge.ClassNameValue;
|
|
83
|
+
display?: tailwind_merge.ClassNameValue;
|
|
84
|
+
dial?: tailwind_merge.ClassNameValue;
|
|
85
|
+
root?: tailwind_merge.ClassNameValue;
|
|
86
|
+
field?: tailwind_merge.ClassNameValue;
|
|
87
|
+
colon?: tailwind_merge.ClassNameValue;
|
|
88
|
+
periods?: tailwind_merge.ClassNameValue;
|
|
89
|
+
period?: tailwind_merge.ClassNameValue;
|
|
90
|
+
dialNumber?: tailwind_merge.ClassNameValue;
|
|
91
|
+
dialHand?: tailwind_merge.ClassNameValue;
|
|
92
|
+
dialCenter?: tailwind_merge.ClassNameValue;
|
|
93
|
+
inputs?: tailwind_merge.ClassNameValue;
|
|
94
|
+
inputBox?: tailwind_merge.ClassNameValue;
|
|
95
|
+
inputCaption?: tailwind_merge.ClassNameValue;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
} | {}, {
|
|
99
|
+
root: string[];
|
|
100
|
+
header: string[];
|
|
101
|
+
display: string[];
|
|
102
|
+
field: string[];
|
|
103
|
+
colon: string[];
|
|
104
|
+
periods: string[];
|
|
105
|
+
period: string[];
|
|
106
|
+
dial: string[];
|
|
107
|
+
dialNumber: string[];
|
|
108
|
+
dialHand: string[];
|
|
109
|
+
dialCenter: string[];
|
|
110
|
+
inputs: string[];
|
|
111
|
+
inputBox: string[];
|
|
112
|
+
inputCaption: string[];
|
|
113
|
+
}, tailwind_variants.TVReturnType<unknown, {
|
|
114
|
+
root: string[];
|
|
115
|
+
header: string[];
|
|
116
|
+
display: string[];
|
|
117
|
+
field: string[];
|
|
118
|
+
colon: string[];
|
|
119
|
+
periods: string[];
|
|
120
|
+
period: string[];
|
|
121
|
+
dial: string[];
|
|
122
|
+
dialNumber: string[];
|
|
123
|
+
dialHand: string[];
|
|
124
|
+
dialCenter: string[];
|
|
125
|
+
inputs: string[];
|
|
126
|
+
inputBox: string[];
|
|
127
|
+
inputCaption: string[];
|
|
128
|
+
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
129
|
+
[key: string]: {
|
|
130
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
131
|
+
header?: tailwind_merge.ClassNameValue;
|
|
132
|
+
display?: tailwind_merge.ClassNameValue;
|
|
133
|
+
dial?: tailwind_merge.ClassNameValue;
|
|
134
|
+
root?: tailwind_merge.ClassNameValue;
|
|
135
|
+
field?: tailwind_merge.ClassNameValue;
|
|
136
|
+
colon?: tailwind_merge.ClassNameValue;
|
|
137
|
+
periods?: tailwind_merge.ClassNameValue;
|
|
138
|
+
period?: tailwind_merge.ClassNameValue;
|
|
139
|
+
dialNumber?: tailwind_merge.ClassNameValue;
|
|
140
|
+
dialHand?: tailwind_merge.ClassNameValue;
|
|
141
|
+
dialCenter?: tailwind_merge.ClassNameValue;
|
|
142
|
+
inputs?: tailwind_merge.ClassNameValue;
|
|
143
|
+
inputBox?: tailwind_merge.ClassNameValue;
|
|
144
|
+
inputCaption?: tailwind_merge.ClassNameValue;
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
} | {}>, unknown, unknown, undefined>>;
|
|
148
|
+
declare const TimePicker: {
|
|
149
|
+
({ variant, format, value, defaultValue, onValueChange, className, }: _m3_baseui_core.TimePickerOwnProps): React.JSX.Element;
|
|
150
|
+
displayName: string;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export { TimePicker, timePickerTv };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createTimePicker } from '@m3-baseui/core';
|
|
3
3
|
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/time-picker.ts
|
|
5
|
+
// src/components/time-picker/time-picker.ts
|
|
6
6
|
var TYPESCALE = [
|
|
7
7
|
"display-large",
|
|
8
8
|
"display-medium",
|
|
@@ -31,33 +31,47 @@ var tv = (options, config) => tv$1(options, {
|
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
// src/time-picker.ts
|
|
34
|
+
// src/components/time-picker/time-picker.ts
|
|
35
|
+
var stateLayerBase = [
|
|
36
|
+
"overflow-hidden",
|
|
37
|
+
'before:content-[""] before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',
|
|
38
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
39
|
+
"focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
40
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
41
|
+
"focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
|
|
42
|
+
];
|
|
35
43
|
var timePickerTv = tv({
|
|
36
44
|
slots: {
|
|
37
|
-
root: ["inline-flex flex-col items-center
|
|
38
|
-
header: ["flex items-center gap-
|
|
45
|
+
root: ["inline-flex flex-col items-center p-2 text-on-surface"],
|
|
46
|
+
header: ["flex items-center gap-3 min-h-[98px]"],
|
|
47
|
+
display: ["inline-flex items-center"],
|
|
39
48
|
field: [
|
|
40
|
-
"
|
|
49
|
+
"relative",
|
|
50
|
+
...stateLayerBase,
|
|
51
|
+
"inline-grid place-items-center w-24 h-20 rounded-small box-border",
|
|
41
52
|
"bg-surface-container-highest text-on-surface text-display-large cursor-pointer outline-none",
|
|
42
53
|
"border border-transparent transition-colors duration-100",
|
|
43
54
|
"data-[selected]:bg-primary-container data-[selected]:text-on-primary-container"
|
|
44
55
|
],
|
|
45
|
-
colon: ["text-display-large text-on-surface px-1 leading-none"],
|
|
56
|
+
colon: ["text-display-large text-on-surface px-1 leading-none self-center"],
|
|
46
57
|
periods: [
|
|
47
|
-
"inline-flex flex-col rounded-small overflow-hidden border border-outline
|
|
48
|
-
"m-0 p-0 min-w-0"
|
|
58
|
+
"inline-flex flex-col shrink-0 rounded-small overflow-hidden border border-outline",
|
|
59
|
+
"h-[98px] w-[52px] m-0 p-0 min-w-0 box-border"
|
|
49
60
|
],
|
|
50
61
|
period: [
|
|
51
|
-
"
|
|
62
|
+
"relative",
|
|
63
|
+
...stateLayerBase,
|
|
64
|
+
"flex-1 inline-flex items-center justify-center min-h-12 h-12 w-full",
|
|
52
65
|
"border-0 bg-transparent",
|
|
53
66
|
"text-title-medium text-on-surface-variant cursor-pointer outline-none",
|
|
54
67
|
"data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
|
|
55
68
|
"[&+&]:border-t [&+&]:border-outline"
|
|
56
69
|
],
|
|
57
70
|
dial: [
|
|
58
|
-
"relative size-[256px]
|
|
71
|
+
"relative size-[256px] mt-[28px] p-0 min-w-0 border-0 rounded-full bg-surface-container-highest"
|
|
59
72
|
],
|
|
60
73
|
dialNumber: [
|
|
74
|
+
...stateLayerBase,
|
|
61
75
|
"absolute -translate-x-1/2 -translate-y-1/2 inline-grid place-items-center size-12 rounded-full",
|
|
62
76
|
"border-0 bg-transparent",
|
|
63
77
|
"text-body-large text-on-surface cursor-pointer outline-none select-none",
|
|
@@ -69,7 +83,7 @@ var timePickerTv = tv({
|
|
|
69
83
|
dialCenter: [
|
|
70
84
|
"absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary pointer-events-none"
|
|
71
85
|
],
|
|
72
|
-
inputs: ["flex items-start gap-
|
|
86
|
+
inputs: ["flex items-start gap-3"],
|
|
73
87
|
inputBox: [
|
|
74
88
|
"w-24 h-20 rounded-small box-border text-center",
|
|
75
89
|
"bg-surface-container-highest text-on-surface text-display-large outline-none",
|
|
@@ -83,6 +97,7 @@ var tp = timePickerTv();
|
|
|
83
97
|
var TimePicker = createTimePicker(() => ({
|
|
84
98
|
root: tp.root(),
|
|
85
99
|
header: tp.header(),
|
|
100
|
+
display: tp.display(),
|
|
86
101
|
field: tp.field(),
|
|
87
102
|
colon: tp.colon(),
|
|
88
103
|
periods: tp.periods(),
|
|
@@ -97,5 +112,5 @@ var TimePicker = createTimePicker(() => ({
|
|
|
97
112
|
}));
|
|
98
113
|
|
|
99
114
|
export { TimePicker, timePickerTv };
|
|
100
|
-
//# sourceMappingURL=
|
|
101
|
-
//# sourceMappingURL=
|
|
115
|
+
//# sourceMappingURL=index.js.map
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tv.ts","../../../src/components/time-picker/time-picker.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/BH,IAAM,cAAA,GAAiB;AAAA,EACrB,iBAAA;AAAA,EACA,yLAAA;AAAA,EACA,kDAAA;AAAA,EACA,0DAAA;AAAA,EACA,qDAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,eAAe,EAAA,CAAG;AAAA,EAC7B,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,CAAC,uDAAuD,CAAA;AAAA,IAC9D,MAAA,EAAQ,CAAC,sCAAsC,CAAA;AAAA,IAC/C,OAAA,EAAS,CAAC,0BAA0B,CAAA;AAAA,IACpC,KAAA,EAAO;AAAA,MACL,UAAA;AAAA,MACA,GAAG,cAAA;AAAA,MACH,mEAAA;AAAA,MACA,6FAAA;AAAA,MACA,0DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO,CAAC,kEAAkE,CAAA;AAAA,IAC1E,OAAA,EAAS;AAAA,MACP,mFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,UAAA;AAAA,MACA,GAAG,cAAA;AAAA,MACH,qEAAA;AAAA,MACA,yBAAA;AAAA,MACA,uEAAA;AAAA,MACA,oFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,IAAA,EAAM;AAAA,MACJ;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,cAAA;AAAA,MACH,gGAAA;AAAA,MACA,yBAAA;AAAA,MACA,yEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA,EAAU;AAAA,MACR;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV;AAAA,KACF;AAAA,IACA,MAAA,EAAQ,CAAC,wBAAwB,CAAA;AAAA,IACjC,QAAA,EAAU;AAAA,MACR,gDAAA;AAAA,MACA,8EAAA;AAAA,MACA,2DAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,YAAA,EAAc,CAAC,oDAAoD;AAAA;AAEvE,CAAC;AAED,IAAM,KAAK,YAAA,EAAa;AACjB,IAAM,UAAA,GAAa,iBAAiB,OAAO;AAAA,EAChD,IAAA,EAAM,GAAG,IAAA,EAAK;AAAA,EACd,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAClB,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,EACpB,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,EAChB,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,EAChB,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,EACpB,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAClB,IAAA,EAAM,GAAG,IAAA,EAAK;AAAA,EACd,UAAA,EAAY,GAAG,UAAA,EAAW;AAAA,EAC1B,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,EACtB,UAAA,EAAY,GAAG,UAAA,EAAW;AAAA,EAC1B,MAAA,EAAQ,GAAG,MAAA,EAAO;AAAA,EAClB,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,EACtB,YAAA,EAAc,GAAG,YAAA;AACnB,CAAA,CAAE","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 * time-picker.ts — Tailwind classes for the M3 Time picker (dial + input).\n *\n * Dimensions follow Material Android timepicker dimens (96×80 display, 52×98\n * period toggle, 48dp period targets, 12dp display↔toggle gap, 256dp dial,\n * 28dp dial top margin). State layers on interactive slots match other M3 controls.\n */\nimport { createTimePicker } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport type { TimePickerVariant, TimeValue } from '@m3-baseui/core';\n\nconst stateLayerBase = [\n 'overflow-hidden',\n 'before:content-[\"\"] before:absolute before:inset-0 before:rounded-[inherit] 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 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2',\n] as const;\n\nexport const timePickerTv = tv({\n slots: {\n root: ['inline-flex flex-col items-center p-2 text-on-surface'],\n header: ['flex items-center gap-3 min-h-[98px]'],\n display: ['inline-flex items-center'],\n field: [\n 'relative',\n ...stateLayerBase,\n 'inline-grid place-items-center w-24 h-20 rounded-small box-border',\n 'bg-surface-container-highest text-on-surface text-display-large cursor-pointer outline-none',\n 'border border-transparent transition-colors duration-100',\n 'data-[selected]:bg-primary-container data-[selected]:text-on-primary-container',\n ],\n colon: ['text-display-large text-on-surface px-1 leading-none self-center'],\n periods: [\n 'inline-flex flex-col shrink-0 rounded-small overflow-hidden border border-outline',\n 'h-[98px] w-[52px] m-0 p-0 min-w-0 box-border',\n ],\n period: [\n 'relative',\n ...stateLayerBase,\n 'flex-1 inline-flex items-center justify-center min-h-12 h-12 w-full',\n 'border-0 bg-transparent',\n 'text-title-medium text-on-surface-variant cursor-pointer outline-none',\n 'data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container',\n '[&+&]:border-t [&+&]:border-outline',\n ],\n dial: [\n 'relative size-[256px] mt-[28px] p-0 min-w-0 border-0 rounded-full bg-surface-container-highest',\n ],\n dialNumber: [\n ...stateLayerBase,\n 'absolute -translate-x-1/2 -translate-y-1/2 inline-grid place-items-center size-12 rounded-full',\n 'border-0 bg-transparent',\n 'text-body-large text-on-surface cursor-pointer outline-none select-none',\n 'data-[selected]:bg-primary data-[selected]:text-on-primary',\n ],\n dialHand: [\n 'absolute left-1/2 top-[12%] h-[38%] w-0.5 origin-bottom bg-primary -translate-x-1/2 pointer-events-none',\n ],\n dialCenter: [\n 'absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary pointer-events-none',\n ],\n inputs: ['flex items-start gap-3'],\n inputBox: [\n 'w-24 h-20 rounded-small box-border text-center',\n 'bg-surface-container-highest text-on-surface text-display-large outline-none',\n 'border border-outline focus:border-2 focus:border-primary',\n '[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n ],\n inputCaption: ['block mt-1 text-body-small text-on-surface-variant'],\n },\n});\n\nconst tp = timePickerTv();\nexport const TimePicker = createTimePicker(() => ({\n root: tp.root(),\n header: tp.header(),\n display: tp.display(),\n field: tp.field(),\n colon: tp.colon(),\n periods: tp.periods(),\n period: tp.period(),\n dial: tp.dial(),\n dialNumber: tp.dialNumber(),\n dialHand: tp.dialHand(),\n dialCenter: tp.dialCenter(),\n inputs: tp.inputs(),\n inputBox: tp.inputBox(),\n inputCaption: tp.inputCaption(),\n}));\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createToolbar } from '@m3-baseui/core';
|
|
3
3
|
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/toolbar.ts
|
|
5
|
+
// src/components/toolbar/toolbar.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/toolbar.ts
|
|
34
|
+
// src/components/toolbar/toolbar.ts
|
|
35
35
|
var toolbarTv = tv({
|
|
36
36
|
base: "inline-flex items-center justify-center gap-1 box-border rounded-full shadow-level3 [&_svg]:size-6",
|
|
37
37
|
variants: {
|
|
@@ -51,5 +51,5 @@ var Toolbar = createToolbar(
|
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
export { Toolbar, toolbarTv };
|
|
54
|
-
//# sourceMappingURL=
|
|
55
|
-
//# sourceMappingURL=
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tv.ts","../../../src/components/toolbar/toolbar.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;;;AC5BI,IAAM,YAAY,EAAA,CAAG;AAAA,EAC1B,IAAA,EAAM,oGAAA;AAAA,EACN,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,8CAAA;AAAA,MACV,OAAA,EACE;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,oBAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB,EAAE,OAAA,EAAS,UAAA,EAAY,aAAa,YAAA;AACvD,CAAC;AAEM,IAAM,OAAA,GAAU,aAAA;AAAA,EAAc,CAAC,EAAE,OAAA,EAAS,WAAA,OAC/C,SAAA,CAAU,EAAE,OAAA,EAAS,WAAA,EAAa;AACpC","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 * toolbar.ts — tailwind-variants for the M3 Expressive Toolbar.\n *\n * A floating, full-radius pill (elevation level3) that groups action icons.\n * `standard` rides on surface-container; `vibrant` on primary-container — and\n * forces its interactive children (icon buttons / links) to the matching\n * on-primary-container foreground, since `IconButton` otherwise paints its own\n * `on-surface-variant`. The descendant selector outranks the button's own color\n * class but not its higher-specificity `data-[disabled]` rule, so disabled\n * actions still dim. `vertical` swaps the main axis and the fixed dimension.\n * Same DOM + `data-*` as the VE build.\n */\nimport { createToolbar } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nexport const toolbarTv = tv({\n base: 'inline-flex items-center justify-center gap-1 box-border rounded-full shadow-level3 [&_svg]:size-6',\n variants: {\n variant: {\n standard: 'bg-surface-container text-on-surface-variant',\n vibrant:\n 'bg-primary-container text-on-primary-container [&_button]:text-on-primary-container [&_a]:text-on-primary-container',\n },\n orientation: {\n horizontal: 'flex-row h-16 px-2',\n vertical: 'flex-col w-16 py-2',\n },\n },\n defaultVariants: { variant: 'standard', orientation: 'horizontal' },\n});\n\nexport const Toolbar = createToolbar(({ variant, orientation }) =>\n toolbarTv({ variant, orientation }),\n);\nexport type { ToolbarProps, ToolbarVariant, ToolbarOrientation } from '@m3-baseui/core';\n"]}
|
|
@@ -1,20 +1,21 @@
|
|
|
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 tooltipTv: tailwind_variants.TVReturnType<{
|
|
7
8
|
[key: string]: {
|
|
8
|
-
[key: string]:
|
|
9
|
-
popup?:
|
|
10
|
-
arrow?:
|
|
9
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
10
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
11
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
11
12
|
};
|
|
12
13
|
};
|
|
13
14
|
} | {
|
|
14
15
|
[x: string]: {
|
|
15
|
-
[x: string]:
|
|
16
|
-
popup?:
|
|
17
|
-
arrow?:
|
|
16
|
+
[x: string]: tailwind_merge.ClassNameValue | {
|
|
17
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
18
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
18
19
|
};
|
|
19
20
|
};
|
|
20
21
|
} | {}, {
|
|
@@ -22,16 +23,16 @@ declare const tooltipTv: tailwind_variants.TVReturnType<{
|
|
|
22
23
|
arrow: string[];
|
|
23
24
|
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
24
25
|
[key: string]: {
|
|
25
|
-
[key: string]:
|
|
26
|
-
popup?:
|
|
27
|
-
arrow?:
|
|
26
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
27
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
28
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
28
29
|
};
|
|
29
30
|
};
|
|
30
31
|
} | {}>, {
|
|
31
32
|
[key: string]: {
|
|
32
|
-
[key: string]:
|
|
33
|
-
popup?:
|
|
34
|
-
arrow?:
|
|
33
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
34
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
35
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
35
36
|
};
|
|
36
37
|
};
|
|
37
38
|
} | {}, {
|
|
@@ -42,30 +43,30 @@ declare const tooltipTv: tailwind_variants.TVReturnType<{
|
|
|
42
43
|
arrow: string[];
|
|
43
44
|
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
44
45
|
[key: string]: {
|
|
45
|
-
[key: string]:
|
|
46
|
-
popup?:
|
|
47
|
-
arrow?:
|
|
46
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
47
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
48
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
48
49
|
};
|
|
49
50
|
};
|
|
50
51
|
} | {}>, unknown, unknown, undefined>>;
|
|
51
52
|
declare const richTooltipTv: tailwind_variants.TVReturnType<{
|
|
52
53
|
[key: string]: {
|
|
53
|
-
[key: string]:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
55
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
56
|
+
supportingText?: tailwind_merge.ClassNameValue;
|
|
57
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
58
|
+
subhead?: tailwind_merge.ClassNameValue;
|
|
59
|
+
actions?: tailwind_merge.ClassNameValue;
|
|
59
60
|
};
|
|
60
61
|
};
|
|
61
62
|
} | {
|
|
62
63
|
[x: string]: {
|
|
63
|
-
[x: string]:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
[x: string]: tailwind_merge.ClassNameValue | {
|
|
65
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
66
|
+
supportingText?: tailwind_merge.ClassNameValue;
|
|
67
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
68
|
+
subhead?: tailwind_merge.ClassNameValue;
|
|
69
|
+
actions?: tailwind_merge.ClassNameValue;
|
|
69
70
|
};
|
|
70
71
|
};
|
|
71
72
|
} | {}, {
|
|
@@ -76,22 +77,22 @@ declare const richTooltipTv: tailwind_variants.TVReturnType<{
|
|
|
76
77
|
actions: string[];
|
|
77
78
|
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
78
79
|
[key: string]: {
|
|
79
|
-
[key: string]:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
81
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
82
|
+
supportingText?: tailwind_merge.ClassNameValue;
|
|
83
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
84
|
+
subhead?: tailwind_merge.ClassNameValue;
|
|
85
|
+
actions?: tailwind_merge.ClassNameValue;
|
|
85
86
|
};
|
|
86
87
|
};
|
|
87
88
|
} | {}>, {
|
|
88
89
|
[key: string]: {
|
|
89
|
-
[key: string]:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
91
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
92
|
+
supportingText?: tailwind_merge.ClassNameValue;
|
|
93
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
94
|
+
subhead?: tailwind_merge.ClassNameValue;
|
|
95
|
+
actions?: tailwind_merge.ClassNameValue;
|
|
95
96
|
};
|
|
96
97
|
};
|
|
97
98
|
} | {}, {
|
|
@@ -108,12 +109,12 @@ declare const richTooltipTv: tailwind_variants.TVReturnType<{
|
|
|
108
109
|
actions: string[];
|
|
109
110
|
}, undefined, tailwind_variants_dist_config_js.TVConfig<unknown, {
|
|
110
111
|
[key: string]: {
|
|
111
|
-
[key: string]:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
[key: string]: tailwind_merge.ClassNameValue | {
|
|
113
|
+
popup?: tailwind_merge.ClassNameValue;
|
|
114
|
+
supportingText?: tailwind_merge.ClassNameValue;
|
|
115
|
+
arrow?: tailwind_merge.ClassNameValue;
|
|
116
|
+
subhead?: tailwind_merge.ClassNameValue;
|
|
117
|
+
actions?: tailwind_merge.ClassNameValue;
|
|
117
118
|
};
|
|
118
119
|
};
|
|
119
120
|
} | {}>, unknown, unknown, undefined>>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createTooltip, createRichTooltip } from '@m3-baseui/core';
|
|
3
3
|
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/tooltip.ts
|
|
5
|
+
// src/components/tooltip/tooltip.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/tooltip.ts
|
|
34
|
+
// src/components/tooltip/tooltip.ts
|
|
35
35
|
var transition = [
|
|
36
36
|
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
37
37
|
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
@@ -76,5 +76,5 @@ var RichTooltip = createRichTooltip({
|
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
export { RichTooltip, Tooltip, richTooltipTv, tooltipTv };
|
|
79
|
-
//# sourceMappingURL=
|
|
80
|
-
//# sourceMappingURL=
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/tv.ts","../../../src/components/tooltip/tooltip.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;;;AC3BH,IAAM,UAAA,GAAa;AAAA,EACjB,4FAAA;AAAA,EACA,gEAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,YAAY,EAAA,CAAG;AAAA,EAC1B,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,4DAAA;AAAA,MACA,yDAAA;AAAA,MACA,GAAG;AAAA,KACL;AAAA,IACA,KAAA,EAAO,CAAC,sBAAsB;AAAA;AAElC,CAAC;AAEM,IAAM,gBAAgB,EAAA,CAAG;AAAA,EAC9B,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,oDAAA;AAAA,MACA,4DAAA;AAAA,MACA,cAAA;AAAA,MACA,GAAG;AAAA,KACL;AAAA,IACA,KAAA,EAAO,CAAC,wBAAwB,CAAA;AAAA,IAChC,OAAA,EAAS,CAAC,sCAAsC,CAAA;AAAA,IAChD,cAAA,EAAgB,CAAC,8CAA8C,CAAA;AAAA;AAAA;AAAA;AAAA,IAI/D,OAAA,EAAS,CAAC,8CAA8C;AAAA;AAE5D,CAAC;AAED,IAAM,IAAI,SAAA,EAAU;AACb,IAAM,OAAA,GAAU,aAAA,CAAc,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,EAAG,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,EAAG;AAE3E,IAAM,IAAI,aAAA,EAAc;AACjB,IAAM,cAAc,iBAAA,CAAkB;AAAA,EAC3C,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,KAAA,EAAO,EAAE,KAAA,EAAM;AAAA,EACf,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,cAAA,EAAgB,EAAE,cAAA,EAAe;AAAA,EACjC,OAAA,EAAS,EAAE,OAAA;AACb,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 * tooltip.ts — Tailwind classes for the M3 Tooltip (plain + rich).\n *\n * Plain (`Tooltip`, Base UI Tooltip): inverse-surface background, body-small\n * text, extra-small corners, with a fade + small-move transition driven by Base\n * UI's data-[starting-style] / data-[ending-style] attributes.\n *\n * Rich (`RichTooltip`, Base UI Popover): surface-container surface (level2\n * elevation, 12dp corner, 320dp max) holding an optional title-small subhead,\n * body-medium supporting text, and a leading-aligned action row at the bottom\n * (M3 places rich-tooltip actions bottom-left). Built on Popover so its buttons\n * are reachable by keyboard and touch.\n */\nimport { createTooltip, createRichTooltip } from '@m3-baseui/core';\nimport { tv } from '../../tv';\n\nconst transition = [\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 data-[ending-style]:scale-95',\n];\n\nexport const tooltipTv = tv({\n slots: {\n popup: [\n 'bg-inverse-surface text-inverse-on-surface text-body-small',\n 'rounded-extra-small px-2 py-1 max-w-[224px] select-none',\n ...transition,\n ],\n arrow: ['text-inverse-surface'],\n },\n});\n\nexport const richTooltipTv = tv({\n slots: {\n popup: [\n 'bg-surface-container text-on-surface shadow-level2',\n 'rounded-medium px-4 py-3 max-w-[320px] flex flex-col gap-1',\n 'outline-none',\n ...transition,\n ],\n arrow: ['text-surface-container'],\n subhead: ['text-title-small text-on-surface m-0'],\n supportingText: ['text-body-medium text-on-surface-variant m-0'],\n // M3 places rich-tooltip actions at the bottom-left (leading), not trailing\n // like a dialog. -ml-2 pulls the text button so its label optically aligns\n // with the content's left edge.\n actions: ['flex flex-wrap items-center gap-2 mt-1 -ml-2'],\n },\n});\n\nconst t = tooltipTv();\nexport const Tooltip = createTooltip({ popup: t.popup(), arrow: t.arrow() });\n\nconst r = richTooltipTv();\nexport const RichTooltip = createRichTooltip({\n popup: r.popup(),\n arrow: r.arrow(),\n subhead: r.subhead(),\n supportingText: r.supportingText(),\n actions: r.actions(),\n});\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createTopAppBar } from '@m3-baseui/core';
|
|
3
3
|
import { tv as tv$1 } from 'tailwind-variants';
|
|
4
4
|
|
|
5
|
-
// src/top-app-bar.ts
|
|
5
|
+
// src/components/top-app-bar/top-app-bar.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/top-app-bar.ts
|
|
34
|
+
// src/components/top-app-bar/top-app-bar.ts
|
|
35
35
|
var topAppBarTv = tv({
|
|
36
36
|
slots: {
|
|
37
37
|
root: "flex flex-col w-full box-border h-16 bg-surface text-on-surface",
|
|
@@ -64,5 +64,5 @@ var TopAppBar = createTopAppBar((args) => {
|
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
export { TopAppBar, topAppBarTv };
|
|
67
|
-
//# sourceMappingURL=
|
|
68
|
-
//# sourceMappingURL=
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
68
|
+
//# sourceMappingURL=index.js.map
|