@geckoui/geckoui 1.2.0-beta.1 → 1.2.0-beta.2

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.d.mts CHANGED
@@ -2989,9 +2989,12 @@ interface TooltipProps extends PropsWithChildren {
2989
2989
  * */
2990
2990
  triggerClassName?: string;
2991
2991
  /**
2992
- * Whether consider the trigger as a child
2993
- * Use this to avoid invalid button nesting errors when using a button as the trigger
2994
- * If you use custom components as the trigger, you might need to wrap with `forwardRef`
2992
+ * Classname to apply to the tooltip arrow
2993
+ * */
2994
+ arrowClassName?: string;
2995
+ /**
2996
+ * Whether to use the child element directly as the trigger.
2997
+ * Use this to avoid invalid button nesting errors when using a button as the trigger.
2995
2998
  * */
2996
2999
  triggerAsChild?: boolean;
2997
3000
  /**
@@ -3001,60 +3004,13 @@ interface TooltipProps extends PropsWithChildren {
3001
3004
  /**
3002
3005
  * The side of the tooltip to display
3003
3006
  * */
3004
- side?: "top" | "right" | "bottom" | "left";
3007
+ side?: Placement;
3005
3008
  /**
3006
3009
  * The offset of the tooltip from the trigger
3007
3010
  * */
3008
3011
  sideOffset?: number;
3009
3012
  }
3010
3013
 
3011
- /**
3012
- * Tooltip displays contextual information in a floating overlay when users hover over or focus on an element.
3013
- * Built on Radix UI, it provides accessible tooltips with customizable positioning, delays, and styling.
3014
- * Returns children unchanged if no content is provided.
3015
- *
3016
- * @example
3017
- * Icon button with helpful hint:
3018
- *
3019
- * ```tsx
3020
- * <Tooltip content="Add new item" side="right" delayDuration={300}>
3021
- * <button className="p-2">
3022
- * <PlusIcon />
3023
- * </button>
3024
- * </Tooltip>
3025
- * ```
3026
- *
3027
- * @example
3028
- * Complex tooltip content:
3029
- *
3030
- * ```tsx
3031
- * <Tooltip
3032
- * content={
3033
- * <div>
3034
- * <strong>Premium Feature</strong>
3035
- * <p>Upgrade to access this feature</p>
3036
- * </div>
3037
- * }
3038
- * backgroundColor="#1f2937"
3039
- * sideOffset={10}
3040
- * >
3041
- * <LockIcon />
3042
- * </Tooltip>
3043
- * ```
3044
- *
3045
- * @example
3046
- * Bottom-positioned with custom delay:
3047
- *
3048
- * ```tsx
3049
- * <Tooltip
3050
- * content="Last updated: 2 hours ago"
3051
- * side="bottom"
3052
- * delayDuration={500}
3053
- * >
3054
- * <span>Status: Active</span>
3055
- * </Tooltip>
3056
- * ```
3057
- */
3058
3014
  declare const Tooltip: FC<TooltipProps>;
3059
3015
 
3060
3016
  /** Extensible variant map - To allow module augmentation */
package/dist/index.d.ts CHANGED
@@ -2989,9 +2989,12 @@ interface TooltipProps extends PropsWithChildren {
2989
2989
  * */
2990
2990
  triggerClassName?: string;
2991
2991
  /**
2992
- * Whether consider the trigger as a child
2993
- * Use this to avoid invalid button nesting errors when using a button as the trigger
2994
- * If you use custom components as the trigger, you might need to wrap with `forwardRef`
2992
+ * Classname to apply to the tooltip arrow
2993
+ * */
2994
+ arrowClassName?: string;
2995
+ /**
2996
+ * Whether to use the child element directly as the trigger.
2997
+ * Use this to avoid invalid button nesting errors when using a button as the trigger.
2995
2998
  * */
2996
2999
  triggerAsChild?: boolean;
2997
3000
  /**
@@ -3001,60 +3004,13 @@ interface TooltipProps extends PropsWithChildren {
3001
3004
  /**
3002
3005
  * The side of the tooltip to display
3003
3006
  * */
3004
- side?: "top" | "right" | "bottom" | "left";
3007
+ side?: Placement;
3005
3008
  /**
3006
3009
  * The offset of the tooltip from the trigger
3007
3010
  * */
3008
3011
  sideOffset?: number;
3009
3012
  }
3010
3013
 
3011
- /**
3012
- * Tooltip displays contextual information in a floating overlay when users hover over or focus on an element.
3013
- * Built on Radix UI, it provides accessible tooltips with customizable positioning, delays, and styling.
3014
- * Returns children unchanged if no content is provided.
3015
- *
3016
- * @example
3017
- * Icon button with helpful hint:
3018
- *
3019
- * ```tsx
3020
- * <Tooltip content="Add new item" side="right" delayDuration={300}>
3021
- * <button className="p-2">
3022
- * <PlusIcon />
3023
- * </button>
3024
- * </Tooltip>
3025
- * ```
3026
- *
3027
- * @example
3028
- * Complex tooltip content:
3029
- *
3030
- * ```tsx
3031
- * <Tooltip
3032
- * content={
3033
- * <div>
3034
- * <strong>Premium Feature</strong>
3035
- * <p>Upgrade to access this feature</p>
3036
- * </div>
3037
- * }
3038
- * backgroundColor="#1f2937"
3039
- * sideOffset={10}
3040
- * >
3041
- * <LockIcon />
3042
- * </Tooltip>
3043
- * ```
3044
- *
3045
- * @example
3046
- * Bottom-positioned with custom delay:
3047
- *
3048
- * ```tsx
3049
- * <Tooltip
3050
- * content="Last updated: 2 hours ago"
3051
- * side="bottom"
3052
- * delayDuration={500}
3053
- * >
3054
- * <span>Status: Active</span>
3055
- * </Tooltip>
3056
- * ```
3057
- */
3058
3014
  declare const Tooltip: FC<TooltipProps>;
3059
3015
 
3060
3016
  /** Extensible variant map - To allow module augmentation */
package/dist/index.js CHANGED
@@ -2616,7 +2616,8 @@ Input.displayName = "Input";
2616
2616
  var Input_default = Input;
2617
2617
 
2618
2618
  // src/components/Tooltip/Tooltip.tsx
2619
- var RTooltip = __toESM(require("@radix-ui/react-tooltip"));
2619
+ var import_react17 = require("@floating-ui/react");
2620
+ var import_react18 = require("react");
2620
2621
  var import_jsx_runtime18 = require("react/jsx-runtime");
