@tinybigui/react 0.23.0 → 0.24.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
@@ -5,11 +5,11 @@ export { argbFromHex, hexFromArgb } from '@material/material-color-utilities';
5
5
  import React, { forwardRef, useRef, createContext, useState, useCallback, useId, useMemo, useEffect, useContext, useLayoutEffect, Children, isValidElement, cloneElement } from 'react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import { cva } from 'class-variance-authority';
8
- import { useButton, useHover, useFocusRing, mergeProps as mergeProps$1, useTextField, useCheckbox, VisuallyHidden, useSwitch, useRadioGroup, useRadio, useTabList, useTab, useTabPanel, FocusScope, usePreventScroll, useDialog, useOverlay, useLink, useSeparator, useProgressBar, useToggleButton, useListBox, useOption, useSearchField, useSlider, useDatePicker, useLocale, useDateField, useSliderThumb, useRangeCalendar, useCalendar, usePopover, DismissButton, usePress, useDateSegment, useCalendarGrid, useCalendarCell, useTooltipTrigger, useTooltip, useOverlayPosition } from 'react-aria';
8
+ import { useButton, useHover, useFocusRing, mergeProps as mergeProps$1, useTextField, useCheckbox, VisuallyHidden, useSwitch, useRadioGroup, useRadio, useTabList, useTab, useTabPanel, FocusScope, useLink, useSeparator, useProgressBar, useToggleButton, useListBox, useOption, useSearchField, usePreventScroll, useOverlay, useSlider, useDatePicker, useDialog, useLocale, useDateField, useSliderThumb, useRangeCalendar, useCalendar, usePopover, DismissButton, usePress, useDateSegment, useCalendarGrid, useCalendarCell, useTooltipTrigger, useTooltip, useOverlayPosition } from 'react-aria';
9
9
  import { mergeProps, filterDOMProps } from '@react-aria/utils';
10
10
  import { useToggleState, useRadioGroupState, useTabListState, Item, useOverlayTriggerState, useListState, useSearchFieldState, useMenuTriggerState, useSliderState, useDatePickerState, useDateFieldState, useRangeCalendarState, useCalendarState, useTooltipTriggerState } from 'react-stately';
11
- import { MenuItem as MenuItem$1, Menu as Menu$1, MenuTrigger as MenuTrigger$1, Popover, MenuSection as MenuSection$1, Separator, Header, useSlottedContext, ButtonContext } from 'react-aria-components';
12
11
  import { createPortal } from 'react-dom';
12
+ import { MenuItem as MenuItem$1, Menu as Menu$1, MenuTrigger as MenuTrigger$1, Popover, MenuSection as MenuSection$1, Separator, Header, useSlottedContext, ButtonContext } from 'react-aria-components';
13
13
  import { createCalendar, getWeeksInMonth, isSameDay, today, getLocalTimeZone } from '@internationalized/date';
14
14
 
15
15
  // src/utils/cn.ts
@@ -4414,7 +4414,51 @@ var NavigationBarItem = forwardRef(
4414
4414
  );
4415
4415
  NavigationBarItem.displayName = "NavigationBarItem";
4416
4416
  var DrawerContext = createContext(null);
4417
- var DrawerIconOnlyContext = createContext(false);
4417
+ var ModalDrawerPanel = ({
4418
+ ariaLabel,
4419
+ onClose,
4420
+ className,
4421
+ animationState,
4422
+ getAnimationClassName,
4423
+ onTransitionEnd,
4424
+ forwardedRef,
4425
+ children
4426
+ }) => {
4427
+ const panelRef = useRef(null);
4428
+ usePreventScroll();
4429
+ const { dialogProps } = useDialog(
4430
+ { "aria-label": ariaLabel },
4431
+ panelRef
4432
+ );
4433
+ const { overlayProps } = useOverlay(
4434
+ { isOpen: true, onClose, isDismissable: true, shouldCloseOnBlur: false },
4435
+ panelRef
4436
+ );
4437
+ const setRef = useCallback(
4438
+ (node) => {
4439
+ panelRef.current = node;
4440
+ if (typeof forwardedRef === "function") {
4441
+ forwardedRef(node);
4442
+ } else if (forwardedRef !== null && forwardedRef !== void 0) {
4443
+ forwardedRef.current = node;
4444
+ }
4445
+ },
4446
+ [forwardedRef]
4447
+ );
4448
+ return /* @__PURE__ */ jsx(
4449
+ "div",
4450
+ {
4451
+ ...mergeProps(overlayProps, dialogProps),
4452
+ ref: setRef,
4453
+ "aria-modal": "true",
4454
+ className: cn(className, getAnimationClassName?.(animationState)),
4455
+ "data-animation-state": animationState,
4456
+ onTransitionEnd,
4457
+ children
4458
+ }
4459
+ );
4460
+ };
4461
+ ModalDrawerPanel.displayName = "ModalDrawerPanel";
4418
4462
  var HeadlessDrawer = forwardRef(
4419
4463
  ({
4420
4464
  variant = "standard",
@@ -4425,8 +4469,9 @@ var HeadlessDrawer = forwardRef(
4425
4469
  children,
4426
4470
  className,
4427
4471
  scrimClassName,
4428
- disableRipple = false,
4429
- iconOnly = false
4472
+ getAnimationClassName,
4473
+ getScrimAnimationClassName,
4474
+ disableRipple = false
4430
4475
  }, ref) => {
4431
4476
  const state = useOverlayTriggerState({
4432
4477
  ...open !== void 0 ? { isOpen: open } : {},
@@ -4437,77 +4482,99 @@ var HeadlessDrawer = forwardRef(
4437
4482
  const close = useCallback(() => {
4438
4483
  state.close();
4439
4484
  }, [state]);
4485
+ const [animationState, setAnimationState] = useState("exited");
4486
+ const closedRef = useRef(false);
4487
+ const exitFallbackRef = useRef(null);
4488
+ useEffect(() => {
4489
+ if (!isOpen) return;
4490
+ closedRef.current = false;
4491
+ setAnimationState("entering");
4492
+ const id = setTimeout(() => {
4493
+ setAnimationState("visible");
4494
+ }, 0);
4495
+ return () => clearTimeout(id);
4496
+ }, [isOpen]);
4497
+ useEffect(() => {
4498
+ if (isOpen) return;
4499
+ if (animationState === "exited" || animationState === "entering") return;
4500
+ if (animationState === "visible") {
4501
+ setAnimationState("exiting");
4502
+ exitFallbackRef.current = setTimeout(() => {
4503
+ if (!closedRef.current) {
4504
+ closedRef.current = true;
4505
+ setAnimationState("exited");
4506
+ }
4507
+ }, 500);
4508
+ }
4509
+ }, [isOpen, animationState]);
4510
+ useEffect(
4511
+ () => () => {
4512
+ if (exitFallbackRef.current !== null) {
4513
+ clearTimeout(exitFallbackRef.current);
4514
+ }
4515
+ },
4516
+ []
4517
+ );
4518
+ const handleTransitionEnd = useCallback(() => {
4519
+ if (animationState === "exiting" && !closedRef.current) {
4520
+ if (exitFallbackRef.current !== null) {
4521
+ clearTimeout(exitFallbackRef.current);
4522
+ exitFallbackRef.current = null;
4523
+ }
4524
+ closedRef.current = true;
4525
+ setAnimationState("exited");
4526
+ }
4527
+ }, [animationState]);
4440
4528
  const contextValue = {
4441
4529
  isOpen,
4442
4530
  close,
4443
- disableRipple,
4444
- iconOnly
4531
+ disableRipple
4445
4532
  };
4446
- if (variant === "modal") {
4447
- return /* @__PURE__ */ jsx(DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("nav", { ref, role: "navigation", "aria-label": ariaLabel, children: isOpen && /* @__PURE__ */ jsxs(Fragment, { children: [
4448
- /* @__PURE__ */ jsx(
4449
- "div",
4450
- {
4451
- "data-testid": "drawer-scrim",
4452
- className: scrimClassName,
4453
- onClick: () => state.close(),
4454
- "aria-hidden": "true"
4455
- }
4456
- ),
4457
- /* @__PURE__ */ jsx(FocusScope, { contain: true, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ jsx(
4458
- ModalDrawerPanel,
4459
- {
4460
- ariaLabel,
4461
- onClose: () => state.close(),
4462
- className,
4463
- children
4464
- }
4465
- ) })
4466
- ] }) }) });
4533
+ if (variant === "standard") {
4534
+ return /* @__PURE__ */ jsx(DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
4535
+ "nav",
4536
+ {
4537
+ ref,
4538
+ role: "navigation",
4539
+ "aria-label": ariaLabel,
4540
+ className,
4541
+ children
4542
+ }
4543
+ ) });
4467
4544
  }
4468
- return /* @__PURE__ */ jsx(DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
4469
- "nav",
4470
- {
4471
- ref,
4472
- role: "navigation",
4473
- "aria-label": ariaLabel,
4474
- className,
4475
- children
4476
- }
4477
- ) });
4545
+ if (!isOpen && animationState === "exited") {
4546
+ return null;
4547
+ }
4548
+ if (typeof document === "undefined") return null;
4549
+ const content = /* @__PURE__ */ jsx(DrawerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(FocusScope, { contain: true, restoreFocus: true, autoFocus: true, children: [
4550
+ /* @__PURE__ */ jsx(
4551
+ "div",
4552
+ {
4553
+ "data-testid": "drawer-scrim",
4554
+ className: cn(scrimClassName, getScrimAnimationClassName?.(animationState)),
4555
+ "data-animation-state": animationState,
4556
+ onClick: close,
4557
+ "aria-hidden": "true"
4558
+ }
4559
+ ),
4560
+ /* @__PURE__ */ jsx(
4561
+ ModalDrawerPanel,
4562
+ {
4563
+ ariaLabel,
4564
+ onClose: close,
4565
+ className,
4566
+ animationState,
4567
+ getAnimationClassName,
4568
+ onTransitionEnd: handleTransitionEnd,
4569
+ forwardedRef: ref,
4570
+ children
4571
+ }
4572
+ )
4573
+ ] }) });
4574
+ return createPortal(content, document.body);
4478
4575
  }
