@m3-baseui/react-tailwind 1.4.0 → 2.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.js → components/carousel/index.js} +4 -4
- 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 +253 -0
- package/dist/components/select/index.js +271 -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 +376 -119
- 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/{carousel.d.ts → components/carousel/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
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createButton, createIconButton, createSwitch, createCheckbox, createRad
|
|
|
3
3
|
export { ITEM_LEADING_VARIANTS, LIST_LEADING_VARIANTS, Ripple, ThemeProvider, applyScheme, generateScheme, schemeToCssText, useSnackbar, useTheme } from '@m3-baseui/core';
|
|
4
4
|
import { tv } from 'tailwind-variants';
|
|
5
5
|
|
|
6
|
-
// src/button.ts
|
|
6
|
+
// src/components/button/button.ts
|
|
7
7
|
var button = tv({
|
|
8
8
|
base: [
|
|
9
9
|
"relative inline-flex items-center justify-center gap-2",
|
|
@@ -465,7 +465,7 @@ var tv7 = (options, config) => tv(options, {
|
|
|
465
465
|
}
|
|
466
466
|
});
|
|
467
467
|
|
|
468
|
-
// src/tooltip.ts
|
|
468
|
+
// src/components/tooltip/tooltip.ts
|
|
469
469
|
var transition = [
|
|
470
470
|
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
471
471
|
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
@@ -573,16 +573,102 @@ var Dialog = createDialog({
|
|
|
573
573
|
actions: d.actions(),
|
|
574
574
|
close: d.close()
|
|
575
575
|
});
|
|
576
|
+
|
|
577
|
+
// src/components/menu/menu-selectable-item.ts
|
|
578
|
+
var menuSelectableItemStateLayer = [
|
|
579
|
+
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
580
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
581
|
+
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
582
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]"
|
|
583
|
+
];
|
|
584
|
+
var menuSelectableItemSelectedFill = [
|
|
585
|
+
"data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
|
|
586
|
+
"data-[checked]:bg-secondary-container data-[checked]:text-on-secondary-container"
|
|
587
|
+
];
|
|
588
|
+
var menuSelectableItemPositionShape = [
|
|
589
|
+
"data-[selected]:data-[position=only]:rounded-extra-small",
|
|
590
|
+
"data-[selected]:data-[position=first]:rounded-t-extra-small",
|
|
591
|
+
"data-[selected]:data-[position=middle]:rounded-none",
|
|
592
|
+
"data-[selected]:data-[position=last]:rounded-b-extra-small",
|
|
593
|
+
"data-[checked]:data-[position=only]:rounded-extra-small",
|
|
594
|
+
"data-[checked]:data-[position=first]:rounded-t-extra-small",
|
|
595
|
+
"data-[checked]:data-[position=middle]:rounded-none",
|
|
596
|
+
"data-[checked]:data-[position=last]:rounded-b-extra-small"
|
|
597
|
+
];
|
|
598
|
+
var menuSelectableItemPositionShapeFallback = [
|
|
599
|
+
"data-[selected]:not([data-position]):rounded-extra-small",
|
|
600
|
+
"data-[checked]:not([data-position]):rounded-extra-small"
|
|
601
|
+
];
|
|
602
|
+
var menuSelectableItemDisabled = [
|
|
603
|
+
"data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none",
|
|
604
|
+
"data-[disabled]:data-[selected]:bg-transparent data-[disabled]:data-[selected]:text-on-surface/[0.38]",
|
|
605
|
+
"data-[disabled]:data-[checked]:bg-transparent data-[disabled]:data-[checked]:text-on-surface/[0.38]"
|
|
606
|
+
];
|
|
607
|
+
var menuSelectableItemBase = [
|
|
608
|
+
"group relative cursor-pointer select-none outline-none text-label-large text-on-surface",
|
|
609
|
+
"h-12 px-3 overflow-hidden",
|
|
610
|
+
...menuSelectableItemStateLayer,
|
|
611
|
+
...menuSelectableItemSelectedFill,
|
|
612
|
+
...menuSelectableItemPositionShape,
|
|
613
|
+
...menuSelectableItemPositionShapeFallback,
|
|
614
|
+
...menuSelectableItemDisabled
|
|
615
|
+
];
|
|
616
|
+
var menuSelectableItemTv = tv7({
|
|
617
|
+
slots: {
|
|
618
|
+
/** Select row: check + label + optional trailing meta. */
|
|
619
|
+
selectItem: ["grid grid-cols-[24px_1fr_auto] items-center gap-3", ...menuSelectableItemBase],
|
|
620
|
+
/** Menu checkbox / radio row: check + label. */
|
|
621
|
+
menuSelectableItem: ["grid grid-cols-[24px_1fr] items-center gap-3", ...menuSelectableItemBase],
|
|
622
|
+
itemIndicator: [
|
|
623
|
+
"inline-flex items-center justify-center text-on-surface",
|
|
624
|
+
"invisible group-data-[selected]:visible group-data-[checked]:visible",
|
|
625
|
+
"group-data-[selected]:text-on-secondary-container group-data-[checked]:text-on-secondary-container",
|
|
626
|
+
"group-data-[disabled]:text-on-surface/[0.38]"
|
|
627
|
+
]
|
|
628
|
+
}
|
|
629
|
+
});
|
|
630
|
+
var menuSelectableItem = menuSelectableItemTv();
|
|
631
|
+
|
|
632
|
+
// src/components/menu/menu-surface.ts
|
|
633
|
+
var menuSurfaceBase = [
|
|
634
|
+
"py-2",
|
|
635
|
+
"bg-surface-container text-on-surface rounded-extra-small shadow-level2",
|
|
636
|
+
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
637
|
+
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
638
|
+
"data-[ending-style]:opacity-0",
|
|
639
|
+
"focus:outline-none"
|
|
640
|
+
];
|
|
641
|
+
var menuSurfaceTv = tv7({
|
|
642
|
+
slots: {
|
|
643
|
+
popup: ["max-w-[280px]", ...menuSurfaceBase],
|
|
644
|
+
groupLabel: "px-3 py-2 text-label-small text-on-surface-variant"
|
|
645
|
+
},
|
|
646
|
+
variants: {
|
|
647
|
+
width: {
|
|
648
|
+
/** Standalone Menu: 112–280dp. */
|
|
649
|
+
standard: { popup: "min-w-[112px]" },
|
|
650
|
+
/** Exposed Dropdown / Select: at least anchor width, capped at 280dp. */
|
|
651
|
+
anchor: { popup: "min-w-[max(112px,var(--anchor-width))]" }
|
|
652
|
+
},
|
|
653
|
+
scroll: {
|
|
654
|
+
none: {},
|
|
655
|
+
/** Select popup: clamp height and scroll the list. */
|
|
656
|
+
auto: { popup: "max-h-[var(--available-height)] overflow-auto" }
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
defaultVariants: {
|
|
660
|
+
width: "standard",
|
|
661
|
+
scroll: "none"
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
menuSurfaceTv();
|
|
665
|
+
|
|
666
|
+
// src/components/menu/menu.ts
|
|
667
|
+
var surface = menuSurfaceTv({ width: "standard", scroll: "none" });
|
|
668
|
+
var selectable = menuSelectableItem;
|
|
576
669
|
var menuTv = tv7({
|
|
577
670
|
slots: {
|
|
578
|
-
popup:
|
|
579
|
-
"min-w-[112px] max-w-[280px] py-2",
|
|
580
|
-
"bg-surface-container text-on-surface rounded-extra-small shadow-level2",
|
|
581
|
-
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
582
|
-
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
583
|
-
"data-[ending-style]:opacity-0",
|
|
584
|
-
"focus:outline-none"
|
|
585
|
-
],
|
|
671
|
+
popup: surface.popup(),
|
|
586
672
|
item: [
|
|
587
673
|
"relative flex items-center gap-3 h-12 px-3 overflow-hidden cursor-pointer select-none outline-none",
|
|
588
674
|
"text-label-large text-on-surface",
|
|
@@ -599,7 +685,7 @@ var menuTv = tv7({
|
|
|
599
685
|
"[&_[data-slot=menu-trailing]]:ml-auto [&_[data-slot=menu-trailing]]:pl-4 [&_[data-slot=menu-trailing]]:text-label-large [&_[data-slot=menu-trailing]]:text-on-surface-variant"
|
|
600
686
|
],
|
|
601
687
|
separator: ["my-2 h-px border-0 bg-outline-variant"],
|
|
602
|
-
groupLabel:
|
|
688
|
+
groupLabel: surface.groupLabel(),
|
|
603
689
|
// Submenu trigger: item look + trailing chevron, highlighted while open.
|
|
604
690
|
submenuTrigger: [
|
|
605
691
|
"relative flex items-center justify-between gap-3 h-12 px-3 overflow-hidden cursor-pointer select-none outline-none",
|
|
@@ -614,28 +700,9 @@ var menuTv = tv7({
|
|
|
614
700
|
"data-[disabled]:[&_[data-slot=menu-leading]]:text-on-surface/[0.38]",
|
|
615
701
|
"[&_[data-slot=menu-leading]]:inline-flex [&_[data-slot=menu-leading]]:text-on-surface-variant [&_[data-slot=menu-leading]>svg]:size-6"
|
|
616
702
|
],
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
"cursor-pointer select-none outline-none text-label-large text-on-surface",
|
|
621
|
-
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
622
|
-
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
623
|
-
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
624
|
-
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
625
|
-
// M3 disabled (per-token): label on-surface/0.38, no state layer.
|
|
626
|
-
"data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none"
|
|
627
|
-
],
|
|
628
|
-
radioItem: [
|
|
629
|
-
"group relative grid grid-cols-[24px_1fr] items-center gap-3 h-12 px-3 overflow-hidden",
|
|
630
|
-
"cursor-pointer select-none outline-none text-label-large text-on-surface",
|
|
631
|
-
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
632
|
-
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
633
|
-
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
634
|
-
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
635
|
-
// M3 disabled (per-token): label on-surface/0.38, no state layer.
|
|
636
|
-
"data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none"
|
|
637
|
-
],
|
|
638
|
-
itemIndicator: "inline-flex items-center justify-center text-on-surface invisible group-data-[checked]:visible group-data-[disabled]:text-on-surface/[0.38]"
|
|
703
|
+
checkboxItem: selectable.menuSelectableItem(),
|
|
704
|
+
radioItem: selectable.menuSelectableItem(),
|
|
705
|
+
itemIndicator: selectable.itemIndicator()
|
|
639
706
|
}
|
|
640
707
|
});
|
|
641
708
|
var m = menuTv();
|
|
@@ -754,6 +821,8 @@ var Slider = createSlider({
|
|
|
754
821
|
tick: s2.tick(),
|
|
755
822
|
valueLabel: s2.valueLabel()
|
|
756
823
|
});
|
|
824
|
+
var surface2 = menuSurfaceTv({ width: "anchor", scroll: "auto" });
|
|
825
|
+
var selectable2 = menuSelectableItem;
|
|
757
826
|
var selectTv = tv7({
|
|
758
827
|
slots: {
|
|
759
828
|
trigger: [
|
|
@@ -768,30 +837,16 @@ var selectTv = tv7({
|
|
|
768
837
|
],
|
|
769
838
|
value: "flex-1 truncate",
|
|
770
839
|
icon: "flex text-on-surface-variant transition-transform duration-150 group-data-[popup-open]:rotate-180 group-data-[disabled]:text-on-surface/[0.38]",
|
|
771
|
-
popup:
|
|
772
|
-
"min-w-[var(--anchor-width)] max-h-[var(--available-height)] py-2 overflow-auto",
|
|
773
|
-
"bg-surface-container text-on-surface rounded-extra-small shadow-level2",
|
|
774
|
-
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
775
|
-
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
776
|
-
"data-[ending-style]:opacity-0",
|
|
777
|
-
"focus:outline-none"
|
|
778
|
-
],
|
|
840
|
+
popup: surface2.popup(),
|
|
779
841
|
item: [
|
|
780
|
-
|
|
781
|
-
"cursor-pointer select-none outline-none text-body-large text-on-surface",
|
|
782
|
-
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
783
|
-
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
784
|
-
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
785
|
-
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
786
|
-
// M3 disabled (per-token, not a blanket fade): label + trailing supporting
|
|
787
|
-
// text on-surface/0.38, no state layer.
|
|
788
|
-
"data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none",
|
|
789
|
-
"data-[disabled]:[&_[data-slot=select-trailing]]:text-on-surface/[0.38]",
|
|
842
|
+
selectable2.selectItem(),
|
|
790
843
|
// M3 trailing supporting text (e.g. meta) sits in the last column.
|
|
791
|
-
"[&_[data-slot=select-trailing]]:pl-4 [&_[data-slot=select-trailing]]:text-label-large [&_[data-slot=select-trailing]]:text-on-surface-variant"
|
|
844
|
+
"[&_[data-slot=select-trailing]]:pl-4 [&_[data-slot=select-trailing]]:text-label-large [&_[data-slot=select-trailing]]:text-on-surface-variant",
|
|
845
|
+
"data-[selected]:[&_[data-slot=select-trailing]]:text-on-secondary-container",
|
|
846
|
+
"data-[disabled]:[&_[data-slot=select-trailing]]:text-on-surface/[0.38]"
|
|
792
847
|
],
|
|
793
|
-
itemIndicator:
|
|
794
|
-
groupLabel:
|
|
848
|
+
itemIndicator: selectable2.itemIndicator(),
|
|
849
|
+
groupLabel: surface2.groupLabel(),
|
|
795
850
|
// Sticky scroll affordances at the popup edges; surface-tinted with a chevron.
|
|
796
851
|
scrollUpArrow: [
|
|
797
852
|
"sticky top-0 z-[1] flex items-center justify-center h-6 cursor-default",
|
|
@@ -803,27 +858,123 @@ var selectTv = tv7({
|
|
|
803
858
|
]
|
|
804
859
|
}
|
|
805
860
|
});
|
|
806
|
-
var
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
861
|
+
var selectFieldTv = tv7({
|
|
862
|
+
slots: {
|
|
863
|
+
// The `group` hook lives here (not in engine-neutral core): supporting text
|
|
864
|
+
// keys its error color off Field.Root's `group-data-[invalid]`.
|
|
865
|
+
root: "group flex flex-col gap-1 min-w-[210px]",
|
|
866
|
+
field: [
|
|
867
|
+
"group/field relative flex items-stretch gap-3 h-14 px-4 box-border w-full",
|
|
868
|
+
"text-on-surface text-body-large cursor-pointer text-left outline-none",
|
|
869
|
+
"transition-[border-color,padding] duration-150 ease-standard",
|
|
870
|
+
"data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none"
|
|
871
|
+
],
|
|
872
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
873
|
+
value: "flex-1 truncate text-body-large text-on-surface",
|
|
874
|
+
label: [
|
|
875
|
+
"absolute left-0 pointer-events-none origin-left",
|
|
876
|
+
"top-1/2 -translate-y-1/2 text-body-large text-on-surface-variant",
|
|
877
|
+
"transition-all duration-150 ease-standard",
|
|
878
|
+
"group-data-[focused]/field:text-primary group-data-[invalid]/field:text-error"
|
|
879
|
+
],
|
|
880
|
+
icon: [
|
|
881
|
+
// Disabled dimming comes from the field's own opacity (0.38); no per-icon
|
|
882
|
+
// color override here, else it would compound to ~0.14.
|
|
883
|
+
"flex items-center text-on-surface-variant transition-transform duration-150 [&>svg]:size-6",
|
|
884
|
+
"group-data-[popup-open]/field:rotate-180"
|
|
885
|
+
],
|
|
886
|
+
leadingIcon: "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6",
|
|
887
|
+
supporting: [
|
|
888
|
+
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
889
|
+
"group-data-[invalid]:text-error"
|
|
890
|
+
],
|
|
891
|
+
supportingText: "min-w-0"
|
|
892
|
+
},
|
|
893
|
+
variants: {
|
|
894
|
+
variant: {
|
|
895
|
+
filled: {
|
|
896
|
+
field: [
|
|
897
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
898
|
+
// M3 filled hover: state layer (on-surface × state-hover).
|
|
899
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
900
|
+
"before:transition-opacity before:duration-100",
|
|
901
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
902
|
+
"data-[disabled]:before:opacity-0",
|
|
903
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
904
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
905
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
906
|
+
"data-[focused]:border-b-[3px] data-[focused]:border-primary",
|
|
907
|
+
"data-[popup-open]:border-b-[3px] data-[popup-open]:border-primary",
|
|
908
|
+
"data-[invalid]:border-error"
|
|
909
|
+
],
|
|
910
|
+
value: "pt-3",
|
|
911
|
+
label: [
|
|
912
|
+
"group-data-[focused]/field:top-1.5 group-data-[focused]/field:translate-y-0 group-data-[focused]/field:text-body-small",
|
|
913
|
+
"group-data-[filled]/field:top-1.5 group-data-[filled]/field:translate-y-0 group-data-[filled]/field:text-body-small",
|
|
914
|
+
"group-data-[popup-open]/field:top-1.5 group-data-[popup-open]/field:translate-y-0 group-data-[popup-open]/field:text-body-small",
|
|
915
|
+
"group-data-[has-placeholder]/field:top-1.5 group-data-[has-placeholder]/field:translate-y-0 group-data-[has-placeholder]/field:text-body-small"
|
|
916
|
+
]
|
|
917
|
+
},
|
|
918
|
+
outlined: {
|
|
919
|
+
field: [
|
|
920
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
921
|
+
// M3 outlined focus-outline-width is 3dp; padding drops 2px so content
|
|
922
|
+
// stays steady as the 1dp border grows (matches the TextField anchor).
|
|
923
|
+
"data-[focused]:border-[3px] data-[focused]:border-primary data-[focused]:px-[14px]",
|
|
924
|
+
"data-[popup-open]:border-[3px] data-[popup-open]:border-primary data-[popup-open]:px-[14px]",
|
|
925
|
+
"data-[invalid]:border-error"
|
|
926
|
+
],
|
|
927
|
+
label: [
|
|
928
|
+
"group-data-[focused]/field:top-0 group-data-[focused]/field:-translate-y-1/2 group-data-[focused]/field:z-[1] group-data-[focused]/field:text-body-small group-data-[focused]/field:bg-surface group-data-[focused]/field:px-1 group-data-[focused]/field:leading-none",
|
|
929
|
+
"group-data-[filled]/field:top-0 group-data-[filled]/field:-translate-y-1/2 group-data-[filled]/field:z-[1] group-data-[filled]/field:text-body-small group-data-[filled]/field:bg-surface group-data-[filled]/field:px-1 group-data-[filled]/field:leading-none",
|
|
930
|
+
"group-data-[popup-open]/field:top-0 group-data-[popup-open]/field:-translate-y-1/2 group-data-[popup-open]/field:z-[1] group-data-[popup-open]/field:text-body-small group-data-[popup-open]/field:bg-surface group-data-[popup-open]/field:px-1 group-data-[popup-open]/field:leading-none",
|
|
931
|
+
"group-data-[has-placeholder]/field:top-0 group-data-[has-placeholder]/field:-translate-y-1/2 group-data-[has-placeholder]/field:z-[1] group-data-[has-placeholder]/field:text-body-small group-data-[has-placeholder]/field:bg-surface group-data-[has-placeholder]/field:px-1 group-data-[has-placeholder]/field:leading-none"
|
|
932
|
+
]
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
defaultVariants: {
|
|
937
|
+
variant: "outlined"
|
|
938
|
+
}
|
|
817
939
|
});
|
|
940
|
+
var s3 = selectTv();
|
|
941
|
+
var Select = createSelect(
|
|
942
|
+
{
|
|
943
|
+
trigger: s3.trigger(),
|
|
944
|
+
value: s3.value(),
|
|
945
|
+
icon: s3.icon(),
|
|
946
|
+
popup: s3.popup(),
|
|
947
|
+
item: s3.item(),
|
|
948
|
+
itemIndicator: s3.itemIndicator(),
|
|
949
|
+
groupLabel: s3.groupLabel(),
|
|
950
|
+
scrollUpArrow: s3.scrollUpArrow(),
|
|
951
|
+
scrollDownArrow: s3.scrollDownArrow()
|
|
952
|
+
},
|
|
953
|
+
({ variant }) => {
|
|
954
|
+
const f = selectFieldTv({ variant });
|
|
955
|
+
return {
|
|
956
|
+
root: f.root(),
|
|
957
|
+
field: f.field(),
|
|
958
|
+
inputWrap: f.inputWrap(),
|
|
959
|
+
value: f.value(),
|
|
960
|
+
label: f.label(),
|
|
961
|
+
icon: f.icon(),
|
|
962
|
+
leadingIcon: f.leadingIcon(),
|
|
963
|
+
supporting: f.supporting(),
|
|
964
|
+
supportingText: f.supportingText()
|
|
965
|
+
};
|
|
966
|
+
}
|
|
967
|
+
);
|
|
968
|
+
var iconVisual = "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6";
|
|
818
969
|
var textFieldTv = tv({
|
|
819
970
|
slots: {
|
|
820
971
|
root: "flex flex-col gap-1 min-w-[210px]",
|
|
821
972
|
field: [
|
|
822
|
-
"relative flex items-stretch gap-3 h-14 px-4 box-border",
|
|
973
|
+
"relative flex items-stretch gap-3 h-14 px-4 box-border text-on-surface",
|
|
823
974
|
"transition-[border-color,padding] duration-150 ease-standard",
|
|
824
975
|
"group-data-[disabled]:opacity-[0.38] group-data-[disabled]:pointer-events-none"
|
|
825
976
|
],
|
|
826
|
-
inputWrap: "relative flex-1 flex items-center min-w-0",
|
|
977
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
827
978
|
input: [
|
|
828
979
|
"peer w-full bg-transparent outline-none border-0 p-0 text-body-large text-on-surface",
|
|
829
980
|
"placeholder:text-on-surface-variant"
|
|
@@ -834,8 +985,18 @@ var textFieldTv = tv({
|
|
|
834
985
|
"transition-all duration-150 ease-standard",
|
|
835
986
|
"group-data-[focused]:text-primary group-data-[invalid]:text-error"
|
|
836
987
|
],
|
|
837
|
-
leadingIcon:
|
|
838
|
-
trailingIcon:
|
|
988
|
+
leadingIcon: iconVisual,
|
|
989
|
+
trailingIcon: iconVisual,
|
|
990
|
+
leadingIconButton: [
|
|
991
|
+
iconVisual,
|
|
992
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
993
|
+
"group-data-[disabled]:pointer-events-none"
|
|
994
|
+
],
|
|
995
|
+
trailingIconButton: [
|
|
996
|
+
iconVisual,
|
|
997
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
998
|
+
"group-data-[disabled]:pointer-events-none"
|
|
999
|
+
],
|
|
839
1000
|
supporting: [
|
|
840
1001
|
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
841
1002
|
"group-data-[invalid]:text-error"
|
|
@@ -847,9 +1008,15 @@ var textFieldTv = tv({
|
|
|
847
1008
|
variant: {
|
|
848
1009
|
filled: {
|
|
849
1010
|
field: [
|
|
850
|
-
"rounded-t-extra-small bg-surface-container-highest",
|
|
851
|
-
|
|
852
|
-
|
|
1011
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
1012
|
+
// M3 filled hover: state layer (on-surface × state-hover) + indicator color.
|
|
1013
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
1014
|
+
"before:transition-opacity before:duration-100",
|
|
1015
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
1016
|
+
"group-data-[disabled]:before:opacity-0",
|
|
1017
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
1018
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
1019
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
853
1020
|
"group-data-[focused]:border-b-[3px] group-data-[focused]:border-primary group-data-[invalid]:border-error"
|
|
854
1021
|
],
|
|
855
1022
|
input: "pt-3",
|
|
@@ -860,15 +1027,18 @@ var textFieldTv = tv({
|
|
|
860
1027
|
},
|
|
861
1028
|
outlined: {
|
|
862
1029
|
field: [
|
|
863
|
-
|
|
1030
|
+
// Outlined hover = outline color only (no container state layer per M3).
|
|
1031
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
864
1032
|
// M3 outlined focus-outline-width is 3dp (matches Select's trigger);
|
|
865
1033
|
// padding drops 2px so content stays steady as the 1dp border grows.
|
|
866
1034
|
"group-data-[focused]:border-[3px] group-data-[focused]:border-primary group-data-[focused]:px-[14px]",
|
|
867
1035
|
"group-data-[invalid]:border-error"
|
|
868
1036
|
],
|
|
869
1037
|
label: [
|
|
870
|
-
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:
|
|
871
|
-
"group-data-[
|
|
1038
|
+
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:z-[1]",
|
|
1039
|
+
"group-data-[focused]:text-body-small group-data-[focused]:bg-surface group-data-[focused]:px-1 group-data-[focused]:leading-none",
|
|
1040
|
+
"group-data-[filled]:top-0 group-data-[filled]:-translate-y-1/2 group-data-[filled]:z-[1]",
|
|
1041
|
+
"group-data-[filled]:text-body-small group-data-[filled]:bg-surface group-data-[filled]:px-1 group-data-[filled]:leading-none"
|
|
872
1042
|
]
|
|
873
1043
|
}
|
|
874
1044
|
}
|
|
@@ -887,6 +1057,8 @@ var TextField = createTextField(({ variant }) => {
|
|
|
887
1057
|
label: c3.label(),
|
|
888
1058
|
leadingIcon: c3.leadingIcon(),
|
|
889
1059
|
trailingIcon: c3.trailingIcon(),
|
|
1060
|
+
leadingIconButton: c3.leadingIconButton(),
|
|
1061
|
+
trailingIconButton: c3.trailingIconButton(),
|
|
890
1062
|
supporting: c3.supporting(),
|
|
891
1063
|
supportingText: c3.supportingText(),
|
|
892
1064
|
counter: c3.counter()
|
|
@@ -966,36 +1138,68 @@ var fabTv = tv({
|
|
|
966
1138
|
"data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
|
|
967
1139
|
],
|
|
968
1140
|
variants: {
|
|
969
|
-
size
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
extended: "h-14 min-w-20 px-4 gap-3 rounded-large text-label-large [&_svg]:size-6"
|
|
974
|
-
},
|
|
1141
|
+
// Geometry is set by compoundVariants (size × variant); these keys exist so
|
|
1142
|
+
// the resolver can accept them.
|
|
1143
|
+
size: { small: "", medium: "", large: "" },
|
|
1144
|
+
variant: { standard: "", extended: "" },
|
|
975
1145
|
color: {
|
|
976
|
-
surface: "bg-surface-container-high text-primary",
|
|
977
1146
|
primary: "bg-primary-container text-on-primary-container",
|
|
978
1147
|
secondary: "bg-secondary-container text-on-secondary-container",
|
|
979
1148
|
tertiary: "bg-tertiary-container text-on-tertiary-container"
|
|
980
1149
|
}
|
|
981
1150
|
},
|
|
1151
|
+
compoundVariants: [
|
|
1152
|
+
// ---- Standard (icon-only square): container / corner / icon ----
|
|
1153
|
+
{ size: "small", variant: "standard", class: "size-14 rounded-large [&_svg]:size-6" },
|
|
1154
|
+
// 56 / 16 / 24
|
|
1155
|
+
{
|
|
1156
|
+
size: "medium",
|
|
1157
|
+
variant: "standard",
|
|
1158
|
+
class: "size-20 rounded-large-increased [&_svg]:size-7"
|
|
1159
|
+
// 80 / 20 / 28
|
|
1160
|
+
},
|
|
1161
|
+
{ size: "large", variant: "standard", class: "size-24 rounded-extra-large [&_svg]:size-8" },
|
|
1162
|
+
// 96 / 28 / 32
|
|
1163
|
+
// ---- Extended (icon + label pill): height / corner / icon / padding / gap / label ----
|
|
1164
|
+
// `min-w-*` keeps the pill affordance for short / text-only labels (wider
|
|
1165
|
+
// than tall), matching the pre-Expressive extended FAB which guarded this.
|
|
1166
|
+
{
|
|
1167
|
+
size: "small",
|
|
1168
|
+
variant: "extended",
|
|
1169
|
+
class: "h-14 min-w-20 px-4 gap-2 rounded-large text-title-medium [&_svg]:size-6"
|
|
1170
|
+
// 56 / 16 / 24 / 16 / 8
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
size: "medium",
|
|
1174
|
+
variant: "extended",
|
|
1175
|
+
class: "h-20 min-w-28 px-[26px] gap-4 rounded-large-increased text-title-large [&_svg]:size-7"
|
|
1176
|
+
// 80 / 20 / 28 / 26 / 16
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
size: "large",
|
|
1180
|
+
variant: "extended",
|
|
1181
|
+
class: "h-24 min-w-32 px-7 gap-5 rounded-extra-large text-headline-small [&_svg]:size-8"
|
|
1182
|
+
// 96 / 28 / 32 / 28 / 20
|
|
1183
|
+
}
|
|
1184
|
+
],
|
|
982
1185
|
defaultVariants: {
|
|
983
|
-
size: "
|
|
984
|
-
|
|
1186
|
+
size: "small",
|
|
1187
|
+
variant: "standard",
|
|
1188
|
+
color: "primary"
|
|
985
1189
|
}
|
|
986
1190
|
});
|
|
987
|
-
var Fab = createFab(({ size, color }) => fabTv({ size, color }));
|
|
1191
|
+
var Fab = createFab(({ size, color, variant }) => fabTv({ size, color, variant }));
|
|
988
1192
|
var fabMenuTv = tv7({
|
|
989
1193
|
slots: {
|
|
990
1194
|
popup: [
|
|
991
|
-
"flex flex-col items-end gap-
|
|
1195
|
+
"flex flex-col items-end gap-1 bg-transparent outline-none",
|
|
992
1196
|
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
993
1197
|
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
994
1198
|
"data-[ending-style]:opacity-0"
|
|
995
1199
|
],
|
|
996
1200
|
item: [
|
|
997
|
-
"relative inline-flex items-center gap-
|
|
998
|
-
"cursor-pointer select-none outline-none rounded-full text-
|
|
1201
|
+
"relative inline-flex items-center gap-2 h-14 px-6 overflow-hidden box-border",
|
|
1202
|
+
"cursor-pointer select-none outline-none rounded-full text-title-medium",
|
|
999
1203
|
"shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard",
|
|
1000
1204
|
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
1001
1205
|
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
@@ -1011,7 +1215,6 @@ var fabMenuTv = tv7({
|
|
|
1011
1215
|
},
|
|
1012
1216
|
variants: {
|
|
1013
1217
|
color: {
|
|
1014
|
-
surface: { item: "bg-surface-container-high text-primary" },
|
|
1015
1218
|
primary: { item: "bg-primary-container text-on-primary-container" },
|
|
1016
1219
|
secondary: { item: "bg-secondary-container text-on-secondary-container" },
|
|
1017
1220
|
tertiary: { item: "bg-tertiary-container text-on-tertiary-container" }
|
|
@@ -1053,13 +1256,16 @@ var dividerTv = tv({
|
|
|
1053
1256
|
var Divider = createDivider(({ inset, orientation }) => dividerTv({ inset, orientation }));
|
|
1054
1257
|
var linearTv = tv({
|
|
1055
1258
|
slots: {
|
|
1056
|
-
// The track-stop dot (
|
|
1057
|
-
// a determinate-only M3 concept, so it's hidden while
|
|
1058
|
-
// `end-0` mirrors with the indicator under `dir="rtl"`.
|
|
1259
|
+
// The track-stop dot (primary, full track height) sits at the inline-end via
|
|
1260
|
+
// `after:`. It's a determinate-only M3 concept, so it's hidden while
|
|
1261
|
+
// indeterminate. Logical `end-0` mirrors with the indicator under `dir="rtl"`.
|
|
1262
|
+
// Height comes from the factory (inline) so `thickness` is honored.
|
|
1059
1263
|
root: [
|
|
1060
|
-
"group relative block w-full
|
|
1264
|
+
"group relative block w-full overflow-hidden rounded-full",
|
|
1265
|
+
// The dot is `--m3-thickness` tall (stroke height) and centered, so it stays
|
|
1266
|
+
// correct when the wavy track grows taller than the stroke.
|
|
1061
1267
|
"after:content-[''] after:absolute after:end-0 after:top-1/2 after:-translate-y-1/2",
|
|
1062
|
-
"after:
|
|
1268
|
+
"after:h-[var(--m3-thickness,100%)] after:aspect-square after:rounded-full after:bg-primary",
|
|
1063
1269
|
// Self variant (not `group-data-*`): the dot is on the root element itself,
|
|
1064
1270
|
// which carries `data-indeterminate` — it isn't a descendant of `.group`.
|
|
1065
1271
|
"data-[indeterminate]:after:hidden"
|
|
@@ -1068,40 +1274,76 @@ var linearTv = tv({
|
|
|
1068
1274
|
// 4dp gap separates it from the active indicator (`--m3-progress` + 4px). The
|
|
1069
1275
|
// gap uses logical inline insets so it tracks the indicator (which Base UI
|
|
1070
1276
|
// anchors at inline-start) under `dir="rtl"`. Indeterminate has no fraction,
|
|
1071
|
-
// so the inactive track spans the full width.
|
|
1277
|
+
// so the inactive track spans the full width. The flat track stays
|
|
1278
|
+
// `--m3-thickness` tall and centered even when the wavy root is taller.
|
|
1072
1279
|
track: [
|
|
1073
1280
|
"absolute inset-0",
|
|
1074
|
-
"before:content-[''] before:absolute before:
|
|
1075
|
-
"before:[
|
|
1281
|
+
"before:content-[''] before:absolute before:top-1/2 before:-translate-y-1/2 before:end-0",
|
|
1282
|
+
"before:h-[var(--m3-thickness,100%)]",
|
|
1283
|
+
"before:[inset-inline-start:calc(var(--m3-progress,0%)_+_4px)]",
|
|
1076
1284
|
"before:bg-surface-container-highest before:rounded-full",
|
|
1077
1285
|
"group-data-[indeterminate]:before:start-0"
|
|
1078
1286
|
],
|
|
1287
|
+
// Primary bar. Determinate: width from Base UI. Indeterminate: full width,
|
|
1288
|
+
// scaled + slid by the disjoint `primary` keyframe (origin at the start edge).
|
|
1289
|
+
// Wavy determinate: a scrolling sine tile masks the solid bar into a wave.
|
|
1079
1290
|
indicator: [
|
|
1080
|
-
"absolute inset-y-0 left-0 bg-primary rounded-full",
|
|
1291
|
+
"absolute inset-y-0 left-0 origin-left bg-primary rounded-full",
|
|
1081
1292
|
"transition-[width] duration-200 ease-standard",
|
|
1082
|
-
"group-data-[indeterminate]:w-
|
|
1083
|
-
"group-data-[indeterminate]:animate-m3-linear-
|
|
1293
|
+
"group-data-[indeterminate]:w-full group-data-[indeterminate]:transition-none",
|
|
1294
|
+
"group-data-[indeterminate]:animate-m3-linear-primary",
|
|
1295
|
+
"group-data-[wavy]:rounded-none",
|
|
1296
|
+
"group-data-[wavy]:[-webkit-mask-image:var(--m3-wave)] group-data-[wavy]:[mask-image:var(--m3-wave)]",
|
|
1297
|
+
"group-data-[wavy]:[-webkit-mask-repeat:repeat-x] group-data-[wavy]:[mask-repeat:repeat-x]",
|
|
1298
|
+
"group-data-[wavy]:[-webkit-mask-size:40px_100%] group-data-[wavy]:[mask-size:40px_100%]",
|
|
1299
|
+
"group-data-[wavy]:animate-m3-wave-flow",
|
|
1300
|
+
// Reduced motion: freeze the loops and show a static ~40% bar / static wave.
|
|
1301
|
+
"motion-reduce:group-data-[indeterminate]:w-2/5",
|
|
1302
|
+
"motion-reduce:group-data-[indeterminate]:animate-none motion-reduce:group-data-[wavy]:animate-none"
|
|
1303
|
+
],
|
|
1304
|
+
// Second disjoint bar: only present visually while indeterminate.
|
|
1305
|
+
indicatorSecondary: [
|
|
1306
|
+
"absolute inset-y-0 left-0 w-full origin-left bg-primary rounded-full hidden",
|
|
1307
|
+
"group-data-[indeterminate]:block group-data-[indeterminate]:animate-m3-linear-secondary",
|
|
1308
|
+
// Reduced motion: a single static bar reads better than two frozen ones.
|
|
1309
|
+
"motion-reduce:group-data-[indeterminate]:hidden"
|
|
1084
1310
|
]
|
|
1085
1311
|
}
|
|
1086
1312
|
});
|
|
1087
1313
|
var circularTv = tv({
|
|
1088
1314
|
slots: {
|
|
1315
|
+
// Size comes from the factory (inline width/height) so `size` is honored.
|
|
1316
|
+
// Indeterminate rotates the whole ring; the arc grows/shrinks via the
|
|
1317
|
+
// indicator's own `dash` animation (M3 "advance").
|
|
1089
1318
|
root: [
|
|
1090
|
-
"inline-flex items-center justify-center
|
|
1319
|
+
"group inline-flex items-center justify-center",
|
|
1091
1320
|
"[&_svg]:block [&_svg]:size-full",
|
|
1092
|
-
"data-[indeterminate]:animate-
|
|
1321
|
+
"data-[indeterminate]:animate-m3-circular-rotate",
|
|
1322
|
+
"motion-reduce:data-[indeterminate]:animate-none"
|
|
1323
|
+
],
|
|
1324
|
+
// Both ends are rounded (M3); the inactive track sits behind with a 4dp gap.
|
|
1325
|
+
track: [
|
|
1326
|
+
"stroke-surface-container-highest [stroke-linecap:round]",
|
|
1327
|
+
"transition-[stroke-dasharray,stroke-dashoffset] duration-300 ease-standard"
|
|
1093
1328
|
],
|
|
1094
|
-
track: "stroke-surface-container-highest [stroke-width:4px]",
|
|
1095
1329
|
indicator: [
|
|
1096
|
-
"stroke-primary [stroke-
|
|
1097
|
-
"transition-[stroke-dashoffset] duration-300 ease-standard"
|
|
1330
|
+
"stroke-primary [stroke-linecap:round]",
|
|
1331
|
+
"transition-[stroke-dasharray,stroke-dashoffset] duration-300 ease-standard",
|
|
1332
|
+
"group-data-[indeterminate]:animate-m3-circular-dash group-data-[indeterminate]:transition-none",
|
|
1333
|
+
// Reduced motion: freeze the arc at its static 25% length (no rotation).
|
|
1334
|
+
"motion-reduce:group-data-[indeterminate]:animate-none"
|
|
1098
1335
|
]
|
|
1099
1336
|
}
|
|
1100
1337
|
});
|
|
1101
1338
|
var l = linearTv();
|
|
1102
1339
|
var c2 = circularTv();
|
|
1103
1340
|
var Progress = createProgress({
|
|
1104
|
-
linear: {
|
|
1341
|
+
linear: {
|
|
1342
|
+
root: l.root(),
|
|
1343
|
+
track: l.track(),
|
|
1344
|
+
indicator: l.indicator(),
|
|
1345
|
+
indicatorSecondary: l.indicatorSecondary()
|
|
1346
|
+
},
|
|
1105
1347
|
circular: { root: c2.root(), track: c2.track(), indicator: c2.indicator() }
|
|
1106
1348
|
});
|
|
1107
1349
|
var loadingIndicatorTv = tv7({
|
|
@@ -1384,7 +1626,7 @@ var buttonGroup = tv7({
|
|
|
1384
1626
|
}
|
|
1385
1627
|
});
|
|
1386
1628
|
var ButtonGroup = createButtonGroup(({ variant }) => buttonGroup({ variant }));
|
|
1387
|
-
var
|
|
1629
|
+
var surface3 = [
|
|
1388
1630
|
"relative inline-flex items-center justify-center h-10 overflow-hidden cursor-pointer select-none border-0 outline-none",
|
|
1389
1631
|
"text-label-large",
|
|
1390
1632
|
"transition-[background-color,color,border-color] duration-200 ease-standard",
|
|
@@ -1426,9 +1668,9 @@ var splitButtonTv = tv7({
|
|
|
1426
1668
|
slots: {
|
|
1427
1669
|
group: "inline-flex items-center gap-0.5",
|
|
1428
1670
|
// leading: outer (start) corner full, seam (end) corner reduced.
|
|
1429
|
-
leading: [...
|
|
1671
|
+
leading: [...surface3, "gap-2 px-6 rounded-s-full rounded-e-small"],
|
|
1430
1672
|
// trailing: seam (start) corner reduced, outer (end) corner full.
|
|
1431
|
-
trailing: [...
|
|
1673
|
+
trailing: [...surface3, "group gap-1 px-3 rounded-s-small rounded-e-full"],
|
|
1432
1674
|
chevron: [
|
|
1433
1675
|
"inline-flex items-center justify-center shrink-0 [&>svg]:size-[18px]",
|
|
1434
1676
|
"transition-transform duration-200 ease-standard group-data-[popup-open]:rotate-180"
|
|
@@ -1873,32 +2115,46 @@ var DatePicker = createDatePicker({
|
|
|
1873
2115
|
modalHeadline: dp.modalHeadline(),
|
|
1874
2116
|
modalActions: dp.modalActions()
|
|
1875
2117
|
});
|
|
2118
|
+
var stateLayerBase = [
|
|
2119
|
+
"overflow-hidden",
|
|
2120
|
+
'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',
|
|
2121
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
2122
|
+
"focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
2123
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
2124
|
+
"focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
|
|
2125
|
+
];
|
|
1876
2126
|
var timePickerTv = tv7({
|
|
1877
2127
|
slots: {
|
|
1878
|
-
root: ["inline-flex flex-col items-center
|
|
1879
|
-
header: ["flex items-center gap-
|
|
2128
|
+
root: ["inline-flex flex-col items-center p-2 text-on-surface"],
|
|
2129
|
+
header: ["flex items-center gap-3 min-h-[98px]"],
|
|
2130
|
+
display: ["inline-flex items-center"],
|
|
1880
2131
|
field: [
|
|
1881
|
-
"
|
|
2132
|
+
"relative",
|
|
2133
|
+
...stateLayerBase,
|
|
2134
|
+
"inline-grid place-items-center w-24 h-20 rounded-small box-border",
|
|
1882
2135
|
"bg-surface-container-highest text-on-surface text-display-large cursor-pointer outline-none",
|
|
1883
2136
|
"border border-transparent transition-colors duration-100",
|
|
1884
2137
|
"data-[selected]:bg-primary-container data-[selected]:text-on-primary-container"
|
|
1885
2138
|
],
|
|
1886
|
-
colon: ["text-display-large text-on-surface px-1 leading-none"],
|
|
2139
|
+
colon: ["text-display-large text-on-surface px-1 leading-none self-center"],
|
|
1887
2140
|
periods: [
|
|
1888
|
-
"inline-flex flex-col rounded-small overflow-hidden border border-outline
|
|
1889
|
-
"m-0 p-0 min-w-0"
|
|
2141
|
+
"inline-flex flex-col shrink-0 rounded-small overflow-hidden border border-outline",
|
|
2142
|
+
"h-[98px] w-[52px] m-0 p-0 min-w-0 box-border"
|
|
1890
2143
|
],
|
|
1891
2144
|
period: [
|
|
1892
|
-
"
|
|
2145
|
+
"relative",
|
|
2146
|
+
...stateLayerBase,
|
|
2147
|
+
"flex-1 inline-flex items-center justify-center min-h-12 h-12 w-full",
|
|
1893
2148
|
"border-0 bg-transparent",
|
|
1894
2149
|
"text-title-medium text-on-surface-variant cursor-pointer outline-none",
|
|
1895
2150
|
"data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
|
|
1896
2151
|
"[&+&]:border-t [&+&]:border-outline"
|
|
1897
2152
|
],
|
|
1898
2153
|
dial: [
|
|
1899
|
-
"relative size-[256px]
|
|
2154
|
+
"relative size-[256px] mt-[28px] p-0 min-w-0 border-0 rounded-full bg-surface-container-highest"
|
|
1900
2155
|
],
|
|
1901
2156
|
dialNumber: [
|
|
2157
|
+
...stateLayerBase,
|
|
1902
2158
|
"absolute -translate-x-1/2 -translate-y-1/2 inline-grid place-items-center size-12 rounded-full",
|
|
1903
2159
|
"border-0 bg-transparent",
|
|
1904
2160
|
"text-body-large text-on-surface cursor-pointer outline-none select-none",
|
|
@@ -1910,7 +2166,7 @@ var timePickerTv = tv7({
|
|
|
1910
2166
|
dialCenter: [
|
|
1911
2167
|
"absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary pointer-events-none"
|
|
1912
2168
|
],
|
|
1913
|
-
inputs: ["flex items-start gap-
|
|
2169
|
+
inputs: ["flex items-start gap-3"],
|
|
1914
2170
|
inputBox: [
|
|
1915
2171
|
"w-24 h-20 rounded-small box-border text-center",
|
|
1916
2172
|
"bg-surface-container-highest text-on-surface text-display-large outline-none",
|
|
@@ -1924,6 +2180,7 @@ var tp = timePickerTv();
|
|
|
1924
2180
|
var TimePicker = createTimePicker(() => ({
|
|
1925
2181
|
root: tp.root(),
|
|
1926
2182
|
header: tp.header(),
|
|
2183
|
+
display: tp.display(),
|
|
1927
2184
|
field: tp.field(),
|
|
1928
2185
|
colon: tp.colon(),
|
|
1929
2186
|
periods: tp.periods(),
|
|
@@ -1979,6 +2236,6 @@ var Carousel = createCarousel((variant) => {
|
|
|
1979
2236
|
return { root: s14.root(), item: s14.item() };
|
|
1980
2237
|
});
|
|
1981
2238
|
|
|
1982
|
-
export { Badge, BottomAppBar, BottomSheet, Button, ButtonGroup, Card, Carousel, Checkbox, Chip, DatePicker, Dialog, Divider, Fab, FabMenu, IconButton, Item, List, LoadingIndicator, Menu, NavigationBar, NavigationDrawer, NavigationRail, Progress, Radio, RadioGroup, RichTooltip, Search, SegmentedButton, Select, SideSheet, Slider, Snackbar, SplitButton, Switch, Tabs, TextField, TimePicker, Toolbar, Tooltip, TopAppBar, badgeTv, bottomAppBarTv, bottomSheetTv, button, buttonGroup, cardTv, carouselTv, checkboxTv, chipTv, circularTv, datePickerTv, dialogTv, dividerTv, fabMenuTv, fabTv, iconButton, itemTv, linearTv, listTv, loadingIndicatorTv, menuTv, navigationBarTv, navigationDrawerTv, navigationRailTv, radioTv, richTooltipTv, searchTv, segmentedButtonTv, selectTv, sideSheetTv, sliderTv, snackbarTv, splitButtonTv, switchTv, tabsTv, textFieldTv, timePickerTv, toolbarTv, tooltipTv, topAppBarTv };
|
|
2239
|
+
export { Badge, BottomAppBar, BottomSheet, Button, ButtonGroup, Card, Carousel, Checkbox, Chip, DatePicker, Dialog, Divider, Fab, FabMenu, IconButton, Item, List, LoadingIndicator, Menu, NavigationBar, NavigationDrawer, NavigationRail, Progress, Radio, RadioGroup, RichTooltip, Search, SegmentedButton, Select, SideSheet, Slider, Snackbar, SplitButton, Switch, Tabs, TextField, TimePicker, Toolbar, Tooltip, TopAppBar, badgeTv, bottomAppBarTv, bottomSheetTv, button, buttonGroup, cardTv, carouselTv, checkboxTv, chipTv, circularTv, datePickerTv, dialogTv, dividerTv, fabMenuTv, fabTv, iconButton, itemTv, linearTv, listTv, loadingIndicatorTv, menuTv, navigationBarTv, navigationDrawerTv, navigationRailTv, radioTv, richTooltipTv, searchTv, segmentedButtonTv, selectFieldTv, selectTv, sideSheetTv, sliderTv, snackbarTv, splitButtonTv, switchTv, tabsTv, textFieldTv, timePickerTv, toolbarTv, tooltipTv, topAppBarTv };
|
|
1983
2240
|
//# sourceMappingURL=index.js.map
|
|
1984
2241
|
//# sourceMappingURL=index.js.map
|