@m3-baseui/react-tailwind 1.1.0 → 1.3.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.
Files changed (46) hide show
  1. package/dist/button-group.d.ts +48 -0
  2. package/dist/button-group.js +58 -0
  3. package/dist/button-group.js.map +1 -0
  4. package/dist/carousel.d.ts +115 -0
  5. package/dist/carousel.js +63 -0
  6. package/dist/carousel.js.map +1 -0
  7. package/dist/checkbox.js +5 -0
  8. package/dist/checkbox.js.map +1 -1
  9. package/dist/chip.d.ts +31 -0
  10. package/dist/chip.js +34 -7
  11. package/dist/chip.js.map +1 -1
  12. package/dist/date-picker.d.ts +188 -0
  13. package/dist/date-picker.js +151 -0
  14. package/dist/date-picker.js.map +1 -0
  15. package/dist/icon-button.js +4 -1
  16. package/dist/icon-button.js.map +1 -1
  17. package/dist/index.d.ts +9 -1
  18. package/dist/index.js +501 -29
  19. package/dist/index.js.map +1 -1
  20. package/dist/loading-indicator.d.ts +68 -0
  21. package/dist/loading-indicator.js +61 -0
  22. package/dist/loading-indicator.js.map +1 -0
  23. package/dist/navigation-bar.d.ts +5 -5
  24. package/dist/navigation-rail.d.ts +5 -5
  25. package/dist/radio.js +8 -3
  26. package/dist/radio.js.map +1 -1
  27. package/dist/search.d.ts +148 -0
  28. package/dist/search.js +105 -0
  29. package/dist/search.js.map +1 -0
  30. package/dist/segmented-button.d.ts +5 -5
  31. package/dist/slider.d.ts +33 -6
  32. package/dist/slider.js +16 -3
  33. package/dist/slider.js.map +1 -1
  34. package/dist/split-button.d.ts +201 -0
  35. package/dist/split-button.js +126 -0
  36. package/dist/split-button.js.map +1 -0
  37. package/dist/switch.js +4 -1
  38. package/dist/switch.js.map +1 -1
  39. package/dist/time-picker.d.ts +144 -0
  40. package/dist/time-picker.js +101 -0
  41. package/dist/time-picker.js.map +1 -0
  42. package/dist/toolbar.d.ts +73 -0
  43. package/dist/toolbar.js +55 -0
  44. package/dist/toolbar.js.map +1 -0
  45. package/package.json +41 -1
  46. package/styles/preset.css +15 -0
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, createFabMenu, createDivider, createProgress, createList, createSnackbar, createItem, createBadge, createCard, createSegmentedButton, createNavigationDrawer, createTopAppBar, createBottomAppBar, createNavigationRail, createBottomSheet, createSideSheet } 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, createLoadingIndicator, createList, createSnackbar, createItem, createBadge, createCard, createSegmentedButton, createButtonGroup, createSplitButton, createNavigationDrawer, createTopAppBar, createBottomAppBar, createNavigationRail, createBottomSheet, createSideSheet, createSearch, createDatePicker, createTimePicker, createToolbar, createCarousel } 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
 
