@flikk/ui 1.0.0-beta.15 → 1.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +52 -0
  2. package/dist/bg/1.jpg +0 -0
  3. package/dist/bg/10.jpg +0 -0
  4. package/dist/bg/11.jpg +0 -0
  5. package/dist/bg/14.jpg +0 -0
  6. package/dist/bg/15.jpg +0 -0
  7. package/dist/bg/16.jpg +0 -0
  8. package/dist/bg/17.jpg +0 -0
  9. package/dist/bg/18.jpg +0 -0
  10. package/dist/bg/19.jpg +0 -0
  11. package/dist/bg/2.jpg +0 -0
  12. package/dist/bg/20.jpg +0 -0
  13. package/dist/bg/21.jpg +0 -0
  14. package/dist/bg/22.jpg +0 -0
  15. package/dist/bg/23.jpg +0 -0
  16. package/dist/bg/24.jpg +0 -0
  17. package/dist/bg/3.jpg +0 -0
  18. package/dist/bg/4.jpg +0 -0
  19. package/dist/bg/5.jpg +0 -0
  20. package/dist/bg/6.jpg +0 -0
  21. package/dist/bg/7.jpg +0 -0
  22. package/dist/bg/8.jpg +0 -0
  23. package/dist/bg/9.jpg +0 -0
  24. package/dist/bg/bg/1.jpg +0 -0
  25. package/dist/bg/bg/10.jpg +0 -0
  26. package/dist/bg/bg/11.jpg +0 -0
  27. package/dist/bg/bg/14.jpg +0 -0
  28. package/dist/bg/bg/15.jpg +0 -0
  29. package/dist/bg/bg/16.jpg +0 -0
  30. package/dist/bg/bg/17.jpg +0 -0
  31. package/dist/bg/bg/18.jpg +0 -0
  32. package/dist/bg/bg/19.jpg +0 -0
  33. package/dist/bg/bg/2.jpg +0 -0
  34. package/dist/bg/bg/20.jpg +0 -0
  35. package/dist/bg/bg/21.jpg +0 -0
  36. package/dist/bg/bg/22.jpg +0 -0
  37. package/dist/bg/bg/23.jpg +0 -0
  38. package/dist/bg/bg/24.jpg +0 -0
  39. package/dist/bg/bg/3.jpg +0 -0
  40. package/dist/bg/bg/4.jpg +0 -0
  41. package/dist/bg/bg/5.jpg +0 -0
  42. package/dist/bg/bg/6.jpg +0 -0
  43. package/dist/bg/bg/7.jpg +0 -0
  44. package/dist/bg/bg/8.jpg +0 -0
  45. package/dist/bg/bg/9.jpg +0 -0
  46. package/dist/components/ai/StreamingResponse/AnimatedText.js +3 -3
  47. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +22 -22
  48. package/dist/components/ai/StreamingResponse/StreamingCursor.js +1 -1
  49. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +10 -10
  50. package/dist/components/ai/StreamingResponse/StreamingResponse.js +3 -3
  51. package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +1 -1
  52. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +11 -11
  53. package/dist/components/ai/index.d.ts +0 -2
  54. package/dist/components/ai/index.js +0 -2
  55. package/dist/components/core/Button/Button.js +1 -1
  56. package/dist/components/core/Calendar/Calendar.js +2 -2
  57. package/dist/components/core/Calendar/Calendar.types.d.ts +1 -1
  58. package/dist/components/core/Card/Card.theme.js +2 -2
  59. package/dist/components/core/Progress/Progress.theme.js +2 -2
  60. package/dist/components/effects/GlassSurface/GlassSurface.js +7 -7
  61. package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +6 -0
  62. package/dist/components/effects/Neumorphic/InsetCircleButton.d.ts +2 -1
  63. package/dist/components/effects/Neumorphic/InsetCircleButton.js +2 -2
  64. package/dist/components/effects/Neumorphic/InsetPill.d.ts +2 -1
  65. package/dist/components/effects/Neumorphic/InsetPill.js +2 -2
  66. package/dist/components/effects/index.d.ts +2 -2
  67. package/dist/components/effects/index.js +1 -1
  68. package/dist/components/forms/Slider/Slider.js +10 -3
  69. package/dist/components/forms/Slider/Slider.theme.js +3 -3
  70. package/dist/components/forms/Switch/Switch.js +10 -2
  71. package/dist/components/forms/Switch/Switch.theme.js +2 -2
  72. package/dist/components/forms/index.d.ts +0 -3
  73. package/dist/components/forms/index.js +0 -2
  74. package/dist/index.js +1 -3
  75. package/dist/styles.css +1 -1
  76. package/package.json +5 -3
  77. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.animations.d.ts +0 -10
  78. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.animations.js +0 -47
  79. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.d.ts +0 -20
  80. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.js +0 -44
  81. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.d.ts +0 -2
  82. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +0 -20
  83. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.types.d.ts +0 -67
  84. package/dist/components/ai/ThinkingIndicator/index.d.ts +0 -3
  85. package/dist/components/forms/TransferList/TransferList.animations.d.ts +0 -10
  86. package/dist/components/forms/TransferList/TransferList.animations.js +0 -32
  87. package/dist/components/forms/TransferList/TransferList.d.ts +0 -28
  88. package/dist/components/forms/TransferList/TransferList.js +0 -199
  89. package/dist/components/forms/TransferList/TransferList.theme.d.ts +0 -6
  90. package/dist/components/forms/TransferList/TransferList.theme.js +0 -60
  91. package/dist/components/forms/TransferList/TransferList.types.d.ts +0 -101
  92. package/dist/components/forms/TransferList/index.d.ts +0 -3
