@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
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,62 +837,133 @@ 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"
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
"sticky top-0 z-[1] flex items-center justify-center h-6 cursor-default",
|
|
798
|
-
"bg-surface-container text-on-surface-variant [&>svg]:size-5"
|
|
799
|
-
],
|
|
800
|
-
scrollDownArrow: [
|
|
801
|
-
"sticky bottom-0 z-[1] flex items-center justify-center h-6 cursor-default",
|
|
802
|
-
"bg-surface-container text-on-surface-variant [&>svg]:size-5"
|
|
803
|
-
]
|
|
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]"
|
|
847
|
+
],
|
|
848
|
+
itemIndicator: selectable2.itemIndicator(),
|
|
849
|
+
groupLabel: surface2.groupLabel()
|
|
804
850
|
}
|
|
805
851
|
});
|
|
806
|
-
var
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
852
|
+
var selectFieldTv = tv7({
|
|
853
|
+
slots: {
|
|
854
|
+
// The `group` hook lives here (not in engine-neutral core): supporting text
|
|
855
|
+
// keys its error color off Field.Root's `group-data-[invalid]`.
|
|
856
|
+
root: "group flex flex-col gap-1 min-w-[210px]",
|
|
857
|
+
field: [
|
|
858
|
+
"group/field relative flex items-stretch gap-3 h-14 px-4 box-border w-full",
|
|
859
|
+
"text-on-surface text-body-large cursor-pointer text-left outline-none",
|
|
860
|
+
"transition-[border-color,padding] duration-150 ease-standard",
|
|
861
|
+
"data-[disabled]:opacity-[0.38] data-[disabled]:pointer-events-none"
|
|
862
|
+
],
|
|
863
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
864
|
+
value: "flex-1 truncate text-body-large text-on-surface",
|
|
865
|
+
label: [
|
|
866
|
+
"absolute left-0 pointer-events-none origin-left",
|
|
867
|
+
"top-1/2 -translate-y-1/2 text-body-large text-on-surface-variant",
|
|
868
|
+
"transition-all duration-150 ease-standard",
|
|
869
|
+
"group-data-[focused]/field:text-primary group-data-[invalid]/field:text-error"
|
|
870
|
+
],
|
|
871
|
+
icon: [
|
|
872
|
+
// Disabled dimming comes from the field's own opacity (0.38); no per-icon
|
|
873
|
+
// color override here, else it would compound to ~0.14.
|
|
874
|
+
"flex items-center text-on-surface-variant transition-transform duration-150 [&>svg]:size-6",
|
|
875
|
+
"group-data-[popup-open]/field:rotate-180"
|
|
876
|
+
],
|
|
877
|
+
leadingIcon: "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6",
|
|
878
|
+
supporting: [
|
|
879
|
+
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
880
|
+
"group-data-[invalid]:text-error"
|
|
881
|
+
],
|
|
882
|
+
supportingText: "min-w-0"
|
|
883
|
+
},
|
|
884
|
+
variants: {
|
|
885
|
+
variant: {
|
|
886
|
+
filled: {
|
|
887
|
+
field: [
|
|
888
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
889
|
+
// M3 filled hover: state layer (on-surface × state-hover).
|
|
890
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
891
|
+
"before:transition-opacity before:duration-100",
|
|
892
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
893
|
+
"data-[disabled]:before:opacity-0",
|
|
894
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
895
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
896
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
897
|
+
"data-[focused]:border-b-[3px] data-[focused]:border-primary",
|
|
898
|
+
"data-[popup-open]:border-b-[3px] data-[popup-open]:border-primary",
|
|
899
|
+
"data-[invalid]:border-error"
|
|
900
|
+
],
|
|
901
|
+
value: "pt-3",
|
|
902
|
+
label: [
|
|
903
|
+
"group-data-[focused]/field:top-1.5 group-data-[focused]/field:translate-y-0 group-data-[focused]/field:text-body-small",
|
|
904
|
+
"group-data-[filled]/field:top-1.5 group-data-[filled]/field:translate-y-0 group-data-[filled]/field:text-body-small",
|
|
905
|
+
"group-data-[popup-open]/field:top-1.5 group-data-[popup-open]/field:translate-y-0 group-data-[popup-open]/field:text-body-small",
|
|
906
|
+
"group-data-[has-placeholder]/field:top-1.5 group-data-[has-placeholder]/field:translate-y-0 group-data-[has-placeholder]/field:text-body-small"
|
|
907
|
+
]
|
|
908
|
+
},
|
|
909
|
+
outlined: {
|
|
910
|
+
field: [
|
|
911
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
912
|
+
// M3 outlined focus-outline-width is 3dp; padding drops 2px so content
|
|
913
|
+
// stays steady as the 1dp border grows (matches the TextField anchor).
|
|
914
|
+
"data-[focused]:border-[3px] data-[focused]:border-primary data-[focused]:px-[14px]",
|
|
915
|
+
"data-[popup-open]:border-[3px] data-[popup-open]:border-primary data-[popup-open]:px-[14px]",
|
|
916
|
+
"data-[invalid]:border-error"
|
|
917
|
+
],
|
|
918
|
+
label: [
|
|
919
|
+
"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",
|
|
920
|
+
"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",
|
|
921
|
+
"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",
|
|
922
|
+
"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"
|
|
923
|
+
]
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
},
|
|
927
|
+
defaultVariants: {
|
|
928
|
+
variant: "outlined"
|
|
929
|
+
}
|
|
817
930
|
});
|
|
931
|
+
var s3 = selectTv();
|
|
932
|
+
var Select = createSelect(
|
|
933
|
+
{
|
|
934
|
+
trigger: s3.trigger(),
|
|
935
|
+
value: s3.value(),
|
|
936
|
+
icon: s3.icon(),
|
|
937
|
+
popup: s3.popup(),
|
|
938
|
+
item: s3.item(),
|
|
939
|
+
itemIndicator: s3.itemIndicator(),
|
|
940
|
+
groupLabel: s3.groupLabel()
|
|
941
|
+
},
|
|
942
|
+
({ variant }) => {
|
|
943
|
+
const f = selectFieldTv({ variant });
|
|
944
|
+
return {
|
|
945
|
+
root: f.root(),
|
|
946
|
+
field: f.field(),
|
|
947
|
+
inputWrap: f.inputWrap(),
|
|
948
|
+
value: f.value(),
|
|
949
|
+
label: f.label(),
|
|
950
|
+
icon: f.icon(),
|
|
951
|
+
leadingIcon: f.leadingIcon(),
|
|
952
|
+
supporting: f.supporting(),
|
|
953
|
+
supportingText: f.supportingText()
|
|
954
|
+
};
|
|
955
|
+
}
|
|
956
|
+
);
|
|
957
|
+
var iconVisual = "inline-flex items-center justify-center shrink-0 text-on-surface-variant [&>svg]:size-6";
|
|
818
958
|
var textFieldTv = tv({
|
|
819
959
|
slots: {
|
|
820
960
|
root: "flex flex-col gap-1 min-w-[210px]",
|
|
821
961
|
field: [
|
|
822
|
-
"relative flex items-stretch gap-3 h-14 px-4 box-border",
|
|
962
|
+
"relative flex items-stretch gap-3 h-14 px-4 box-border text-on-surface",
|
|
823
963
|
"transition-[border-color,padding] duration-150 ease-standard",
|
|
824
964
|
"group-data-[disabled]:opacity-[0.38] group-data-[disabled]:pointer-events-none"
|
|
825
965
|
],
|
|
826
|
-
inputWrap: "relative flex-1 flex items-center min-w-0",
|
|
966
|
+
inputWrap: "relative z-0 flex-1 flex items-center min-w-0 overflow-visible",
|
|
827
967
|
input: [
|
|
828
968
|
"peer w-full bg-transparent outline-none border-0 p-0 text-body-large text-on-surface",
|
|
829
969
|
"placeholder:text-on-surface-variant"
|
|
@@ -834,8 +974,18 @@ var textFieldTv = tv({
|
|
|
834
974
|
"transition-all duration-150 ease-standard",
|
|
835
975
|
"group-data-[focused]:text-primary group-data-[invalid]:text-error"
|
|
836
976
|
],
|
|
837
|
-
leadingIcon:
|
|
838
|
-
trailingIcon:
|
|
977
|
+
leadingIcon: iconVisual,
|
|
978
|
+
trailingIcon: iconVisual,
|
|
979
|
+
leadingIconButton: [
|
|
980
|
+
iconVisual,
|
|
981
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
982
|
+
"group-data-[disabled]:pointer-events-none"
|
|
983
|
+
],
|
|
984
|
+
trailingIconButton: [
|
|
985
|
+
iconVisual,
|
|
986
|
+
"relative size-12 p-0 border-0 bg-transparent cursor-pointer",
|
|
987
|
+
"group-data-[disabled]:pointer-events-none"
|
|
988
|
+
],
|
|
839
989
|
supporting: [
|
|
840
990
|
"flex justify-between gap-4 px-4 text-body-small text-on-surface-variant",
|
|
841
991
|
"group-data-[invalid]:text-error"
|
|
@@ -847,9 +997,15 @@ var textFieldTv = tv({
|
|
|
847
997
|
variant: {
|
|
848
998
|
filled: {
|
|
849
999
|
field: [
|
|
850
|
-
"rounded-t-extra-small bg-surface-container-highest",
|
|
851
|
-
|
|
852
|
-
|
|
1000
|
+
"overflow-hidden rounded-t-extra-small bg-surface-container-highest",
|
|
1001
|
+
// M3 filled hover: state layer (on-surface × state-hover) + indicator color.
|
|
1002
|
+
"before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
|
|
1003
|
+
"before:transition-opacity before:duration-100",
|
|
1004
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
1005
|
+
"group-data-[disabled]:before:opacity-0",
|
|
1006
|
+
// M3 filled resting active-indicator: 1dp on-surface-variant.
|
|
1007
|
+
"border-b border-on-surface-variant hover:border-on-surface",
|
|
1008
|
+
// M3 filled focus-active-indicator-height is 3dp.
|
|
853
1009
|
"group-data-[focused]:border-b-[3px] group-data-[focused]:border-primary group-data-[invalid]:border-error"
|
|
854
1010
|
],
|
|
855
1011
|
input: "pt-3",
|
|
@@ -860,15 +1016,18 @@ var textFieldTv = tv({
|
|
|
860
1016
|
},
|
|
861
1017
|
outlined: {
|
|
862
1018
|
field: [
|
|
863
|
-
|
|
1019
|
+
// Outlined hover = outline color only (no container state layer per M3).
|
|
1020
|
+
"overflow-visible rounded-extra-small border border-outline hover:border-on-surface",
|
|
864
1021
|
// M3 outlined focus-outline-width is 3dp (matches Select's trigger);
|
|
865
1022
|
// padding drops 2px so content stays steady as the 1dp border grows.
|
|
866
1023
|
"group-data-[focused]:border-[3px] group-data-[focused]:border-primary group-data-[focused]:px-[14px]",
|
|
867
1024
|
"group-data-[invalid]:border-error"
|
|
868
1025
|
],
|
|
869
1026
|
label: [
|
|
870
|
-
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:
|
|
871
|
-
"group-data-[
|
|
1027
|
+
"group-data-[focused]:top-0 group-data-[focused]:-translate-y-1/2 group-data-[focused]:z-[1]",
|
|
1028
|
+
"group-data-[focused]:text-body-small group-data-[focused]:bg-surface group-data-[focused]:px-1 group-data-[focused]:leading-none",
|
|
1029
|
+
"group-data-[filled]:top-0 group-data-[filled]:-translate-y-1/2 group-data-[filled]:z-[1]",
|
|
1030
|
+
"group-data-[filled]:text-body-small group-data-[filled]:bg-surface group-data-[filled]:px-1 group-data-[filled]:leading-none"
|
|
872
1031
|
]
|
|
873
1032
|
}
|
|
874
1033
|
}
|
|
@@ -887,6 +1046,8 @@ var TextField = createTextField(({ variant }) => {
|
|
|
887
1046
|
label: c3.label(),
|
|
888
1047
|
leadingIcon: c3.leadingIcon(),
|
|
889
1048
|
trailingIcon: c3.trailingIcon(),
|
|
1049
|
+
leadingIconButton: c3.leadingIconButton(),
|
|
1050
|
+
trailingIconButton: c3.trailingIconButton(),
|
|
890
1051
|
supporting: c3.supporting(),
|
|
891
1052
|
supportingText: c3.supportingText(),
|
|
892
1053
|
counter: c3.counter()
|
|
@@ -966,36 +1127,68 @@ var fabTv = tv({
|
|
|
966
1127
|
"data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
|
|
967
1128
|
],
|
|
968
1129
|
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
|
-
},
|
|
1130
|
+
// Geometry is set by compoundVariants (size × variant); these keys exist so
|
|
1131
|
+
// the resolver can accept them.
|
|
1132
|
+
size: { small: "", medium: "", large: "" },
|
|
1133
|
+
variant: { standard: "", extended: "" },
|
|
975
1134
|
color: {
|
|
976
|
-
surface: "bg-surface-container-high text-primary",
|
|
977
1135
|
primary: "bg-primary-container text-on-primary-container",
|
|
978
1136
|
secondary: "bg-secondary-container text-on-secondary-container",
|
|
979
1137
|
tertiary: "bg-tertiary-container text-on-tertiary-container"
|
|
980
1138
|
}
|
|
981
1139
|
},
|
|
1140
|
+
compoundVariants: [
|
|
1141
|
+
// ---- Standard (icon-only square): container / corner / icon ----
|
|
1142
|
+
{ size: "small", variant: "standard", class: "size-14 rounded-large [&_svg]:size-6" },
|
|
1143
|
+
// 56 / 16 / 24
|
|
1144
|
+
{
|
|
1145
|
+
size: "medium",
|
|
1146
|
+
variant: "standard",
|
|
1147
|
+
class: "size-20 rounded-large-increased [&_svg]:size-7"
|
|
1148
|
+
// 80 / 20 / 28
|
|
1149
|
+
},
|
|
1150
|
+
{ size: "large", variant: "standard", class: "size-24 rounded-extra-large [&_svg]:size-8" },
|
|
1151
|
+
// 96 / 28 / 32
|
|
1152
|
+
// ---- Extended (icon + label pill): height / corner / icon / padding / gap / label ----
|
|
1153
|
+
// `min-w-*` keeps the pill affordance for short / text-only labels (wider
|
|
1154
|
+
// than tall), matching the pre-Expressive extended FAB which guarded this.
|
|
1155
|
+
{
|
|
1156
|
+
size: "small",
|
|
1157
|
+
variant: "extended",
|
|
1158
|
+
class: "h-14 min-w-20 px-4 gap-2 rounded-large text-title-medium [&_svg]:size-6"
|
|
1159
|
+
// 56 / 16 / 24 / 16 / 8
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
size: "medium",
|
|
1163
|
+
variant: "extended",
|
|
1164
|
+
class: "h-20 min-w-28 px-[26px] gap-4 rounded-large-increased text-title-large [&_svg]:size-7"
|
|
1165
|
+
// 80 / 20 / 28 / 26 / 16
|
|
1166
|
+
},
|
|
1167
|
+
{
|
|
1168
|
+
size: "large",
|
|
1169
|
+
variant: "extended",
|
|
1170
|
+
class: "h-24 min-w-32 px-7 gap-5 rounded-extra-large text-headline-small [&_svg]:size-8"
|
|
1171
|
+
// 96 / 28 / 32 / 28 / 20
|
|
1172
|
+
}
|
|
1173
|
+
],
|
|
982
1174
|
defaultVariants: {
|
|
983
|
-
size: "
|
|
984
|
-
|
|
1175
|
+
size: "small",
|
|
1176
|
+
variant: "standard",
|
|
1177
|
+
color: "primary"
|
|
985
1178
|
}
|
|
986
1179
|
});
|
|
987
|
-
var Fab = createFab(({ size, color }) => fabTv({ size, color }));
|
|
1180
|
+
var Fab = createFab(({ size, color, variant }) => fabTv({ size, color, variant }));
|
|
988
1181
|
var fabMenuTv = tv7({
|
|
989
1182
|
slots: {
|
|
990
1183
|
popup: [
|
|
991
|
-
"flex flex-col items-end gap-
|
|
1184
|
+
"flex flex-col items-end gap-1 bg-transparent outline-none",
|
|
992
1185
|
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
993
1186
|
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
994
1187
|
"data-[ending-style]:opacity-0"
|
|
995
1188
|
],
|
|
996
1189
|
item: [
|
|
997
|
-
"relative inline-flex items-center gap-
|
|
998
|
-
"cursor-pointer select-none outline-none rounded-full text-
|
|
1190
|
+
"relative inline-flex items-center gap-2 h-14 px-6 overflow-hidden box-border",
|
|
1191
|
+
"cursor-pointer select-none outline-none rounded-full text-title-medium",
|
|
999
1192
|
"shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard",
|
|
1000
1193
|
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
1001
1194
|
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
@@ -1011,7 +1204,6 @@ var fabMenuTv = tv7({
|
|
|
1011
1204
|
},
|
|
1012
1205
|
variants: {
|
|
1013
1206
|
color: {
|
|
1014
|
-
surface: { item: "bg-surface-container-high text-primary" },
|
|
1015
1207
|
primary: { item: "bg-primary-container text-on-primary-container" },
|
|
1016
1208
|
secondary: { item: "bg-secondary-container text-on-secondary-container" },
|
|
1017
1209
|
tertiary: { item: "bg-tertiary-container text-on-tertiary-container" }
|
|
@@ -1053,13 +1245,16 @@ var dividerTv = tv({
|
|
|
1053
1245
|
var Divider = createDivider(({ inset, orientation }) => dividerTv({ inset, orientation }));
|
|
1054
1246
|
var linearTv = tv({
|
|
1055
1247
|
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"`.
|
|
1248
|
+
// The track-stop dot (primary, full track height) sits at the inline-end via
|
|
1249
|
+
// `after:`. It's a determinate-only M3 concept, so it's hidden while
|
|
1250
|
+
// indeterminate. Logical `end-0` mirrors with the indicator under `dir="rtl"`.
|
|
1251
|
+
// Height comes from the factory (inline) so `thickness` is honored.
|
|
1059
1252
|
root: [
|
|
1060
|
-
"group relative block w-full
|
|
1253
|
+
"group relative block w-full overflow-hidden rounded-full",
|
|
1254
|
+
// The dot is `--m3-thickness` tall (stroke height) and centered, so it stays
|
|
1255
|
+
// correct when the wavy track grows taller than the stroke.
|
|
1061
1256
|
"after:content-[''] after:absolute after:end-0 after:top-1/2 after:-translate-y-1/2",
|
|
1062
|
-
"after:
|
|
1257
|
+
"after:h-[var(--m3-thickness,100%)] after:aspect-square after:rounded-full after:bg-primary",
|
|
1063
1258
|
// Self variant (not `group-data-*`): the dot is on the root element itself,
|
|
1064
1259
|
// which carries `data-indeterminate` — it isn't a descendant of `.group`.
|
|
1065
1260
|
"data-[indeterminate]:after:hidden"
|
|
@@ -1068,40 +1263,76 @@ var linearTv = tv({
|
|
|
1068
1263
|
// 4dp gap separates it from the active indicator (`--m3-progress` + 4px). The
|
|
1069
1264
|
// gap uses logical inline insets so it tracks the indicator (which Base UI
|
|
1070
1265
|
// anchors at inline-start) under `dir="rtl"`. Indeterminate has no fraction,
|
|
1071
|
-
// so the inactive track spans the full width.
|
|
1266
|
+
// so the inactive track spans the full width. The flat track stays
|
|
1267
|
+
// `--m3-thickness` tall and centered even when the wavy root is taller.
|
|
1072
1268
|
track: [
|
|
1073
1269
|
"absolute inset-0",
|
|
1074
|
-
"before:content-[''] before:absolute before:
|
|
1075
|
-
"before:[
|
|
1270
|
+
"before:content-[''] before:absolute before:top-1/2 before:-translate-y-1/2 before:end-0",
|
|
1271
|
+
"before:h-[var(--m3-thickness,100%)]",
|
|
1272
|
+
"before:[inset-inline-start:calc(var(--m3-progress,0%)_+_4px)]",
|
|
1076
1273
|
"before:bg-surface-container-highest before:rounded-full",
|
|
1077
1274
|
"group-data-[indeterminate]:before:start-0"
|
|
1078
1275
|
],
|
|
1276
|
+
// Primary bar. Determinate: width from Base UI. Indeterminate: full width,
|
|
1277
|
+
// scaled + slid by the disjoint `primary` keyframe (origin at the start edge).
|
|
1278
|
+
// Wavy determinate: a scrolling sine tile masks the solid bar into a wave.
|
|
1079
1279
|
indicator: [
|
|
1080
|
-
"absolute inset-y-0 left-0 bg-primary rounded-full",
|
|
1280
|
+
"absolute inset-y-0 left-0 origin-left bg-primary rounded-full",
|
|
1081
1281
|
"transition-[width] duration-200 ease-standard",
|
|
1082
|
-
"group-data-[indeterminate]:w-
|
|
1083
|
-
"group-data-[indeterminate]:animate-m3-linear-
|
|
1282
|
+
"group-data-[indeterminate]:w-full group-data-[indeterminate]:transition-none",
|
|
1283
|
+
"group-data-[indeterminate]:animate-m3-linear-primary",
|
|
1284
|
+
"group-data-[wavy]:rounded-none",
|
|
1285
|
+
"group-data-[wavy]:[-webkit-mask-image:var(--m3-wave)] group-data-[wavy]:[mask-image:var(--m3-wave)]",
|
|
1286
|
+
"group-data-[wavy]:[-webkit-mask-repeat:repeat-x] group-data-[wavy]:[mask-repeat:repeat-x]",
|
|
1287
|
+
"group-data-[wavy]:[-webkit-mask-size:40px_100%] group-data-[wavy]:[mask-size:40px_100%]",
|
|
1288
|
+
"group-data-[wavy]:animate-m3-wave-flow",
|
|
1289
|
+
// Reduced motion: freeze the loops and show a static ~40% bar / static wave.
|
|
1290
|
+
"motion-reduce:group-data-[indeterminate]:w-2/5",
|
|
1291
|
+
"motion-reduce:group-data-[indeterminate]:animate-none motion-reduce:group-data-[wavy]:animate-none"
|
|
1292
|
+
],
|
|
1293
|
+
// Second disjoint bar: only present visually while indeterminate.
|
|
1294
|
+
indicatorSecondary: [
|
|
1295
|
+
"absolute inset-y-0 left-0 w-full origin-left bg-primary rounded-full hidden",
|
|
1296
|
+
"group-data-[indeterminate]:block group-data-[indeterminate]:animate-m3-linear-secondary",
|
|
1297
|
+
// Reduced motion: a single static bar reads better than two frozen ones.
|
|
1298
|
+
"motion-reduce:group-data-[indeterminate]:hidden"
|
|
1084
1299
|
]
|
|
1085
1300
|
}
|
|
1086
1301
|
});
|
|
1087
1302
|
var circularTv = tv({
|
|
1088
1303
|
slots: {
|
|
1304
|
+
// Size comes from the factory (inline width/height) so `size` is honored.
|
|
1305
|
+
// Indeterminate rotates the whole ring; the arc grows/shrinks via the
|
|
1306
|
+
// indicator's own `dash` animation (M3 "advance").
|
|
1089
1307
|
root: [
|
|
1090
|
-
"inline-flex items-center justify-center
|
|
1308
|
+
"group inline-flex items-center justify-center",
|
|
1091
1309
|
"[&_svg]:block [&_svg]:size-full",
|
|
1092
|
-
"data-[indeterminate]:animate-
|
|
1310
|
+
"data-[indeterminate]:animate-m3-circular-rotate",
|
|
1311
|
+
"motion-reduce:data-[indeterminate]:animate-none"
|
|
1312
|
+
],
|
|
1313
|
+
// Both ends are rounded (M3); the inactive track sits behind with a 4dp gap.
|
|
1314
|
+
track: [
|
|
1315
|
+
"stroke-surface-container-highest [stroke-linecap:round]",
|
|
1316
|
+
"transition-[stroke-dasharray,stroke-dashoffset] duration-300 ease-standard"
|
|
1093
1317
|
],
|
|
1094
|
-
track: "stroke-surface-container-highest [stroke-width:4px]",
|
|
1095
1318
|
indicator: [
|
|
1096
|
-
"stroke-primary [stroke-
|
|
1097
|
-
"transition-[stroke-dashoffset] duration-300 ease-standard"
|
|
1319
|
+
"stroke-primary [stroke-linecap:round]",
|
|
1320
|
+
"transition-[stroke-dasharray,stroke-dashoffset] duration-300 ease-standard",
|
|
1321
|
+
"group-data-[indeterminate]:animate-m3-circular-dash group-data-[indeterminate]:transition-none",
|
|
1322
|
+
// Reduced motion: freeze the arc at its static 25% length (no rotation).
|
|
1323
|
+
"motion-reduce:group-data-[indeterminate]:animate-none"
|
|
1098
1324
|
]
|
|
1099
1325
|
}
|
|
1100
1326
|
});
|
|
1101
1327
|
var l = linearTv();
|
|
1102
1328
|
var c2 = circularTv();
|
|
1103
1329
|
var Progress = createProgress({
|
|
1104
|
-
linear: {
|
|
1330
|
+
linear: {
|
|
1331
|
+
root: l.root(),
|
|
1332
|
+
track: l.track(),
|
|
1333
|
+
indicator: l.indicator(),
|
|
1334
|
+
indicatorSecondary: l.indicatorSecondary()
|
|
1335
|
+
},
|
|
1105
1336
|
circular: { root: c2.root(), track: c2.track(), indicator: c2.indicator() }
|
|
1106
1337
|
});
|
|
1107
1338
|
var loadingIndicatorTv = tv7({
|
|
@@ -1384,7 +1615,7 @@ var buttonGroup = tv7({
|
|
|
1384
1615
|
}
|
|
1385
1616
|
});
|
|
1386
1617
|
var ButtonGroup = createButtonGroup(({ variant }) => buttonGroup({ variant }));
|
|
1387
|
-
var
|
|
1618
|
+
var surface3 = [
|
|
1388
1619
|
"relative inline-flex items-center justify-center h-10 overflow-hidden cursor-pointer select-none border-0 outline-none",
|
|
1389
1620
|
"text-label-large",
|
|
1390
1621
|
"transition-[background-color,color,border-color] duration-200 ease-standard",
|
|
@@ -1426,9 +1657,9 @@ var splitButtonTv = tv7({
|
|
|
1426
1657
|
slots: {
|
|
1427
1658
|
group: "inline-flex items-center gap-0.5",
|
|
1428
1659
|
// leading: outer (start) corner full, seam (end) corner reduced.
|
|
1429
|
-
leading: [...
|
|
1660
|
+
leading: [...surface3, "gap-2 px-6 rounded-s-full rounded-e-small"],
|
|
1430
1661
|
// trailing: seam (start) corner reduced, outer (end) corner full.
|
|
1431
|
-
trailing: [...
|
|
1662
|
+
trailing: [...surface3, "group gap-1 px-3 rounded-s-small rounded-e-full"],
|
|
1432
1663
|
chevron: [
|
|
1433
1664
|
"inline-flex items-center justify-center shrink-0 [&>svg]:size-[18px]",
|
|
1434
1665
|
"transition-transform duration-200 ease-standard group-data-[popup-open]:rotate-180"
|
|
@@ -1873,32 +2104,46 @@ var DatePicker = createDatePicker({
|
|
|
1873
2104
|
modalHeadline: dp.modalHeadline(),
|
|
1874
2105
|
modalActions: dp.modalActions()
|
|
1875
2106
|
});
|
|
2107
|
+
var stateLayerBase = [
|
|
2108
|
+
"overflow-hidden",
|
|
2109
|
+
'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',
|
|
2110
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
2111
|
+
"focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
2112
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
2113
|
+
"focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:outline-offset-2"
|
|
2114
|
+
];
|
|
1876
2115
|
var timePickerTv = tv7({
|
|
1877
2116
|
slots: {
|
|
1878
|
-
root: ["inline-flex flex-col items-center
|
|
1879
|
-
header: ["flex items-center gap-
|
|
2117
|
+
root: ["inline-flex flex-col items-center p-2 text-on-surface"],
|
|
2118
|
+
header: ["flex items-center gap-3 min-h-[98px]"],
|
|
2119
|
+
display: ["inline-flex items-center"],
|
|
1880
2120
|
field: [
|
|
1881
|
-
"
|
|
2121
|
+
"relative",
|
|
2122
|
+
...stateLayerBase,
|
|
2123
|
+
"inline-grid place-items-center w-24 h-20 rounded-small box-border",
|
|
1882
2124
|
"bg-surface-container-highest text-on-surface text-display-large cursor-pointer outline-none",
|
|
1883
2125
|
"border border-transparent transition-colors duration-100",
|
|
1884
2126
|
"data-[selected]:bg-primary-container data-[selected]:text-on-primary-container"
|
|
1885
2127
|
],
|
|
1886
|
-
colon: ["text-display-large text-on-surface px-1 leading-none"],
|
|
2128
|
+
colon: ["text-display-large text-on-surface px-1 leading-none self-center"],
|
|
1887
2129
|
periods: [
|
|
1888
|
-
"inline-flex flex-col rounded-small overflow-hidden border border-outline
|
|
1889
|
-
"m-0 p-0 min-w-0"
|
|
2130
|
+
"inline-flex flex-col shrink-0 rounded-small overflow-hidden border border-outline",
|
|
2131
|
+
"h-[98px] w-[52px] m-0 p-0 min-w-0 box-border"
|
|
1890
2132
|
],
|
|
1891
2133
|
period: [
|
|
1892
|
-
"
|
|
2134
|
+
"relative",
|
|
2135
|
+
...stateLayerBase,
|
|
2136
|
+
"flex-1 inline-flex items-center justify-center min-h-12 h-12 w-full",
|
|
1893
2137
|
"border-0 bg-transparent",
|
|
1894
2138
|
"text-title-medium text-on-surface-variant cursor-pointer outline-none",
|
|
1895
2139
|
"data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
|
|
1896
2140
|
"[&+&]:border-t [&+&]:border-outline"
|
|
1897
2141
|
],
|
|
1898
2142
|
dial: [
|
|
1899
|
-
"relative size-[256px]
|
|
2143
|
+
"relative size-[256px] mt-[28px] p-0 min-w-0 border-0 rounded-full bg-surface-container-highest"
|
|
1900
2144
|
],
|
|
1901
2145
|
dialNumber: [
|
|
2146
|
+
...stateLayerBase,
|
|
1902
2147
|
"absolute -translate-x-1/2 -translate-y-1/2 inline-grid place-items-center size-12 rounded-full",
|
|
1903
2148
|
"border-0 bg-transparent",
|
|
1904
2149
|
"text-body-large text-on-surface cursor-pointer outline-none select-none",
|
|
@@ -1910,7 +2155,7 @@ var timePickerTv = tv7({
|
|
|
1910
2155
|
dialCenter: [
|
|
1911
2156
|
"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
2157
|
],
|
|
1913
|
-
inputs: ["flex items-start gap-
|
|
2158
|
+
inputs: ["flex items-start gap-3"],
|
|
1914
2159
|
inputBox: [
|
|
1915
2160
|
"w-24 h-20 rounded-small box-border text-center",
|
|
1916
2161
|
"bg-surface-container-highest text-on-surface text-display-large outline-none",
|
|
@@ -1924,6 +2169,7 @@ var tp = timePickerTv();
|
|
|
1924
2169
|
var TimePicker = createTimePicker(() => ({
|
|
1925
2170
|
root: tp.root(),
|
|
1926
2171
|
header: tp.header(),
|
|
2172
|
+
display: tp.display(),
|
|
1927
2173
|
field: tp.field(),
|
|
1928
2174
|
colon: tp.colon(),
|
|
1929
2175
|
periods: tp.periods(),
|
|
@@ -1957,13 +2203,19 @@ var carouselTv = tv7({
|
|
|
1957
2203
|
slots: {
|
|
1958
2204
|
root: [
|
|
1959
2205
|
"flex gap-2 overflow-x-auto snap-x snap-mandatory scroll-smooth",
|
|
1960
|
-
"[scrollbar-width:none] [&::-webkit-scrollbar]:hidden"
|
|
2206
|
+
"[scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
2207
|
+
// Keyboard focus ring (M3: 3px secondary, 2px offset); keyboard-only.
|
|
2208
|
+
"outline-none focus-visible:outline-[3px] focus-visible:outline-offset-2 focus-visible:outline-secondary",
|
|
2209
|
+
// Reduced motion: jump instead of smooth-scrolling between snap cells.
|
|
2210
|
+
"motion-reduce:scroll-auto"
|
|
1961
2211
|
],
|
|
1962
2212
|
item: "snap-start shrink-0 overflow-hidden rounded-large"
|
|
1963
2213
|
},
|
|
1964
2214
|
variants: {
|
|
1965
2215
|
variant: {
|
|
1966
2216
|
"multi-browse": { item: "w-40 h-56" },
|
|
2217
|
+
// Uniform, wider cells that scroll past the container edge.
|
|
2218
|
+
uncontained: { item: "w-56 h-56" },
|
|
1967
2219
|
hero: { item: "w-72 h-56 snap-center" },
|
|
1968
2220
|
"full-screen": {
|
|
1969
2221
|
// gap-0: full-screen slides fill the viewport with no inter-slide gap.
|
|
@@ -1979,6 +2231,6 @@ var Carousel = createCarousel((variant) => {
|
|
|
1979
2231
|
return { root: s14.root(), item: s14.item() };
|
|
1980
2232
|
});
|
|
1981
2233
|
|
|
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 };
|
|
2234
|
+
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
2235
|
//# sourceMappingURL=index.js.map
|
|
1984
2236
|
//# sourceMappingURL=index.js.map
|