@tinybigui/react 0.17.0 → 0.18.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
@@ -8611,6 +8611,30 @@ var InteractiveStyledListItem = forwardRef(
8611
8611
  }
8612
8612
  );
8613
8613
  InteractiveStyledListItem.displayName = "InteractiveStyledListItem";
8614
+ var ArrowBackIcon = () => /* @__PURE__ */ jsx(
8615
+ "svg",
8616
+ {
8617
+ width: "24",
8618
+ height: "24",
8619
+ viewBox: "0 0 24 24",
8620
+ fill: "currentColor",
8621
+ "aria-hidden": "true",
8622
+ focusable: "false",
8623
+ children: /* @__PURE__ */ jsx("path", { d: "M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z" })
8624
+ }
8625
+ );
8626
+ var CloseIcon3 = () => /* @__PURE__ */ jsx(
8627
+ "svg",
8628
+ {
8629
+ width: "24",
8630
+ height: "24",
8631
+ viewBox: "0 0 24 24",
8632
+ fill: "currentColor",
8633
+ "aria-hidden": "true",
8634
+ focusable: "false",
8635
+ children: /* @__PURE__ */ jsx("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })
8636
+ }
8637
+ );
8614
8638
  var SearchBarHeadless = forwardRef(
8615
8639
  ({
8616
8640
  value,
@@ -8626,7 +8650,9 @@ var SearchBarHeadless = forwardRef(
8626
8650
  "aria-label": ariaLabel,
8627
8651
  className,
8628
8652
  onFocus,
8629
- onBlur
8653
+ onBlur,
8654
+ inputClassName,
8655
+ trailingActionsClassName
8630
8656
  }, forwardedRef) => {
8631
8657
  const inputRef = useRef(null);
8632
8658
  const internalFormRef = useRef(null);
@@ -8660,8 +8686,17 @@ var SearchBarHeadless = forwardRef(
8660
8686
  );
8661
8687
  return /* @__PURE__ */ jsxs("form", { ref: formRef, role: "search", className, onSubmit: handleFormSubmit, children: [
8662
8688
  leadingIcon && /* @__PURE__ */ jsx("span", { "data-slot": "leading-icon", children: leadingIcon }),
8663
- /* @__PURE__ */ jsx("input", { ...inputProps, ref: inputRef, role: "searchbox" }),
8664
- trailingActions && trailingActions.length > 0 && /* @__PURE__ */ jsx("span", { "data-slot": "trailing-actions", children: trailingActions.map((action, index) => /* @__PURE__ */ jsx("span", { "data-slot": "trailing-action", children: action }, index)) }),
8689
+ /* @__PURE__ */ jsx(
8690
+ "input",
8691
+ {
8692
+ ...inputProps,
8693
+ ref: inputRef,
8694
+ role: "searchbox",
8695
+ "data-slot": "input",
8696
+ className: inputClassName
8697
+ }
8698
+ ),
8699
+ trailingActions && trailingActions.length > 0 && /* @__PURE__ */ jsx("span", { "data-slot": "trailing-actions", className: trailingActionsClassName, children: trailingActions }),
8665
8700
  avatar && /* @__PURE__ */ jsx("span", { "data-slot": "avatar", children: avatar })
8666
8701
  ] });
8667
8702
  }
@@ -8681,32 +8716,45 @@ var SearchViewHeadless = forwardRef(
8681
8716
  children,
8682
8717
  leadingIcon,
8683
8718
  trailingActions,
8684
- showDivider
8719
+ showDivider,
8720
+ layout = "fullscreen",
8721
+ headerClassName,
8722
+ backButtonClassName,
8723
+ clearButtonClassName,
8724
+ inputClassName,
8725
+ trailingActionsClassName,
8726
+ dividerClassName,
8727
+ contentClassName
8685
8728
  }, forwardedRef) => {
8686
8729
  if (!isOpen) {
8687
8730
  return null;
8688
8731
  }
8689
- return createPortal(
8690
- /* @__PURE__ */ jsx(
8691
- SearchViewPanel,
8692
- {
8693
- ref: forwardedRef,
8694
- onClose,
8695
- ariaLabel,
8696
- ...className !== void 0 ? { className } : {},
8697
- ...leadingIcon !== void 0 ? { leadingIcon } : {},
8698
- ...trailingActions !== void 0 ? { trailingActions } : {},
8699
- ...showDivider !== void 0 ? { showDivider } : {},
8700
- ...value !== void 0 ? { value } : {},
8701
- ...defaultValue !== void 0 ? { defaultValue } : {},
8702
- ...onChange !== void 0 ? { onChange } : {},
8703
- ...onSubmit !== void 0 ? { onSubmit } : {},
8704
- ...placeholder !== void 0 ? { placeholder } : {},
8705
- children
8706
- }
8707
- ),
8708
- document.body
8709
- );
8732
+ const panelProps = {
8733
+ onClose,
8734
+ ariaLabel,
8735
+ layout,
8736
+ children,
8737
+ ...className !== void 0 ? { className } : {},
8738
+ ...leadingIcon !== void 0 ? { leadingIcon } : {},
8739
+ ...trailingActions !== void 0 ? { trailingActions } : {},
8740
+ ...showDivider !== void 0 ? { showDivider } : {},
8741
+ ...value !== void 0 ? { value } : {},
8742
+ ...defaultValue !== void 0 ? { defaultValue } : {},
8743
+ ...onChange !== void 0 ? { onChange } : {},
8744
+ ...onSubmit !== void 0 ? { onSubmit } : {},
8745
+ ...placeholder !== void 0 ? { placeholder } : {},
8746
+ headerClassName,
8747
+ backButtonClassName,
8748
+ clearButtonClassName,
8749
+ inputClassName,
8750
+ trailingActionsClassName,
8751
+ dividerClassName,
8752
+ contentClassName
8753
+ };
8754
+ if (layout === "docked") {
8755
+ return /* @__PURE__ */ jsx(SearchViewPanel, { ref: forwardedRef, ...panelProps });
8756
+ }
8757
+ return createPortal(/* @__PURE__ */ jsx(SearchViewPanel, { ref: forwardedRef, ...panelProps }), document.body);
8710
8758
  }
8711
8759
  );
8712
8760
  SearchViewHeadless.displayName = "SearchViewHeadless";
@@ -8723,12 +8771,21 @@ var SearchViewPanel = forwardRef(
8723
8771
  children,
8724
8772
  leadingIcon,
8725
8773
  trailingActions,
8726
- showDivider
8774
+ showDivider,
8775
+ layout,
8776
+ headerClassName,
8777
+ backButtonClassName,
8778
+ clearButtonClassName,
8779
+ inputClassName,
8780
+ trailingActionsClassName,
8781
+ dividerClassName,
8782
+ contentClassName
8727
8783
  }, forwardedRef) => {
8728
8784
  const panelRef = useRef(null);
8729
8785
  const inputRef = useRef(null);
8730
8786
  const ref = forwardedRef ?? panelRef;
8731
- usePreventScroll();
8787
+ const isFullscreen = layout === "fullscreen";
8788
+ usePreventScroll({ isDisabled: !isFullscreen });
8732
8789
  const { overlayProps } = useOverlay(
8733
8790
  {
8734
8791
  isOpen: true,
@@ -8761,7 +8818,17 @@ var SearchViewPanel = forwardRef(
8761
8818
  const handleBackClick = useCallback(() => {
8762
8819
  onClose();
8763
8820
  }, [onClose]);
8764
- const defaultBackArrow = /* @__PURE__ */ jsx("button", { type: "button", "aria-label": "Back", onClick: handleBackClick, "data-slot": "back-button", children: "\u2190" });
8821
+ const defaultBackButton = /* @__PURE__ */ jsx(
8822
+ "button",
8823
+ {
8824
+ type: "button",
8825
+ "aria-label": "Back",
8826
+ onClick: handleBackClick,
8827
+ "data-slot": "back-button",
8828
+ className: backButtonClassName,
8829
+ children: /* @__PURE__ */ jsx(ArrowBackIcon, {})
8830
+ }
8831
+ );
8765
8832
  const clearButton = state.value ? /* @__PURE__ */ jsx(
8766
8833
  "button",
8767
8834
  {
@@ -8770,66 +8837,109 @@ var SearchViewPanel = forwardRef(
8770
8837
  type: "button",
8771
8838
  "aria-label": "Clear search",
8772
8839
  "data-slot": "clear-button",
8773
- children: "\u2715"
8840
+ className: clearButtonClassName,
8841
+ children: /* @__PURE__ */ jsx(CloseIcon3, {})
8774
8842
  }
8775
8843
  ) : null;
8776
- return /* @__PURE__ */ jsx(FocusScope, { contain: true, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ jsxs("div", { ...overlayProps, ref, role: "search", "aria-label": ariaLabel, className, children: [
8777
- /* @__PURE__ */ jsxs("div", { "data-slot": "header", children: [
8778
- /* @__PURE__ */ jsx("span", { "data-slot": "leading-icon", children: leadingIcon ?? defaultBackArrow }),
8779
- /* @__PURE__ */ jsx("input", { ...inputProps, ref: inputRef, role: "searchbox" }),
8780
- clearButton,
8781
- trailingActions && trailingActions.length > 0 && /* @__PURE__ */ jsx("span", { "data-slot": "trailing-actions", children: trailingActions.map((action, index) => /* @__PURE__ */ jsx("span", { "data-slot": "trailing-action", children: action }, index)) })
8782
- ] }),
8783
- showDivider && /* @__PURE__ */ jsx("hr", { "data-slot": "divider" }),
8784
- /* @__PURE__ */ jsx("div", { "data-slot": "content", "aria-live": "polite", children })
8785
- ] }) });
8844
+ return (
8845
+ // Focus containment only for fullscreen docked uses restoreFocus + autoFocus only
8846
+ // so tabbing can naturally leave the widget.
8847
+ /* @__PURE__ */ jsx(FocusScope, { contain: isFullscreen, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ jsxs("div", { ...overlayProps, ref, role: "search", "aria-label": ariaLabel, className, children: [
8848
+ /* @__PURE__ */ jsxs("div", { "data-slot": "header", className: headerClassName, children: [
8849
+ leadingIcon ?? defaultBackButton,
8850
+ /* @__PURE__ */ jsx(
8851
+ "input",
8852
+ {
8853
+ ...inputProps,
8854
+ ref: inputRef,
8855
+ role: "searchbox",
8856
+ "data-slot": "input",
8857
+ className: inputClassName
8858
+ }
8859
+ ),
8860
+ clearButton,
8861
+ trailingActions && trailingActions.length > 0 && /* @__PURE__ */ jsx("span", { "data-slot": "trailing-actions", className: trailingActionsClassName, children: trailingActions })
8862
+ ] }),
8863
+ showDivider && /* @__PURE__ */ jsx("hr", { "data-slot": "divider", className: dividerClassName }),
8864
+ /* @__PURE__ */ jsx("div", { "data-slot": "content", "aria-live": "polite", className: contentClassName, children })
8865
+ ] }) })
8866
+ );
8786
8867
  }
8787
8868
  );
8788
8869
  SearchViewPanel.displayName = "SearchViewPanel";
8789
- var searchBarVariants = cva(
8870
+ var searchBarRootVariants = cva(
8790
8871
  [
8791
- "relative flex items-center h-14 rounded-full bg-surface-container-high",
8792
- "shadow-elevation-3 w-full text-body-large cursor-text"
8872
+ "relative flex items-center h-14 rounded-full",
8873
+ "bg-surface-container-high shadow-elevation-3",
8874
+ "w-full text-body-large cursor-text",
8875
+ // Disabled — self-targeting; pointer-events lets ripple/hover stop cleanly
8876
+ "data-[disabled]:opacity-38 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed"
8793
8877
  ],
8794
8878
  {
8795
8879
  variants: {
8880
+ /**
8881
+ * Visual style of the search bar.
8882
+ * - contained: M3 Expressive — fills container, expressive motion, adjustable spacing
8883
+ * - divided: Baseline — 16dp fixed spacing, no expressive motion
8884
+ */
8796
8885
  style: {
8797
- contained: "",
8886
+ /**
8887
+ * Contained (Expressive): spacing governed by data-[with-actions] content flag.
8888
+ * With actions: px-1 gap-1 (4dp each)
8889
+ * Without actions: px-4 (16dp each)
8890
+ */
8891
+ contained: [
8892
+ "px-4",
8893
+ // default: no-actions 16dp
8894
+ "data-[with-actions]:px-1 data-[with-actions]:gap-1"
8895
+ // with-actions: 4dp
8896
+ ],
8897
+ /**
8898
+ * Divided (Baseline): fixed 16dp side padding, 16dp icon-label gap.
8899
+ */
8798
8900
  divided: "px-4 gap-4"
8799
- },
8800
- noActions: {
8801
- true: "",
8802
- false: ""
8803
- },
8804
- focused: {
8805
- true: "",
8806
- false: ""
8807
- },
8808
- disabled: {
8809
- true: "opacity-38 pointer-events-none",
8810
- false: ""
8811
8901
  }
8812
8902
  },
8813
- compoundVariants: [
8814
- {
8815
- style: "contained",
8816
- noActions: false,
8817
- class: "px-1 gap-1"
8818
- },
8819
- {
8820
- style: "contained",
8821
- noActions: true,
8822
- class: "px-4"
8823
- }
8824
- ],
8825
- defaultVariants: {
8826
- style: "contained",
8827
- noActions: false,
8828
- focused: false,
8829
- disabled: false
8830
- }
8903
+ defaultVariants: { style: "contained" }
8831
8904
  }
8832
8905
  );
8906
+ var searchBarStateLayerVariants = cva([
8907
+ "absolute inset-0 rounded-full pointer-events-none opacity-0",
8908
+ "bg-on-surface",
8909
+ // Effects transition — no overshoot on opacity
8910
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
8911
+ // Hover: 8%
8912
+ "group-data-[hovered]/search:opacity-8",
8913
+ // Pressed: 10%, doubled selector wins over hover at equal cascade position
8914
+ "group-data-[pressed]/search:group-data-[pressed]/search:opacity-10",
8915
+ // No state layer when disabled
8916
+ "group-data-[disabled]/search:hidden"
8917
+ ]);
8918
+ var searchBarFocusRingVariants = cva([
8919
+ "pointer-events-none absolute inset-[-3px] rounded-full",
8920
+ "outline outline-[3px] outline-offset-0 outline-secondary",
8921
+ // Effects transition
8922
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects",
8923
+ "opacity-0",
8924
+ "group-data-[focus-visible]/search:opacity-100"
8925
+ ]);
8926
+ var searchBarLeadingIconVariants = cva([
8927
+ "flex size-12 shrink-0 items-center justify-center text-on-surface"
8928
+ ]);
8929
+ var searchBarTrailingActionVariants = cva([
8930
+ "flex size-12 shrink-0 items-center justify-center text-on-surface-variant"
8931
+ ]);
8932
+ var searchBarAvatarVariants = cva(["flex size-12 shrink-0 items-center justify-center"]);
8933
+ var searchBarTrailingActionsVariants = cva(["flex items-center"]);
8934
+ var searchBarInputVariants = cva([
8935
+ "flex-1 min-w-0 bg-transparent outline-none",
8936
+ "text-body-large text-on-surface",
8937
+ "placeholder:text-on-surface-variant",
8938
+ "focus-visible:outline-none",
8939
+ // Hide native browser search affordances — our MD3 clear button handles clearing
8940
+ "[&::-webkit-search-cancel-button]:appearance-none",
8941
+ "[&::-webkit-search-decoration]:appearance-none"
8942
+ ]);
8833
8943
  var searchViewVariants = cva(["flex flex-col shadow-elevation-3 z-50 overflow-hidden"], {
8834
8944
  variants: {
8835
8945
  style: {
@@ -8842,31 +8952,32 @@ var searchViewVariants = cva(["flex flex-col shadow-elevation-3 z-50 overflow-hi
8842
8952
  }
8843
8953
  },
8844
8954
  compoundVariants: [
8955
+ // Contained + fullscreen: surface-container-low, square corners
8845
8956
  {
8846
8957
  style: "contained",
8847
8958
  layout: "fullscreen",
8848
8959
  class: "bg-surface-container-low rounded-none"
8849
8960
  },
8961
+ // Contained + docked: surface-container-high, 12dp results rounding, 2dp gap
8850
8962
  {
8851
8963
  style: "contained",
8852
8964
  layout: "docked",
8853
8965
  class: "bg-surface-container-high rounded-xl gap-0.5"
8854
8966
  },
8967
+ // Divided + fullscreen: surface-container-high, square corners
8855
8968
  {
8856
8969
  style: "divided",
8857
8970
  layout: "fullscreen",
8858
8971
  class: "bg-surface-container-high rounded-none"
8859
8972
  },
8973
+ // Divided + docked: surface-container-high, extra-large rounding (28dp)
8860
8974
  {
8861
8975
  style: "divided",
8862
8976
  layout: "docked",
8863
8977
  class: "bg-surface-container-high rounded-[28px]"
8864
8978
  }
8865
8979
  ],
8866
- defaultVariants: {
8867
- style: "contained",
8868
- layout: "fullscreen"
8869
- }
8980
+ defaultVariants: { style: "contained", layout: "fullscreen" }
8870
8981
  });
8871
8982
  var searchViewHeaderVariants = cva(
8872
8983
  ["flex items-center w-full bg-surface-container-high gap-1"],
@@ -8877,14 +8988,50 @@ var searchViewHeaderVariants = cva(
8877
8988
  divided: "h-[72px] px-4"
8878
8989
  },
8879
8990
  layout: {
8991
+ // Docked overrides height to 56dp regardless of style
8880
8992
  docked: "h-14",
8881
8993
  fullscreen: ""
8882
8994
  }
8883
8995
  },
8884
- defaultVariants: {
8885
- style: "contained",
8886
- layout: "fullscreen"
8887
- }
8996
+ defaultVariants: { style: "contained", layout: "fullscreen" }
8997
+ }
8998
+ );
8999
+ var searchViewBackButtonVariants = cva([
9000
+ "flex size-12 shrink-0 items-center justify-center",
9001
+ "text-on-surface rounded-full",
9002
+ "cursor-pointer"
9003
+ ]);
9004
+ var searchViewClearButtonVariants = cva([
9005
+ "flex size-12 shrink-0 items-center justify-center",
9006
+ "text-on-surface-variant rounded-full",
9007
+ "cursor-pointer",
9008
+ "transition-opacity duration-spring-standard-fast-effects ease-spring-standard-fast-effects"
9009
+ ]);
9010
+ var searchViewTrailingActionVariants = cva([
9011
+ "flex size-12 shrink-0 items-center justify-center text-on-surface-variant"
9012
+ ]);
9013
+ var searchViewTrailingActionsVariants = cva(["flex items-center"]);
9014
+ var searchViewInputVariants = cva([
9015
+ "flex-1 min-w-0 bg-transparent outline-none",
9016
+ "text-body-large text-on-surface",
9017
+ "placeholder:text-on-surface-variant",
9018
+ "focus-visible:outline-none",
9019
+ // Hide native browser search affordances
9020
+ "[&::-webkit-search-cancel-button]:appearance-none",
9021
+ "[&::-webkit-search-decoration]:appearance-none"
9022
+ ]);
9023
+ var searchViewDividerVariants = cva(["border-t border-outline w-full"]);
9024
+ var searchViewContentVariants = cva(["flex-1 overflow-y-auto"]);
9025
+ var DefaultSearchIcon = () => /* @__PURE__ */ jsx(
9026
+ "svg",
9027
+ {
9028
+ width: "24",
9029
+ height: "24",
9030
+ viewBox: "0 0 24 24",
9031
+ fill: "currentColor",
9032
+ "aria-hidden": "true",
9033
+ focusable: "false",
9034
+ children: /* @__PURE__ */ jsx("path", { d: "M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" })
8888
9035
  }
8889
9036
  );
8890
9037
  var SearchBar = forwardRef(
@@ -8905,7 +9052,7 @@ var SearchBar = forwardRef(
8905
9052
  onFocus,
8906
9053
  onBlur
8907
9054
  }, ref) => {
8908
- const hasNoActions = (!trailingActions || trailingActions.length === 0) && !avatar;
9055
+ const hasActions = trailingActions != null && trailingActions.length > 0 || !!avatar;
8909
9056
  const reducedMotion = useReducedMotion();
8910
9057
  const [isFocused, setIsFocused] = useState(false);
8911
9058
  const handleFocusInternal = useCallback(() => {
@@ -8916,83 +9063,85 @@ var SearchBar = forwardRef(
8916
9063
  setIsFocused(false);
8917
9064
  onBlur?.();
8918
9065
  }, [onBlur]);
8919
- const { onMouseDown: handleRipple, ripples } = useRipple({
8920
- disabled: isDisabled
8921
- });
8922
- const styledLeadingIcon = leadingIcon ? /* @__PURE__ */ jsx("span", { className: "text-on-surface flex size-12 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "size-6", children: leadingIcon }) }) : void 0;
8923
- const styledTrailingActions = trailingActions?.map((action, index) => /* @__PURE__ */ jsx(
8924
- "span",
8925
- {
8926
- className: "text-on-surface-variant flex size-12 shrink-0 items-center justify-center",
8927
- children: action
9066
+ const { isHovered, hoverProps } = useHover({ isDisabled });
9067
+ const { isFocusVisible, focusProps } = useFocusRing({ within: true });
9068
+ const [isPressed, setIsPressed] = useState(false);
9069
+ const { onMouseDown: handleRipple, ripples } = useRipple({ disabled: isDisabled });
9070
+ const handleMouseDown = useCallback(
9071
+ (e) => {
9072
+ setIsPressed(true);
9073
+ handleRipple(e);
8928
9074
  },
8929
- index
8930
- ));
8931
- const styledAvatar = avatar ? /* @__PURE__ */ jsx("span", { className: "flex size-12 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "size-[30px] overflow-hidden rounded-full", children: avatar }) }) : void 0;
9075
+ [handleRipple]
9076
+ );
9077
+ const handleMouseUp = useCallback(() => setIsPressed(false), []);
9078
+ const styledLeadingIcon = /* @__PURE__ */ jsx("span", { className: cn(searchBarLeadingIconVariants()), children: /* @__PURE__ */ jsx("span", { className: "size-6", children: leadingIcon ?? /* @__PURE__ */ jsx(DefaultSearchIcon, {}) }) });
9079
+ const styledTrailingActions = trailingActions?.map((action, index) => /* @__PURE__ */ jsx("span", { className: cn(searchBarTrailingActionVariants()), children: action }, index));
9080
+ const styledAvatar = avatar ? /* @__PURE__ */ jsx("span", { className: cn(searchBarAvatarVariants()), children: /* @__PURE__ */ jsx("span", { className: "size-[30px] overflow-hidden rounded-full", children: avatar }) }) : void 0;
9081
+ const paneMarginClass = searchStyle === "contained" ? isFocused ? "mx-3" : "mx-6" : "";
9082
+ const paneTransitionClass = searchStyle === "contained" && !reducedMotion ? "transition-[margin] duration-expressive-fast-spatial ease-expressive-fast-spatial" : "";
8932
9083
  return /* @__PURE__ */ jsx(
8933
9084
  "div",
8934
9085
  {
8935
- className: cn(
8936
- reducedMotion ? "" : "duration-short4 ease-standard transition-[margin]",
8937
- isFocused ? "mx-3" : "mx-6"
8938
- ),
8939
- children: /* @__PURE__ */ jsxs(
8940
- "div",
8941
- {
8942
- role: "presentation",
8943
- className: cn(
8944
- "group relative overflow-hidden rounded-full",
8945
- "has-[:focus-visible]:ring-secondary has-[:focus-visible]:ring-3",
8946
- searchBarVariants({
8947
- style: searchStyle,
8948
- noActions: hasNoActions,
8949
- disabled: isDisabled
9086
+ role: "presentation",
9087
+ ...mergeProps$1(hoverProps, focusProps),
9088
+ className: cn(paneTransitionClass, paneMarginClass),
9089
+ onMouseUp: handleMouseUp,
9090
+ children: /* @__PURE__ */ jsxs("div", { role: "presentation", className: "relative", children: [
9091
+ /* @__PURE__ */ jsx("span", { className: cn(searchBarFocusRingVariants()), "aria-hidden": "true" }),
9092
+ /* @__PURE__ */ jsxs(
9093
+ "div",
9094
+ {
9095
+ role: "presentation",
9096
+ ...getInteractionDataAttributes({
9097
+ isHovered,
9098
+ isFocusVisible,
9099
+ isPressed,
9100
+ isDisabled
8950
9101
  }),
8951
- className
8952
- ),
8953
- onMouseDown: handleRipple,
8954
- children: [
8955
- /* @__PURE__ */ jsx(
8956
- "span",
8957
- {
8958
- "data-slot": "state-layer",
8959
- className: cn(
8960
- "bg-on-surface pointer-events-none absolute inset-0 rounded-full opacity-0",
8961
- "group-hover:opacity-8 group-active:opacity-10",
8962
- "duration-spring-standard-fast-effects ease-spring-standard-fast-effects transition-opacity"
8963
- )
8964
- }
8965
- ),
8966
- /* @__PURE__ */ jsx(
8967
- SearchBarHeadless,
8968
- {
8969
- ref,
8970
- ...value !== void 0 ? { value } : {},
8971
- ...defaultValue !== void 0 ? { defaultValue } : {},
8972
- ...onChange !== void 0 ? { onChange } : {},
8973
- ...onSubmit !== void 0 ? { onSubmit } : {},
8974
- ...onClear !== void 0 ? { onClear } : {},
8975
- ...placeholder !== void 0 ? { placeholder } : {},
8976
- ...styledLeadingIcon !== void 0 ? { leadingIcon: styledLeadingIcon } : {},
8977
- ...styledTrailingActions !== void 0 ? { trailingActions: styledTrailingActions } : {},
8978
- ...styledAvatar !== void 0 ? { avatar: styledAvatar } : {},
8979
- ...isDisabled !== void 0 ? { isDisabled } : {},
8980
- ...ariaLabel !== void 0 ? { "aria-label": ariaLabel } : {},
8981
- onFocus: handleFocusInternal,
8982
- onBlur: handleBlurInternal,
8983
- className: cn(
8984
- "relative z-0 flex h-full w-full items-center",
8985
- "[&_input]:flex-1 [&_input]:bg-transparent [&_input]:outline-none",
8986
- "[&_input]:text-body-large [&_input]:text-on-surface",
8987
- "[&_input]:placeholder:text-on-surface-variant",
8988
- "[&_input]:focus-visible:outline-none"
8989
- )
8990
- }
9102
+ "data-with-actions": hasActions ? "" : void 0,
9103
+ className: cn(
9104
+ "group/search overflow-hidden",
9105
+ searchBarRootVariants({ style: searchStyle }),
9106
+ className
8991
9107
  ),
8992
- ripples
8993
- ]
8994
- }
8995
- )
9108
+ onMouseDown: (e) => handleMouseDown(e),
9109
+ children: [
9110
+ /* @__PURE__ */ jsx(
9111
+ "span",
9112
+ {
9113
+ "data-slot": "state-layer",
9114
+ className: cn(searchBarStateLayerVariants()),
9115
+ "aria-hidden": "true"
9116
+ }
9117
+ ),
9118
+ ripples,
9119
+ /* @__PURE__ */ jsx(
9120
+ SearchBarHeadless,
9121
+ {
9122
+ ref,
9123
+ ...value !== void 0 ? { value } : {},
9124
+ ...defaultValue !== void 0 ? { defaultValue } : {},
9125
+ ...onChange !== void 0 ? { onChange } : {},
9126
+ ...onSubmit !== void 0 ? { onSubmit } : {},
9127
+ ...onClear !== void 0 ? { onClear } : {},
9128
+ ...placeholder !== void 0 ? { placeholder } : {},
9129
+ leadingIcon: styledLeadingIcon,
9130
+ ...styledTrailingActions !== void 0 ? { trailingActions: styledTrailingActions } : {},
9131
+ ...styledAvatar !== void 0 ? { avatar: styledAvatar } : {},
9132
+ isDisabled,
9133
+ ...ariaLabel !== void 0 ? { "aria-label": ariaLabel } : {},
9134
+ onFocus: handleFocusInternal,
9135
+ onBlur: handleBlurInternal,
9136
+ className: "relative z-0 flex h-full w-full items-center",
9137
+ inputClassName: cn(searchBarInputVariants()),
9138
+ trailingActionsClassName: cn(searchBarTrailingActionsVariants())
9139
+ }
9140
+ )
9141
+ ]
9142
+ }
9143
+ )
9144
+ ] })
8996
9145
  }
8997
9146
  );
8998
9147
  }
@@ -9017,21 +9166,29 @@ var SearchView = forwardRef(
9017
9166
  showDivider
9018
9167
  }, ref) => {
9019
9168
  const resolvedShowDivider = showDivider ?? searchStyle === "divided";
9169
+ const enterMotionClass = layout === "docked" ? "animate-md-scale-in" : "animate-md-fade-in";
9170
+ const containerClass = cn(
9171
+ searchViewVariants({ style: searchStyle, layout }),
9172
+ enterMotionClass,
9173
+ className
9174
+ );
9175
+ const headerClass = cn(searchViewHeaderVariants({ style: searchStyle, layout }));
9176
+ const backButtonClass = cn(searchViewBackButtonVariants());
9177
+ const clearButtonClass = cn(searchViewClearButtonVariants());
9178
+ const trailingActionClass = cn(searchViewTrailingActionVariants());
9179
+ const trailingActionsGroupClass = cn(searchViewTrailingActionsVariants());
9180
+ const inputClass = cn(searchViewInputVariants());
9181
+ const dividerClass = cn(searchViewDividerVariants());
9182
+ const contentClass = cn(searchViewContentVariants());
9020
9183
  const styledLeadingIcon = leadingIcon ? /* @__PURE__ */ jsx("span", { className: "text-on-surface flex size-12 shrink-0 items-center justify-center", children: leadingIcon }) : void 0;
9021
- const styledTrailingActions = trailingActions?.map((action, index) => /* @__PURE__ */ jsx(
9022
- "span",
9023
- {
9024
- className: "text-on-surface-variant flex size-12 shrink-0 items-center justify-center",
9025
- children: action
9026
- },
9027
- index
9028
- ));
9184
+ const styledTrailingActions = trailingActions?.map((action, index) => /* @__PURE__ */ jsx("span", { className: trailingActionClass, children: action }, index));
9029
9185
  return /* @__PURE__ */ jsx(
9030
9186
  SearchViewHeadless,
9031
9187
  {
9032
9188
  ref,
9033
9189
  isOpen,
9034
9190
  onClose,
9191
+ layout,
9035
9192
  ...value !== void 0 ? { value } : {},
9036
9193
  ...defaultValue !== void 0 ? { defaultValue } : {},
9037
9194
  ...onChange !== void 0 ? { onChange } : {},
@@ -9041,53 +9198,20 @@ var SearchView = forwardRef(
9041
9198
  ...styledLeadingIcon !== void 0 ? { leadingIcon: styledLeadingIcon } : {},
9042
9199
  ...styledTrailingActions !== void 0 ? { trailingActions: styledTrailingActions } : {},
9043
9200
  showDivider: resolvedShowDivider,
9044
- className: cn(
9045
- searchViewVariants({ style: searchStyle, layout }),
9046
- "animate-md-scale-in",
9047
- getHeaderClasses(searchStyle, layout),
9048
- slotClasses,
9049
- className
9050
- ),
9201
+ className: containerClass,
9202
+ headerClassName: headerClass,
9203
+ backButtonClassName: backButtonClass,
9204
+ clearButtonClassName: clearButtonClass,
9205
+ inputClassName: inputClass,
9206
+ trailingActionsClassName: trailingActionsGroupClass,
9207
+ dividerClassName: dividerClass,
9208
+ contentClassName: contentClass,
9051
9209
  children
9052
9210
  }
9053
9211
  );
9054
9212
  }
9055
9213
  );
9056
9214
  SearchView.displayName = "SearchView";
9057
- var slotClasses = cn(
9058
- // Input styling
9059
- "[&_input]:flex-1 [&_input]:bg-transparent [&_input]:outline-none",
9060
- "[&_input]:text-body-large [&_input]:text-on-surface",
9061
- "[&_input]:placeholder:text-on-surface-variant",
9062
- // Divider
9063
- "[&>[data-slot=divider]]:border-outline",
9064
- // Content area
9065
- "[&>[data-slot=content]]:flex-1 [&>[data-slot=content]]:overflow-y-auto",
9066
- // Clear button
9067
- "[&_[data-slot=clear-button]]:size-12 [&_[data-slot=clear-button]]:flex",
9068
- "[&_[data-slot=clear-button]]:items-center [&_[data-slot=clear-button]]:justify-center",
9069
- "[&_[data-slot=clear-button]]:text-on-surface-variant",
9070
- "[&_[data-slot=clear-button]]:transition-opacity [&_[data-slot=clear-button]]:duration-short4",
9071
- "[&_[data-slot=clear-button]]:ease-standard",
9072
- // Back button
9073
- "[&_[data-slot=back-button]]:size-12 [&_[data-slot=back-button]]:flex",
9074
- "[&_[data-slot=back-button]]:items-center [&_[data-slot=back-button]]:justify-center",
9075
- "[&_[data-slot=back-button]]:text-on-surface"
9076
- );
9077
- function getHeaderClasses(style, layout) {
9078
- const base = "[&>[data-slot=header]]:flex [&>[data-slot=header]]:items-center [&>[data-slot=header]]:w-full [&>[data-slot=header]]:bg-surface-container-high [&>[data-slot=header]]:gap-1";
9079
- if (layout === "docked") {
9080
- return cn(
9081
- base,
9082
- "[&>[data-slot=header]]:h-14",
9083
- style === "contained" ? "[&>[data-slot=header]]:px-3" : "[&>[data-slot=header]]:px-4"
9084
- );
9085
- }
9086
- if (style === "contained") {
9087
- return cn(base, "[&>[data-slot=header]]:h-14 [&>[data-slot=header]]:px-3");
9088
- }
9089
- return cn(base, "[&>[data-slot=header]]:h-[72px] [&>[data-slot=header]]:px-4");
9090
- }
9091
9215
  var Search = forwardRef(
9092
9216
  ({
9093
9217
  isOpen: controlledIsOpen,
@@ -15911,6 +16035,6 @@ var DateField = forwardRef((props, forwardedRef) => {
15911
16035
  });
15912
16036
  DateField.displayName = "DateField";
15913
16037
 
15914
- 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, searchBarVariants, searchViewHeaderVariants, searchViewVariants, sliderActiveTrackVariants, sliderContainerVariants, sliderHandleStateLayerVariants, sliderHandleVariants, sliderInactiveTrackVariants, sliderTrackLayoutVariants, splitButtonContainerVariants, splitButtonDropdownVariants, splitButtonPrimaryVariants, 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 };
16038
+ 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, splitButtonDropdownVariants, splitButtonPrimaryVariants, 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 };
15915
16039
  //# sourceMappingURL=index.js.map
15916
16040
  //# sourceMappingURL=index.js.map