2621
2622
  var Tooltip = ({
2622
2623
  children,
@@ -2625,37 +2626,77 @@ var Tooltip = ({
2625
2626
  className,
2626
2627
  triggerClassName,
2627
2628
  triggerAsChild = false,
2628
- backgroundColor = "#4b5563",
2629
+ arrowClassName,
2630
+ backgroundColor,
2629
2631
  side = "top",
2630
- sideOffset = 5
2632
+ sideOffset = 12
2631
2633
  }) => {
2634
+ const [isOpen, setIsOpen] = (0, import_react18.useState)(false);
2635
+ const arrowRef = (0, import_react18.useRef)(null);
2636
+ const timeoutRef = (0, import_react18.useRef)(null);
2637
+ const { refs, floatingStyles, context } = (0, import_react17.useFloating)({
2638
+ open: isOpen,
2639
+ onOpenChange: setIsOpen,
2640
+ placement: side,
2641
+ middleware: [(0, import_react17.offset)(sideOffset), (0, import_react17.flip)(), (0, import_react17.shift)({ padding: 5 }), (0, import_react17.arrow)({ element: arrowRef })]
2642
+ });
2643
+ const handleMouseEnter = () => {
2644
+ if (timeoutRef.current) {
2645
+ clearTimeout(timeoutRef.current);
2646
+ }
2647
+ timeoutRef.current = setTimeout(() => {
2648
+ setIsOpen(true);
2649
+ }, delayDuration);
2650
+ };
2651
+ const handleMouseLeave = () => {
2652
+ if (timeoutRef.current) {
2653
+ clearTimeout(timeoutRef.current);
2654
+ }
2655
+ setIsOpen(false);
2656
+ };
2632
2657
  if (!content) return children;
2633
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(RTooltip.Provider, { delayDuration, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(RTooltip.Root, { children: [
2634
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2635
- RTooltip.Trigger,
2636
- {
2637
- asChild: triggerAsChild,
2638
- className: classNames(!triggerAsChild && "GeckoUITooltip__trigger", triggerClassName),
2639
- role: "tooltip",
2640
- type: "button",
2641
- children
2658
+ const triggerProps = {
2659
+ ref: refs.setReference,
2660
+ onMouseEnter: handleMouseEnter,
2661
+ onMouseLeave: handleMouseLeave,
2662
+ onFocus: handleMouseEnter,
2663
+ onBlur: handleMouseLeave
2664
+ };
2665
+ const renderTrigger = () => {
2666
+ if (triggerAsChild) {
2667
+ const child = import_react18.Children.only(children);
2668
+ if ((0, import_react18.isValidElement)(child)) {
2669
+ return (0, import_react18.cloneElement)(child, __spreadProps(__spreadValues({}, triggerProps), {
2670
+ className: classNames(child.props.className, triggerClassName)
2671
+ }));
2642
2672
  }
2643
- ),
2644
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(RTooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2645
- RTooltip.Content,
2673
+ }
2674
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", __spreadProps(__spreadValues({}, triggerProps), { className: classNames("GeckoUITooltip__trigger", triggerClassName), children }));
2675
+ };
2676
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
2677
+ renderTrigger(),
2678
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react17.FloatingPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2679
+ "div",
2646
2680
  {
2647
- side,
2681
+ ref: refs.setFloating,
2682
+ style: __spreadProps(__spreadValues({}, floatingStyles), { backgroundColor }),
2648
2683
  className: classNames("GeckoUITooltip", className),
2649
- sideOffset,
2650
2684
  role: "tooltip",
2651
- style: { backgroundColor },
2652
2685
  children: [
2653
2686
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DynamicComponentRenderer_default, { component: content }),
2654
- (side === "top" || side === "bottom") && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(RTooltip.Arrow, { fill: backgroundColor, className: "GeckoUITooltip__arrow" })
2687
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2688
+ import_react17.FloatingArrow,
2689
+ {
2690
+ ref: arrowRef,
2691
+ context,
2692
+ className: classNames("GeckoUITooltip__arrow", arrowClassName),
2693
+ style: { fill: backgroundColor }
2694
+ }
2695
+ )
2655
2696
  ]
2656
2697
  }
2657
2698
  ) })
2658
- ] }) });
2699
+ ] });
2659
2700
  };
2660
2701
  var Tooltip_default = Tooltip;
2661
2702
 