@@ -23,7 +23,7 @@ const useDarkMode = () => {
23
23
  * Creates a realistic chromatic aberration glass effect using SVG filters.
24
24
  * Works as a wrapper for any content.
25
25
  */
26
- const GlassSurface = React__default.forwardRef(({ children, width, height, borderRadius = 20, borderWidth = 0.07, brightness: brightnessProp, opacity: opacityProp, blur: blurProp, displace: displaceProp, backgroundOpacity: backgroundOpacityProp, backgroundColor, saturation: saturationProp, distortionScale: distortionScaleProp, redOffset = 0, greenOffset = 10, blueOffset = 20, xChannel = "R", yChannel = "G", mixBlendMode: mixBlendModeProp, colorScheme = "auto", frosted = false, className = "", style = {}, }, forwardedRef) => {
26
+ const GlassSurface = React__default.forwardRef(({ children, width, height, borderRadius = 20, borderWidth = 0.07, brightness: brightnessProp, opacity: opacityProp, blur: blurProp, displace: displaceProp, backgroundOpacity: backgroundOpacityProp, backgroundColor, saturation: saturationProp, distortionScale: distortionScaleProp, redOffset = 0, greenOffset = 10, blueOffset = 20, xChannel = "R", yChannel = "G", mixBlendMode: mixBlendModeProp, colorScheme = "auto", backdropBrightness = 1, frosted = false, className = "", style = {}, }, forwardedRef) => {
27
27
  const uniqueId = useId().replace(/:/g, "-");
28
28
  const filterId = `glass-filter-${uniqueId}`;
29
29
  const redGradId = `red-grad-${uniqueId}`;
@@ -66,11 +66,11 @@ const GlassSurface = React__default.forwardRef(({ children, width, height, borde
66
66
  <svg viewBox="0 0 ${actualWidth} ${actualHeight}" xmlns="http://www.w3.org/2000/svg">
67
67
  <defs>
68
68
  <linearGradient id="${redGradId}" x1="100%" y1="0%" x2="0%" y2="0%">
69
- <stop offset="0%" stop-color="#0000"/>
69
+ <stop offset="0%" stop-color="#000"/>
70
70
  <stop offset="100%" stop-color="red"/>
71
71
  </linearGradient>
72
72
  <linearGradient id="${blueGradId}" x1="0%" y1="0%" x2="0%" y2="100%">
73
- <stop offset="0%" stop-color="#0000"/>
73
+ <stop offset="0%" stop-color="#000"/>
74
74
  <stop offset="100%" stop-color="blue"/>
75
75
  </linearGradient>
76
76
  </defs>
@@ -186,8 +186,8 @@ const GlassSurface = React__default.forwardRef(({ children, width, height, borde
186
186
  return {
187
187
  ...baseStyles,
188
188
  background: getBackgroundWithOpacity(),
189
- backdropFilter: `url(#${filterId}) ${frostedBlur} saturate(${saturation})`,
190
- WebkitBackdropFilter: `url(#${filterId}) ${frostedBlur} saturate(${saturation})`,
189
+ backdropFilter: `url(#${filterId}) ${frostedBlur} brightness(${backdropBrightness}) saturate(${saturation})`,
190
+ WebkitBackdropFilter: `url(#${filterId}) ${frostedBlur} brightness(${backdropBrightness}) saturate(${saturation})`,
191
191
  ...(!resolvedDark && { border: "1px solid rgba(0, 0, 0, 0.06)" }),
192
192
  ...(hasCustomShadow
193
193
  ? {}
@@ -246,7 +246,7 @@ const GlassSurface = React__default.forwardRef(({ children, width, height, borde
246
246
  };
247
247
  }
248
248
  }
249
- }, [style, width, height, borderRadius, frosted, svgSupported, backgroundColor, resolvedDark, backgroundOpacity, filterId, saturation, hasCustomShadow, supportsBackdrop]);
249
+ }, [style, width, height, borderRadius, frosted, svgSupported, backgroundColor, resolvedDark, backgroundOpacity, filterId, backdropBrightness, saturation, hasCustomShadow, supportsBackdrop]);
250
250
  const focusVisibleClasses = resolvedDark
251
251
  ? "focus-visible:outline-2 focus-visible:outline-[#0A84FF] focus-visible:outline-offset-2"
252
252
  : "focus-visible:outline-2 focus-visible:outline-[#007AFF] focus-visible:outline-offset-2";
@@ -257,7 +257,7 @@ const GlassSurface = React__default.forwardRef(({ children, width, height, borde
257
257
  else if (forwardedRef)
258
258
  forwardedRef.current = node;
259
259
  }, [forwardedRef]);
260
- return (jsxs("div", { ref: mergedRef, className: cn("relative transition-opacity duration-[260ms] ease-out", focusVisibleClasses, className), style: containerStyles, children: [jsx("svg", { className: "w-full h-full pointer-events-none absolute inset-0 opacity-0 -z-10", xmlns: "http://www.w3.org/2000/svg", children: jsxs("defs", { children: [jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [jsx("feImage", { ref: feImageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), jsx("feDisplacementMap", { ref: redChannelRef, in: "SourceGraphic", in2: "map", id: "redchannel", result: "dispRed" }), jsx("feColorMatrix", { in: "dispRed", type: "matrix", values: "1 0 0 0 0\n 0 0 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "red" }), jsx("feDisplacementMap", { ref: greenChannelRef, in: "SourceGraphic", in2: "map", id: "greenchannel", result: "dispGreen" }), jsx("feColorMatrix", { in: "dispGreen", type: "matrix", values: "0 0 0 0 0\n 0 1 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "green" }), jsx("feDisplacementMap", { ref: blueChannelRef, in: "SourceGraphic", in2: "map", id: "bluechannel", result: "dispBlue" }), jsx("feColorMatrix", { in: "dispBlue", type: "matrix", values: "0 0 0 0 0\n 0 0 0 0 0\n 0 0 1 0 0\n 0 0 0 1 0", result: "blue" }), jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "rg" }), jsx("feBlend", { in: "rg", in2: "blue", mode: "screen", result: "output" }), jsx("feGaussianBlur", { ref: gaussianBlurRef, in: "output", stdDeviation: "0.7" })] }), jsx("filter", { id: noiseFilterId, x: "0%", y: "0%", width: "100%", height: "100%", children: jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.65", numOctaves: "3", stitchTiles: "stitch" }) })] }) }), jsx("div", { className: "relative z-10 h-full rounded-[inherit]", children: children }), jsx("div", { className: "absolute inset-0 pointer-events-none rounded-[inherit] overflow-hidden z-20", children: frosted && (jsx("div", { className: "absolute inset-0 opacity-10 mix-blend-overlay", style: { filter: `url(#${noiseFilterId})` } })) })] }));
260
+ return (jsxs("div", { ref: mergedRef, className: cn("relative transition-opacity duration-[260ms] ease-out", focusVisibleClasses, className), style: containerStyles, children: [jsx("svg", { className: "w-full h-full pointer-events-none absolute inset-0 opacity-0 -z-10", xmlns: "http://www.w3.org/2000/svg", children: jsxs("defs", { children: [jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [jsx("feImage", { ref: feImageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), jsx("feDisplacementMap", { ref: redChannelRef, in: "SourceGraphic", in2: "map", result: "dispRed" }), jsx("feColorMatrix", { in: "dispRed", type: "matrix", values: "1 0 0 0 0\n 0 0 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "red" }), jsx("feDisplacementMap", { ref: greenChannelRef, in: "SourceGraphic", in2: "map", result: "dispGreen" }), jsx("feColorMatrix", { in: "dispGreen", type: "matrix", values: "0 0 0 0 0\n 0 1 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "green" }), jsx("feDisplacementMap", { ref: blueChannelRef, in: "SourceGraphic", in2: "map", result: "dispBlue" }), jsx("feColorMatrix", { in: "dispBlue", type: "matrix", values: "0 0 0 0 0\n 0 0 0 0 0\n 0 0 1 0 0\n 0 0 0 1 0", result: "blue" }), jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "rg" }), jsx("feBlend", { in: "rg", in2: "blue", mode: "screen", result: "output" }), jsx("feGaussianBlur", { ref: gaussianBlurRef, in: "output", stdDeviation: "0.7" })] }), jsx("filter", { id: noiseFilterId, x: "0%", y: "0%", width: "100%", height: "100%", children: jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.65", numOctaves: "3", stitchTiles: "stitch" }) })] }) }), jsx("div", { className: "relative z-10 h-full rounded-[inherit]", children: children }), jsx("div", { className: "absolute inset-0 pointer-events-none rounded-[inherit] overflow-hidden z-20", children: frosted && (jsx("div", { className: "absolute inset-0 opacity-10 mix-blend-overlay", style: { filter: `url(#${noiseFilterId})` } })) })] }));
261
261
  });
262
262
  GlassSurface.displayName = "GlassSurface";
263
263
 
@@ -48,6 +48,12 @@ export interface GlassSurfaceProps {
48
48
  * @default 'auto'
49
49
  */
50
50
  colorScheme?: "auto" | "dark" | "light";
51
+ /**
52
+ * Brightness multiplier for the backdrop-filter chain.
53
+ * Values > 1 brighten, < 1 darken. Only applies when SVG filters are supported.
54
+ * @default 1
55
+ */
56
+ backdropBrightness?: number;
51
57
  /**
52
58
  * Enable frosted glass effect with noise texture
53
59
  * @default false
@@ -5,5 +5,6 @@ export interface InsetCircleButtonProps {
5
5
  className?: string;
6
6
  classNameDisc?: string;
7
7
  classNameHover?: string;
8
+ onClick?: () => void;
8
9
  }
9
- export declare function InsetCircleButton({ children, size, className, classNameDisc, classNameHover, }: InsetCircleButtonProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function InsetCircleButton({ children, size, className, classNameDisc, classNameHover, onClick, }: InsetCircleButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -3,8 +3,8 @@ import { motion } from 'motion/react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import 'react';
5
5
 
6
- function InsetCircleButton({ children, size = 44, className, classNameDisc, classNameHover, }) {
7
- return (jsx("div", { className: cn("neu-circle-groove group shrink-0 cursor-pointer bg-neutral-200/80 dark:bg-neutral-900", className), style: { width: size, height: size }, children: jsxs(motion.div, { className: cn("neu-circle-disc bg-linear-to-br from-neutral-100 to-neutral-300 dark:from-neutral-700 dark:to-neutral-900", classNameDisc), whileHover: { scale: 1 }, whileTap: { scale: 0.975 }, transition: { type: "spring", stiffness: 200, damping: 20 }, children: [jsx("div", { className: cn("absolute inset-0 rounded-full bg-linear-to-br from-neutral-300 to-neutral-200 dark:from-neutral-900 dark:to-neutral-700 opacity-0 group-hover:opacity-100 transition-opacity duration-300", classNameHover) }), jsx("div", { className: "relative z-2", children: children })] }) }));
6
+ function InsetCircleButton({ children, size = 44, className, classNameDisc, classNameHover, onClick, }) {
7
+ return (jsx("div", { className: cn("neu-circle-groove group shrink-0 cursor-pointer bg-neutral-200/80 dark:bg-neutral-900", className), style: { width: size, height: size }, onClick: onClick, children: jsxs(motion.div, { className: cn("neu-circle-disc bg-linear-to-br from-neutral-100 to-neutral-300 dark:from-neutral-700 dark:to-neutral-900", classNameDisc), whileHover: { scale: 1 }, whileTap: { scale: 0.975 }, transition: { type: "spring", stiffness: 200, damping: 20 }, children: [jsx("div", { className: cn("absolute inset-0 rounded-full bg-linear-to-br from-neutral-300 to-neutral-200 dark:from-neutral-900 dark:to-neutral-700 opacity-0 group-hover:opacity-100 transition-opacity duration-300", classNameHover) }), jsx("div", { className: "relative z-2", children: children })] }) }));
8
8
  }
9
9
 
10
10
  export { InsetCircleButton };
@@ -3,5 +3,6 @@ export interface InsetPillProps {
3
3
  children: React.ReactNode;
4
4
  className?: string;
5
5
  padding?: string;
6
+ onClick?: () => void;
6
7
  }
7
- export declare function InsetPill({ children, className, padding, }: InsetPillProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function InsetPill({ children, className, padding, onClick, }: InsetPillProps): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
 
3
- function InsetPill({ children, className, padding = "10px 18px", }) {
4
- return (jsx("div", { className: `neu-inset inline-flex items-center gap-2 cursor-pointer rounded-full bg-neutral-200/60 dark:bg-neutral-800/80 ${className !== null && className !== void 0 ? className : ""}`, style: { padding }, children: jsx("div", { className: "relative z-2 flex items-center gap-2", children: children }) }));
3
+ function InsetPill({ children, className, padding = "10px 18px", onClick, }) {
4
+ return (jsx("div", { className: `neu-inset inline-flex items-center gap-2 cursor-pointer rounded-full bg-neutral-200/60 dark:bg-neutral-800/80 ${className !== null && className !== void 0 ? className : ""}`, style: { padding }, onClick: onClick, children: jsx("div", { className: "relative z-2 flex items-center gap-2", children: children }) }));
5
5
  }
6
6
 
7
7
  export { InsetPill };
@@ -1,5 +1,5 @@
1
- export { CustomCursor } from "./CustomCursor";
2
- export type { CustomCursorProps } from "./CustomCursor";
1
+ export { CustomCursorProvider, CustomCursor, CustomCursorFollow, useCustomCursor } from "./CustomCursor";
2
+ export type { CustomCursorProps, CustomCursorProviderProps, CustomCursorFollowProps, CustomCursorContextType, CustomCursorSize, CustomCursorColor, CustomCursorVariant, CustomCursorShape, CustomCursorTheme, CustomCursorThemeOverrides, } from "./CustomCursor";
3
3
  export { GlassEffect } from "./GlassEffect";
4
4
  export type { GlassEffectProps, BlendMode } from "./GlassEffect";
5
5
  export { Overlay } from "./Overlay";
@@ -1,4 +1,4 @@
1
- export { CustomCursor } from './CustomCursor/CustomCursor.js';
1
+ export { CustomCursor, CustomCursorFollow, CustomCursorProvider, useCustomCursor } from './CustomCursor/CustomCursor.js';
2
2
  export { GlassEffect } from './GlassEffect/GlassEffect.js';
3
3
  export { Overlay } from './Overlay/Overlay.js';
4
4
  export { GlassSurface } from './GlassSurface/GlassSurface.js';
@@ -216,18 +216,25 @@ const Slider = React__default.forwardRef(({ state = "default", className = "", l
216
216
  }
217
217
  return `${currentValue}${unit}`;
218
218
  };
219
- return (jsxs("div", { className: cn(mergedTheme.wrapperStyle, wrapperClassName), ref: ref, ...props, children: [label && (jsx(FormLabel, { htmlFor: sliderId, required: required, className: cn(mergedTheme.labelStyle, labelClassName), children: label })), jsxs("div", { className: "flex items-center gap-4", children: [iconStart && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-muted)]", children: iconStart })), showMinMax && (jsx("span", { className: cn(mergedTheme.minMaxLabelStyle), children: min })), jsxs("div", { className: cn(mergedTheme.rootStyle, className), "data-disabled": isDisabled || undefined, "data-invalid": isInvalid || undefined, "data-orientation": "horizontal", children: [jsxs("div", { ref: trackRef, className: mergedTheme.trackStyle, onPointerDown: handleTrackClick, role: "presentation", children: [jsx("div", { className: mergedTheme.rangeStyle, style: getFilledTrackStyle() }), showTicks &&
219
+ const filterId = `slider-liquid-lens-${sliderId}`;
220
+ return (jsxs("div", { className: cn(mergedTheme.wrapperStyle, wrapperClassName), ref: ref, ...props, children: [jsx("svg", { width: "0", height: "0", className: "absolute", "aria-hidden": "true", children: jsx("defs", { children: jsxs("filter", { id: filterId, children: [jsx("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "1", result: "blur" }), jsx("feColorMatrix", { in: "blur", type: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7", result: "goo" }), jsx("feComposite", { in: "SourceGraphic", in2: "goo", operator: "atop" })] }) }) }), label && (jsx(FormLabel, { htmlFor: sliderId, required: required, className: cn(mergedTheme.labelStyle, labelClassName), children: label })), jsxs("div", { className: "flex items-center gap-4", children: [iconStart && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-muted)]", children: iconStart })), showMinMax && (jsx("span", { className: cn(mergedTheme.minMaxLabelStyle), children: min })), jsxs("div", { className: cn(mergedTheme.rootStyle, className), "data-disabled": isDisabled || undefined, "data-invalid": isInvalid || undefined, "data-orientation": "horizontal", children: [jsxs("div", { ref: trackRef, className: mergedTheme.trackStyle, onPointerDown: handleTrackClick, role: "presentation", children: [jsx("div", { className: mergedTheme.rangeStyle, style: getFilledTrackStyle() }), showTicks &&
220
221
  ticks.map((tick) => {
221
222
  const percentage = getPercentage(tick);
222
223
  return (jsx("div", { className: mergedTheme.tickStyle, style: { left: `${percentage}%` } }, tick));
223
224
  })] }), values.map((val, index) => {
224
225
  const percentage = getPercentage(val);
225
- return (jsx("div", { className: cn(mergedTheme.thumbStyle, "outline-[1px] outline-white/50 ring-0 shadow-none p-0 overflow-visible"), style: {
226
+ return (jsxs("div", { className: cn(mergedTheme.thumbStyle, "outline-[2px] outline-[var(--color-border)]/80 ring-0 shadow-lg p-0"), style: {
226
227
  left: `${percentage}%`,
227
228
  transform: "translate(-50%, -50%)",
228
229
  position: "absolute",
229
230
  top: "50%",
230
- }, onPointerDown: (e) => handlePointerDown(e, index), onKeyDown: (e) => handleKeyDown(e, index), role: "slider", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": val, "aria-orientation": "horizontal", "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : (range ? `Slider thumb ${index + 1}` : "Slider"), "aria-labelledby": ariaLabelledby, "aria-describedby": ariaDescribedby !== null && ariaDescribedby !== void 0 ? ariaDescribedby : helperTextId, tabIndex: isDisabled ? -1 : 0, "data-disabled": isDisabled || undefined, "data-invalid": isInvalid || undefined }, index));
231
+ }, onPointerDown: (e) => handlePointerDown(e, index), onKeyDown: (e) => handleKeyDown(e, index), role: "slider", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": val, "aria-orientation": "horizontal", "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : (range ? `Slider thumb ${index + 1}` : "Slider"), "aria-labelledby": ariaLabelledby, "aria-describedby": ariaDescribedby !== null && ariaDescribedby !== void 0 ? ariaDescribedby : helperTextId, tabIndex: isDisabled ? -1 : 0, "data-disabled": isDisabled || undefined, "data-invalid": isInvalid || undefined, children: [jsx("div", { className: "absolute inset-0 z-0 rounded-full", style: {
232
+ backdropFilter: "blur(0.6px)",
233
+ WebkitBackdropFilter: "blur(0.6px)",
234
+ filter: `url(#${filterId})`,
235
+ }, "aria-hidden": "true" }), jsx("div", { className: "absolute inset-0 z-[1] rounded-full bg-[var(--color-surface)]/90", "aria-hidden": "true" }), jsx("div", { className: "absolute inset-0 z-[2] rounded-full", style: {
236
+ boxShadow: "inset 1px 1px 0 rgba(255,255,255,0.35), inset 1px 3px 0 rgba(0,0,0,0.03), inset 0 0 14px rgba(255,255,255,0.25), inset -1px -1px 0 rgba(0,0,0,0.06)",
237
+ }, "aria-hidden": "true" })] }, index));
231
238
  }), name && (jsx("input", { type: "hidden", name: name, value: Array.isArray(currentValue)
232
239
  ? currentValue.join(",")
233
240
  : currentValue }))] }), showMinMax && (jsx("span", { className: cn(mergedTheme.minMaxLabelStyle), children: max })), showValue && (jsx("div", { className: cn(mergedTheme.valueDisplayStyle), children: formatValueDisplay() })), iconEnd && (jsx("div", { className: "flex-shrink-0 text-[var(--color-text-muted)]", children: iconEnd }))] }), helperText && (jsx("div", { id: helperTextId, className: cn(mergedTheme.helperTextStyle, helperTextClassName), children: helperText }))] }));
@@ -10,17 +10,17 @@ const sliderTheme = {
10
10
  // Root container with layout
11
11
  rootStyle: "relative flex items-center w-full touch-none select-none data-[orientation=vertical]:flex-col data-[orientation=vertical]:h-full",
12
12
  // Track (background)
13
- trackStyle: "relative w-full h-2 grow rounded-full bg-[var(--color-background-tertiary)] overflow-hidden data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[orientation=vertical]:w-2 data-[orientation=vertical]:h-full",
13
+ trackStyle: "relative w-full h-2 grow rounded-full bg-[var(--color-background-tertiary)] overflow-hidden data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[orientation=vertical]:w-2 data-[orientation=vertical]:h-full shadow-inner",
14
14
  // Range (filled portion) - rounded to match track clipping
15
15
  rangeStyle: "absolute h-full bg-gradient-to-r from-[var(--color-primary-500)] to-[var(--color-primary-700)] transition-all rounded-full data-[disabled]:bg-[var(--color-background-disabled)] data-[invalid]:bg-[var(--color-danger)]",
16
16
  // Thumb (draggable handle)
17
- thumbStyle: "block h-5 w-8 rounded-full border-2 border-[var(--color-primary)] ring-2 ring-white shadow-sm cursor-grab active:cursor-grabbing focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-border)] focus-visible:ring-offset-2 transition-all hover:scale-110 disabled:cursor-not-allowed disabled:bg-[var(--color-background-disabled)] disabled:hover:scale-100 data-[disabled]:cursor-not-allowed data-[disabled]:bg-[var(--color-background-disabled)] data-[disabled]:border-[var(--color-border)] data-[disabled]:hover:scale-100 data-[invalid]:border-[var(--color-danger)] data-[invalid]:focus-visible:ring-[var(--color-danger)] glass-effect-5",
17
+ thumbStyle: "block h-5 w-7 rounded-full bg-transparent overflow-hidden cursor-grab active:cursor-grabbing active:scale-x-110 active:scale-y-[0.98] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-border)] focus-visible:ring-offset-2 transition-all hover:scale-110 data-[disabled]:cursor-not-allowed data-[disabled]:hover:scale-100 data-[invalid]:focus-visible:ring-[var(--color-danger)]",
18
18
  // Value display
19
19
  valueDisplayStyle: "text-base font-medium text-[var(--color-text-secondary)] w-fit min-w-12",
20
20
  // Min/max labels
21
21
  minMaxLabelStyle: "text-base font-medium text-[var(--color-text-muted)]",
22
22
  // Tick marks
23
- tickStyle: "absolute w-0.5 h-2 bg-white/60 -translate-x-0.5 pointer-events-none",
23
+ tickStyle: "absolute w-0.5 h-2 bg-[var(--color-border)] -translate-x-0.5 pointer-events-none",
24
24
  };
25
25
 
26
26
  export { sliderTheme };
@@ -34,7 +34,9 @@ const Switch = React__default.forwardRef(({ id, checked: controlledChecked, onCh
34
34
  }
35
35
  };
36
36
  // Label and description content
37
- const labelContent = label || description ? (jsxs("div", { className: "flex grow flex-col", children: [label && (typeof label === 'string' ? (jsx(FormLabel, { htmlFor: id, state: state, children: label })) : (label)), description && (typeof description === 'string' ? (jsx("div", { className: cn(switchTheme.description, theme === null || theme === void 0 ? void 0 : theme.description), children: description })) : (description))] })) : null;
37
+ const labelContent = label || description ? (jsxs("div", { className: "flex grow flex-col", children: [label &&
38
+ (typeof label === "string" ? (jsx(FormLabel, { htmlFor: id, state: state, children: label })) : (label)), description &&
39
+ (typeof description === "string" ? (jsx("div", { className: cn(switchTheme.description, theme === null || theme === void 0 ? void 0 : theme.description), children: description })) : (description))] })) : null;
38
40
  // Build data attributes for state-based styling
39
41
  const trackDataState = isDisabled
40
42
  ? "disabled"
@@ -43,8 +45,14 @@ const Switch = React__default.forwardRef(({ id, checked: controlledChecked, onCh
43
45
  : isChecked
44
46
  ? "checked"
45
47
  : "unchecked";
48
+ const filterId = `switch-liquid-lens-${id}`;
46
49
  // Switch toggle component
47
- const switchToggle = (jsxs("div", { className: "relative flex items-center h-6", children: [jsx("input", { ref: ref, type: "checkbox", id: id, checked: isChecked, onChange: handleChange, disabled: isDisabled, className: "sr-only", "aria-checked": isChecked, "aria-invalid": isInvalid }), jsx("div", { className: cn(switchTheme.track, theme === null || theme === void 0 ? void 0 : theme.track), "data-state": trackDataState, onClick: handleTrackClick, children: jsx(motion.div, { className: cn(switchTheme.thumb, theme === null || theme === void 0 ? void 0 : theme.thumb), initial: false, animate: isChecked ? thumbPositions.checked : thumbPositions.unchecked, transition: { type: "spring", stiffness: 500, damping: 30 } }) })] }));
50
+ const switchToggle = (jsxs("div", { className: "relative flex items-center h-6", children: [jsx("input", { ref: ref, type: "checkbox", id: id, checked: isChecked, onChange: handleChange, disabled: isDisabled, className: "sr-only", "aria-checked": isChecked, "aria-invalid": isInvalid }), jsx("svg", { width: "0", height: "0", className: "absolute", "aria-hidden": "true", children: jsx("defs", { children: jsxs("filter", { id: filterId, children: [jsx("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "1", result: "blur" }), jsx("feColorMatrix", { in: "blur", type: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7", result: "goo" }), jsx("feComposite", { in: "SourceGraphic", in2: "goo", operator: "atop" })] }) }) }), jsx("div", { className: cn(switchTheme.track, theme === null || theme === void 0 ? void 0 : theme.track), "data-state": trackDataState, onClick: handleTrackClick, children: jsxs(motion.div, { className: cn(switchTheme.thumb, theme === null || theme === void 0 ? void 0 : theme.thumb, ""), initial: false, animate: isChecked ? thumbPositions.checked : thumbPositions.unchecked, transition: { type: "spring", stiffness: 500, damping: 30 }, whileTap: isDisabled ? undefined : { scale: 1.15 }, style: { filter: `url(#${filterId})` }, children: [jsx("div", { className: "absolute inset-0 z-0 rounded-full", style: {
51
+ backdropFilter: "blur(0.6px)",
52
+ WebkitBackdropFilter: "blur(0.6px)",
53
+ }, "aria-hidden": "true" }), jsx("div", { className: "absolute inset-0 z-[1] rounded-full bg-[var(--color-surface)]/80", "aria-hidden": "true" }), jsx("div", { className: "absolute inset-0 z-[2] rounded-full", style: {
54
+ boxShadow: "inset 1px 1px 0 rgba(255,255,255,0.35), inset 1px 3px 0 rgba(0,0,0,0.03), inset 0 0 14px rgba(255,255,255,0.25), inset -1px -1px 0 rgba(0,0,0,0.06)",
55
+ }, "aria-hidden": "true" })] }) })] }));
48
56
  return (jsxs("div", { className: cn(switchTheme.container, labelPosition === "start" ? "flex-row-reverse" : "flex-row", theme === null || theme === void 0 ? void 0 : theme.container, className), ...rest, children: [labelContent, switchToggle] }));
49
57
  });
50
58
  Switch.displayName = "Switch";
@@ -3,8 +3,8 @@
3
3
  */
4
4
  const switchTheme = {
5
5
  container: "flex w-full justify-between items-center gap-4",
6
- track: "w-12 h-6 rounded-full transition-colors cursor-pointer shadow-inner bg-[var(--color-background-tertiary)] data-[state=checked]:bg-[var(--color-primary)] data-[state=disabled]:bg-[var(--color-background-disabled)] data-[state=disabled]:cursor-not-allowed data-[state=invalid]:border-2 data-[state=invalid]:border-[var(--color-danger)] outline outline-[var(--color-border)]",
7
- thumb: "w-7 h-5 rounded-full shadow-real-md bg-gradient-to-b from-neutral-100 via-neutral-200 to-neutral-50 border-t border-[var(--color-white)]/80 ",
6
+ track: "w-12 h-6 rounded-full cursor-pointer shadow-inner bg-[var(--color-background-tertiary)] data-[state=checked]:bg-[var(--color-primary)] data-[state=disabled]:bg-[var(--color-background-disabled)] data-[state=disabled]:cursor-not-allowed data-[state=invalid]:border-2 data-[state=invalid]:border-[var(--color-danger)] outline outline-[var(--color-border)] transition-colors duration-300",
7
+ thumb: "w-7 h-5 rounded-full bg-transparent overflow-hidden border border-[var(--color-border)]/40 shadow-lg",
8
8
  description: "text-base text-[var(--color-text-muted)] -mt-1.5",
9
9
  };
10
10
  /**
@@ -69,9 +69,6 @@ export * from "./ColorPicker";
69
69
  export { SelectableCard } from "./SelectableCard";
70
70
  export type { SelectableCardProps, SelectableCardGroupProps, SelectableCardType, SelectableCardIndicator, SelectableCardTheme, } from "./SelectableCard";
71
71
  export { selectableCardTheme } from "./SelectableCard";
72
- export { TransferList } from "./TransferList";
73
- export type { TransferListProps, TransferListItem, TransferListSize, TransferListTheme, } from "./TransferList";
74
- export { transferListTheme } from "./TransferList";
75
72
  export { Mention } from "./Mention";
76
73
  export type { MentionProps, MentionSuggestion, MentionTrigger, MentionSize, MentionTheme, MentionThemeOverrides, } from "./Mention";
77
74
  export { mentionTheme } from "./Mention";
@@ -65,8 +65,6 @@ export { ColorPickerPresets } from './ColorPicker/ColorPickerPresets.js';
65
65
  export { formatHex, formatHsl, formatRgb, hexToRgb, hslToRgb, hsvToRgb, parseColor, rgbToHex, rgbToHsl, rgbToHsv, validateHex, validateRgb } from './ColorPicker/colorUtils.js';
66
66
  export { SelectableCard } from './SelectableCard/SelectableCard.js';
67
67
  export { selectableCardTheme } from './SelectableCard/SelectableCard.theme.js';
68
- export { TransferList } from './TransferList/TransferList.js';
69
- export { transferListTheme } from './TransferList/TransferList.theme.js';
70
68
  export { Mention } from './Mention/Mention.js';
71
69
  export { mentionTheme } from './Mention/Mention.theme.js';
72
70
  export { CronInput } from './CronInput/CronInput.js';
package/dist/index.js CHANGED
@@ -64,7 +64,7 @@ export { Combobox } from './components/forms/Combobox/Combobox.js';
64
64
  export { CommandPalette } from './components/core/CommandPalette/CommandPalette.js';
65
65
  export { ContextMenu } from './components/core/ContextMenu/ContextMenu.js';
66
66
  export { CronInput } from './components/forms/CronInput/CronInput.js';
67
- export { CustomCursor } from './components/effects/CustomCursor/CustomCursor.js';
67
+ export { CustomCursor, CustomCursorFollow, CustomCursorProvider, useCustomCursor } from './components/effects/CustomCursor/CustomCursor.js';
68
68
  export { DEFAULT_CHART_COLORS, EXTENDED_CHART_COLORS, MINIMAL_CHART_COLORS, colorClassToVariable, combineClasses, createColorClass, extractFillClass, extractStrokeClass, generateColorPalette, generateSeriesColors, getContrastColor } from './components/charts/utils/color-utils.js';
69
69
  export { DEFAULT_DATE_RANGE_PRESETS } from './components/forms/DateRangePicker/dateRangePresets.js';
70
70
  export { DatePicker } from './components/forms/DatePicker/DatePicker.js';
@@ -205,7 +205,6 @@ export { Timeline } from './components/data-display/Timeline/Timeline.js';
205
205
  export { Toast } from './components/core/Toast/Toast.js';
206
206
  export { ToastProvider, useToastContext } from './components/core/Toast/ToastProvider.js';
207
207
  export { Tooltip } from './components/core/Tooltip/Tooltip.js';
208
- export { TransferList } from './components/forms/TransferList/TransferList.js';
209
208
  export { Tree } from './components/core/Tree/Tree.js';
210
209
  export { TypeWriter } from './components/core/Message/TypeWriter.js';
211
210
  export { XAxis } from './components/charts/shared/ChartAxis/XAxis.js';
@@ -263,7 +262,6 @@ export { tagTheme } from './components/core/Tag/Tag.theme.js';
263
262
  export { textareaTheme } from './components/forms/Textarea/Textarea.theme.js';
264
263
  export { timePickerTheme } from './components/forms/TimePicker/TimePicker.theme.js';
265
264
  export { toastTheme } from './components/core/Toast/Toast.theme.js';
266
- export { transferListTheme } from './components/forms/TransferList/TransferList.theme.js';
267
265
  export { treeTheme } from './components/core/Tree/Tree.theme.js';
268
266
  export { useChartAccessibility } from './components/charts/hooks/useChartAccessibility.js';
269
267
  export { useChartTheme } from './components/charts/hooks/useChartTheme.js';