@m3-baseui/react-tailwind 1.0.3 → 1.1.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/bottom-app-bar.d.ts +62 -0
- package/dist/bottom-app-bar.js +51 -0
- package/dist/bottom-app-bar.js.map +1 -0
- package/dist/bottom-sheet.d.ts +101 -0
- package/dist/bottom-sheet.js +70 -0
- package/dist/bottom-sheet.js.map +1 -0
- package/dist/card.js +2 -0
- package/dist/card.js.map +1 -1
- package/dist/checkbox.d.ts +5 -5
- package/dist/divider.js +2 -1
- package/dist/divider.js.map +1 -1
- package/dist/fab-menu.d.ts +132 -0
- package/dist/fab-menu.js +116 -0
- package/dist/fab-menu.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +259 -16
- package/dist/index.js.map +1 -1
- package/dist/item.d.ts +5 -5
- package/dist/menu.d.ts +5 -5
- package/dist/navigation-bar.d.ts +5 -5
- package/dist/navigation-bar.js +20 -4
- package/dist/navigation-bar.js.map +1 -1
- package/dist/navigation-rail.d.ts +101 -0
- package/dist/navigation-rail.js +92 -0
- package/dist/navigation-rail.js.map +1 -0
- package/dist/progress.d.ts +12 -12
- package/dist/progress.js.map +1 -1
- package/dist/segmented-button.d.ts +5 -5
- package/dist/select.d.ts +5 -5
- package/dist/side-sheet.d.ts +112 -0
- package/dist/side-sheet.js +90 -0
- package/dist/side-sheet.js.map +1 -0
- package/dist/slider.d.ts +5 -5
- package/dist/snackbar.d.ts +5 -5
- package/dist/snackbar.js +1 -1
- package/dist/snackbar.js.map +1 -1
- package/dist/textfield.js +5 -2
- package/dist/textfield.js.map +1 -1
- package/dist/top-app-bar.d.ts +147 -0
- package/dist/top-app-bar.js +68 -0
- package/dist/top-app-bar.js.map +1 -0
- package/package.json +31 -1
- package/styles/preset.css +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tv.ts","../src/fab.ts","../src/fab-menu.ts"],"names":["baseTv","tv"],"mappings":"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","file":"fab-menu.js","sourcesContent":["/**\n * tv.ts — a tailwind-variants factory pre-configured for the M3 typescale.\n *\n * The Tailwind v4 preset exposes the 15 typescale roles as `text-<role>`\n * font-size utilities (e.g. `text-body-small`, `text-label-large`). Stock\n * tailwind-merge does not know these custom names, so it groups them with the\n * `text-<color>` utilities and drops one when a slot sets both a color *and* a\n * typescale (the common M3 case). That silently strips either the color or the\n * type, breaking token compliance.\n *\n * Teaching tailwind-merge that the typescale names belong to the `font-size`\n * group keeps color and type independent, so both survive the merge.\n */\nimport { type TV, tv as baseTv } from 'tailwind-variants';\n\nconst TYPESCALE = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-large',\n 'body-medium',\n 'body-small',\n 'label-large',\n 'label-medium',\n 'label-small',\n] as const;\n\nexport const tv: TV = (options, config) =>\n baseTv(options, {\n ...config,\n twMergeConfig: {\n extend: {\n classGroups: {\n 'font-size': [{ text: [...TYPESCALE] }],\n },\n },\n },\n });\n","/**\n * fab.ts — tailwind-variants for the M3 FAB.\n *\n * Four sizes + four container colors, elevation level3 (level4 on hover) and a\n * currentColor state-layer `::before`. The pointer ripple is added by the\n * factory. Same DOM as the VE build.\n */\nimport { createFab } from '@m3-baseui/core';\nimport { tv } from 'tailwind-variants';\n\nexport const fabTv = tv({\n base: [\n 'relative inline-flex items-center justify-center box-border overflow-hidden',\n 'border-0 cursor-pointer select-none outline-none',\n 'shadow-level3 hover:shadow-level4',\n 'transition-shadow duration-150 ease-standard',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'focus-visible:before:opacity-[var(--md-sys-state-focus)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n 'data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]',\n // M3 discourages disabled FABs (material-web removed the state). When native\n // disabled is used, apply the same container/label tokens as filled buttons.\n 'disabled:pointer-events-none disabled:shadow-none disabled:before:opacity-0',\n 'disabled:bg-on-surface/12 disabled:text-on-surface/38',\n 'data-[disabled]:pointer-events-none data-[disabled]:shadow-none data-[disabled]:before:opacity-0',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n variants: {\n size: {\n small: 'size-10 rounded-medium [&_svg]:size-6',\n regular: 'size-14 rounded-large [&_svg]:size-6',\n large: 'size-24 rounded-extra-large [&_svg]:size-9',\n extended: 'h-14 min-w-20 px-4 gap-3 rounded-large text-label-large [&_svg]:size-6',\n },\n color: {\n surface: 'bg-surface-container-high text-primary',\n primary: 'bg-primary-container text-on-primary-container',\n secondary: 'bg-secondary-container text-on-secondary-container',\n tertiary: 'bg-tertiary-container text-on-tertiary-container',\n },\n },\n defaultVariants: {\n size: 'regular',\n color: 'surface',\n },\n});\n\nexport const Fab = createFab(({ size, color }) => fabTv({ size, color }));\nexport type { FabProps, FabSize, FabColor } from '@m3-baseui/core';\n","/**\n * fab-menu.ts — tailwind-variants for the M3 FAB menu.\n *\n * The popup stacks the actions in a right-aligned column with the M3 menu\n * enter/exit motion; each item is a 56dp full-corner pill (elevation level3,\n * level4 on hover) with a currentColor state-layer `::before`, a 24dp leading\n * icon slot and a label-large label. The trigger reuses the FAB resolver. Same\n * DOM + ripple as the VE build.\n */\nimport { createFabMenu } from '@m3-baseui/core';\nimport { tv } from './tv';\nimport { fabTv } from './fab';\n\nexport const fabMenuTv = tv({\n slots: {\n popup: [\n 'flex flex-col items-end gap-2 bg-transparent outline-none',\n 'origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard',\n 'data-[starting-style]:opacity-0 data-[starting-style]:scale-95',\n 'data-[ending-style]:opacity-0',\n ],\n item: [\n 'relative inline-flex items-center gap-3 h-14 px-4 overflow-hidden box-border',\n 'cursor-pointer select-none outline-none rounded-full text-label-large',\n 'shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard',\n 'before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100',\n 'hover:before:opacity-[var(--md-sys-state-hover)]',\n 'data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]',\n 'active:before:opacity-[var(--md-sys-state-pressed)]',\n // M3 leading icon (24dp).\n '[&_[data-slot=fab-menu-leading]]:inline-flex [&_[data-slot=fab-menu-leading]>svg]:size-6',\n // M3 discourages disabled FABs; when used, match the filled-button tokens\n // (per-token, not a blanket opacity) and suppress the state layer.\n 'data-[disabled]:pointer-events-none data-[disabled]:shadow-none data-[disabled]:before:opacity-0',\n 'data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38',\n ],\n },\n variants: {\n color: {\n surface: { item: 'bg-surface-container-high text-primary' },\n primary: { item: 'bg-primary-container text-on-primary-container' },\n secondary: { item: 'bg-secondary-container text-on-secondary-container' },\n tertiary: { item: 'bg-tertiary-container text-on-tertiary-container' },\n },\n },\n defaultVariants: {\n color: 'primary',\n },\n});\n\nexport const FabMenu = createFabMenu(({ size, color }) => fabTv({ size, color }), {\n popup: fabMenuTv().popup(),\n item: (color) => fabMenuTv({ color }).item(),\n});\n\nexport type { FabMenuTriggerProps, FabMenuItemProps } from '@m3-baseui/core';\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export { Select, selectTv } from './select.js';
|
|
|
13
13
|
export { TextField, textFieldTv } from './textfield.js';
|
|
14
14
|
export { NavigationBar, navigationBarTv } from './navigation-bar.js';
|
|
15
15
|
export { Fab, fabTv } from './fab.js';
|
|
16
|
+
export { FabMenu, fabMenuTv } from './fab-menu.js';
|
|
16
17
|
export { Divider, dividerTv } from './divider.js';
|
|
17
18
|
export { Progress, circularTv, linearTv } from './progress.js';
|
|
18
19
|
export { List, listTv } from './list.js';
|
|
@@ -22,7 +23,12 @@ export { Badge, badgeTv } from './badge.js';
|
|
|
22
23
|
export { Card, cardTv } from './card.js';
|
|
23
24
|
export { SegmentedButton, segmentedButtonTv } from './segmented-button.js';
|
|
24
25
|
export { NavigationDrawer, navigationDrawerTv } from './navigation-drawer.js';
|
|
25
|
-
export {
|
|
26
|
+
export { TopAppBar, topAppBarTv } from './top-app-bar.js';
|
|
27
|
+
export { BottomAppBar, bottomAppBarTv } from './bottom-app-bar.js';
|
|
28
|
+
export { NavigationRail, navigationRailTv } from './navigation-rail.js';
|
|
29
|
+
export { BottomSheet, bottomSheetTv } from './bottom-sheet.js';
|
|
30
|
+
export { SideSheet, sideSheetTv } from './side-sheet.js';
|
|
31
|
+
export { BadgeProps, BadgeSize, BottomAppBarProps, BottomSheetVariant, ButtonProps, ButtonVariant, CardProps, CardVariant, ChipProps, ChipVariant, CircularProgressProps, ContrastLevel, DividerInset, DividerOrientation, DividerProps, FabColor, FabMenuItemProps, FabMenuTriggerProps, FabProps, FabSize, IconButtonProps, IconButtonVariant, ItemProps, LinearProgressProps, ListItemLines, ListItemProps, NavigationDrawerVariant, Ripple, SchemeVariant, SideSheetSide, SideSheetVariant, TabsVariant, TextFieldProps, TextFieldVariant, ThemeMode, ThemeProvider, ThemeProviderProps, TopAppBarProps, TopAppBarVariant, applyScheme, generateScheme, schemeToCssText, useSnackbar, useTheme } from '@m3-baseui/core';
|
|
26
32
|
import '@base-ui/react';
|
|
27
33
|
import 'react';
|
|
28
34
|
import 'tailwind-variants';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { createButton, createIconButton, createSwitch, createCheckbox, createRadio, createRadioGroup, createChip, createTooltip, createDialog, createMenu, createTabs, createSlider, createSelect, createTextField, createNavigationBar, createFab, createDivider, createProgress, createList, createSnackbar, createItem, createBadge, createCard, createSegmentedButton, createNavigationDrawer } from '@m3-baseui/core';
|
|
2
|
+
import { createButton, createIconButton, createSwitch, createCheckbox, createRadio, createRadioGroup, createChip, createTooltip, createDialog, createMenu, createTabs, createSlider, createSelect, createTextField, createNavigationBar, createFab, createFabMenu, createDivider, createProgress, createList, createSnackbar, createItem, createBadge, createCard, createSegmentedButton, createNavigationDrawer, createTopAppBar, createBottomAppBar, createNavigationRail, createBottomSheet, createSideSheet } from '@m3-baseui/core';
|
|
3
3
|
export { Ripple, ThemeProvider, applyScheme, generateScheme, schemeToCssText, useSnackbar, useTheme } from '@m3-baseui/core';
|
|
4
4
|
import { tv } from 'tailwind-variants';
|
|
5
5
|
|
|
@@ -593,13 +593,13 @@ var tabsTv = tv7({
|
|
|
593
593
|
}
|
|
594
594
|
});
|
|
595
595
|
var Tabs = createTabs((variant) => {
|
|
596
|
-
const
|
|
596
|
+
const s13 = tabsTv({ variant });
|
|
597
597
|
return {
|
|
598
|
-
root:
|
|
599
|
-
list:
|
|
600
|
-
tab:
|
|
601
|
-
indicator:
|
|
602
|
-
panel:
|
|
598
|
+
root: s13.root(),
|
|
599
|
+
list: s13.list(),
|
|
600
|
+
tab: s13.tab(),
|
|
601
|
+
indicator: s13.indicator(),
|
|
602
|
+
panel: s13.panel()
|
|
603
603
|
};
|
|
604
604
|
});
|
|
605
605
|
var sliderTv = tv7({
|
|
@@ -730,7 +730,8 @@ var textFieldTv = tv({
|
|
|
730
730
|
field: [
|
|
731
731
|
"rounded-t-extra-small bg-surface-container-highest",
|
|
732
732
|
"border-b-2 border-outline",
|
|
733
|
-
|
|
733
|
+
// M3 filled focus-active-indicator-height is 3dp (resting/error stay 2dp).
|
|
734
|
+
"group-data-[focused]:border-b-[3px] group-data-[focused]:border-primary group-data-[invalid]:border-error"
|
|
734
735
|
],
|
|
735
736
|
input: "pt-3",
|
|
736
737
|
label: [
|
|
@@ -741,7 +742,9 @@ var textFieldTv = tv({
|
|
|
741
742
|
outlined: {
|
|
742
743
|
field: [
|
|
743
744
|
"rounded-extra-small border border-outline",
|
|
744
|
-
|
|
745
|
+
// M3 outlined focus-outline-width is 3dp (matches Select's trigger);
|
|
746
|
+
// padding drops 2px so content stays steady as the 1dp border grows.
|
|
747
|
+
"group-data-[focused]:border-[3px] group-data-[focused]:border-primary group-data-[focused]:px-[14px]",
|
|
745
748
|
"group-data-[invalid]:border-error"
|
|
746
749
|
],
|
|
747
750
|
label: [
|
|
@@ -776,7 +779,8 @@ var navigationBarTv = tv({
|
|
|
776
779
|
item: [
|
|
777
780
|
"group relative flex flex-1 flex-col items-center justify-center gap-1 px-1 pt-3 pb-4",
|
|
778
781
|
"bg-transparent border-0 cursor-pointer select-none outline-none",
|
|
779
|
-
|
|
782
|
+
// M3 disabled is per-token (icon + label dimmed below), not a blanket fade.
|
|
783
|
+
"data-[disabled]:pointer-events-none"
|
|
780
784
|
],
|
|
781
785
|
iconWrap: "relative flex items-center justify-center w-16 h-8",
|
|
782
786
|
indicator: [
|
|
@@ -786,17 +790,32 @@ var navigationBarTv = tv({
|
|
|
786
790
|
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
787
791
|
"group-hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
788
792
|
"group-focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
789
|
-
"group-active:before:opacity-[var(--md-sys-state-pressed)]"
|
|
793
|
+
"group-active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
794
|
+
// No state layer on a disabled destination.
|
|
795
|
+
"group-data-[disabled]:before:opacity-0"
|
|
790
796
|
],
|
|
791
797
|
icon: [
|
|
792
798
|
"relative flex items-center justify-center text-on-surface-variant",
|
|
793
799
|
"transition-colors duration-150 ease-standard",
|
|
794
|
-
|
|
800
|
+
// Raw <svg> icons render at 24dp (Material Symbols set their own size).
|
|
801
|
+
"[&_svg]:size-6",
|
|
802
|
+
"group-data-[pressed]:text-on-secondary-container",
|
|
803
|
+
// M3 disabled: icon dims to on-surface/0.38. The item is the only `.group`,
|
|
804
|
+
// so the disabled+active override must test both attributes on that single
|
|
805
|
+
// element (`.group[data-disabled][data-pressed] &`) to outrank the equal-
|
|
806
|
+
// specificity data-[pressed] color — a stacked `group-data-*:group-data-*`
|
|
807
|
+
// would expect two nested groups and never match.
|
|
808
|
+
"group-data-[disabled]:text-on-surface/[0.38]",
|
|
809
|
+
"group-[&[data-disabled][data-pressed]]:text-on-surface/[0.38]"
|
|
795
810
|
],
|
|
796
811
|
label: [
|
|
797
812
|
"text-label-medium text-on-surface-variant",
|
|
798
813
|
"transition-colors duration-150 ease-standard",
|
|
799
|
-
"group-data-[pressed]:text-on-surface group-data-[pressed]:font-bold"
|
|
814
|
+
"group-data-[pressed]:text-on-surface group-data-[pressed]:font-bold",
|
|
815
|
+
// M3 disabled: label dims to on-surface/0.38. Same-element override (see the
|
|
816
|
+
// icon slot) keeps a disabled+active label dimmed.
|
|
817
|
+
"group-data-[disabled]:text-on-surface/[0.38]",
|
|
818
|
+
"group-[&[data-disabled][data-pressed]]:text-on-surface/[0.38]"
|
|
800
819
|
]
|
|
801
820
|
}
|
|
802
821
|
});
|
|
@@ -847,6 +866,46 @@ var fabTv = tv({
|
|
|
847
866
|
}
|
|
848
867
|
});
|
|
849
868
|
var Fab = createFab(({ size, color }) => fabTv({ size, color }));
|
|
869
|
+
var fabMenuTv = tv7({
|
|
870
|
+
slots: {
|
|
871
|
+
popup: [
|
|
872
|
+
"flex flex-col items-end gap-2 bg-transparent outline-none",
|
|
873
|
+
"origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
|
|
874
|
+
"data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
|
|
875
|
+
"data-[ending-style]:opacity-0"
|
|
876
|
+
],
|
|
877
|
+
item: [
|
|
878
|
+
"relative inline-flex items-center gap-3 h-14 px-4 overflow-hidden box-border",
|
|
879
|
+
"cursor-pointer select-none outline-none rounded-full text-label-large",
|
|
880
|
+
"shadow-level3 hover:shadow-level4 transition-shadow duration-150 ease-standard",
|
|
881
|
+
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
882
|
+
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
883
|
+
"data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
|
|
884
|
+
"active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
885
|
+
// M3 leading icon (24dp).
|
|
886
|
+
"[&_[data-slot=fab-menu-leading]]:inline-flex [&_[data-slot=fab-menu-leading]>svg]:size-6",
|
|
887
|
+
// M3 discourages disabled FABs; when used, match the filled-button tokens
|
|
888
|
+
// (per-token, not a blanket opacity) and suppress the state layer.
|
|
889
|
+
"data-[disabled]:pointer-events-none data-[disabled]:shadow-none data-[disabled]:before:opacity-0",
|
|
890
|
+
"data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
|
|
891
|
+
]
|
|
892
|
+
},
|
|
893
|
+
variants: {
|
|
894
|
+
color: {
|
|
895
|
+
surface: { item: "bg-surface-container-high text-primary" },
|
|
896
|
+
primary: { item: "bg-primary-container text-on-primary-container" },
|
|
897
|
+
secondary: { item: "bg-secondary-container text-on-secondary-container" },
|
|
898
|
+
tertiary: { item: "bg-tertiary-container text-on-tertiary-container" }
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
defaultVariants: {
|
|
902
|
+
color: "primary"
|
|
903
|
+
}
|
|
904
|
+
});
|
|
905
|
+
var FabMenu = createFabMenu(({ size, color }) => fabTv({ size, color }), {
|
|
906
|
+
popup: fabMenuTv().popup(),
|
|
907
|
+
item: (color) => fabMenuTv({ color }).item()
|
|
908
|
+
});
|
|
850
909
|
var dividerTv = tv({
|
|
851
910
|
base: "shrink-0 self-stretch border-0 bg-outline-variant",
|
|
852
911
|
variants: {
|
|
@@ -863,7 +922,8 @@ var dividerTv = tv({
|
|
|
863
922
|
compoundVariants: [
|
|
864
923
|
{ orientation: "horizontal", inset: "inset", class: "ms-4" },
|
|
865
924
|
{ orientation: "horizontal", inset: "middle", class: "mx-4" },
|
|
866
|
-
|
|
925
|
+
// Logical block-start margin mirrors the VE recipe's `marginBlockStart`.
|
|
926
|
+
{ orientation: "vertical", inset: "inset", class: "[margin-block-start:1rem]" },
|
|
867
927
|
{ orientation: "vertical", inset: "middle", class: "my-4" }
|
|
868
928
|
],
|
|
869
929
|
defaultVariants: {
|
|
@@ -976,7 +1036,7 @@ var snackbarTv = tv({
|
|
|
976
1036
|
],
|
|
977
1037
|
content: "flex flex-col flex-1 min-w-0 gap-0.5",
|
|
978
1038
|
title: "text-body-medium",
|
|
979
|
-
description: "text-body-
|
|
1039
|
+
description: "text-body-medium",
|
|
980
1040
|
action: [
|
|
981
1041
|
"relative inline-flex items-center justify-center shrink-0 h-9 px-3 overflow-hidden",
|
|
982
1042
|
"rounded-extra-small bg-transparent border-0 cursor-pointer outline-none",
|
|
@@ -1054,6 +1114,8 @@ var cardTv = tv7({
|
|
|
1054
1114
|
interactive: {
|
|
1055
1115
|
true: [
|
|
1056
1116
|
"group overflow-hidden cursor-pointer select-none text-left w-full outline-none",
|
|
1117
|
+
// Animate the elevation lift/settle to match the VE box-shadow transition.
|
|
1118
|
+
"transition-shadow duration-150 ease-standard",
|
|
1057
1119
|
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
1058
1120
|
"hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
1059
1121
|
"focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
@@ -1160,7 +1222,188 @@ var NavigationDrawer = createNavigationDrawer({
|
|
|
1160
1222
|
label: s8.label(),
|
|
1161
1223
|
trailing: s8.trailing()
|
|
1162
1224
|
});
|
|
1225
|
+
var topAppBarTv = tv7({
|
|
1226
|
+
slots: {
|
|
1227
|
+
root: "flex flex-col w-full box-border h-16 bg-surface text-on-surface",
|
|
1228
|
+
row: "flex items-center gap-1 h-16 px-1",
|
|
1229
|
+
leading: "flex items-center shrink-0 text-on-surface [&_svg]:size-6",
|
|
1230
|
+
headline: "min-w-0 truncate text-on-surface",
|
|
1231
|
+
trailing: "flex items-center gap-1 shrink-0 text-on-surface-variant [&_svg]:size-6"
|
|
1232
|
+
},
|
|
1233
|
+
variants: {
|
|
1234
|
+
variant: {
|
|
1235
|
+
small: { headline: "flex-1 px-3 text-title-large" },
|
|
1236
|
+
center: { headline: "flex-1 px-3 text-center text-title-large" },
|
|
1237
|
+
medium: { root: "h-28", headline: "px-4 pb-6 text-headline-small" },
|
|
1238
|
+
large: { root: "h-38", headline: "px-4 pb-7 text-headline-medium" }
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
defaultVariants: {
|
|
1242
|
+
variant: "small"
|
|
1243
|
+
}
|
|
1244
|
+
});
|
|
1245
|
+
var TopAppBar = createTopAppBar((args) => {
|
|
1246
|
+
const s13 = topAppBarTv({ variant: args.variant });
|
|
1247
|
+
return {
|
|
1248
|
+
root: s13.root(),
|
|
1249
|
+
row: s13.row(),
|
|
1250
|
+
leading: s13.leading(),
|
|
1251
|
+
headline: s13.headline(),
|
|
1252
|
+
trailing: s13.trailing()
|
|
1253
|
+
};
|
|
1254
|
+
});
|
|
1255
|
+
var bottomAppBarTv = tv7({
|
|
1256
|
+
slots: {
|
|
1257
|
+
root: "flex items-center justify-between w-full box-border h-20 px-1 bg-surface-container text-on-surface-variant",
|
|
1258
|
+
actions: "flex items-center gap-1 pl-2 [&_svg]:size-6",
|
|
1259
|
+
fab: "flex items-center pr-3"
|
|
1260
|
+
}
|
|
1261
|
+
});
|
|
1262
|
+
var s9 = bottomAppBarTv();
|
|
1263
|
+
var BottomAppBar = createBottomAppBar({
|
|
1264
|
+
root: s9.root(),
|
|
1265
|
+
actions: s9.actions(),
|
|
1266
|
+
fab: s9.fab()
|
|
1267
|
+
});
|
|
1268
|
+
var navigationRailTv = tv7({
|
|
1269
|
+
slots: {
|
|
1270
|
+
root: "flex flex-col items-center gap-3 h-full w-20 py-5 bg-surface",
|
|
1271
|
+
header: "flex flex-col items-center gap-3 mb-1",
|
|
1272
|
+
item: [
|
|
1273
|
+
"group relative flex flex-col items-center justify-center gap-1 px-1 py-1",
|
|
1274
|
+
"bg-transparent border-0 cursor-pointer select-none outline-none",
|
|
1275
|
+
// M3 disabled is per-token (icon + label dimmed below), not a blanket fade.
|
|
1276
|
+
"data-[disabled]:pointer-events-none"
|
|
1277
|
+
],
|
|
1278
|
+
iconWrap: "relative flex items-center justify-center w-14 h-8",
|
|
1279
|
+
indicator: [
|
|
1280
|
+
"absolute inset-0 rounded-full bg-transparent overflow-hidden",
|
|
1281
|
+
"transition-colors duration-150 ease-standard",
|
|
1282
|
+
"group-data-[pressed]:bg-secondary-container",
|
|
1283
|
+
"before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
|
|
1284
|
+
"group-hover:before:opacity-[var(--md-sys-state-hover)]",
|
|
1285
|
+
"group-focus-visible:before:opacity-[var(--md-sys-state-focus)]",
|
|
1286
|
+
"group-active:before:opacity-[var(--md-sys-state-pressed)]",
|
|
1287
|
+
// No state layer on a disabled destination.
|
|
1288
|
+
"group-data-[disabled]:before:opacity-0"
|
|
1289
|
+
],
|
|
1290
|
+
icon: [
|
|
1291
|
+
"relative flex items-center justify-center text-on-surface-variant",
|
|
1292
|
+
"transition-colors duration-150 ease-standard",
|
|
1293
|
+
// Raw <svg> icons render at 24dp (Material Symbols set their own size).
|
|
1294
|
+
"[&_svg]:size-6",
|
|
1295
|
+
"group-data-[pressed]:text-on-secondary-container",
|
|
1296
|
+
// M3 disabled: icon dims to on-surface/0.38. The item is the only `.group`,
|
|
1297
|
+
// so the disabled+active override tests both attributes on that single
|
|
1298
|
+
// element (see NavigationBar for the rationale).
|
|
1299
|
+
"group-data-[disabled]:text-on-surface/[0.38]",
|
|
1300
|
+
"group-[&[data-disabled][data-pressed]]:text-on-surface/[0.38]"
|
|
1301
|
+
],
|
|
1302
|
+
label: [
|
|
1303
|
+
"text-label-medium text-on-surface-variant",
|
|
1304
|
+
"transition-colors duration-150 ease-standard",
|
|
1305
|
+
"group-data-[pressed]:text-on-surface group-data-[pressed]:font-bold",
|
|
1306
|
+
// M3 disabled: label dims to on-surface/0.38 (same-element override).
|
|
1307
|
+
"group-data-[disabled]:text-on-surface/[0.38]",
|
|
1308
|
+
"group-[&[data-disabled][data-pressed]]:text-on-surface/[0.38]"
|
|
1309
|
+
]
|
|
1310
|
+
}
|
|
1311
|
+
});
|
|
1312
|
+
var s10 = navigationRailTv();
|
|
1313
|
+
var NavigationRail = createNavigationRail({
|
|
1314
|
+
root: s10.root(),
|
|
1315
|
+
header: s10.header(),
|
|
1316
|
+
item: s10.item(),
|
|
1317
|
+
iconWrap: s10.iconWrap(),
|
|
1318
|
+
indicator: s10.indicator(),
|
|
1319
|
+
icon: s10.icon(),
|
|
1320
|
+
label: s10.label()
|
|
1321
|
+
});
|
|
1322
|
+
var bottomSheetTv = tv7({
|
|
1323
|
+
slots: {
|
|
1324
|
+
backdrop: [
|
|
1325
|
+
"fixed inset-0 z-40 bg-scrim/32",
|
|
1326
|
+
"transition-opacity duration-300 ease-emphasized",
|
|
1327
|
+
"data-[swiping]:transition-none",
|
|
1328
|
+
"data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
|
|
1329
|
+
],
|
|
1330
|
+
viewport: "fixed inset-0 z-50 flex items-end justify-center",
|
|
1331
|
+
popup: [
|
|
1332
|
+
"box-border w-full max-w-[640px] max-h-[calc(100dvh-56px)]",
|
|
1333
|
+
"overflow-y-auto overscroll-contain touch-auto outline-none",
|
|
1334
|
+
"pb-6 bg-surface-container-low text-on-surface rounded-t-extra-large shadow-level1",
|
|
1335
|
+
"[transform:translateY(calc(var(--drawer-snap-point-offset)+var(--drawer-swipe-movement-y)))]",
|
|
1336
|
+
"transition-transform duration-300 ease-emphasized",
|
|
1337
|
+
"data-[swiping]:select-none",
|
|
1338
|
+
"data-[starting-style]:[transform:translateY(100%)] data-[ending-style]:[transform:translateY(100%)]"
|
|
1339
|
+
],
|
|
1340
|
+
handle: "mx-auto mt-4 mb-2 h-1 w-8 shrink-0 rounded-full bg-on-surface-variant/40",
|
|
1341
|
+
title: ["m-0 px-6 pt-2 text-title-large text-on-surface"],
|
|
1342
|
+
description: ["m-0 px-6 pt-1 text-body-medium text-on-surface-variant"]
|
|
1343
|
+
}
|
|
1344
|
+
});
|
|
1345
|
+
var s11 = bottomSheetTv();
|
|
1346
|
+
var BottomSheet = createBottomSheet({
|
|
1347
|
+
backdrop: s11.backdrop(),
|
|
1348
|
+
viewport: s11.viewport(),
|
|
1349
|
+
popup: s11.popup(),
|
|
1350
|
+
handle: s11.handle(),
|
|
1351
|
+
title: s11.title(),
|
|
1352
|
+
description: s11.description()
|
|
1353
|
+
});
|
|
1354
|
+
var sideSheetTv = tv7({
|
|
1355
|
+
slots: {
|
|
1356
|
+
backdrop: [
|
|
1357
|
+
"fixed inset-0 z-40 bg-scrim/32",
|
|
1358
|
+
"transition-opacity duration-300 ease-emphasized",
|
|
1359
|
+
"data-[swiping]:transition-none",
|
|
1360
|
+
"data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
|
|
1361
|
+
],
|
|
1362
|
+
viewport: "fixed inset-0 z-50 flex items-stretch",
|
|
1363
|
+
popup: [
|
|
1364
|
+
"box-border h-full w-[320px] max-w-[calc(100vw-56px)]",
|
|
1365
|
+
"flex flex-col overflow-y-auto overscroll-contain touch-auto outline-none",
|
|
1366
|
+
"bg-surface-container-low text-on-surface",
|
|
1367
|
+
"data-[swipe-direction=right]:ml-auto data-[swipe-direction=left]:mr-auto",
|
|
1368
|
+
"[transform:translateX(var(--drawer-swipe-movement-x))]",
|
|
1369
|
+
"transition-transform duration-300 ease-emphasized",
|
|
1370
|
+
"data-[swiping]:select-none",
|
|
1371
|
+
"data-[swipe-direction=right]:data-[starting-style]:[transform:translateX(100%)]",
|
|
1372
|
+
"data-[swipe-direction=right]:data-[ending-style]:[transform:translateX(100%)]",
|
|
1373
|
+
"data-[swipe-direction=left]:data-[starting-style]:[transform:translateX(-100%)]",
|
|
1374
|
+
"data-[swipe-direction=left]:data-[ending-style]:[transform:translateX(-100%)]"
|
|
1375
|
+
],
|
|
1376
|
+
header: "flex items-center gap-2 min-h-14 px-4 py-2",
|
|
1377
|
+
title: ["flex-1 m-0 text-title-large text-on-surface"],
|
|
1378
|
+
description: ["m-0 px-6 pb-4 text-body-medium text-on-surface-variant"],
|
|
1379
|
+
close: "inline-flex shrink-0"
|
|
1380
|
+
},
|
|
1381
|
+
variants: {
|
|
1382
|
+
variant: {
|
|
1383
|
+
modal: {
|
|
1384
|
+
popup: [
|
|
1385
|
+
"shadow-level1",
|
|
1386
|
+
"data-[swipe-direction=right]:rounded-s-large data-[swipe-direction=left]:rounded-e-large"
|
|
1387
|
+
]
|
|
1388
|
+
},
|
|
1389
|
+
standard: { popup: "shadow-none" }
|
|
1390
|
+
}
|
|
1391
|
+
},
|
|
1392
|
+
defaultVariants: {
|
|
1393
|
+
variant: "modal"
|
|
1394
|
+
}
|
|
1395
|
+
});
|
|
1396
|
+
var s12 = sideSheetTv();
|
|
1397
|
+
var SideSheet = createSideSheet({
|
|
1398
|
+
backdrop: s12.backdrop(),
|
|
1399
|
+
viewport: s12.viewport(),
|
|
1400
|
+
popup: ({ variant }) => sideSheetTv({ variant }).popup(),
|
|
1401
|
+
header: s12.header(),
|
|
1402
|
+
title: s12.title(),
|
|
1403
|
+
description: s12.description(),
|
|
1404
|
+
close: s12.close()
|
|
1405
|
+
});
|
|
1163
1406
|
|
|
1164
|
-
export { Badge, Button, Card, Checkbox, Chip, Dialog, Divider, Fab, IconButton, Item, List, Menu, NavigationBar, NavigationDrawer, Progress, Radio, RadioGroup, SegmentedButton, Select, Slider, Snackbar, Switch, Tabs, TextField, Tooltip, badgeTv, button, cardTv, checkboxTv, chipTv, circularTv, dialogTv, dividerTv, fabTv, iconButton, itemTv, linearTv, listTv, menuTv, navigationBarTv, navigationDrawerTv, radioTv, segmentedButtonTv, selectTv, sliderTv, snackbarTv, switchTv, tabsTv, textFieldTv, tooltipTv };
|
|
1407
|
+
export { Badge, BottomAppBar, BottomSheet, Button, Card, Checkbox, Chip, Dialog, Divider, Fab, FabMenu, IconButton, Item, List, Menu, NavigationBar, NavigationDrawer, NavigationRail, Progress, Radio, RadioGroup, SegmentedButton, Select, SideSheet, Slider, Snackbar, Switch, Tabs, TextField, Tooltip, TopAppBar, badgeTv, bottomAppBarTv, bottomSheetTv, button, cardTv, checkboxTv, chipTv, circularTv, dialogTv, dividerTv, fabMenuTv, fabTv, iconButton, itemTv, linearTv, listTv, menuTv, navigationBarTv, navigationDrawerTv, navigationRailTv, radioTv, segmentedButtonTv, selectTv, sideSheetTv, sliderTv, snackbarTv, switchTv, tabsTv, textFieldTv, tooltipTv, topAppBarTv };
|
|
1165
1408
|
//# sourceMappingURL=index.js.map
|
|
1166
1409
|
//# sourceMappingURL=index.js.map
|