4479
4576
  );
4480
4577
  HeadlessDrawer.displayName = "HeadlessDrawer";
4481
- var ModalDrawerPanel = ({
4482
- ariaLabel,
4483
- onClose,
4484
- className,
4485
- children
4486
- }) => {
4487
- const panelRef = useRef(null);
4488
- usePreventScroll();
4489
- const { dialogProps } = useDialog({ "aria-label": ariaLabel }, panelRef);
4490
- const { overlayProps } = useOverlay(
4491
- {
4492
- isOpen: true,
4493
- onClose,
4494
- isDismissable: true,
4495
- shouldCloseOnBlur: false
4496
- },
4497
- panelRef
4498
- );
4499
- return /* @__PURE__ */ jsx(
4500
- "div",
4501
- {
4502
- ...mergeProps(overlayProps, dialogProps),
4503
- ref: panelRef,
4504
- className,
4505
- "aria-modal": "true",
4506
- children
4507
- }
4508
- );
4509
- };
4510
- ModalDrawerPanel.displayName = "ModalDrawerPanel";
4511
4578
  var HeadlessDrawerItem = forwardRef(
4512
4579
  ({
4513
4580
  href,
@@ -4525,7 +4592,6 @@ var HeadlessDrawerItem = forwardRef(
4525
4592
  ...restProps
4526
4593
  }, forwardedRef) => {
4527
4594
  const internalRef = useRef(null);
4528
- const { isFocusVisible, focusProps } = useFocusRing();
4529
4595
  if (href) {
4530
4596
  const linkRef = forwardedRef ?? internalRef;
4531
4597
  const { linkProps } = useLink(
@@ -4539,14 +4605,12 @@ var HeadlessDrawerItem = forwardRef(
4539
4605
  return /* @__PURE__ */ jsx(
4540
4606
  "a",
4541
4607
  {
4542
- ...mergeProps(linkProps, focusProps, { onMouseDown }),
4608
+ ...mergeProps(linkProps, { onMouseDown }),
4543
4609
  ref: linkRef,
4544
4610
  href,
4545
4611
  className,
4546
4612
  title,
4547
4613
  "aria-current": isActive ? "page" : void 0,
4548
- "data-focus-visible": isFocusVisible || void 0,
4549
- "data-active": isActive || void 0,
4550
4614
  children
4551
4615
  }
4552
4616
  );
@@ -4569,13 +4633,11 @@ var HeadlessDrawerItem = forwardRef(
4569
4633
  "button",
4570
4634
  {
4571
4635
  type: "button",
4572
- ...mergeProps(buttonProps, focusProps, { onMouseDown }),
4636
+ ...mergeProps(buttonProps, { onMouseDown }),
4573
4637
  ref: buttonRef,
4574
4638
  className,
4575
4639
  title,
4576
4640
  "aria-current": isActive ? "page" : void 0,
4577
- "data-focus-visible": isFocusVisible || void 0,
4578
- "data-active": isActive || void 0,
4579
4641
  children
4580
4642
  }
4581
4643
  );
@@ -4670,120 +4732,195 @@ var drawerVariants = cva(
4670
4732
  // Layout
4671
4733
  "fixed top-0 left-0 h-full",
4672
4734
  "flex flex-col overflow-y-auto",
4673
- // Stacking and shape
4735
+ // Width 360dp per MD3 spec
4736
+ "w-drawer",
4737
+ // Stacking
4674
4738
  "z-50",
4675
- "rounded-r-xl",
4676
- // Slide animation (transition applies to all open/closed state changes)
4677
- "transition-transform duration-medium4 ease-emphasized-decelerate",
4739
+ // Container padding — 12dp per MD3 nav drawer spec
4740
+ "px-3 py-3",
4678
4741
  // Focus outline removal (focus management handled by FocusScope / React Aria)
4679
- "outline-none",
4680
- // Padding for content spacing
4681
- "px-3"
4742
+ "outline-none"
4682
4743
  ],
4683
4744
  {
4684
4745
  variants: {
4685
4746
  /**
4686
- * Structural variant — drives surface color and elevation.
4687
- * - `standard`: inline nav panel, lower-elevation surface
4688
- * - `modal`: overlay dialog with elevation shadow
4747
+ * Structural variant — drives shape and elevation.
4748
+ *
4749
+ * - `standard`: flush left panel, square trailing edge, flat surface.
4750
+ * - `modal`: overlay dialog, 16dp trailing corner, shadow-elevation-1.
4689
4751
  */
4690
4752
  variant: {
4691
- standard: ["bg-surface-container-low"],
4692
- modal: ["bg-surface-container", "shadow-elevation-1"]
4753
+ standard: ["bg-surface-container-low", "rounded-none"],
4754
+ modal: ["bg-surface-container-low", "rounded-r-lg", "shadow-elevation-1"]
4693
4755
  },
4694
4756
  /**
4695
- * Open/closed state — drives translation.
4696
- * - `true`: drawer visible (`translate-x-0`)
4697
- * - `false`: drawer off-screen (`-translate-x-full`)
4757
+ * Open/closed state — drives translation for the STANDARD variant only.
4758
+ *
4759
+ * Standard slide: spatial on-screen property → spring-standard-default-spatial.
4760
+ * Modal enter/exit is handled externally via drawerAnimationVariants + portal gate.
4761
+ *
4762
+ * - `true`: translate-x-0 (visible)
4763
+ * - `false`: -translate-x-full (off-screen to the left)
4698
4764
  */
4699
4765
  open: {
4700
- true: ["translate-x-0"],
4701
- false: ["-translate-x-full"]
4702
- },
4703
- /**
4704
- * Icon-only compact mode — 80dp rail instead of 360dp drawer.
4705
- * - `true`: `w-20` (80dp), items centered
4706
- * - `false`: `w-drawer` (360dp), standard layout
4707
- */
4708
- iconOnly: {
4709
- true: ["w-20", "items-center"],
4710
- false: ["w-drawer"]
4766
+ true: [
4767
+ "translate-x-0",
4768
+ "transition-transform",
4769
+ "duration-spring-standard-default-spatial",
4770
+ "ease-spring-standard-default-spatial"
4771
+ ],
4772
+ false: [
4773
+ "-translate-x-full",
4774
+ "transition-transform",
4775
+ "duration-spring-standard-default-spatial",
4776
+ "ease-spring-standard-default-spatial"
4777
+ ]
4711
4778
  }
4712
4779
  },
4713
4780
  defaultVariants: {
4714
4781
  variant: "standard",
4715
- open: false,
4716
- iconOnly: false
4782
+ open: false
4717
4783
  }
4718
4784
  }
4719
4785
  );
4720
- var drawerItemVariants = cva(
4786
+ var drawerAnimationVariants = cva("", {
4787
+ variants: {
4788
+ animationState: {
4789
+ // Mount frame: invisible until animation starts
4790
+ entering: ["opacity-0"],
4791
+ // Entry animation: slide in from the left edge
4792
+ visible: ["animate-md-slide-in-left"],
4793
+ // Exit animation: slide out to the left
4794
+ exiting: ["animate-md-slide-out-left"],
4795
+ // Portal gate removes element; classes below act as a safety net
4796
+ exited: ["opacity-0", "pointer-events-none"]
4797
+ }
4798
+ },
4799
+ defaultVariants: {
4800
+ animationState: "entering"
4801
+ }
4802
+ });
4803
+ var drawerScrimAnimationVariants = cva(
4721
4804
  [
4722
- // Layout
4723
- "relative flex w-full items-center gap-3",
4724
- "h-14 px-4",
4725
- "rounded-full",
4726
- // Typography
4727
- "text-label-large",
4728
- // Interaction
4729
- "cursor-pointer select-none outline-none",
4730
- // State layer pseudo-element (z-[1] above active indicator)
4731
- "before:absolute before:inset-0 before:rounded-full before:z-[1]",
4732
- "before:transition-opacity before:duration-short2 before:ease-standard",
4733
- "before:opacity-0",
4734
- // Hover and focus visible state layers
4735
- "hover:before:opacity-8",
4736
- "focus-visible:before:opacity-12",
4737
- // Active pressed state
4738
- "active:before:opacity-12",
4739
- // Transition for color changes
4740
- "transition-colors duration-short2 ease-standard"
4805
+ "transition-opacity",
4806
+ "duration-spring-standard-fast-effects",
4807
+ "ease-spring-standard-fast-effects"
4741
4808
  ],
4742
4809
  {
4743
4810
  variants: {
4744
- /**
4745
- * Whether this item is the currently active destination.
4746
- *
4747
- * Active indicator is a 336dp pill rendered via `after:` pseudo-element
4748
- * per MD3 Navigation Drawer spec.
4749
- */
4750
- isActive: {
4751
- true: [
4752
- "text-on-secondary-container",
4753
- "before:bg-on-secondary-container",
4754
- // Active indicator — 336dp pill via after: pseudo
4755
- "after:absolute after:inset-0 after:mx-auto after:max-w-[336px]",
4756
- "after:rounded-full after:bg-secondary-container"
4757
- ],
4758
- false: ["bg-transparent", "text-on-surface-variant", "before:bg-on-surface-variant"]
4759
- },
4760
- /**
4761
- * Whether the item is disabled.
4762
- * Applies `opacity-38` per MD3 disabled state spec.
4763
- */
4764
- isDisabled: {
4765
- true: ["opacity-38 cursor-not-allowed pointer-events-none"],
4766
- false: []
4811
+ animationState: {
4812
+ entering: ["opacity-0"],
4813
+ visible: ["opacity-32"],
4814
+ exiting: ["opacity-0"],
4815
+ exited: ["opacity-0", "pointer-events-none"]
4767
4816
  }
4768
4817
  },
4769
4818
  defaultVariants: {
4770
- isActive: false,
4771
- isDisabled: false
4819
+ animationState: "entering"
4772
4820
  }
4773
4821
  }
4774
4822
  );
4775
- var scrimVariants = cva([
4823
+ var drawerItemVariants = cva([
4824
+ // Layout
4825
+ "relative flex w-full items-center",
4826
+ "h-14 pl-4 pr-6 gap-3",
4827
+ // Shape
4828
+ "rounded-full",
4829
+ // Typography — Label Large per MD3 spec (size via text-label-large, weight + tracking explicit)
4830
+ "text-label-large",
4831
+ "font-medium",
4832
+ "tracking-[0.1px]",
4833
+ // Interaction
4834
+ "cursor-pointer select-none outline-none",
4835
+ // Color transition (effects — no overshoot)
4836
+ "transition-colors duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
4837
+ // Inactive content color (icon/label/badge inherit this via currentColor)
4838
+ "text-on-surface-variant",
4839
+ // Active content color — self-targeting data-[active]: (root is the group host)
4840
+ "data-[active]:text-on-secondary-container",
4841
+ // Disabled — self-targeting
4842
+ "data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed",
4843
+ "data-[disabled]:text-on-surface/38"
4844
+ ]);
4845
+ var drawerItemActiveIndicatorVariants = cva([
4846
+ "absolute inset-0 rounded-[inherit] pointer-events-none",
4847
+ "bg-secondary-container",
4848
+ // Effects transition for opacity — no overshoot
4849
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
4850
+ // Hidden when inactive; shown when active
4851
+ "opacity-0",
4852
+ "group-data-[active]/draweritem:opacity-100",
4853
+ // z-0: below state layer (z-[1]) and content (z-10)
4854
+ "z-0"
4855
+ ]);
4856
+ var drawerItemStateLayerVariants = cva([
4857
+ "absolute inset-0 rounded-[inherit] overflow-hidden pointer-events-none opacity-0",
4858
+ // Effects transition — opacity must NOT overshoot
4859
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
4860
+ // Color: inactive uses on-surface-variant; active switches to on-secondary-container
4861
+ "bg-on-surface-variant",
4862
+ "group-data-[active]/draweritem:bg-on-secondary-container",
4863
+ // Hover: 8%
4864
+ "group-data-[hovered]/draweritem:opacity-8",
4865
+ // Focus-visible: 10% (MD3 focus state layer)
4866
+ "group-data-[focus-visible]/draweritem:opacity-10",
4867
+ // Pressed: 10%, doubled selector wins over hover at same cascade position
4868
+ "group-data-[pressed]/draweritem:group-data-[pressed]/draweritem:opacity-10",
4869
+ // No state layer when disabled
4870
+ "group-data-[disabled]/draweritem:hidden",
4871
+ // z-[1]: above active indicator (z-0), below focus ring and content
4872
+ "z-[1]"
4873
+ ]);
4874
+ var drawerItemFocusRingVariants = cva([
4875
+ "pointer-events-none absolute inset-0 rounded-[inherit]",
4876
+ "outline outline-2 -outline-offset-2 outline-secondary",
4877
+ // Effects transition — opacity must not overshoot
4878
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
4879
+ "opacity-0",
4880
+ "group-data-[focus-visible]/draweritem:opacity-100",
4881
+ // z-[2]: above state layer (z-[1]), below content (z-10)
4882
+ "z-[2]"
4883
+ ]);
4884
+ var drawerItemIconVariants = cva([
4885
+ "relative z-10 flex shrink-0 items-center justify-center",
4886
+ "h-6 w-6",
4887
+ // Color and transition inherited via currentColor from root
4888
+ "transition-colors duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
4889
+ // Explicit disabled override — mirrors Menu icon (on-surface/38)
4890
+ "group-data-[disabled]/draweritem:text-on-surface/38"
4891
+ ]);
4892
+ var drawerItemLabelVariants = cva(["relative z-10 flex-1 min-w-0 truncate"]);
4893
+ var drawerItemBadgeVariants = cva([
4894
+ "relative z-10 shrink-0 ml-auto",
4895
+ "text-label-large",
4896
+ "font-medium",
4897
+ "tracking-[0.1px]",
4898
+ "transition-colors duration-spring-standard-fast-effects ease-spring-standard-fast-effects"
4899
+ ]);
4900
+ var drawerHeadlineVariants = cva([
4901
+ "px-4 pt-4 pb-1",
4902
+ "text-title-small",
4903
+ "font-medium",
4904
+ "tracking-[0.1px]",
4905
+ "text-on-surface-variant",
4906
+ "select-none"
4907
+ ]);
4908
+ var drawerScrimVariants = cva([
4776
4909
  "fixed inset-0 z-40",
4777
- "bg-scrim opacity-32",
4778
- "transition-opacity duration-short4 ease-standard"
4910
+ // NOTE: opacity is intentionally absent here — it is controlled per
4911
+ // animation state by drawerScrimAnimationVariants (opacity-0 / opacity-32)
4912
+ // to avoid tailwind-merge collapsing the classes during cn() composition.
4913
+ "bg-scrim"
4779
4914
  ]);
4780
4915
  var drawerSectionVariants = cva(["flex flex-col w-full"]);
4781
4916
  var drawerSectionHeaderVariants = cva([
4782
4917
  "px-4 pt-4 pb-2",
4783
- "text-title-small text-on-surface-variant",
4918
+ "text-title-small",
4919
+ "font-medium",
4920
+ "tracking-[0.1px]",
4921
+ "text-on-surface-variant",
4784
4922
  "select-none"
4785
4923
  ]);
4786
- cva(["border-t border-outline-variant", "mx-4 my-2"]);
4787
4924
  var DrawerSection = forwardRef(
4788
4925
  ({ header, children, showDivider = true, _isFirstSection = false, className }, ref) => {
4789
4926
  const shouldShowDivider = showDivider && !_isFirstSection;
@@ -4805,19 +4942,19 @@ var Drawer = forwardRef(
4805
4942
  children,
4806
4943
  className,
4807
4944
  disableRipple = false,
4808
- iconOnly = false,
4809
4945
  ...restProps
4810
4946
  }, ref) => {
4811
4947
  const isOpen = open ?? defaultOpen;
4948
+ const reducedMotion = useReducedMotion();
4812
4949
  const drawerPanelClass = cn(
4813
- drawerVariants({
4814
- variant,
4815
- open: isOpen,
4816
- iconOnly
4817
- }),
4950
+ drawerVariants({ variant, open: isOpen }),
4951
+ // Suppress spring transition when user has requested reduced motion
4952
+ reducedMotion && "transition-none",
4818
4953
  className
4819
4954
  );
4820
- const scrimClass = scrimVariants();
4955
+ const scrimClass = drawerScrimVariants();
4956
+ const getAnimationClassName = reducedMotion ? (_state) => "" : (state) => drawerAnimationVariants({ animationState: state });
4957
+ const getScrimAnimationClassName = reducedMotion ? (_state) => "" : (state) => drawerScrimAnimationVariants({ animationState: state });
4821
4958
  let foundFirstSection = false;
4822
4959
  const processedChildren = React.Children.map(children, (child) => {
4823
4960
  if (React.isValidElement(child) && child.type === DrawerSection) {
@@ -4830,7 +4967,7 @@ var Drawer = forwardRef(
4830
4967
  }
4831
4968
  return child;
4832
4969
  });
4833
- return /* @__PURE__ */ jsx(DrawerIconOnlyContext.Provider, { value: iconOnly, children: /* @__PURE__ */ jsx(
4970
+ return /* @__PURE__ */ jsx(
4834
4971
  HeadlessDrawer,
4835
4972
  {
4836
4973
  ref,
@@ -4841,153 +4978,99 @@ var Drawer = forwardRef(
4841
4978
  "aria-label": ariaLabel,
4842
4979
  className: drawerPanelClass,
4843
4980
  scrimClassName: scrimClass,
4981
+ getAnimationClassName,
4982
+ getScrimAnimationClassName,
4844
4983
  disableRipple,
4845
- iconOnly,
4846
4984
  ...restProps,
4847
4985
  children: processedChildren
4848
4986
  }
4849
- ) });
4987
+ );
4850
4988
  }
4851
4989
  );
4852
4990
  Drawer.displayName = "Drawer";
4853
- var badgeAppearance = [
4854
- // ── Shape ─────────────────────────────────────────────────────────────────────
4855
- "flex items-center justify-center",
4856
- "rounded-full",
4857
- // ── Large (count) sizing — base defaults ──────────────────────────────────────
4858
- // Height 16dp, min-width 16dp, horizontal padding 4dp
4859
- "h-4 min-w-4 px-1",
4860
- // ── Color — error role (only MD3-spec role for badges) ────────────────────────
4861
- "bg-error text-on-error",
4862
- // ── Typography — label-small, tight leading, tabular numbers ──────────────────
4863
- "text-label-small leading-none tabular-nums",
4864
- // ── Visibility (runtime flag) ──────────────────────────────────────────────────
4865
- // Base: fully visible
4866
- "scale-100",
4867
- // data-invisible: scale to zero (visually hidden; aria-label still readable by SR)
4868
- "data-[invisible]:scale-0",
4869
- // ── Dot content flag overrides (placed last — cascade wins over base sizing) ───
4870
- // Clear out the count-pill sizing, set 6dp circle
4871
- "data-[dot]:size-1.5",
4872
- "data-[dot]:min-w-0",
4873
- "data-[dot]:p-0",
4874
- "data-[dot]:text-[0]"
4875
- // suppress any stray text rendering on dot
4876
- ];
4877
- var badgeVariants2 = cva([
4878
- // ── Anchored placement — badge center on host's top-right corner ──────────────
4879
- // top-0 right-0 places the badge's own top-right at the host's top-right,
4880
- // then the 1/2-element translate moves the badge center onto that corner.
4881
- // Host-size-agnostic: works for any wrapped element (icon, avatar, nav chip).
4882
- "absolute top-0 right-0 -translate-y-1/2 translate-x-1/2",
4883
- ...badgeAppearance
4884
- ]);
4885
- var badgeStaticVariants = cva(["inline-flex", ...badgeAppearance]);
4886
- function isBadgeConfig(badge) {
4887
- return typeof badge === "object" && badge !== null && !isValidElement(badge) && "count" in badge;
4888
- }
4889
- function getBadgeDisplayValue(count, max) {
4890
- if (count === void 0) return "";
4891
- return count > max ? `${max}+` : count.toString();
4892
- }
4893
- function getBadgeAriaLabel(count) {
4894
- return count === void 0 ? "New" : `${count} notifications`;
4895
- }
4896
4991
  var DrawerItem = forwardRef(
4897
4992
  ({
4898
4993
  href,
4899
4994
  icon,
4900
4995
  label,
4901
4996
  badge,
4902
- secondaryText,
4903
4997
  isActive = false,
4904
4998
  isDisabled = false,
4905
4999
  disableRipple = false,
4906
5000
  className,
4907
- onPress,
4908
- onPressStart,
4909
- onPressEnd,
4910
- onPressChange,
4911
- onPressUp,
5001
+ // All remaining props (onPress, onPressStart, onPressEnd, etc.) stay in
5002
+ // restProps and are passed into mergeProps — mirrors the Button pattern.
4912
5003
  ...restProps
4913
5004
  }, ref) => {
4914
- const isItemDisabled = isDisabled;
4915
- const isIconOnly = useContext(DrawerIconOnlyContext);
5005
+ const [isPressed, setIsPressed] = useState(false);
5006
+ const handlePressStart = useCallback(() => setIsPressed(true), []);
5007
+ const handlePressEnd = useCallback(() => setIsPressed(false), []);
5008
+ const { isHovered, hoverProps } = useHover({ isDisabled });
5009
+ const { isFocusVisible, focusProps } = useFocusRing();
4916
5010
  const { onMouseDown: handleRipple, ripples } = useRipple({
4917
- disabled: isItemDisabled || disableRipple
5011
+ disabled: isDisabled || disableRipple
4918
5012
  });
4919
- const renderBadge = () => {
4920
- if (!badge) return null;
4921
- if (isBadgeConfig(badge)) {
4922
- const max = 999;
4923
- const isDot = badge.count === void 0;
4924
- const displayValue = getBadgeDisplayValue(badge.count, max);
4925
- const ariaLabel = getBadgeAriaLabel(badge.count);
4926
- return /* @__PURE__ */ jsx("span", { className: "relative z-10 ml-auto flex shrink-0 items-center pr-2", children: /* @__PURE__ */ jsx(
4927
- "span",
4928
- {
4929
- role: "status",
4930
- "aria-label": ariaLabel,
4931
- "data-dot": isDot ? "" : void 0,
4932
- className: cn(badgeStaticVariants()),
4933
- children: displayValue
4934
- }
4935
- ) });
4936
- }
4937
- return /* @__PURE__ */ jsx("span", { className: "relative z-10 ml-auto flex shrink-0 items-center pr-2", "aria-hidden": "true", children: badge });
4938
- };
5013
+ const mergedInteractionProps = mergeProps$1(
5014
+ hoverProps,
5015
+ focusProps,
5016
+ { onPressStart: handlePressStart, onPressEnd: handlePressEnd },
5017
+ restProps
5018
+ );
4939
5019
  return /* @__PURE__ */ jsxs(
4940
5020
  HeadlessDrawerItem,
4941
5021
  {
4942
- ...restProps,
5022
+ ...mergedInteractionProps,
4943
5023
  ref,
4944
5024
  ...href !== void 0 ? { href } : {},
4945
5025
  isActive,
4946
- ...isItemDisabled !== void 0 ? { isDisabled: isItemDisabled } : {},
4947
- ...onPress !== void 0 ? { onPress } : {},
4948
- ...onPressStart !== void 0 ? { onPressStart } : {},
4949
- ...onPressEnd !== void 0 ? { onPressEnd } : {},
4950
- ...onPressChange !== void 0 ? { onPressChange } : {},
4951
- ...onPressUp !== void 0 ? { onPressUp } : {},
5026
+ ...isDisabled !== void 0 ? { isDisabled } : {},
4952
5027
  onMouseDown: handleRipple,
4953
- title: isIconOnly ? label : void 0,
5028
+ ...getInteractionDataAttributes({
5029
+ isHovered,
5030
+ isFocusVisible,
5031
+ isPressed,
5032
+ isDisabled
5033
+ }),
5034
+ "data-active": isActive ? "" : void 0,
4954
5035
  className: cn(
4955
- drawerItemVariants({
4956
- isActive,
4957
- isDisabled: isItemDisabled
4958
- }),
5036
+ drawerItemVariants(),
5037
+ // group/draweritem: enables group-data-[x]/draweritem selectors in all slots
5038
+ "group/draweritem",
4959
5039
  className
4960
5040
  ),
4961
5041
  children: [
4962
- ripples,
4963
- icon && /* @__PURE__ */ jsx(
5042
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: drawerItemActiveIndicatorVariants() }),
5043
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: drawerItemStateLayerVariants() }),
5044
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: drawerItemFocusRingVariants() }),
5045
+ /* @__PURE__ */ jsx(
4964
5046
  "span",
4965
5047
  {
4966
- className: "relative z-10 flex shrink-0 items-center justify-center",
5048
+ className: "pointer-events-none absolute inset-0 z-[3] overflow-hidden rounded-[inherit]",
4967
5049
  "aria-hidden": "true",
4968
- children: icon
5050
+ children: ripples
4969
5051
  }
4970
5052
  ),
4971
- /* @__PURE__ */ jsxs(
5053
+ icon && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: drawerItemIconVariants(), children: icon }),
5054
+ /* @__PURE__ */ jsx("span", { className: drawerItemLabelVariants(), children: label }),
5055
+ badge !== void 0 && badge !== null && /* @__PURE__ */ jsx(
4972
5056
  "span",
4973
5057
  {
4974
- className: cn(
4975
- "relative z-10 flex min-w-0 flex-1 flex-col text-left",
4976
- isIconOnly && "hidden"
4977
- ),
4978
- children: [
4979
- /* @__PURE__ */ jsx("span", { className: "truncate", children: label }),
4980
- secondaryText && /* @__PURE__ */ jsx("span", { className: "text-body-small truncate opacity-70", children: secondaryText })
4981
- ]
5058
+ role: "status",
5059
+ "aria-label": typeof badge === "number" ? `${badge} notifications` : String(badge),
5060
+ className: drawerItemBadgeVariants(),
5061
+ children: badge
4982
5062
  }
4983
- ),
4984
- !isIconOnly && renderBadge()
5063
+ )
4985
5064
  ]
4986
5065
  }
4987
5066
  );
4988
5067
  }
4989
5068
  );
4990
5069
  DrawerItem.displayName = "DrawerItem";
5070
+ var DrawerHeadline = forwardRef(
5071
+ ({ children, className, ...restProps }, ref) => /* @__PURE__ */ jsx("span", { ref, className: cn(drawerHeadlineVariants(), className), ...restProps, children })
5072
+ );
5073
+ DrawerHeadline.displayName = "DrawerHeadline";
4991
5074
  var progressContainerVariants = cva(["inline-flex", "flex-col", "gap-1"], {
4992
5075
  variants: {
4993
5076
  type: {
@@ -10025,6 +10108,39 @@ var BadgeHeadless = forwardRef(
10025
10108
  }
10026
10109
  );
10027
10110
  BadgeHeadless.displayName = "BadgeHeadless";
10111
+ var badgeAppearance = [
10112
+ // ── Shape ─────────────────────────────────────────────────────────────────────
10113
+ "flex items-center justify-center",
10114
+ "rounded-full",
10115
+ // ── Large (count) sizing — base defaults ──────────────────────────────────────
10116
+ // Height 16dp, min-width 16dp, horizontal padding 4dp
10117
+ "h-4 min-w-4 px-1",
10118
+ // ── Color — error role (only MD3-spec role for badges) ────────────────────────
10119
+ "bg-error text-on-error",
10120
+ // ── Typography — label-small, tight leading, tabular numbers ──────────────────
10121
+ "text-label-small leading-none tabular-nums",
10122
+ // ── Visibility (runtime flag) ──────────────────────────────────────────────────
10123
+ // Base: fully visible
10124
+ "scale-100",
10125
+ // data-invisible: scale to zero (visually hidden; aria-label still readable by SR)
10126
+ "data-[invisible]:scale-0",
10127
+ // ── Dot content flag overrides (placed last — cascade wins over base sizing) ───
10128
+ // Clear out the count-pill sizing, set 6dp circle
10129
+ "data-[dot]:size-1.5",
10130
+ "data-[dot]:min-w-0",
10131
+ "data-[dot]:p-0",
10132
+ "data-[dot]:text-[0]"
10133
+ // suppress any stray text rendering on dot
10134
+ ];
10135
+ var badgeVariants2 = cva([
10136
+ // ── Anchored placement — badge center on host's top-right corner ──────────────
10137
+ // top-0 right-0 places the badge's own top-right at the host's top-right,
10138
+ // then the 1/2-element translate moves the badge center onto that corner.
10139
+ // Host-size-agnostic: works for any wrapped element (icon, avatar, nav chip).
10140
+ "absolute top-0 right-0 -translate-y-1/2 translate-x-1/2",
10141
+ ...badgeAppearance
10142
+ ]);
10143
+ cva(["inline-flex", ...badgeAppearance]);
10028
10144
  var getDisplayValue = (count, max) => {
10029
10145
  if (count === void 0) return "";
10030
10146
  return count > max ? `${max}+` : count.toString();
@@ -15572,7 +15688,7 @@ var modeToggleStateLayerVariants = cva([
15572
15688
  "group-data-[focus-visible]/mode-toggle:opacity-10",
15573
15689
  "group-data-[pressed]/mode-toggle:opacity-10"
15574
15690
  ]);
15575
- var scrimVariants2 = cva([
15691
+ var scrimVariants = cva([
15576
15692
  "fixed inset-0 z-40",
15577
15693
  "bg-scrim opacity-32",
15578
15694
  "transition-opacity duration-medium2 ease-standard"
@@ -16315,7 +16431,7 @@ var DatePickerModalStyled = forwardRef(
16315
16431
  !reducedMotion && MODAL_DIALOG_MOTION,
16316
16432
  className
16317
16433
  ),
16318
- scrimClassName: cn(scrimVariants2()),
16434
+ scrimClassName: cn(scrimVariants()),
16319
16435
  slots: {
16320
16436
  CellComponent: StyledCalendarCell,
16321
16437
  NavButtonComponent: StyledNavButton,
@@ -16765,7 +16881,7 @@ var DatePickerModalInputStyled = forwardRef(
16765
16881
  MODAL_INPUT_CONTENT_STRUCTURAL,
16766
16882
  className
16767
16883
  ),
16768
- scrimClassName: cn(scrimVariants2()),
16884
+ scrimClassName: cn(scrimVariants()),
16769
16885
  ActionButtonComponent: StyledActionButton
16770
16886
  }
16771
16887
  );
@@ -16877,6 +16993,6 @@ var DateField = forwardRef((props, forwardedRef) => {
16877
16993
  });
16878
16994
  DateField.displayName = "DateField";
16879
16995
 
16880
- export { AppBar, AppBarHeadless, Badge, BadgeContent, BadgeHeadless, BottomSheet, BottomSheetContext, BottomSheetHandle, BottomSheetHeadless, Button, ButtonGroup, ButtonGroupContext, ButtonGroupHeadless, CalendarCore, Card, CardActions, CardContent, CardHeader, CardHeadless, CardMedia, Checkbox, Chip, ChipHeadless, ChipSet, DateField, DatePicker, DatePickerDocked, DatePickerModal, DatePickerModalInput, Dialog, DialogActions, DialogContent, DialogContext, DialogHeadless, DialogHeadline, Divider, DividerHeadless, Drawer, DrawerIconOnlyContext, DrawerItem, DrawerSection, FAB, FABHeadless, FABMenu, FABMenuContext, FABMenuHeadless, FABMenuItem, HeadlessDrawer, HeadlessDrawerItem, HeadlessMenu, HeadlessMenuDivider, HeadlessMenuItem, HeadlessMenuSection, HeadlessMenuTrigger, HeadlessNavigationBar, HeadlessNavigationBarItem, HeadlessTab, HeadlessTabList, HeadlessTabPanel, IconButton, IconButtonHeadless, List, ListHeadless, ListItem, ListItemHeadless, ListItemLeading, ListItemText, ListItemTrailing, Menu, MenuContext, MenuDivider, MenuItem, MenuSection, MenuTrigger, NavigationBar, NavigationBarItem, Progress, ProgressHeadless, Radio, RadioGroup, RadioGroupHeadless, RadioHeadless, RichTooltip, STATE_LAYER_OPACITY, Search, SearchBar, SearchBarHeadless, SearchView, SearchViewHeadless, Slider, SliderHeadless, Snackbar, SnackbarContext, SnackbarHeadless, SnackbarProvider, SplitButton, SplitButtonHeadless, StyledActionButton, StyledCalendarCell, StyledCalendarTitle, StyledNavButton, StyledWeekday, StyledYearItem, Switch, TYPOGRAPHY_ELEMENT_MAP, TYPOGRAPHY_USAGE, Tab, TabList, TabPanel, Tabs, TextField, TimePicker, TimePickerDial, TimePickerInput, Tooltip, TooltipOverlayHeadless, TooltipTrigger, TooltipTriggerHeadless, actionButtonFocusRingVariants, actionButtonStateLayerVariants, actionButtonVariants, actionRowVariants, applyStateLayer, badgeVariants2 as badgeVariants, bottomSheetAnimationVariants, bottomSheetHandlePillVariants, bottomSheetHandleWrapperVariants, bottomSheetScrimVariants, bottomSheetVariants, buttonGroupFocusRingVariants, buttonGroupRootVariants, buttonGroupVariants, calendarCellFocusRingVariants, calendarCellStateLayerVariants, calendarCellVariants, calendarDividerVariants, calendarHeaderVariants, calendarTitleIconVariants, calendarTitleStateLayerVariants, calendarTitleTextVariants, calendarTitleVariants, cardVariants, chipVariants, clockDialContainerVariants, clockDialNumberVariants, clockHandCenterVariants, clockHandHandleVariants, clockHandTrackVariants, cn, dateFieldVariants, dateInputErrorVariants, dateInputFieldGroupVariants, dateInputFieldVariants, dateInputLabelVariants, datePickerContainerVariants, dateSegmentPlaceholderVariants, dividerVariants, dockedFieldGroupVariants, dockedLabelVariants, dockedTriggerStateLayerVariants, dockedTriggerVariants, fabMenuItemFocusRingVariants, fabMenuItemIconVariants, fabMenuItemLabelVariants, fabMenuItemStateLayerVariants, fabMenuItemVariants, fabMenuListVariants, fabMenuVariants, generateMD3Theme, getColorValue, getConnectedRadiusClasses, getFontFamily, getMD3Color, getResponsiveTypography, getTypographyClassName, getTypographyForElement, getTypographyStyle, getTypographyToken, headlineVariants, hexToRgb, listItemVariants, listVariants, modalDialogVariants, modalHeaderVariants, modeToggleStateLayerVariants, modeToggleVariants, navButtonFocusRingVariants, navButtonStateLayerVariants, navButtonVariants, periodSelectorContainerVariants, periodSelectorItemVariants, popoverVariants, pxToRem, remToPx, rgbToHex, richTooltipVariants, scrimVariants2 as scrimVariants, searchBarAvatarVariants, searchBarFocusRingVariants, searchBarInputVariants, searchBarLeadingIconVariants, searchBarRootVariants, searchBarStateLayerVariants, searchBarTrailingActionVariants, searchBarTrailingActionsVariants, searchViewBackButtonVariants, searchViewClearButtonVariants, searchViewContentVariants, searchViewDividerVariants, searchViewHeaderVariants, searchViewInputVariants, searchViewTrailingActionVariants, searchViewTrailingActionsVariants, searchViewVariants, sliderActiveTrackVariants, sliderContainerVariants, sliderHandleStateLayerVariants, sliderHandleVariants, sliderInactiveTrackVariants, sliderTrackLayoutVariants, splitButtonContainerVariants, splitButtonFocusRingVariants, splitButtonIconVariants, splitButtonLabelVariants, splitButtonLeadingVariants, splitButtonMenuItemVariants, splitButtonMenuVariants, splitButtonStateLayerVariants, splitButtonTrailingVariants, splitButtonVariants, supportingTextVariants, timeInputFieldVariants, timePickerActionButtonVariants, timePickerActionRowVariants, timePickerContainerVariants, timePickerHeadlineVariants, timePickerModeToggleVariants, timeSelectorContainerVariants, timeSeparatorVariants, tooltipVariants, truncateText, useBottomSheetContext, useBottomSheetDrag, useButtonGroup, useDialogContext, useFABMenuContext, useMenuContext, useOptionalButtonGroup, useSnackbar, weekdayVariants, withOpacity, yearGridVariants, yearItemFocusRingVariants, yearItemStateLayerVariants, yearItemVariants };
16996
+ export { AppBar, AppBarHeadless, Badge, BadgeContent, BadgeHeadless, BottomSheet, BottomSheetContext, BottomSheetHandle, BottomSheetHeadless, Button, ButtonGroup, ButtonGroupContext, ButtonGroupHeadless, CalendarCore, Card, CardActions, CardContent, CardHeader, CardHeadless, CardMedia, Checkbox, Chip, ChipHeadless, ChipSet, DateField, DatePicker, DatePickerDocked, DatePickerModal, DatePickerModalInput, Dialog, DialogActions, DialogContent, DialogContext, DialogHeadless, DialogHeadline, Divider, DividerHeadless, Drawer, DrawerContext, DrawerHeadline, DrawerItem, DrawerSection, FAB, FABHeadless, FABMenu, FABMenuContext, FABMenuHeadless, FABMenuItem, HeadlessDrawer, HeadlessDrawerItem, HeadlessMenu, HeadlessMenuDivider, HeadlessMenuItem, HeadlessMenuSection, HeadlessMenuTrigger, HeadlessNavigationBar, HeadlessNavigationBarItem, HeadlessTab, HeadlessTabList, HeadlessTabPanel, IconButton, IconButtonHeadless, List, ListHeadless, ListItem, ListItemHeadless, ListItemLeading, ListItemText, ListItemTrailing, Menu, MenuContext, MenuDivider, MenuItem, MenuSection, MenuTrigger, NavigationBar, NavigationBarItem, Progress, ProgressHeadless, Radio, RadioGroup, RadioGroupHeadless, RadioHeadless, RichTooltip, STATE_LAYER_OPACITY, Search, SearchBar, SearchBarHeadless, SearchView, SearchViewHeadless, Slider, SliderHeadless, Snackbar, SnackbarContext, SnackbarHeadless, SnackbarProvider, SplitButton, SplitButtonHeadless, StyledActionButton, StyledCalendarCell, StyledCalendarTitle, StyledNavButton, StyledWeekday, StyledYearItem, Switch, TYPOGRAPHY_ELEMENT_MAP, TYPOGRAPHY_USAGE, Tab, TabList, TabPanel, Tabs, TextField, TimePicker, TimePickerDial, TimePickerInput, Tooltip, TooltipOverlayHeadless, TooltipTrigger, TooltipTriggerHeadless, actionButtonFocusRingVariants, actionButtonStateLayerVariants, actionButtonVariants, actionRowVariants, applyStateLayer, badgeVariants2 as badgeVariants, bottomSheetAnimationVariants, bottomSheetHandlePillVariants, bottomSheetHandleWrapperVariants, bottomSheetScrimVariants, bottomSheetVariants, buttonGroupFocusRingVariants, buttonGroupRootVariants, buttonGroupVariants, calendarCellFocusRingVariants, calendarCellStateLayerVariants, calendarCellVariants, calendarDividerVariants, calendarHeaderVariants, calendarTitleIconVariants, calendarTitleStateLayerVariants, calendarTitleTextVariants, calendarTitleVariants, cardVariants, chipVariants, clockDialContainerVariants, clockDialNumberVariants, clockHandCenterVariants, clockHandHandleVariants, clockHandTrackVariants, cn, dateFieldVariants, dateInputErrorVariants, dateInputFieldGroupVariants, dateInputFieldVariants, dateInputLabelVariants, datePickerContainerVariants, dateSegmentPlaceholderVariants, dividerVariants, dockedFieldGroupVariants, dockedLabelVariants, dockedTriggerStateLayerVariants, dockedTriggerVariants, drawerAnimationVariants, drawerHeadlineVariants, drawerItemActiveIndicatorVariants, drawerItemBadgeVariants, drawerItemFocusRingVariants, drawerItemIconVariants, drawerItemLabelVariants, drawerItemStateLayerVariants, drawerItemVariants, drawerScrimAnimationVariants, drawerScrimVariants, drawerSectionHeaderVariants, drawerSectionVariants, drawerVariants, fabMenuItemFocusRingVariants, fabMenuItemIconVariants, fabMenuItemLabelVariants, fabMenuItemStateLayerVariants, fabMenuItemVariants, fabMenuListVariants, fabMenuVariants, generateMD3Theme, getColorValue, getConnectedRadiusClasses, getFontFamily, getMD3Color, getResponsiveTypography, getTypographyClassName, getTypographyForElement, getTypographyStyle, getTypographyToken, headlineVariants, hexToRgb, listItemVariants, listVariants, modalDialogVariants, modalHeaderVariants, modeToggleStateLayerVariants, modeToggleVariants, navButtonFocusRingVariants, navButtonStateLayerVariants, navButtonVariants, periodSelectorContainerVariants, periodSelectorItemVariants, popoverVariants, pxToRem, remToPx, rgbToHex, richTooltipVariants, scrimVariants, searchBarAvatarVariants, searchBarFocusRingVariants, searchBarInputVariants, searchBarLeadingIconVariants, searchBarRootVariants, searchBarStateLayerVariants, searchBarTrailingActionVariants, searchBarTrailingActionsVariants, searchViewBackButtonVariants, searchViewClearButtonVariants, searchViewContentVariants, searchViewDividerVariants, searchViewHeaderVariants, searchViewInputVariants, searchViewTrailingActionVariants, searchViewTrailingActionsVariants, searchViewVariants, sliderActiveTrackVariants, sliderContainerVariants, sliderHandleStateLayerVariants, sliderHandleVariants, sliderInactiveTrackVariants, sliderTrackLayoutVariants, splitButtonContainerVariants, splitButtonFocusRingVariants, splitButtonIconVariants, splitButtonLabelVariants, splitButtonLeadingVariants, splitButtonMenuItemVariants, splitButtonMenuVariants, splitButtonStateLayerVariants, splitButtonTrailingVariants, splitButtonVariants, supportingTextVariants, timeInputFieldVariants, timePickerActionButtonVariants, timePickerActionRowVariants, timePickerContainerVariants, timePickerHeadlineVariants, timePickerModeToggleVariants, timeSelectorContainerVariants, timeSeparatorVariants, tooltipVariants, truncateText, useBottomSheetContext, useBottomSheetDrag, useButtonGroup, useDialogContext, useFABMenuContext, useMenuContext, useOptionalButtonGroup, useSnackbar, weekdayVariants, withOpacity, yearGridVariants, yearItemFocusRingVariants, yearItemStateLayerVariants, yearItemVariants };
16881
16997
  //# sourceMappingURL=index.js.map
16882
16998
  //# sourceMappingURL=index.js.map