@@ -91,7 +91,10 @@ var widthCompounds = Object.entries(WIDTHS).flatMap(
91
91
  var iconButton = tv({
92
92
  base: [
93
93
  "relative inline-flex items-center justify-center shrink-0",
94
- "rounded-full overflow-hidden cursor-pointer select-none border-0 bg-transparent",
94
+ // No `overflow-hidden`: it would clip the 48dp touch target on small sizes.
95
+ // The state layer is already rounded (before:rounded-[inherit]); the ripple
96
+ // self-clips.
97
+ "rounded-full cursor-pointer select-none border-0 bg-transparent",
95
98
  "transition-[box-shadow,background-color,color] duration-200 ease-standard",
96
99
  // State layer overlay
97
100
  "before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none",
@@ -199,7 +202,10 @@ var switchTv = tv({
199
202
  "absolute top-1/2 -translate-y-1/2 left-[6px] size-4 rounded-full pointer-events-none",
200
203
  "flex items-center justify-center",
201
204
  "bg-outline text-on-surface",
202
- "transition-all duration-200 ease-standard",
205
+ // M3 spatial motion: the handle slides/grows with emphasized easing over
206
+ // 300ms (token-backed). emphasized is overshoot-free, so it stays safe for
207
+ // the handle's color transitions too (no spring flicker on background-color).
208
+ "transition-all ease-emphasized duration-[var(--md-sys-motion-duration-medium2)]",
203
209
  "data-[checked]:left-[22px] data-[checked]:size-6 data-[checked]:bg-on-primary data-[checked]:text-primary",
204
210
  // M3 with-icon: the unchecked handle grows to 24dp to fit its icon
205
211
  "data-[with-icon]:data-[unchecked]:left-1 data-[with-icon]:data-[unchecked]:size-6",
@@ -276,7 +282,12 @@ var checkboxTv = tv({
276
282
  "group-data-[error]:text-on-error",
277
283
  // M3 disabled: the check / dash turn the surface color on the faint box
278
284
  "group-data-[disabled]:text-surface",
285
+ // M3 asymmetric motion: unselected-exit accelerates out (150ms), the
286
+ // selected/indeterminate-enter decelerates in (350ms). Token-backed.
279
287
  "opacity-0 data-[checked]:opacity-100 data-[indeterminate]:opacity-100",
288
+ "transition-opacity ease-emphasized-accelerate duration-[var(--md-sys-motion-duration-short3)]",
289
+ "data-[checked]:ease-emphasized-decelerate data-[checked]:duration-[var(--md-sys-motion-duration-medium3)]",
290
+ "data-[indeterminate]:ease-emphasized-decelerate data-[indeterminate]:duration-[var(--md-sys-motion-duration-medium3)]",
280
291
  'data-[indeterminate]:after:content-[""] data-[indeterminate]:after:absolute',
281
292
  "data-[indeterminate]:after:w-[10px] data-[indeterminate]:after:h-[2px] data-[indeterminate]:after:rounded-full data-[indeterminate]:after:bg-current"
282
293
  ],
@@ -316,9 +327,14 @@ var radioTv = tv({
316
327
  "active:before:opacity-[var(--md-sys-state-pressed)]"
317
328
  ],
318
329
  indicator: [
319
- "block rounded-full bg-primary pointer-events-none",
320
- "size-0 opacity-0 transition-all duration-150 ease-standard",
321
- "data-[checked]:size-2.5 data-[checked]:opacity-100",
330
+ "block rounded-full bg-primary pointer-events-none origin-center",
331
+ // M3 inner-circle-grow: the 10dp dot scales from center with
332
+ // emphasized-decelerate over 300ms (token-backed), not width/height from 0.
333
+ // Tailwind v4's `scale-*` sets the standalone `scale` property (not
334
+ // `transform`), so the transition must name `scale` to animate the grow.
335
+ "size-2.5 scale-0 opacity-0",
336
+ "transition-[scale,opacity] ease-emphasized-decelerate duration-[var(--md-sys-motion-duration-medium2)]",
337
+ "data-[checked]:scale-100 data-[checked]:opacity-100",
322
338
  "group-data-[error]:bg-error",
323
339
  "group-data-[disabled]:bg-on-surface/38"
324
340
  ]
@@ -331,9 +347,14 @@ var chipTv = tv({
331
347
  slots: {
332
348
  root: [
333
349
  "group relative inline-flex items-center justify-center gap-2 box-border",
334
- "h-8 px-4 rounded-[8px] overflow-hidden select-none border bg-transparent text-label-large",
350
+ // No `overflow-hidden`: it would clip the 48dp touch target. The state
351
+ // layer is rounded to match instead (before:rounded-[inherit]); the ripple
352
+ // self-clips.
353
+ "h-8 px-4 rounded-[8px] select-none border bg-transparent text-label-large",
354
+ // M3 with-icon padding: the icon side trims to 8dp (label side stays 16dp).
355
+ "data-[with-leading-icon]:pl-2",
335
356
  "transition-colors duration-150 ease-standard",
336
- "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
357
+ "before:absolute before:inset-0 before:rounded-[inherit] before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
337
358
  "hover:before:opacity-[var(--md-sys-state-hover)]",
338
359
  "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
339
360
  "active:before:opacity-[var(--md-sys-state-pressed)]",
@@ -358,20 +379,36 @@ var chipTv = tv({
358
379
  "inline-flex items-center justify-center shrink-0 size-6 -ml-3 rounded-full overflow-hidden",
359
380
  "bg-primary-container text-on-primary-container",
360
381
  "[&>img]:size-full [&>img]:object-cover"
382
+ ],
383
+ // M3 leading icon: 18dp; root `data-with-leading-icon` trims leading padding to 8dp.
384
+ icon: [
385
+ "inline-flex items-center justify-center shrink-0 size-[18px]",
386
+ "[&>svg]:size-full",
387
+ "group-disabled:text-on-surface/38 group-data-[disabled]:text-on-surface/38"
361
388
  ]
362
389
  },
363
390
  variants: {
364
391
  variant: {
365
- assist: { root: "border-outline text-on-surface cursor-pointer" },
366
- suggestion: { root: "border-outline text-on-surface-variant cursor-pointer" },
367
- input: { root: "border-outline text-on-surface-variant cursor-default pr-2" },
392
+ assist: {
393
+ root: "border-outline text-on-surface cursor-pointer",
394
+ icon: "text-primary"
395
+ },
396
+ suggestion: {
397
+ root: "border-outline text-on-surface-variant cursor-pointer",
398
+ icon: "text-on-surface-variant"
399
+ },
400
+ input: {
401
+ root: "border-outline text-on-surface-variant cursor-default pr-2",
402
+ icon: "text-on-surface-variant"
403
+ },
368
404
  filter: {
369
405
  root: [
370
406
  "border-outline text-on-surface-variant cursor-pointer",
371
407
  "data-[pressed]:bg-secondary-container data-[pressed]:text-on-secondary-container data-[pressed]:border-transparent",
372
408
  // M3 disabled + selected: faint on-surface/12 container
373
409
  "data-[pressed]:data-[disabled]:bg-on-surface/12 data-[pressed]:disabled:bg-on-surface/12"
374
- ]
410
+ ],
411
+ icon: "text-on-surface-variant group-data-[pressed]:hidden"
375
412
  }
376
413
  },
377
414
  // M3 elevated: filled surface-container-low + elevation level1→level2 on hover,
@@ -392,7 +429,13 @@ var chipTv = tv({
392
429
  });
393
430
  var Chip = createChip(({ variant, elevated }) => {
394
431
  const c3 = chipTv({ variant, elevated });
395
- return { root: c3.root(), remove: c3.remove(), check: c3.check(), avatar: c3.avatar() };
432
+ return {
433
+ root: c3.root(),
434
+ remove: c3.remove(),
435
+ check: c3.check(),
436
+ avatar: c3.avatar(),
437
+ icon: c3.icon()
438
+ };
396
439
  });
397
440
  var TYPESCALE = [
398
441
  "display-large",
@@ -593,13 +636,13 @@ var tabsTv = tv7({
593
636
  }
594
637
  });
595
638
  var Tabs = createTabs((variant) => {
596
- const s13 = tabsTv({ variant });
639
+ const s14 = tabsTv({ variant });
597
640
  return {
598
- root: s13.root(),
599
- list: s13.list(),
600
- tab: s13.tab(),
601
- indicator: s13.indicator(),
602
- panel: s13.panel()
641
+ root: s14.root(),
642
+ list: s14.list(),
643
+ tab: s14.tab(),
644
+ indicator: s14.indicator(),
645
+ panel: s14.panel()
603
646
  };
604
647
  });
605
648
  var sliderTv = tv7({
@@ -615,7 +658,7 @@ var sliderTv = tv7({
615
658
  "group-data-[disabled]:bg-on-surface/[0.38]"
616
659
  ],
617
660
  thumb: [
618
- "relative size-5 rounded-full bg-primary outline-none",
661
+ "group/thumb relative size-5 rounded-full bg-primary outline-none",
619
662
  'before:content-[""] before:absolute before:left-1/2 before:top-1/2 before:-translate-x-1/2 before:-translate-y-1/2',
620
663
  "before:size-10 before:rounded-full before:bg-primary before:opacity-0 before:transition-opacity before:duration-100",
621
664
  "hover:before:opacity-[var(--md-sys-state-hover)]",
@@ -623,7 +666,17 @@ var sliderTv = tv7({
623
666
  "data-[dragging]:before:opacity-[var(--md-sys-state-dragged)]",
624
667
  "group-data-[disabled]:bg-on-surface/[0.38]"
625
668
  ],
626
- value: "text-label-large text-on-surface-variant tabular-nums"
669
+ value: "text-label-large text-on-surface-variant tabular-nums",
670
+ tickList: "pointer-events-none absolute inset-0",
671
+ tick: [
672
+ "absolute size-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-on-surface-variant",
673
+ "data-[active]:bg-on-primary/[0.38]"
674
+ ],
675
+ valueLabel: [
676
+ "pointer-events-none absolute bottom-full left-1/2 mb-2 -translate-x-1/2 whitespace-nowrap rounded px-2 py-0.5",
677
+ "bg-primary text-label-large text-on-primary tabular-nums opacity-0",
678
+ "data-[visible]:opacity-100"
679
+ ]
627
680
  }
628
681
  });
629
682
  var s2 = sliderTv();
@@ -633,7 +686,10 @@ var Slider = createSlider({
633
686
  track: s2.track(),
634
687
  indicator: s2.indicator(),
635
688
  thumb: s2.thumb(),
636
- value: s2.value()
689
+ value: s2.value(),
690
+ tickList: s2.tickList(),
691
+ tick: s2.tick(),
692
+ valueLabel: s2.valueLabel()
637
693
  });
638
694
  var selectTv = tv7({
639
695
  slots: {
@@ -964,6 +1020,29 @@ var Progress = createProgress({
964
1020
  linear: { root: l.root(), track: l.track(), indicator: l.indicator() },
965
1021
  circular: { root: c2.root(), track: c2.track(), indicator: c2.indicator() }
966
1022
  });
1023
+ var loadingIndicatorTv = tv7({
1024
+ slots: {
1025
+ // The SVG is a fixed 38dp active indicator. Uncontained: the box shrinks to
1026
+ // the shape. Contained: a 48dp pill wraps it (5dp inset on each side).
1027
+ root: "inline-flex items-center justify-center [&_svg]:block [&_svg]:size-[38px]",
1028
+ indicator: [
1029
+ "fill-primary",
1030
+ // Morph + rotate about the shape's own centre (transform-box: fill-box).
1031
+ "[transform-box:fill-box] origin-center animate-m3-loading"
1032
+ ]
1033
+ },
1034
+ variants: {
1035
+ contained: {
1036
+ true: { root: "size-12 rounded-full bg-secondary-container" },
1037
+ false: {}
1038
+ }
1039
+ },
1040
+ defaultVariants: { contained: false }
1041
+ });
1042
+ var LoadingIndicator = createLoadingIndicator(({ contained }) => {
1043
+ const s14 = loadingIndicatorTv({ contained });
1044
+ return { root: s14.root(), indicator: s14.indicator() };
1045
+ });
967
1046
  var listTv = tv7({
968
1047
  slots: {
969
1048
  root: "list-none m-0 px-0 py-2 bg-transparent",
@@ -1182,6 +1261,114 @@ var SegmentedButton = createSegmentedButton({
1182
1261
  icon: s7.icon(),
1183
1262
  label: s7.label()
1184
1263
  });
1264
+ var buttonGroup = tv7({
1265
+ base: "inline-flex items-center",
1266
+ variants: {
1267
+ variant: {
1268
+ standard: "gap-2",
1269
+ connected: [
1270
+ "gap-0.5",
1271
+ "[&>*:not(:first-child):not(:last-child)]:rounded-small",
1272
+ // Guard against a lone child (it is both first *and* last) — only morph
1273
+ // the inner-facing corner when there is actually a sibling to face.
1274
+ "[&>*:first-child:not(:last-child)]:rounded-e-small",
1275
+ "[&>*:last-child:not(:first-child)]:rounded-s-small"
1276
+ ]
1277
+ }
1278
+ },
1279
+ defaultVariants: {
1280
+ variant: "standard"
1281
+ }
1282
+ });
1283
+ var ButtonGroup = createButtonGroup(({ variant }) => buttonGroup({ variant }));
1284
+ var surface = [
1285
+ "relative inline-flex items-center justify-center h-10 overflow-hidden cursor-pointer select-none border-0 outline-none",
1286
+ "text-label-large",
1287
+ "transition-[background-color,color,border-color] duration-200 ease-standard",
1288
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1289
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1290
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1291
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
1292
+ "data-[pressed]:before:opacity-[var(--md-sys-state-pressed)]",
1293
+ "focus-visible:outline-[3px] focus-visible:outline-offset-2 focus-visible:outline-secondary",
1294
+ "disabled:pointer-events-none disabled:before:opacity-0",
1295
+ "data-[disabled]:pointer-events-none data-[disabled]:before:opacity-0"
1296
+ ];
1297
+ var VARIANT_FILLED = [
1298
+ "bg-primary text-on-primary",
1299
+ "disabled:bg-on-surface/12 disabled:text-on-surface/38",
1300
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
1301
+ ];
1302
+ var VARIANT_TONAL = [
1303
+ "bg-secondary-container text-on-secondary-container",
1304
+ "disabled:bg-on-surface/12 disabled:text-on-surface/38",
1305
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38"
1306
+ ];
1307
+ var VARIANT_OUTLINED = [
1308
+ "bg-transparent text-primary border border-outline",
1309
+ "disabled:text-on-surface/38 disabled:border-on-surface/12",
1310
+ "data-[disabled]:text-on-surface/38 data-[disabled]:border-on-surface/12"
1311
+ ];
1312
+ var VARIANT_ELEVATED = [
1313
+ "bg-surface-container-low text-primary shadow-level1",
1314
+ "disabled:bg-on-surface/12 disabled:text-on-surface/38 disabled:shadow-none",
1315
+ "data-[disabled]:bg-on-surface/12 data-[disabled]:text-on-surface/38 data-[disabled]:shadow-none"
1316
+ ];
1317
+ var VARIANT_TEXT = [
1318
+ "bg-transparent text-primary",
1319
+ "disabled:text-on-surface/38",
1320
+ "data-[disabled]:text-on-surface/38"
1321
+ ];
1322
+ var splitButtonTv = tv7({
1323
+ slots: {
1324
+ group: "inline-flex items-center gap-0.5",
1325
+ // leading: outer (start) corner full, seam (end) corner reduced.
1326
+ leading: [...surface, "gap-2 px-6 rounded-s-full rounded-e-small"],
1327
+ // trailing: seam (start) corner reduced, outer (end) corner full.
1328
+ trailing: [...surface, "group gap-1 px-3 rounded-s-small rounded-e-full"],
1329
+ chevron: [
1330
+ "inline-flex items-center justify-center shrink-0 [&>svg]:size-[18px]",
1331
+ "transition-transform duration-200 ease-standard group-data-[popup-open]:rotate-180"
1332
+ ],
1333
+ popup: [
1334
+ "min-w-[112px] max-w-[280px] py-2",
1335
+ "bg-surface-container text-on-surface rounded-extra-small shadow-level2",
1336
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
1337
+ "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
1338
+ "data-[ending-style]:opacity-0",
1339
+ "focus:outline-none"
1340
+ ],
1341
+ item: [
1342
+ "relative flex items-center gap-3 h-12 px-3 overflow-hidden cursor-pointer select-none outline-none",
1343
+ "text-label-large text-on-surface",
1344
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1345
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1346
+ "data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
1347
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
1348
+ "data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none"
1349
+ ]
1350
+ },
1351
+ variants: {
1352
+ variant: {
1353
+ filled: { leading: VARIANT_FILLED, trailing: VARIANT_FILLED },
1354
+ tonal: { leading: VARIANT_TONAL, trailing: VARIANT_TONAL },
1355
+ outlined: { leading: VARIANT_OUTLINED, trailing: VARIANT_OUTLINED },
1356
+ elevated: { leading: VARIANT_ELEVATED, trailing: VARIANT_ELEVATED },
1357
+ text: { leading: VARIANT_TEXT, trailing: VARIANT_TEXT }
1358
+ }
1359
+ },
1360
+ defaultVariants: {
1361
+ variant: "filled"
1362
+ }
1363
+ });
1364
+ var SplitButton = createSplitButton({
1365
+ group: splitButtonTv().group(),
1366
+ leading: (variant) => splitButtonTv({ variant }).leading(),
1367
+ trailing: (variant) => splitButtonTv({ variant }).trailing(),
1368
+ chevron: splitButtonTv().chevron(),
1369
+ popup: splitButtonTv().popup(),
1370
+ item: splitButtonTv().item()
1371
+ });
1185
1372
  var navigationDrawerTv = tv7({
1186
1373
  slots: {
1187
1374
  root: "flex flex-col gap-1 box-border w-[360px] p-3 bg-surface-container-low text-on-surface",
@@ -1243,13 +1430,13 @@ var topAppBarTv = tv7({
1243
1430
  }
1244
1431
  });
1245
1432
  var TopAppBar = createTopAppBar((args) => {
1246
- const s13 = topAppBarTv({ variant: args.variant });
1433
+ const s14 = topAppBarTv({ variant: args.variant });
1247
1434
  return {
1248
- root: s13.root(),
1249
- row: s13.row(),
1250
- leading: s13.leading(),
1251
- headline: s13.headline(),
1252
- trailing: s13.trailing()
1435
+ root: s14.root(),
1436
+ row: s14.row(),
1437
+ leading: s14.leading(),
1438
+ headline: s14.headline(),
1439
+ trailing: s14.trailing()
1253
1440
  };
1254
1441
  });
1255
1442
  var bottomAppBarTv = tv7({
@@ -1403,7 +1590,292 @@ var SideSheet = createSideSheet({
1403
1590
  description: s12.description(),
1404
1591
  close: s12.close()
1405
1592
  });
1593
+ var searchTv = tv7({
1594
+ slots: {
1595
+ bar: [
1596
+ "flex items-center gap-1 h-14 min-w-[360px] max-w-full pl-4 pr-2",
1597
+ "bg-surface-container-high text-on-surface rounded-full",
1598
+ "transition-shadow duration-150 ease-standard",
1599
+ "focus-within:shadow-level1"
1600
+ ],
1601
+ icon: [
1602
+ "inline-flex shrink-0 items-center justify-center text-on-surface-variant",
1603
+ "[&>svg]:size-6"
1604
+ ],
1605
+ input: [
1606
+ "flex-1 min-w-0 h-full bg-transparent border-0 outline-none",
1607
+ "text-body-large text-on-surface placeholder:text-on-surface-variant"
1608
+ ],
1609
+ clear: [
1610
+ "relative inline-flex shrink-0 items-center justify-center size-10 rounded-full overflow-hidden",
1611
+ "text-on-surface-variant cursor-pointer outline-none [&>svg]:size-6",
1612
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1613
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1614
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1615
+ "active:before:opacity-[var(--md-sys-state-pressed)]"
1616
+ ],
1617
+ popup: [
1618
+ "w-[var(--anchor-width)] min-w-[360px] max-h-[min(72vh,480px)] overflow-y-auto py-2",
1619
+ "bg-surface-container-high text-on-surface rounded-large shadow-level3",
1620
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
1621
+ "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
1622
+ "data-[ending-style]:opacity-0",
1623
+ "focus:outline-none"
1624
+ ],
1625
+ list: ["outline-none"],
1626
+ item: [
1627
+ "group relative grid grid-cols-[24px_1fr_24px] items-center gap-4 h-14 px-4 overflow-hidden",
1628
+ "cursor-pointer select-none outline-none text-body-large text-on-surface",
1629
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1630
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1631
+ "data-[highlighted]:before:opacity-[var(--md-sys-state-hover)]",
1632
+ "data-[selected]:before:opacity-[var(--md-sys-state-pressed)]",
1633
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
1634
+ "data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none",
1635
+ "[&_[data-slot=search-leading]]:inline-flex [&_[data-slot=search-leading]]:text-on-surface-variant [&_[data-slot=search-leading]>svg]:size-6"
1636
+ ],
1637
+ itemIndicator: [
1638
+ "inline-flex items-center justify-center text-on-surface",
1639
+ "invisible group-data-[selected]:visible"
1640
+ ],
1641
+ empty: ["px-4 py-3 text-body-medium text-on-surface-variant"],
1642
+ separator: ["my-2 h-px border-0 bg-outline-variant"],
1643
+ groupLabel: ["px-4 py-2 text-label-small text-on-surface-variant"]
1644
+ }
1645
+ });
1646
+ var s13 = searchTv();
1647
+ var Search = createSearch({
1648
+ bar: s13.bar(),
1649
+ icon: s13.icon(),
1650
+ input: s13.input(),
1651
+ clear: s13.clear(),
1652
+ popup: s13.popup(),
1653
+ list: s13.list(),
1654
+ item: s13.item(),
1655
+ itemIndicator: s13.itemIndicator(),
1656
+ empty: s13.empty(),
1657
+ separator: s13.separator(),
1658
+ groupLabel: s13.groupLabel()
1659
+ });
1660
+ var datePickerTv = tv7({
1661
+ slots: {
1662
+ calendar: ["w-[328px] max-w-full p-3 text-on-surface"],
1663
+ header: ["flex items-center justify-between gap-2 h-12 pl-3 pr-1"],
1664
+ navButton: [
1665
+ "relative inline-flex items-center justify-center size-10 rounded-full overflow-hidden",
1666
+ "text-on-surface-variant cursor-pointer outline-none [&>svg]:size-6",
1667
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1668
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1669
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1670
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
1671
+ "disabled:text-on-surface/[0.38] disabled:before:opacity-0 disabled:pointer-events-none"
1672
+ ],
1673
+ monthLabel: [
1674
+ "relative inline-flex items-center gap-1 h-9 px-3 rounded-full overflow-hidden",
1675
+ "text-label-large text-on-surface-variant cursor-pointer outline-none",
1676
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1677
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1678
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1679
+ "[&>svg]:transition-transform data-[view=years]:[&>svg]:rotate-180"
1680
+ ],
1681
+ grid: ["mt-2 border-collapse", "[&_td]:p-0 [&_td]:text-center"],
1682
+ weekdays: [""],
1683
+ weekday: ["size-12 font-normal text-body-large text-on-surface-variant"],
1684
+ day: [
1685
+ "relative inline-flex items-center justify-center size-12 rounded-full overflow-hidden",
1686
+ "text-body-large text-on-surface cursor-pointer outline-none",
1687
+ "before:absolute before:inset-0 before:rounded-full before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1688
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1689
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1690
+ "active:before:opacity-[var(--md-sys-state-pressed)]",
1691
+ // today: 1px primary outline ring
1692
+ "data-[today]:ring-1 data-[today]:ring-inset data-[today]:ring-primary",
1693
+ // selected: primary fill, on-primary label, no state layer tint shift
1694
+ "data-[selected]:bg-primary data-[selected]:text-on-primary",
1695
+ "data-[disabled]:text-on-surface/[0.38] data-[disabled]:before:opacity-0 data-[disabled]:pointer-events-none"
1696
+ ],
1697
+ // weeks render as 7-col rows; force grid layout on each row
1698
+ yearGrid: ["grid grid-cols-3 gap-2 max-h-[280px] overflow-y-auto px-3 py-2"],
1699
+ yearButton: [
1700
+ "relative inline-flex items-center justify-center h-9 rounded-full overflow-hidden",
1701
+ "text-label-large text-on-surface-variant cursor-pointer outline-none",
1702
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1703
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1704
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1705
+ "data-[selected]:bg-primary data-[selected]:text-on-primary"
1706
+ ],
1707
+ field: [
1708
+ "inline-flex items-center gap-1 h-14 pl-4 pr-1 min-w-[200px]",
1709
+ "bg-surface-container-highest text-on-surface rounded-t-extra-small",
1710
+ "border-b border-on-surface-variant"
1711
+ ],
1712
+ input: [
1713
+ "flex-1 min-w-0 h-full bg-transparent border-0 outline-none",
1714
+ "text-body-large text-on-surface placeholder:text-on-surface-variant"
1715
+ ],
1716
+ fieldIcon: [
1717
+ "relative inline-flex items-center justify-center size-10 rounded-full overflow-hidden",
1718
+ "text-on-surface-variant cursor-pointer outline-none [&>svg]:size-6",
1719
+ "before:absolute before:inset-0 before:bg-current before:opacity-0 before:pointer-events-none before:transition-opacity before:duration-100",
1720
+ "hover:before:opacity-[var(--md-sys-state-hover)]",
1721
+ "focus-visible:before:opacity-[var(--md-sys-state-focus)]",
1722
+ "active:before:opacity-[var(--md-sys-state-pressed)]"
1723
+ ],
1724
+ popup: [
1725
+ "bg-surface-container-high text-on-surface rounded-large shadow-level2",
1726
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-150 ease-standard",
1727
+ "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
1728
+ "data-[ending-style]:opacity-0",
1729
+ "focus:outline-none"
1730
+ ],
1731
+ modalBackdrop: [
1732
+ "fixed inset-0 z-40 bg-scrim/32",
1733
+ "transition-opacity duration-200 ease-standard",
1734
+ "data-[starting-style]:opacity-0 data-[ending-style]:opacity-0"
1735
+ ],
1736
+ modalPopup: [
1737
+ "fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2",
1738
+ "w-[min(360px,calc(100vw-48px))] max-h-[calc(100vh-48px)] overflow-auto",
1739
+ "bg-surface-container-high text-on-surface rounded-extra-large shadow-level3",
1740
+ "flex flex-col",
1741
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-200 ease-emphasized",
1742
+ "data-[starting-style]:opacity-0 data-[starting-style]:scale-95",
1743
+ "data-[ending-style]:opacity-0 data-[ending-style]:scale-95",
1744
+ "focus:outline-none"
1745
+ ],
1746
+ modalHeader: ["px-6 pt-4 text-label-medium text-on-surface-variant m-0"],
1747
+ modalHeadline: ["px-6 pt-1 pb-4 text-headline-large text-on-surface m-0"],
1748
+ modalActions: ["flex justify-end gap-2 px-6 pb-4 pt-2"]
1749
+ }
1750
+ });
1751
+ var dp = datePickerTv();
1752
+ var DatePicker = createDatePicker({
1753
+ calendar: dp.calendar(),
1754
+ header: dp.header(),
1755
+ navButton: dp.navButton(),
1756
+ monthLabel: dp.monthLabel(),
1757
+ grid: dp.grid(),
1758
+ weekdays: dp.weekdays(),
1759
+ weekday: dp.weekday(),
1760
+ day: dp.day(),
1761
+ yearGrid: dp.yearGrid(),
1762
+ yearButton: dp.yearButton(),
1763
+ field: dp.field(),
1764
+ input: dp.input(),
1765
+ fieldIcon: dp.fieldIcon(),
1766
+ popup: dp.popup(),
1767
+ modalBackdrop: dp.modalBackdrop(),
1768
+ modalPopup: dp.modalPopup(),
1769
+ modalHeader: dp.modalHeader(),
1770
+ modalHeadline: dp.modalHeadline(),
1771
+ modalActions: dp.modalActions()
1772
+ });
1773
+ var timePickerTv = tv7({
1774
+ slots: {
1775
+ root: ["inline-flex flex-col items-center gap-2 p-2 text-on-surface"],
1776
+ header: ["flex items-center gap-2"],
1777
+ field: [
1778
+ "inline-grid place-items-center w-24 h-20 rounded-small overflow-hidden box-border",
1779
+ "bg-surface-container-highest text-on-surface text-display-large cursor-pointer outline-none",
1780
+ "border border-transparent transition-colors duration-100",
1781
+ "data-[selected]:bg-primary-container data-[selected]:text-on-primary-container"
1782
+ ],
1783
+ colon: ["text-display-large text-on-surface px-1 leading-none"],
1784
+ periods: [
1785
+ "inline-flex flex-col rounded-small overflow-hidden border border-outline self-stretch",
1786
+ "m-0 p-0 min-w-0"
1787
+ ],
1788
+ period: [
1789
+ "flex-1 inline-flex items-center justify-center px-3 min-h-[38px] w-14",
1790
+ "border-0 bg-transparent",
1791
+ "text-title-medium text-on-surface-variant cursor-pointer outline-none",
1792
+ "data-[selected]:bg-secondary-container data-[selected]:text-on-secondary-container",
1793
+ "[&+&]:border-t [&+&]:border-outline"
1794
+ ],
1795
+ dial: [
1796
+ "relative size-[256px] my-2 p-0 min-w-0 border-0 rounded-full bg-surface-container-highest"
1797
+ ],
1798
+ dialNumber: [
1799
+ "absolute -translate-x-1/2 -translate-y-1/2 inline-grid place-items-center size-12 rounded-full",
1800
+ "border-0 bg-transparent",
1801
+ "text-body-large text-on-surface cursor-pointer outline-none select-none",
1802
+ "data-[selected]:bg-primary data-[selected]:text-on-primary"
1803
+ ],
1804
+ dialHand: [
1805
+ "absolute left-1/2 top-[12%] h-[38%] w-0.5 origin-bottom bg-primary -translate-x-1/2 pointer-events-none"
1806
+ ],
1807
+ dialCenter: [
1808
+ "absolute left-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary pointer-events-none"
1809
+ ],
1810
+ inputs: ["flex items-start gap-2"],
1811
+ inputBox: [
1812
+ "w-24 h-20 rounded-small box-border text-center",
1813
+ "bg-surface-container-highest text-on-surface text-display-large outline-none",
1814
+ "border border-outline focus:border-2 focus:border-primary",
1815
+ "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
1816
+ ],
1817
+ inputCaption: ["block mt-1 text-body-small text-on-surface-variant"]
1818
+ }
1819
+ });
1820
+ var tp = timePickerTv();
1821
+ var TimePicker = createTimePicker(() => ({
1822
+ root: tp.root(),
1823
+ header: tp.header(),
1824
+ field: tp.field(),
1825
+ colon: tp.colon(),
1826
+ periods: tp.periods(),
1827
+ period: tp.period(),
1828
+ dial: tp.dial(),
1829
+ dialNumber: tp.dialNumber(),
1830
+ dialHand: tp.dialHand(),
1831
+ dialCenter: tp.dialCenter(),
1832
+ inputs: tp.inputs(),
1833
+ inputBox: tp.inputBox(),
1834
+ inputCaption: tp.inputCaption()
1835
+ }));
1836
+ var toolbarTv = tv7({
1837
+ base: "inline-flex items-center justify-center gap-1 box-border rounded-full shadow-level3 [&_svg]:size-6",
1838
+ variants: {
1839
+ variant: {
1840
+ standard: "bg-surface-container text-on-surface-variant",
1841
+ vibrant: "bg-primary-container text-on-primary-container [&_button]:text-on-primary-container [&_a]:text-on-primary-container"
1842
+ },
1843
+ orientation: {
1844
+ horizontal: "flex-row h-16 px-2",
1845
+ vertical: "flex-col w-16 py-2"
1846
+ }
1847
+ },
1848
+ defaultVariants: { variant: "standard", orientation: "horizontal" }
1849
+ });
1850
+ var Toolbar = createToolbar(
1851
+ ({ variant, orientation }) => toolbarTv({ variant, orientation })
1852
+ );
1853
+ var carouselTv = tv7({
1854
+ slots: {
1855
+ root: [
1856
+ "flex gap-2 overflow-x-auto snap-x snap-mandatory scroll-smooth",
1857
+ "[scrollbar-width:none] [&::-webkit-scrollbar]:hidden"
1858
+ ],
1859
+ item: "snap-start shrink-0 overflow-hidden rounded-large"
1860
+ },
1861
+ variants: {
1862
+ variant: {
1863
+ "multi-browse": { item: "w-40 h-56" },
1864
+ hero: { item: "w-72 h-56 snap-center" },
1865
+ "full-screen": {
1866
+ // gap-0: full-screen slides fill the viewport with no inter-slide gap.
1867
+ root: "flex-col gap-0 overflow-x-hidden overflow-y-auto snap-y h-full",
1868
+ item: "w-full h-full snap-center"
1869
+ }
1870
+ }
1871
+ },
1872
+ defaultVariants: { variant: "multi-browse" }
1873
+ });
1874
+ var Carousel = createCarousel((variant) => {
1875
+ const s14 = carouselTv({ variant });
1876
+ return { root: s14.root(), item: s14.item() };
1877
+ });
1406
1878
 
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 };
1879
+ 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, 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, searchTv, segmentedButtonTv, selectTv, sideSheetTv, sliderTv, snackbarTv, splitButtonTv, switchTv, tabsTv, textFieldTv, timePickerTv, toolbarTv, tooltipTv, topAppBarTv };
1408
1880
  //# sourceMappingURL=index.js.map
1409
1881
  //# sourceMappingURL=index.js.map