@@ -2705,9 +2746,9 @@ var InputError = (_a) => {
2705
2746
  var InputError_default = InputError;
2706
2747
 
2707
2748
  // src/components/Button/Button.tsx
2708
- var import_react17 = require("react");
2749
+ var import_react19 = require("react");
2709
2750
  var import_jsx_runtime21 = require("react/jsx-runtime");
2710
- var Button = (0, import_react17.forwardRef)(
2751
+ var Button = (0, import_react19.forwardRef)(
2711
2752
  (_a, ref) => {
2712
2753
  var _b = _a, { children, className, variant = "filled", size = "md", color = "primary" } = _b, rest = __objRest(_b, ["children", "className", "variant", "size", "color"]);
2713
2754
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
@@ -2817,7 +2858,7 @@ LoadingButton.displayName = "LoadingButton";
2817
2858
  var LoadingButton_default = LoadingButton;
2818
2859
 
2819
2860
  // src/components/RHF/RHFCheckbox/RHFCheckbox.tsx
2820
- var import_react18 = require("react");
2861
+ var import_react20 = require("react");
2821
2862
 
2822
2863
  // src/utils/isEqual.ts
2823
2864
  var import_lodash = __toESM(require("lodash.isequal"));
@@ -2872,7 +2913,7 @@ var RHFCheckbox = (_a) => {
2872
2913
  "partial",
2873
2914
  "onBlur"
2874
2915
  ]);
2875
- const _id = (0, import_react18.useId)();
2916
+ const _id = (0, import_react20.useId)();
2876
2917
  return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2877
2918
  RHFController_default,
2878
2919
  {
@@ -3046,7 +3087,7 @@ RHFInput.displayName = "RHFInput";
3046
3087
  var RHFInput_default = RHFInput;
3047
3088
 
3048
3089
  // src/components/RHF/RHFError/RHFError.tsx
3049
- var import_react19 = require("react");
3090
+ var import_react21 = require("react");
3050
3091
  var import_jsx_runtime28 = require("react/jsx-runtime");
3051
3092
  var RHFError = ({ name, control, className, render }) => {
3052
3093
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -3056,7 +3097,7 @@ var RHFError = ({ name, control, className, render }) => {
3056
3097
  name,
3057
3098
  render: ({ fieldState }) => {
3058
3099
  const { error } = fieldState;
3059
- if (!(error == null ? void 0 : error.message)) return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react19.Fragment, {}, "rhf-error");
3100
+ if (!(error == null ? void 0 : error.message)) return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react21.Fragment, {}, "rhf-error");
3060
3101
  if (typeof render === "function") {
3061
3102
  return render(fieldState);
3062
3103
  }
@@ -3196,10 +3237,10 @@ RHFCurrencyInput.displayName = "RHFCurrencyInput";
3196
3237
  var RHFCurrencyInput_default = RHFCurrencyInput;
3197
3238
 
3198
3239
  // src/components/Textarea/Textarea.tsx
3199
- var import_react20 = require("react");
3240
+ var import_react22 = require("react");
3200
3241
  var import_react_textarea_autosize = __toESM(require("react-textarea-autosize"));
3201
3242
  var import_jsx_runtime32 = require("react/jsx-runtime");
3202
- var Textarea = (0, import_react20.forwardRef)(
3243
+ var Textarea = (0, import_react22.forwardRef)(
3203
3244
  (_a, ref) => {
3204
3245
  var _b = _a, { autoResize, className, rows = 2, maxRows } = _b, rest = __objRest(_b, ["autoResize", "className", "rows", "maxRows"]);
3205
3246
  return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
@@ -3272,14 +3313,14 @@ RHFTextarea.displayName = "RHFTextarea";
3272
3313
  var RHFTextarea_default = RHFTextarea;
3273
3314
 
3274
3315
  // src/components/Switch/Switch.tsx
3275
- var import_react21 = require("@headlessui/react");
3276
- var import_react22 = require("react");
3316
+ var import_react23 = require("@headlessui/react");
3317
+ var import_react24 = require("react");
3277
3318
  var import_jsx_runtime34 = require("react/jsx-runtime");
3278
- var Switch = (0, import_react22.forwardRef)(
3319
+ var Switch = (0, import_react24.forwardRef)(
3279
3320
  (_a, ref) => {
3280
3321
  var _b = _a, { className, thumbClassName, size = "md" } = _b, rest = __objRest(_b, ["className", "thumbClassName", "size"]);
3281
3322
  return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3282
- import_react21.Switch,
3323
+ import_react23.Switch,
3283
3324
  __spreadProps(__spreadValues({
3284
3325
  onKeyUp: (e) => {
3285
3326
  if (e.key === "Enter") {
@@ -3385,12 +3426,12 @@ RHFSwitch.displayName = "RHFSwitch";
3385
3426
  var RHFSwitch_default = RHFSwitch;
3386
3427
 
3387
3428
  // src/components/RHF/RHFRadio/RHFRadio.tsx
3388
- var import_react24 = require("react");
3429
+ var import_react26 = require("react");
3389
3430
 
3390
3431
  // src/components/Radio/Radio.tsx
3391
- var import_react23 = require("react");
3432
+ var import_react25 = require("react");
3392
3433
  var import_jsx_runtime36 = require("react/jsx-runtime");
3393
- var Radio = (0, import_react23.forwardRef)((_a, ref) => {
3434
+ var Radio = (0, import_react25.forwardRef)((_a, ref) => {
3394
3435
  var _b = _a, { className } = _b, rest = __objRest(_b, ["className"]);
3395
3436
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("input", __spreadProps(__spreadValues({ className: classNames("GeckoUIRadio", className), ref }, rest), { type: "radio" }));
3396
3437
  });
@@ -3423,7 +3464,7 @@ var RHFRadio = (_a) => {
3423
3464
  "onChange",
3424
3465
  "onBlur"
3425
3466
  ]);
3426
- const _id = (0, import_react24.useId)();
3467
+ const _id = (0, import_react26.useId)();
3427
3468
  const uniqueId = id || _id;
3428
3469
  if (value === void 0 || value === null) {
3429
3470
  throw new Error("RHFRadio: value cannot be undefined or null");
@@ -3606,9 +3647,9 @@ RHFFileInput.displayName = "RHFFileInput";
3606
3647
  var RHFFileInput_default = RHFFileInput;
3607
3648
 
3608
3649
  // src/components/OTPInput/OTPInput.tsx
3609
- var import_react25 = require("react");
3650
+ var import_react27 = require("react");
3610
3651
  var import_jsx_runtime41 = require("react/jsx-runtime");
3611
- var OTPInput = (0, import_react25.forwardRef)(
3652
+ var OTPInput = (0, import_react27.forwardRef)(
3612
3653
  ({
3613
3654
  value = "",
3614
3655
  onChange,
@@ -3621,7 +3662,7 @@ var OTPInput = (0, import_react25.forwardRef)(
3621
3662
  onOTPComplete,
3622
3663
  disabled
3623
3664
  }, ref) => {
3624
- const divRef = (0, import_react25.useRef)(null);
3665
+ const divRef = (0, import_react27.useRef)(null);
3625
3666
  const focus = (index) => {
3626
3667
  var _a, _b;
3627
3668
  const children = (_a = divRef.current) == null ? void 0 : _a.children;
@@ -3881,8 +3922,8 @@ RHFFilePicker.displayName = "RHFFilePicker";
3881
3922
  var RHFFilePicker_default = RHFFilePicker;
3882
3923
 
3883
3924
  // src/components/Select/Select/Select.tsx
3884
- var import_react30 = require("@floating-ui/react");
3885
- var import_react31 = require("react");
3925
+ var import_react32 = require("@floating-ui/react");
3926
+ var import_react33 = require("react");
3886
3927
 
3887
3928
  // src/utils/isTextIncludes.ts
3888
3929
  function isTextIncludes(baseString = "", searchString) {
@@ -3951,7 +3992,7 @@ function findSelectOptions(el) {
3951
3992
  }
3952
3993
 
3953
3994
  // src/components/Select/SelectButton/SelectButton.tsx
3954
- var import_react28 = require("react");
3995
+ var import_react30 = require("react");
3955
3996
 
3956
3997
  // src/utils/createLabel.ts
3957
3998
  function createLabel(item) {
@@ -3984,13 +4025,13 @@ var createLabel_default = createLabel;
3984
4025
 
3985
4026
  // src/components/Select/hooks/useSelectTrigger.tsx
3986
4027
  var import_lodash2 = __toESM(require("lodash.isequal"));
3987
- var import_react27 = require("react");
4028
+ var import_react29 = require("react");
3988
4029
 
3989
4030
  // src/components/Select/useSelect.tsx
3990
- var import_react26 = require("react");
3991
- var SelectContext = (0, import_react26.createContext)(void 0);
4031
+ var import_react28 = require("react");
4032
+ var SelectContext = (0, import_react28.createContext)(void 0);
3992
4033
  var useSelect = () => {
3993
- const context = (0, import_react26.useContext)(SelectContext);
4034
+ const context = (0, import_react28.useContext)(SelectContext);
3994
4035
  if (context === void 0) {
3995
4036
  throw new Error("SelectContext must be used within a SelectProvider");
3996
4037
  }
@@ -4069,7 +4110,7 @@ var useSelectTrigger = () => {
4069
4110
  handleChange(value.at(-1));
4070
4111
  }
4071
4112
  };
4072
- const hasValue = (0, import_react27.useMemo)(() => {
4113
+ const hasValue = (0, import_react29.useMemo)(() => {
4073
4114
  if (multiple) {
4074
4115
  return Array.isArray(value) && !!(value == null ? void 0 : value.length);
4075
4116
  }
@@ -4129,9 +4170,9 @@ function SelectButton({ prefix, suffix, className }) {
4129
4170
  onChange,
4130
4171
  clearable
4131
4172
  } = useSelect();
4132
- const id = (0, import_react28.useId)();
4173
+ const id = (0, import_react30.useId)();
4133
4174
  const { hasValue, handleInputChange, handleKeyboardInteraction } = useSelectTrigger();
4134
- const trigger = (0, import_react28.useMemo)(() => import_react28.Children.toArray(children).find(isSelectTrigger), [children]);
4175
+ const trigger = (0, import_react30.useMemo)(() => import_react30.Children.toArray(children).find(isSelectTrigger), [children]);
4135
4176
  const handleClear = (e) => {
4136
4177
  e.stopPropagation();
4137
4178
  if (disabled) return;
@@ -4319,7 +4360,7 @@ SelectButton.displayName = "SelectButton";
4319
4360
  var SelectButton_default = SelectButton;
4320
4361
 
4321
4362
  // src/components/Select/SelectMenu/SelectMenu.tsx
4322
- var import_react29 = require("react");
4363
+ var import_react31 = require("react");
4323
4364
 
4324
4365
  // src/components/Select/SelectDropdownSearch/SelectDropdownSearch.tsx
4325
4366
  var import_lodash3 = __toESM(require("lodash.isequal"));
@@ -4429,8 +4470,8 @@ var SelectMenu = (_a) => {
4429
4470
  menuScrollContainerRef,
4430
4471
  floating: { refs, floatingStyles }
4431
4472
  } = useSelect();
4432
- const menuItems = (0, import_react29.useMemo)(
4433
- () => import_react29.Children.toArray(children).filter((el) => !isSelectTrigger(el)),
4473
+ const menuItems = (0, import_react31.useMemo)(
4474
+ () => import_react31.Children.toArray(children).filter((el) => !isSelectTrigger(el)),
4434
4475
  [children]
4435
4476
  );
4436
4477
  if (!open || disabled) {
@@ -4461,7 +4502,7 @@ var SelectMenu = (_a) => {
4461
4502
  function Empty({ children }) {
4462
4503
  const { hideDefaultEmptyUI = false } = useSelect();
4463
4504
  if (hideDefaultEmptyUI) return null;
4464
- const customEmpty = import_react29.Children.toArray(children).find(isSelectEmpty);
4505
+ const customEmpty = import_react31.Children.toArray(children).find(isSelectEmpty);
4465
4506
  if (customEmpty) return null;
4466
4507
  return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SelectEmpty_default, {});
4467
4508
  }
@@ -4471,8 +4512,8 @@ var SelectMenu_default = SelectMenu;
4471
4512
  // src/components/Select/Select/Select.tsx
4472
4513
  var import_jsx_runtime48 = require("react/jsx-runtime");
4473
4514
  var Select = (props) => {
4474
- const inputRef = (0, import_react31.useRef)(null);
4475
- const menuScrollContainerRef = (0, import_react31.useRef)(null);
4515
+ const inputRef = (0, import_react33.useRef)(null);
4516
+ const menuScrollContainerRef = (0, import_react33.useRef)(null);
4476
4517
  const _a = props, {
4477
4518
  disabled,
4478
4519
  inputRef: customInputRef,
@@ -4500,22 +4541,22 @@ var Select = (props) => {
4500
4541
  "floatingStrategy",
4501
4542
  "clearable"
4502
4543
  ]);
4503
- const [open, setOpen] = (0, import_react31.useState)(false);
4504
- const [keyword, setKeyword] = (0, import_react31.useState)("");
4505
- const [focusedOption, setFocusedOption] = (0, import_react31.useState)(null);
4506
- const floating = (0, import_react30.useFloating)({
4544
+ const [open, setOpen] = (0, import_react33.useState)(false);
4545
+ const [keyword, setKeyword] = (0, import_react33.useState)("");
4546
+ const [focusedOption, setFocusedOption] = (0, import_react33.useState)(null);
4547
+ const floating = (0, import_react32.useFloating)({
4507
4548
  placement,
4508
4549
  strategy: floatingStrategy,
4509
- middleware: [(0, import_react30.flip)({ padding: 6 }), (0, import_react30.offset)({ mainAxis: 6 })],
4510
- whileElementsMounted: import_react30.autoUpdate,
4550
+ middleware: [(0, import_react32.flip)({ padding: 6 }), (0, import_react32.offset)({ mainAxis: 6 })],
4551
+ whileElementsMounted: import_react32.autoUpdate,
4511
4552
  open,
4512
4553
  onOpenChange: setOpen
4513
4554
  });
4514
4555
  const { refs } = floating;
4515
- const options = (0, import_react31.useMemo)(
4556
+ const options = (0, import_react33.useMemo)(
4516
4557
  () => {
4517
4558
  var _a2;
4518
- return (_a2 = import_react31.Children.toArray(children).map(findSelectOptions).filter(Boolean).flat()) != null ? _a2 : [];
4559
+ return (_a2 = import_react33.Children.toArray(children).map(findSelectOptions).filter(Boolean).flat()) != null ? _a2 : [];
4519
4560
  },
4520
4561
  [children]
4521
4562
  );
@@ -4611,7 +4652,7 @@ Select.displayName = "Select";
4611
4652
  var Select_default = Select;
4612
4653
 
4613
4654
  // src/components/Select/SelectOption/SelectOption.tsx
4614
- var import_react32 = require("react");
4655
+ var import_react34 = require("react");
4615
4656
  var import_jsx_runtime49 = require("react/jsx-runtime");
4616
4657
  var SelectOption = (_a) => {
4617
4658
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
@@ -4634,7 +4675,7 @@ var SelectOption = (_a) => {
4634
4675
  "onRemove",
4635
4676
  "disabled"
4636
4677
  ]);
4637
- const ref = (0, import_react32.useRef)(null);
4678
+ const ref = (0, import_react34.useRef)(null);
4638
4679
  const { preventDefault, attachPreventDefault } = usePreventDefault_default();
4639
4680
  const {
4640
4681
  closeMenuOnSelect,
@@ -4652,7 +4693,7 @@ var SelectOption = (_a) => {
4652
4693
  } = useSelect();
4653
4694
  const selected = isSelected(value);
4654
4695
  const focused = !isNil_default(focusedOption) && isEqual_default(focusedOption == null ? void 0 : focusedOption.value, value);
4655
- (0, import_react32.useEffect)(() => {
4696
+ (0, import_react34.useEffect)(() => {
4656
4697
  if (!ref.current || !menuScrollContainerRef.current) return;
4657
4698
  if ((focusedOption == null ? void 0 : focusedOption.focusType) !== "mouse" && focused) {
4658
4699
  const scrollContainer = menuScrollContainerRef.current;
@@ -4708,7 +4749,7 @@ var SelectOption = (_a) => {
4708
4749
  }
4709
4750
  attachPreventDefault(selectCurrentOption);
4710
4751
  };
4711
- const Content2 = () => {
4752
+ const Content = () => {
4712
4753
  if (!children) {
4713
4754
  return label;
4714
4755
  }
@@ -4737,7 +4778,7 @@ var SelectOption = (_a) => {
4737
4778
  },
4738
4779
  onClick: disabled ? void 0 : handleOnClick,
4739
4780
  children: [
4740
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Content2, {}),
4781
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Content, {}),
4741
4782
  !!selected && !hideCheckIcon && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "GeckoUI-icon__check GeckoUISelectOption__check-icon" })
4742
4783
  ]
4743
4784
  })
@@ -4959,10 +5000,10 @@ var Pagination = ({ currentPage, totalPages, onChange, className }) => {
4959
5000
  var Pagination_default = Pagination;
4960
5001
 
4961
5002
  // src/components/ConfirmDialog/ConfirmDialog.tsx
4962
- var import_react34 = require("react");
5003
+ var import_react36 = require("react");
4963
5004
 
4964
5005
  // src/components/Dialog/Dialog.tsx
4965
- var import_react33 = require("react");
5006
+ var import_react35 = require("react");
4966
5007
  var import_client = require("react-dom/client");
4967
5008
 
4968
5009
  // src/components/Dialog/DialogContainer.tsx
@@ -5013,8 +5054,8 @@ function DialogContent(_a) {
5013
5054
  }
5014
5055
  return acc;
5015
5056
  }, {});
5016
- const ref = (0, import_react33.useRef)(null);
5017
- const [animationState, setAnimationState] = (0, import_react33.useState)("entering");
5057
+ const ref = (0, import_react35.useRef)(null);
5058
+ const [animationState, setAnimationState] = (0, import_react35.useState)("entering");
5018
5059
  const handleDismiss = () => {
5019
5060
  setAnimationState("closing");
5020
5061
  setTimeout(() => {
@@ -5025,7 +5066,7 @@ function DialogContent(_a) {
5025
5066
  }
5026
5067
  }, 300);
5027
5068
  };
5028
- (0, import_react33.useEffect)(() => {
5069
+ (0, import_react35.useEffect)(() => {
5029
5070
  dismissCallback = handleDismiss;
5030
5071
  requestAnimationFrame(() => {
5031
5072
  requestAnimationFrame(() => {
@@ -5056,10 +5097,10 @@ function ConfirmDialogContent({
5056
5097
  onConfirm,
5057
5098
  onCancel
5058
5099
  }) {
5059
- const [cancelLoading, setCancelLoading] = (0, import_react34.useState)(false);
5060
- const [confirmLoading, setConfirmLoading] = (0, import_react34.useState)(false);
5100
+ const [cancelLoading, setCancelLoading] = (0, import_react36.useState)(false);
5101
+ const [confirmLoading, setConfirmLoading] = (0, import_react36.useState)(false);
5061
5102
  const { preventDefault, attachPreventDefault } = usePreventDefault_default();
5062
- const handleConfirm = (0, import_react34.useCallback)(() => __async(null, null, function* () {
5103
+ const handleConfirm = (0, import_react36.useCallback)(() => __async(null, null, function* () {
5063
5104
  const isAsync = isAsyncFn(onConfirm);
5064
5105
  if (isAsync) {
5065
5106
  setConfirmLoading(true);
@@ -5077,7 +5118,7 @@ function ConfirmDialogContent({
5077
5118
  setCancelLoading(false);
5078
5119
  attachPreventDefault(dismiss2);
5079
5120
  };
5080
- (0, import_react34.useEffect)(() => {
5121
+ (0, import_react36.useEffect)(() => {
5081
5122
  const onKeyDown = (e) => {
5082
5123
  const el = document.activeElement;
5083
5124
  if (e.key === "Enter") {
@@ -5172,7 +5213,7 @@ var GeckoUIPortal = ({ toastOptions = {} }) => {
5172
5213
  var GeckoUIPortal_default = GeckoUIPortal;
5173
5214
 
5174
5215
  // src/components/Drawer/Drawer.tsx
5175
- var import_react35 = require("react");
5216
+ var import_react37 = require("react");
5176
5217
  var import_client2 = require("react-dom/client");
5177
5218
  var import_jsx_runtime58 = require("react/jsx-runtime");
5178
5219
  function getDrawerClasses(placement, open, className) {
@@ -5202,7 +5243,7 @@ function Drawer({
5202
5243
  children,
5203
5244
  dismissOnEscape = true
5204
5245
  }) {
5205
- const drawerRootRef = (0, import_react35.useRef)(null);
5246
+ const drawerRootRef = (0, import_react37.useRef)(null);
5206
5247
  const handleDismiss = () => {
5207
5248
  if (open) handleClose == null ? void 0 : handleClose();
5208
5249
  };
@@ -5251,13 +5292,13 @@ Drawer.dismiss = () => {
5251
5292
  var Drawer_default = Drawer;
5252
5293
 
5253
5294
  // src/components/Menu/Menu.tsx
5254
- var import_react36 = require("@headlessui/react");
5295
+ var import_react38 = require("@headlessui/react");
5255
5296
  var import_jsx_runtime59 = require("react/jsx-runtime");
5256
- var Menu = import_react36.Menu;
5297
+ var Menu = import_react38.Menu;
5257
5298
  var MenuButton = (_a) => {
5258
5299
  var _b = _a, { as } = _b, rest = __objRest(_b, ["as"]);
5259
5300
  return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
5260
- import_react36.MenuButton,
5301
+ import_react38.MenuButton,
5261
5302
  __spreadProps(__spreadValues({
5262
5303
  as: as != null ? as : "button"
5263
5304
  }, rest), {
@@ -5274,7 +5315,7 @@ var MenuButton = (_a) => {
5274
5315
  var MenuItems = (_a) => {
5275
5316
  var _b = _a, { as } = _b, rest = __objRest(_b, ["as"]);
5276
5317
  return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
5277
- import_react36.MenuItems,
5318
+ import_react38.MenuItems,
5278
5319
  __spreadProps(__spreadValues({
5279
5320
  as: as != null ? as : "div"
5280
5321
  }, rest), {
@@ -5291,7 +5332,7 @@ var MenuItems = (_a) => {
5291
5332
  var MenuItem = (_a) => {
5292
5333
  var _b = _a, { children, as } = _b, rest = __objRest(_b, ["children", "as"]);
5293
5334
  return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
5294
- import_react36.MenuItem,
5335
+ import_react38.MenuItem,
5295
5336
  __spreadProps(__spreadValues({}, rest), {
5296
5337
  className: (args) => {
5297
5338
  const className = rest.className;
@@ -5306,9 +5347,9 @@ var MenuItem = (_a) => {
5306
5347
  })
5307
5348
  );
5308
5349
  };
5309
- var MenuHeading = import_react36.MenuHeading;
5310
- var MenuSection = import_react36.MenuSection;
5311
- var MenuSeparator = import_react36.MenuSeparator;
5350
+ var MenuHeading = import_react38.MenuHeading;
5351
+ var MenuSection = import_react38.MenuSection;
5352
+ var MenuSeparator = import_react38.MenuSeparator;
5312
5353
 
5313
5354
  // src/components/Dropdown/Dropdown.tsx
5314
5355
  var import_jsx_runtime60 = require("react/jsx-runtime");
package/dist/index.mjs CHANGED
@@ -2516,8 +2516,17 @@ Input.displayName = "Input";
2516
2516
  var Input_default = Input;
2517
2517
 
2518
2518
  // src/components/Tooltip/Tooltip.tsx
2519
- import * as RTooltip from "@radix-ui/react-tooltip";
2520
- import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
2519
+ import {
2520
+ FloatingArrow,
2521
+ FloatingPortal,
2522
+ arrow,
2523
+ flip as flip3,
2524
+ offset as offset3,
2525
+ shift,
2526
+ useFloating as useFloating3
2527
+ } from "@floating-ui/react";
2528
+ import { Children, cloneElement, isValidElement as isValidElement2, useRef as useRef7, useState as useState9 } from "react";
2529
+ import { Fragment as Fragment7, jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
2521
2530
  var Tooltip = ({
2522
2531
  children,
2523
2532
  delayDuration = 700,
@@ -2525,37 +2534,77 @@ var Tooltip = ({
2525
2534
  className,
2526
2535
  triggerClassName,
2527
2536
  triggerAsChild = false,
2528
- backgroundColor = "#4b5563",
2537
+ arrowClassName,
2538
+ backgroundColor,
2529
2539
  side = "top",
2530
- sideOffset = 5
2540
+ sideOffset = 12
2531
2541
  }) => {
2542
+ const [isOpen, setIsOpen] = useState9(false);
2543
+ const arrowRef = useRef7(null);
2544
+ const timeoutRef = useRef7(null);
2545
+ const { refs, floatingStyles, context } = useFloating3({
2546
+ open: isOpen,
2547
+ onOpenChange: setIsOpen,
2548
+ placement: side,
2549
+ middleware: [offset3(sideOffset), flip3(), shift({ padding: 5 }), arrow({ element: arrowRef })]
2550
+ });
2551
+ const handleMouseEnter = () => {
2552
+ if (timeoutRef.current) {
2553
+ clearTimeout(timeoutRef.current);
2554
+ }
2555
+ timeoutRef.current = setTimeout(() => {
2556
+ setIsOpen(true);
2557
+ }, delayDuration);
2558
+ };
2559
+ const handleMouseLeave = () => {
2560
+ if (timeoutRef.current) {
2561
+ clearTimeout(timeoutRef.current);
2562
+ }
2563
+ setIsOpen(false);
2564
+ };
2532
2565
  if (!content) return children;
2533
- return /* @__PURE__ */ jsx18(RTooltip.Provider, { delayDuration, children: /* @__PURE__ */ jsxs14(RTooltip.Root, { children: [
2534
- /* @__PURE__ */ jsx18(
2535
- RTooltip.Trigger,
2536
- {
2537
- asChild: triggerAsChild,
2538
- className: classNames(!triggerAsChild && "GeckoUITooltip__trigger", triggerClassName),
2539
- role: "tooltip",
2540
- type: "button",
2541
- children
2566
+ const triggerProps = {
2567
+ ref: refs.setReference,
2568
+ onMouseEnter: handleMouseEnter,
2569
+ onMouseLeave: handleMouseLeave,
2570
+ onFocus: handleMouseEnter,
2571
+ onBlur: handleMouseLeave
2572
+ };
2573
+ const renderTrigger = () => {
2574
+ if (triggerAsChild) {
2575
+ const child = Children.only(children);
2576
+ if (isValidElement2(child)) {
2577
+ return cloneElement(child, __spreadProps(__spreadValues({}, triggerProps), {
2578
+ className: classNames(child.props.className, triggerClassName)
2579
+ }));
2542
2580
  }
2543
- ),
2544
- /* @__PURE__ */ jsx18(RTooltip.Portal, { children: /* @__PURE__ */ jsxs14(
2545
- RTooltip.Content,
2581
+ }
2582
+ return /* @__PURE__ */ jsx18("span", __spreadProps(__spreadValues({}, triggerProps), { className: classNames("GeckoUITooltip__trigger", triggerClassName), children }));
2583
+ };
2584
+ return /* @__PURE__ */ jsxs14(Fragment7, { children: [
2585
+ renderTrigger(),
2586
+ isOpen && /* @__PURE__ */ jsx18(FloatingPortal, { children: /* @__PURE__ */ jsxs14(
2587
+ "div",
2546
2588
  {
2547
- side,
2589
+ ref: refs.setFloating,
2590
+ style: __spreadProps(__spreadValues({}, floatingStyles), { backgroundColor }),
2548
2591
  className: classNames("GeckoUITooltip", className),
2549
- sideOffset,
2550
2592
  role: "tooltip",
2551
- style: { backgroundColor },
2552
2593
  children: [
2553
2594
  /* @__PURE__ */ jsx18(DynamicComponentRenderer_default, { component: content }),
2554
- (side === "top" || side === "bottom") && /* @__PURE__ */ jsx18(RTooltip.Arrow, { fill: backgroundColor, className: "GeckoUITooltip__arrow" })
2595
+ /* @__PURE__ */ jsx18(
2596
+ FloatingArrow,
2597
+ {
2598
+ ref: arrowRef,
2599
+ context,
2600
+ className: classNames("GeckoUITooltip__arrow", arrowClassName),
2601
+ style: { fill: backgroundColor }
2602
+ }
2603
+ )
2555
2604
  ]
2556
2605
  }
2557
2606
  ) })
2558
- ] }) });
2607
+ ] });
2559
2608
  };
2560
2609
  var Tooltip_default = Tooltip;
2561
2610
 
@@ -2946,7 +2995,7 @@ RHFInput.displayName = "RHFInput";
2946
2995
  var RHFInput_default = RHFInput;
2947
2996
 
2948
2997
  // src/components/RHF/RHFError/RHFError.tsx
2949
- import { Fragment as Fragment7 } from "react";
2998
+ import { Fragment as Fragment8 } from "react";
2950
2999
  import { jsx as jsx28 } from "react/jsx-runtime";
2951
3000
  var RHFError = ({ name, control, className, render }) => {
2952
3001
  return /* @__PURE__ */ jsx28(
@@ -2956,7 +3005,7 @@ var RHFError = ({ name, control, className, render }) => {
2956
3005
  name,
2957
3006
  render: ({ fieldState }) => {
2958
3007
  const { error } = fieldState;
2959
- if (!(error == null ? void 0 : error.message)) return /* @__PURE__ */ jsx28(Fragment7, {}, "rhf-error");
3008
+ if (!(error == null ? void 0 : error.message)) return /* @__PURE__ */ jsx28(Fragment8, {}, "rhf-error");
2960
3009
  if (typeof render === "function") {
2961
3010
  return render(fieldState);
2962
3011
  }
@@ -3098,11 +3147,11 @@ var RHFCurrencyInput_default = RHFCurrencyInput;
3098
3147
  // src/components/Textarea/Textarea.tsx
3099
3148
  import { forwardRef as forwardRef5 } from "react";
3100
3149
  import ReactTextareaAutosize from "react-textarea-autosize";
3101
- import { Fragment as Fragment8, jsx as jsx32 } from "react/jsx-runtime";
3150
+ import { Fragment as Fragment9, jsx as jsx32 } from "react/jsx-runtime";
3102
3151
  var Textarea = forwardRef5(
3103
3152
  (_a, ref) => {
3104
3153
  var _b = _a, { autoResize, className, rows = 2, maxRows } = _b, rest = __objRest(_b, ["autoResize", "className", "rows", "maxRows"]);
3105
- return /* @__PURE__ */ jsx32(Fragment8, { children: /* @__PURE__ */ jsx32(
3154
+ return /* @__PURE__ */ jsx32(Fragment9, { children: /* @__PURE__ */ jsx32(
3106
3155
  ReactTextareaAutosize,
3107
3156
  __spreadValues({
3108
3157
  className: classNames("GeckoUITextarea", className),
@@ -3506,7 +3555,7 @@ RHFFileInput.displayName = "RHFFileInput";
3506
3555
  var RHFFileInput_default = RHFFileInput;
3507
3556
 
3508
3557
  // src/components/OTPInput/OTPInput.tsx
3509
- import { forwardRef as forwardRef8, useRef as useRef7 } from "react";
3558
+ import { forwardRef as forwardRef8, useRef as useRef8 } from "react";
3510
3559
  import { jsx as jsx41, jsxs as jsxs21 } from "react/jsx-runtime";
3511
3560
  var OTPInput = forwardRef8(
3512
3561
  ({
@@ -3521,7 +3570,7 @@ var OTPInput = forwardRef8(
3521
3570
  onOTPComplete,
3522
3571
  disabled
3523
3572
  }, ref) => {
3524
- const divRef = useRef7(null);
3573
+ const divRef = useRef8(null);
3525
3574
  const focus = (index) => {
3526
3575
  var _a, _b;
3527
3576
  const children = (_a = divRef.current) == null ? void 0 : _a.children;
@@ -3781,8 +3830,8 @@ RHFFilePicker.displayName = "RHFFilePicker";
3781
3830
  var RHFFilePicker_default = RHFFilePicker;
3782
3831
 
3783
3832
  // src/components/Select/Select/Select.tsx
3784
- import { autoUpdate as autoUpdate3, flip as flip3, offset as offset3, useFloating as useFloating3 } from "@floating-ui/react";
3785
- import { Children as Children3, useMemo as useMemo4, useRef as useRef8, useState as useState9 } from "react";
3833
+ import { autoUpdate as autoUpdate3, flip as flip4, offset as offset4, useFloating as useFloating4 } from "@floating-ui/react";
3834
+ import { Children as Children4, useMemo as useMemo4, useRef as useRef9, useState as useState10 } from "react";
3786
3835
 
3787
3836
  // src/utils/isTextIncludes.ts
3788
3837
  function isTextIncludes(baseString = "", searchString) {
@@ -3851,7 +3900,7 @@ function findSelectOptions(el) {
3851
3900
  }
3852
3901
 
3853
3902
  // src/components/Select/SelectButton/SelectButton.tsx
3854
- import { Children, useId as useId5, useMemo as useMemo2 } from "react";
3903
+ import { Children as Children2, useId as useId5, useMemo as useMemo2 } from "react";
3855
3904
 
3856
3905
  // src/utils/createLabel.ts
3857
3906
  function createLabel(item) {
@@ -4031,7 +4080,7 @@ function SelectButton({ prefix, suffix, className }) {
4031
4080
  } = useSelect();
4032
4081
  const id = useId5();
4033
4082
  const { hasValue, handleInputChange, handleKeyboardInteraction } = useSelectTrigger();
4034
- const trigger = useMemo2(() => Children.toArray(children).find(isSelectTrigger), [children]);
4083
+ const trigger = useMemo2(() => Children2.toArray(children).find(isSelectTrigger), [children]);
4035
4084
  const handleClear = (e) => {
4036
4085
  e.stopPropagation();
4037
4086
  if (disabled) return;
@@ -4219,7 +4268,7 @@ SelectButton.displayName = "SelectButton";
4219
4268
  var SelectButton_default = SelectButton;
4220
4269
 
4221
4270
  // src/components/Select/SelectMenu/SelectMenu.tsx
4222
- import { Children as Children2, useMemo as useMemo3 } from "react";
4271
+ import { Children as Children3, useMemo as useMemo3 } from "react";
4223
4272
 
4224
4273
  // src/components/Select/SelectDropdownSearch/SelectDropdownSearch.tsx
4225
4274
  import isEqual3 from "lodash.isequal";
@@ -4330,7 +4379,7 @@ var SelectMenu = (_a) => {
4330
4379
  floating: { refs, floatingStyles }
4331
4380
  } = useSelect();
4332
4381
  const menuItems = useMemo3(
4333
- () => Children2.toArray(children).filter((el) => !isSelectTrigger(el)),
4382
+ () => Children3.toArray(children).filter((el) => !isSelectTrigger(el)),
4334
4383
  [children]
4335
4384
  );
4336
4385
  if (!open || disabled) {
@@ -4361,7 +4410,7 @@ var SelectMenu = (_a) => {
4361
4410
  function Empty({ children }) {
4362
4411
  const { hideDefaultEmptyUI = false } = useSelect();
4363
4412
  if (hideDefaultEmptyUI) return null;
4364
- const customEmpty = Children2.toArray(children).find(isSelectEmpty);
4413
+ const customEmpty = Children3.toArray(children).find(isSelectEmpty);
4365
4414
  if (customEmpty) return null;
4366
4415
  return /* @__PURE__ */ jsx47(SelectEmpty_default, {});
4367
4416
  }
@@ -4371,8 +4420,8 @@ var SelectMenu_default = SelectMenu;
4371
4420
  // src/components/Select/Select/Select.tsx
4372
4421
  import { jsx as jsx48, jsxs as jsxs25 } from "react/jsx-runtime";
4373
4422
  var Select = (props) => {
4374
- const inputRef = useRef8(null);
4375
- const menuScrollContainerRef = useRef8(null);
4423
+ const inputRef = useRef9(null);
4424
+ const menuScrollContainerRef = useRef9(null);
4376
4425
  const _a = props, {
4377
4426
  disabled,
4378
4427
  inputRef: customInputRef,
@@ -4400,13 +4449,13 @@ var Select = (props) => {
4400
4449
  "floatingStrategy",
4401
4450
  "clearable"
4402
4451
  ]);
4403
- const [open, setOpen] = useState9(false);
4404
- const [keyword, setKeyword] = useState9("");
4405
- const [focusedOption, setFocusedOption] = useState9(null);
4406
- const floating = useFloating3({
4452
+ const [open, setOpen] = useState10(false);
4453
+ const [keyword, setKeyword] = useState10("");
4454
+ const [focusedOption, setFocusedOption] = useState10(null);
4455
+ const floating = useFloating4({
4407
4456
  placement,
4408
4457
  strategy: floatingStrategy,
4409
- middleware: [flip3({ padding: 6 }), offset3({ mainAxis: 6 })],
4458
+ middleware: [flip4({ padding: 6 }), offset4({ mainAxis: 6 })],
4410
4459
  whileElementsMounted: autoUpdate3,
4411
4460
  open,
4412
4461
  onOpenChange: setOpen
@@ -4415,7 +4464,7 @@ var Select = (props) => {
4415
4464
  const options = useMemo4(
4416
4465
  () => {
4417
4466
  var _a2;
4418
- return (_a2 = Children3.toArray(children).map(findSelectOptions).filter(Boolean).flat()) != null ? _a2 : [];
4467
+ return (_a2 = Children4.toArray(children).map(findSelectOptions).filter(Boolean).flat()) != null ? _a2 : [];
4419
4468
  },
4420
4469
  [children]
4421
4470
  );
@@ -4511,7 +4560,7 @@ Select.displayName = "Select";
4511
4560
  var Select_default = Select;
4512
4561
 
4513
4562
  // src/components/Select/SelectOption/SelectOption.tsx
4514
- import { useEffect as useEffect8, useRef as useRef9 } from "react";
4563
+ import { useEffect as useEffect8, useRef as useRef10 } from "react";
4515
4564
  import { jsx as jsx49, jsxs as jsxs26 } from "react/jsx-runtime";
4516
4565
  var SelectOption = (_a) => {
4517
4566
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
@@ -4534,7 +4583,7 @@ var SelectOption = (_a) => {
4534
4583
  "onRemove",
4535
4584
  "disabled"
4536
4585
  ]);
4537
- const ref = useRef9(null);
4586
+ const ref = useRef10(null);
4538
4587
  const { preventDefault, attachPreventDefault } = usePreventDefault_default();
4539
4588
  const {
4540
4589
  closeMenuOnSelect,
@@ -4608,7 +4657,7 @@ var SelectOption = (_a) => {
4608
4657
  }
4609
4658
  attachPreventDefault(selectCurrentOption);
4610
4659
  };
4611
- const Content2 = () => {
4660
+ const Content = () => {
4612
4661
  if (!children) {
4613
4662
  return label;
4614
4663
  }
@@ -4637,7 +4686,7 @@ var SelectOption = (_a) => {
4637
4686
  },
4638
4687
  onClick: disabled ? void 0 : handleOnClick,
4639
4688
  children: [
4640
- /* @__PURE__ */ jsx49(Content2, {}),
4689
+ /* @__PURE__ */ jsx49(Content, {}),
4641
4690
  !!selected && !hideCheckIcon && /* @__PURE__ */ jsx49("div", { className: "GeckoUI-icon__check GeckoUISelectOption__check-icon" })
4642
4691
  ]
4643
4692
  })
@@ -4859,10 +4908,10 @@ var Pagination = ({ currentPage, totalPages, onChange, className }) => {
4859
4908
  var Pagination_default = Pagination;
4860
4909
 
4861
4910
  // src/components/ConfirmDialog/ConfirmDialog.tsx
4862
- import { useCallback as useCallback3, useEffect as useEffect10, useState as useState11 } from "react";
4911
+ import { useCallback as useCallback3, useEffect as useEffect10, useState as useState12 } from "react";
4863
4912
 
4864
4913
  // src/components/Dialog/Dialog.tsx
4865
- import { useEffect as useEffect9, useRef as useRef10, useState as useState10 } from "react";
4914
+ import { useEffect as useEffect9, useRef as useRef11, useState as useState11 } from "react";
4866
4915
  import { createRoot } from "react-dom/client";
4867
4916
 
4868
4917
  // src/components/Dialog/DialogContainer.tsx
@@ -4913,8 +4962,8 @@ function DialogContent(_a) {
4913
4962
  }
4914
4963
  return acc;
4915
4964
  }, {});
4916
- const ref = useRef10(null);
4917
- const [animationState, setAnimationState] = useState10("entering");
4965
+ const ref = useRef11(null);
4966
+ const [animationState, setAnimationState] = useState11("entering");
4918
4967
  const handleDismiss = () => {
4919
4968
  setAnimationState("closing");
4920
4969
  setTimeout(() => {
@@ -4944,7 +4993,7 @@ var Dialog = { show, dismiss };
4944
4993
  var Dialog_default = Dialog;
4945
4994
 
4946
4995
  // src/components/ConfirmDialog/ConfirmDialog.tsx
4947
- import { Fragment as Fragment9, jsx as jsx55, jsxs as jsxs29 } from "react/jsx-runtime";
4996
+ import { Fragment as Fragment10, jsx as jsx55, jsxs as jsxs29 } from "react/jsx-runtime";
4948
4997
  function ConfirmDialogContent({
4949
4998
  confirmButtonLabel = "Ok",
4950
4999
  cancelButtonLabel = "Cancel",
@@ -4956,8 +5005,8 @@ function ConfirmDialogContent({
4956
5005
  onConfirm,
4957
5006
  onCancel
4958
5007
  }) {
4959
- const [cancelLoading, setCancelLoading] = useState11(false);
4960
- const [confirmLoading, setConfirmLoading] = useState11(false);
5008
+ const [cancelLoading, setCancelLoading] = useState12(false);
5009
+ const [confirmLoading, setConfirmLoading] = useState12(false);
4961
5010
  const { preventDefault, attachPreventDefault } = usePreventDefault_default();
4962
5011
  const handleConfirm = useCallback3(() => __async(null, null, function* () {
4963
5012
  const isAsync = isAsyncFn(onConfirm);
@@ -4994,7 +5043,7 @@ function ConfirmDialogContent({
4994
5043
  return document.removeEventListener("keydown", onKeyDown);
4995
5044
  };
4996
5045
  }, [handleConfirm]);
4997
- return /* @__PURE__ */ jsxs29(Fragment9, { children: [
5046
+ return /* @__PURE__ */ jsxs29(Fragment10, { children: [
4998
5047
  /* @__PURE__ */ jsx55("div", { className: classNames("GeckoUIConfirmDialog__title", titleClassName), children: /* @__PURE__ */ jsx55(DynamicComponentRenderer_default, { component: title }) }),
4999
5048
  /* @__PURE__ */ jsx55("div", { className: classNames("GeckoUIConfirmDialog__content", contentClassName), children: /* @__PURE__ */ jsx55(DynamicComponentRenderer_default, { component: content, dismiss: dismiss2 }) }),
5000
5049
  /* @__PURE__ */ jsxs29("div", { className: "GeckoUIConfirmDialog__actions", children: [
@@ -5050,10 +5099,10 @@ function DrawerContainer() {
5050
5099
  }
5051
5100
 
5052
5101
  // src/components/GeckoUIPortal/GeckoUIPortal.tsx
5053
- import { Fragment as Fragment10, jsx as jsx57, jsxs as jsxs30 } from "react/jsx-runtime";
5102
+ import { Fragment as Fragment11, jsx as jsx57, jsxs as jsxs30 } from "react/jsx-runtime";
5054
5103
  var GeckoUIPortal = ({ toastOptions = {} }) => {
5055
5104
  const _a = toastOptions, { style } = _a, restToastOptions = __objRest(_a, ["style"]);
5056
- return /* @__PURE__ */ jsxs30(Fragment10, { children: [
5105
+ return /* @__PURE__ */ jsxs30(Fragment11, { children: [
5057
5106
  /* @__PURE__ */ jsx57(
5058
5107
  Toaster,
5059
5108
  __spreadValues({
@@ -5072,7 +5121,7 @@ var GeckoUIPortal = ({ toastOptions = {} }) => {
5072
5121
  var GeckoUIPortal_default = GeckoUIPortal;
5073
5122
 
5074
5123
  // src/components/Drawer/Drawer.tsx
5075
- import { useRef as useRef11 } from "react";
5124
+ import { useRef as useRef12 } from "react";
5076
5125
  import { createRoot as createRoot2 } from "react-dom/client";
5077
5126
  import { jsx as jsx58, jsxs as jsxs31 } from "react/jsx-runtime";
5078
5127
  function getDrawerClasses(placement, open, className) {
@@ -5102,7 +5151,7 @@ function Drawer({
5102
5151
  children,
5103
5152
  dismissOnEscape = true
5104
5153
  }) {
5105
- const drawerRootRef = useRef11(null);
5154
+ const drawerRootRef = useRef12(null);
5106
5155
  const handleDismiss = () => {
5107
5156
  if (open) handleClose == null ? void 0 : handleClose();
5108
5157
  };
@@ -5219,7 +5268,7 @@ var MenuSection = HeadlessMenuSection;
5219
5268
  var MenuSeparator = HeadlessMenuSeparator;
5220
5269
 
5221
5270
  // src/components/Dropdown/Dropdown.tsx
5222
- import { Fragment as Fragment11, jsx as jsx60, jsxs as jsxs32 } from "react/jsx-runtime";
5271
+ import { Fragment as Fragment12, jsx as jsx60, jsxs as jsxs32 } from "react/jsx-runtime";
5223
5272
  function Dropdown(_a) {
5224
5273
  var _b = _a, {
5225
5274
  items,
@@ -5280,7 +5329,7 @@ function Dropdown(_a) {
5280
5329
  className: classNames("GeckoUIDropdown__menu", menuClassName),
5281
5330
  anchor: anchor || "bottom start",
5282
5331
  children: () => {
5283
- return /* @__PURE__ */ jsx60(Fragment11, { children: items.map((item, index) => {
5332
+ return /* @__PURE__ */ jsx60(Fragment12, { children: items.map((item, index) => {
5284
5333
  const label = createLabel_default(item);
5285
5334
  return /* @__PURE__ */ jsx60(
5286
5335
  MenuItem,
package/dist/styles.css CHANGED
@@ -1176,32 +1176,12 @@
1176
1176
  color: rgb(var(--gecko-ui-text-disabled) / var(--tw-text-opacity, 1));
1177
1177
  }
1178
1178
  .GeckoUITooltip__trigger {
1179
- box-sizing: border-box;
1180
- border-width: 0;
1181
- border-style: solid;
1182
- border-color: #e5e7eb;
1183
- font-family: inherit;
1184
- font-feature-settings: inherit;
1185
- font-variation-settings: inherit;
1186
- font-size: 100%;
1187
- font-weight: inherit;
1188
- line-height: inherit;
1189
- letter-spacing: inherit;
1190
- color: inherit;
1191
- margin: 0;
1192
- padding: 0;
1193
- text-transform: none;
1194
- -webkit-appearance: button;
1195
- cursor: pointer;
1196
- background-color: transparent;
1197
- background-image: none;
1179
+ display: inline-flex;
1198
1180
  height: -moz-fit-content;
1199
1181
  height: fit-content;
1200
1182
  width: -moz-fit-content;
1201
1183
  width: fit-content;
1202
- }
1203
- .GeckoUITooltip span:nth-child(2) {
1204
- bottom: 0.5px !important;
1184
+ cursor: pointer;
1205
1185
  }
1206
1186
  .GeckoUITooltip {
1207
1187
  z-index: 50;
@@ -1209,7 +1189,7 @@
1209
1189
  max-width: 320px;
1210
1190
  border-radius: 0.5rem;
1211
1191
  --tw-bg-opacity: 1;
1212
- background-color: rgb(var(--gecko-ui-surface-overlay) / var(--tw-bg-opacity, 1));
1192
+ background-color: rgb(var(--gecko-ui-surface-emphasis) / var(--tw-bg-opacity, 1));
1213
1193
  padding: 0.5rem;
1214
1194
  font-size: 0.75rem;
1215
1195
  line-height: 1rem;
@@ -1220,61 +1200,9 @@
1220
1200
  -webkit-user-select: none;
1221
1201
  -moz-user-select: none;
1222
1202
  user-select: none;
1223
- animation-duration: 400ms;
1224
- animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
1225
- will-change: transform, opacity;
1226
- }
1227
- .GeckoUITooltip[data-state=delayed-open][data-side=top] {
1228
- animation-name: slideDownAndFade;
1229
- }
1230
- .GeckoUITooltip[data-state=delayed-open][data-side=right] {
1231
- animation-name: slideLeftAndFade;
1232
- }
1233
- .GeckoUITooltip[data-state=delayed-open][data-side=bottom] {
1234
- animation-name: slideUpAndFade;
1235
- }
1236
- .GeckoUITooltip[data-state=delayed-open][data-side=left] {
1237
- animation-name: slideRightAndFade;
1238
1203
  }
1239
- @keyframes slideUpAndFade {
1240
- from {
1241
- opacity: 0;
1242
- transform: translateY(2px);
1243
- }
1244
- to {
1245
- opacity: 1;
1246
- transform: translateY(0);
1247
- }
1248
- }
1249
- @keyframes slideRightAndFade {
1250
- from {
1251
- opacity: 0;
1252
- transform: translateX(-2px);
1253
- }
1254
- to {
1255
- opacity: 1;
1256
- transform: translateX(0);
1257
- }
1258
- }
1259
- @keyframes slideDownAndFade {
1260
- from {
1261
- opacity: 0;
1262
- transform: translateY(-2px);
1263
- }
1264
- to {
1265
- opacity: 1;
1266
- transform: translateY(0);
1267
- }
1268
- }
1269
- @keyframes slideLeftAndFade {
1270
- from {
1271
- opacity: 0;
1272
- transform: translateX(2px);
1273
- }
1274
- to {
1275
- opacity: 1;
1276
- transform: translateX(0);
1277
- }
1204
+ .GeckoUITooltip__arrow {
1205
+ fill: rgb(var(--gecko-ui-surface-emphasis) / 1);
1278
1206
  }
1279
1207
  .GeckoUISpinnerIcon {
1280
1208
  box-sizing: border-box;
@@ -3406,6 +3334,7 @@
3406
3334
  --gecko-ui-surface-disabled: 235 235 235;
3407
3335
  --gecko-ui-surface-overlay: 0 0 0;
3408
3336
  --gecko-ui-surface-autofill: 245 245 245;
3337
+ --gecko-ui-surface-emphasis: 75 85 99;
3409
3338
  --gecko-ui-text-primary: 23 23 23;
3410
3339
  --gecko-ui-text-secondary: 64 64 64;
3411
3340
  --gecko-ui-text-tertiary: 115 115 115;
@@ -3433,6 +3362,7 @@
3433
3362
  --gecko-ui-surface-disabled: 45 45 45;
3434
3363
  --gecko-ui-surface-overlay: 0 0 0;
3435
3364
  --gecko-ui-surface-autofill: 32 32 32;
3365
+ --gecko-ui-surface-emphasis: 179 182 185;
3436
3366
  --gecko-ui-text-primary: 250 250 250;
3437
3367
  --gecko-ui-text-secondary: 212 212 212;
3438
3368
  --gecko-ui-text-tertiary: 163 163 163;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geckoui/geckoui",
3
- "version": "1.2.0-beta.1",
3
+ "version": "1.2.0-beta.2",
4
4
  "sideEffects": [
5
5
  "**/*.css"
6
6
  ],
@@ -69,7 +69,6 @@
69
69
  "dependencies": {
70
70
  "@floating-ui/react": "^0.26.28",
71
71
  "@headlessui/react": "^2.2.9",
72
- "@radix-ui/react-tooltip": "^1.2.8",
73
72
  "lodash.isequal": "^4.5.0",
74
73
  "mime": "^4.1.0",
75
74
  "react-textarea-autosize": "^8.5.9",