@m3-baseui/react-tailwind 1.0.4 → 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/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 s9 = tabsTv({ variant });
596
+ const s13 = tabsTv({ variant });
597
597
  return {
598
- root: s9.root(),
599
- list: s9.list(),
600
- tab: s9.tab(),
601
- indicator: s9.indicator(),
602
- panel: s9.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({
@@ -866,6 +866,46 @@ var fabTv = tv({
866
866
  }
867
867
  });
868
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
+ });
869
909
  var dividerTv = tv({
870
910
  base: "shrink-0 self-stretch border-0 bg-outline-variant",
871
911
  variants: {
@@ -1182,7 +1222,188 @@ var NavigationDrawer = createNavigationDrawer({
1182
1222
  label: s8.label(),
1183
1223
  trailing: s8.trailing()
1184
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
+ });
1185
1406
 
1186
- 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 };
1187
1408
  //# sourceMappingURL=index.js.map
1188
1409
  //# sourceMappingURL=index.js.map