@mks2508/sidebar-headless 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -53
- package/LICENSE +21 -21
- package/README.md +165 -165
- package/dist/components/BottomNavBar/MobileBottomNav.d.ts +65 -0
- package/dist/components/BottomNavBar/MobileBottomNav.d.ts.map +1 -0
- package/dist/components/BottomNavBar/MobileBottomNav.styles.d.ts +94 -0
- package/dist/components/BottomNavBar/MobileBottomNav.styles.d.ts.map +1 -0
- package/dist/components/BottomNavBar/index.d.ts +10 -0
- package/dist/components/BottomNavBar/index.d.ts.map +1 -0
- package/dist/components/BottomNavBar/types.d.ts +363 -0
- package/dist/components/BottomNavBar/types.d.ts.map +1 -0
- package/dist/components/BottomNavBar/useIOSSafariFix.d.ts +74 -0
- package/dist/components/BottomNavBar/useIOSSafariFix.d.ts.map +1 -0
- package/dist/components/Sidebar/Sidebar.constants.d.ts +285 -0
- package/dist/components/Sidebar/Sidebar.constants.d.ts.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.ts +80 -0
- package/dist/components/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/components/Sidebar/Sidebar.styles.d.ts +77 -0
- package/dist/components/Sidebar/Sidebar.styles.d.ts.map +1 -0
- package/dist/components/Sidebar/Sidebar.types.d.ts +638 -0
- package/dist/components/Sidebar/Sidebar.types.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarContent.d.ts +46 -0
- package/dist/components/Sidebar/SidebarContent.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarContext.d.ts +87 -0
- package/dist/components/Sidebar/SidebarContext.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarFluidIndicator.d.ts +37 -0
- package/dist/components/Sidebar/SidebarFluidIndicator.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarIndicator.d.ts +59 -0
- package/dist/components/Sidebar/SidebarIndicator.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarItem.d.ts +82 -0
- package/dist/components/Sidebar/SidebarItem.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarNav.d.ts +48 -0
- package/dist/components/Sidebar/SidebarNav.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarSafeArea.d.ts +56 -0
- package/dist/components/Sidebar/SidebarSafeArea.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarSubContent.d.ts +10 -0
- package/dist/components/Sidebar/SidebarSubContent.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarSubLink.d.ts +18 -0
- package/dist/components/Sidebar/SidebarSubLink.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarToggle.d.ts +52 -0
- package/dist/components/Sidebar/SidebarToggle.d.ts.map +1 -0
- package/dist/components/Sidebar/SidebarTooltip.d.ts +26 -0
- package/dist/components/Sidebar/SidebarTooltip.d.ts.map +1 -0
- package/dist/components/Sidebar/TooltipTitle3D.d.ts +42 -0
- package/dist/components/Sidebar/TooltipTitle3D.d.ts.map +1 -0
- package/dist/components/Sidebar/TooltipTitle3DCrossfade.d.ts +46 -0
- package/dist/components/Sidebar/TooltipTitle3DCrossfade.d.ts.map +1 -0
- package/dist/components/Sidebar/TooltipTitleCylinder.d.ts +9 -0
- package/dist/components/Sidebar/TooltipTitleCylinder.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useSidebarContext.d.ts +48 -0
- package/dist/components/Sidebar/hooks/useSidebarContext.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useSidebarIndicator.d.ts +72 -0
- package/dist/components/Sidebar/hooks/useSidebarIndicator.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useSidebarKeyboard.d.ts +51 -0
- package/dist/components/Sidebar/hooks/useSidebarKeyboard.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useSubContent.d.ts +7 -0
- package/dist/components/Sidebar/hooks/useSubContent.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useTitleHistory.d.ts +41 -0
- package/dist/components/Sidebar/hooks/useTitleHistory.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useTooltipDirection.d.ts +29 -0
- package/dist/components/Sidebar/hooks/useTooltipDirection.d.ts.map +1 -0
- package/dist/components/Sidebar/hooks/useTooltipTransition.d.ts +60 -0
- package/dist/components/Sidebar/hooks/useTooltipTransition.d.ts.map +1 -0
- package/dist/components/Sidebar/index.d.ts +163 -0
- package/dist/components/Sidebar/index.d.ts.map +1 -0
- package/dist/components/Sidebar/sidebar-defaults.d.ts +54 -0
- package/dist/components/Sidebar/sidebar-defaults.d.ts.map +1 -0
- package/dist/components/animate-ui/components/base/switch.d.ts +11 -0
- package/dist/components/animate-ui/components/base/switch.d.ts.map +1 -0
- package/dist/components/animate-ui/primitives/base/switch.d.ts +23 -0
- package/dist/components/animate-ui/primitives/base/switch.d.ts.map +1 -0
- package/dist/components/fluid-hover-indicator-v2.d.ts +46 -0
- package/dist/components/fluid-hover-indicator-v2.d.ts.map +1 -0
- package/dist/components/fluid-hover-indicator.d.ts +28 -0
- package/dist/components/fluid-hover-indicator.d.ts.map +1 -0
- package/dist/components/ui/TextCylinder.d.ts +21 -0
- package/dist/components/ui/TextCylinder.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/custom-icon.d.ts +45 -0
- package/dist/components/ui/custom-icon.d.ts.map +1 -0
- package/dist/components/ui/dotted-glow-background.d.ts +42 -0
- package/dist/components/ui/dotted-glow-background.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +5 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/optimized-image.d.ts +12 -0
- package/dist/components/ui/optimized-image.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +16 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/{index.css → dist/index.css} +945 -908
- package/dist/dist/index.css.map +1 -0
- package/dist/hooks/use-controlled-state.d.ts +9 -0
- package/dist/hooks/use-controlled-state.d.ts.map +1 -0
- package/dist/hooks/use-fluid-animation.d.ts +18 -0
- package/dist/hooks/use-fluid-animation.d.ts.map +1 -0
- package/dist/hooks/use-liquid-glass.d.ts +40 -0
- package/dist/hooks/use-liquid-glass.d.ts.map +1 -0
- package/dist/hooks/use-sidebar-liquid-glass.d.ts +48 -0
- package/dist/hooks/use-sidebar-liquid-glass.d.ts.map +1 -0
- package/dist/hooks/use-text-cylinder.d.ts +67 -0
- package/dist/hooks/use-text-cylinder.d.ts.map +1 -0
- package/dist/index.cjs +14087 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +10 -2231
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13132 -52336
- package/dist/index.js.map +1 -1
- package/dist/lib/get-strict-context.d.ts +10 -0
- package/dist/lib/get-strict-context.d.ts.map +1 -0
- package/dist/lib/liquid-glass-presets.d.ts +43 -0
- package/dist/lib/liquid-glass-presets.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/types/sidebar-minimal.d.ts +21 -0
- package/dist/types/sidebar-minimal.d.ts.map +1 -0
- package/dist/utils/TooltipAnimationController.d.ts +122 -0
- package/dist/utils/TooltipAnimationController.d.ts.map +1 -0
- package/package.json +12 -6
- package/dist/MobileOptimizations.css +0 -570
- package/dist/index.css.map +0 -1
- package/dist/index.d.cts +0 -2235
- package/dist/tooltip-keyframes.css +0 -329
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface SubContentData {
|
|
3
|
+
itemId: string;
|
|
4
|
+
subContent: ReactNode;
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const SubContentContext: import("react").Context<{
|
|
8
|
+
subContentMap: Map<string, SubContentData>;
|
|
9
|
+
registerSubContent: (itemId: string, data: SubContentData) => void;
|
|
10
|
+
unregisterSubContent: (itemId: string) => void;
|
|
11
|
+
getSubContent: (itemId: string) => SubContentData | undefined;
|
|
12
|
+
} | null>;
|
|
13
|
+
import type { SidebarContextValue, SidebarCollapseMode, SidebarHideBehaviour, SidebarHideOpensBehavior, SidebarLayoutBehaviour, SidebarDimensions, SidebarSafeAreas, SidebarAnimations, SidebarLiquidGlassConfig } from "./Sidebar.types";
|
|
14
|
+
/**
|
|
15
|
+
* Contexto del Sidebar para compartir estado entre componentes primitivos
|
|
16
|
+
* @constant
|
|
17
|
+
*/
|
|
18
|
+
export declare const SidebarContext: import("react").Context<SidebarContextValue | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Props del SidebarProvider
|
|
21
|
+
* @interface
|
|
22
|
+
*/
|
|
23
|
+
interface SidebarProviderProps {
|
|
24
|
+
/** Contenido hijo (componentes primitivos del sidebar) */
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
/** Estado inicial abierto (modo uncontrolled) */
|
|
27
|
+
defaultOpen?: boolean;
|
|
28
|
+
/** Estado abierto (modo controlled) */
|
|
29
|
+
open?: boolean;
|
|
30
|
+
/** Callback cuando cambia el estado open */
|
|
31
|
+
onOpenChange?: (open: boolean) => void;
|
|
32
|
+
/** Modo de colapso del sidebar */
|
|
33
|
+
collapseMode?: SidebarCollapseMode;
|
|
34
|
+
/** Comportamiento en modo hide */
|
|
35
|
+
hideBehaviour?: SidebarHideBehaviour;
|
|
36
|
+
/** Comportamiento al abrir desde hide */
|
|
37
|
+
hideOpensBehavior?: SidebarHideOpensBehavior;
|
|
38
|
+
/** Comportamiento de layout del sidebar */
|
|
39
|
+
layoutBehaviour?: SidebarLayoutBehaviour;
|
|
40
|
+
/** Configuración de dimensiones */
|
|
41
|
+
dimensions?: Partial<SidebarDimensions>;
|
|
42
|
+
/** Configuración de safe areas */
|
|
43
|
+
safeAreas?: Partial<SidebarSafeAreas>;
|
|
44
|
+
/** Configuración de animaciones */
|
|
45
|
+
animations?: Partial<SidebarAnimations>;
|
|
46
|
+
/** ID del toggle input */
|
|
47
|
+
toggleId?: string;
|
|
48
|
+
/** Modo debug para visualizar safe areas */
|
|
49
|
+
debug?: boolean;
|
|
50
|
+
/** Habilitar FluidHoverIndicator (glassmorphism + spring physics) */
|
|
51
|
+
enableFluidIndicator?: boolean;
|
|
52
|
+
/** Habilitar tooltip en hover (muestra label o subcategorías) */
|
|
53
|
+
enableTooltip?: boolean;
|
|
54
|
+
/** Configuración experimental de Liquid Glass V2 */
|
|
55
|
+
liquidGlass?: Partial<SidebarLiquidGlassConfig>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Provider del contexto del Sidebar
|
|
59
|
+
*
|
|
60
|
+
* @description
|
|
61
|
+
* Componente que provee el contexto compartido a todos los componentes
|
|
62
|
+
* primitivos del sidebar. Gestiona el estado global (open/closed) y
|
|
63
|
+
* referencias a elementos DOM necesarios para funcionalidades como
|
|
64
|
+
* el indicador visual y navegación por teclado.
|
|
65
|
+
*
|
|
66
|
+
* Soporta tanto modo controlled (pasando prop `open`) como uncontrolled
|
|
67
|
+
* (usando `defaultOpen`).
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* // Modo uncontrolled
|
|
72
|
+
* <SidebarProvider defaultOpen={true}>
|
|
73
|
+
* <SidebarNav>...</SidebarNav>
|
|
74
|
+
* </SidebarProvider>
|
|
75
|
+
*
|
|
76
|
+
* // Modo controlled
|
|
77
|
+
* <SidebarProvider
|
|
78
|
+
* open={isOpen}
|
|
79
|
+
* onOpenChange={setIsOpen}
|
|
80
|
+
* >
|
|
81
|
+
* <SidebarNav>...</SidebarNav>
|
|
82
|
+
* </SidebarProvider>
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export declare function SidebarProvider({ children, defaultOpen, open: controlledOpen, onOpenChange, collapseMode, hideBehaviour, hideOpensBehavior, layoutBehaviour, dimensions: dimensionsProp, safeAreas: safeAreasProp, animations: animationsProp, toggleId, debug, enableFluidIndicator, enableTooltip, liquidGlass: liquidGlassProp }: SidebarProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=SidebarContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarContext.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarContext.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAa,MAAM,OAAO,CAAA;AAEjD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,SAAS,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,eAAO,MAAM,iBAAiB;;;;;SAKf,CAAA;AACf,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,iBAAiB,CAAA;AAUxB;;;GAGG;AACH,eAAO,MAAM,cAAc,qDAAkD,CAAA;AAE7E;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,CAAA;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,kCAAkC;IAClC,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,kCAAkC;IAClC,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,wBAAwB,CAAA;IAC5C,2CAA2C;IAC3C,eAAe,CAAC,EAAE,sBAAsB,CAAA;IACxC,oCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACvC,mCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrC,oCAAmC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACvC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAA;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,WAAwC,EACxC,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,YAA0C,EAC1C,aAA4C,EAC5C,iBAAoD,EACpD,eAAgD,EAChD,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,QAAkC,EAClC,KAA4B,EAC5B,oBAA4B,EAC5B,aAAoB,EACpB,WAAW,EAAE,eAAe,EAC7B,EAAE,oBAAoB,2CAwLtB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Props del SidebarFluidIndicator
|
|
3
|
+
* @interface
|
|
4
|
+
*/
|
|
5
|
+
interface SidebarFluidIndicatorProps {
|
|
6
|
+
/** Elemento del item actualmente hovered/focused */
|
|
7
|
+
targetElement: HTMLElement | null;
|
|
8
|
+
/** Indica si el indicador está visible */
|
|
9
|
+
isVisible: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Componente wrapper de FluidHoverIndicator para Sidebar
|
|
13
|
+
*
|
|
14
|
+
* @description
|
|
15
|
+
* Wrapper que conecta el FluidHoverIndicator (glassmorphism + spring physics)
|
|
16
|
+
* con el sistema de estado del Sidebar. Este componente decide automáticamente
|
|
17
|
+
* qué versión renderizar basándose en las feature flags:
|
|
18
|
+
*
|
|
19
|
+
* - **V1 (default)**: FluidHoverIndicator con backdrop-blur CSS básico
|
|
20
|
+
* - **V2 (experimental)**: FluidHoverIndicatorV2 con SVG displacement mapping
|
|
21
|
+
*
|
|
22
|
+
* Feature flags del contexto:
|
|
23
|
+
* - `liquidGlass.enableLiquidGlassV2`: Activa la versión V2
|
|
24
|
+
* - `liquidGlass.enableChromaticAberration`: Activa chromatic aberration (Phase 2)
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <SidebarNav>
|
|
29
|
+
* <SidebarIndicator />
|
|
30
|
+
* <SidebarFluidIndicator targetElement={currentItemElement} isVisible={isVisible} />
|
|
31
|
+
* <SidebarContent>...</SidebarContent>
|
|
32
|
+
* </SidebarNav>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function SidebarFluidIndicator({ targetElement, isVisible }: SidebarFluidIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=SidebarFluidIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarFluidIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarFluidIndicator.tsx"],"names":[],"mappings":"AAMA;;;GAGG;AACH,UAAU,0BAA0B;IAClC,oDAAoD;IACpD,aAAa,EAAE,WAAW,GAAG,IAAI,CAAA;IACjC,2CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CAyB7F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { SidebarIndicatorProps } from "./Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Componente de indicador visual del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Indicador visual que sigue al cursor del mouse (o item enfocado) dentro
|
|
7
|
+
* del área de navegación. Proporciona feedback visual claro al usuario.
|
|
8
|
+
*
|
|
9
|
+
* Características:
|
|
10
|
+
* - Se muestra solo cuando el mouse está sobre el área de items
|
|
11
|
+
* - Sigue al cursor con animación suave
|
|
12
|
+
* - Se posiciona en el item enfocado al navegar por teclado
|
|
13
|
+
* - Totalmente customizable con className y style
|
|
14
|
+
* - Soporta render props para control total del contenido
|
|
15
|
+
* - Color y dimensiones configurables via contexto
|
|
16
|
+
*
|
|
17
|
+
* El indicador se oculta automáticamente cuando:
|
|
18
|
+
* - El mouse sale del sidebar
|
|
19
|
+
* - El cursor está fuera del área de items
|
|
20
|
+
* - Se pierde el focus del sidebar
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* // Uso básico con estilos por defecto
|
|
25
|
+
* <SidebarNav>
|
|
26
|
+
* <SidebarIndicator />
|
|
27
|
+
* <SidebarContent>...</SidebarContent>
|
|
28
|
+
* </SidebarNav>
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* // Con estilos custom
|
|
34
|
+
* <SidebarIndicator className="bg-red-500 w-1" />
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* // Con render props
|
|
40
|
+
* <SidebarIndicator>
|
|
41
|
+
* {({ visible, position }) => (
|
|
42
|
+
* <div
|
|
43
|
+
* className={cn('indicator', visible && 'opacity-100')}
|
|
44
|
+
* style={{ top: position }}
|
|
45
|
+
* >
|
|
46
|
+
* <span>→</span>
|
|
47
|
+
* </div>
|
|
48
|
+
* )}
|
|
49
|
+
* </SidebarIndicator>
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* // Como elemento custom
|
|
55
|
+
* <SidebarIndicator as={motion.div} animate={{ opacity: 1 }} />
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare const SidebarIndicator: import("react").ForwardRefExoticComponent<SidebarIndicatorProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
59
|
+
//# sourceMappingURL=SidebarIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarIndicator.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,iBAAiB,CAAA;AAGxF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,eAAO,MAAM,gBAAgB,kHAkE5B,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { SidebarItemProps } from "./Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Componente item de navegación del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Item individual de navegación dentro del sidebar.
|
|
7
|
+
* Renderiza un `<a>` por defecto, pero puede ser cualquier elemento
|
|
8
|
+
* o componente (ej: React Router Link, Next.js Link).
|
|
9
|
+
*
|
|
10
|
+
* Características:
|
|
11
|
+
* - Soporta iconos y labels
|
|
12
|
+
* - Gestiona estados de hover y focus
|
|
13
|
+
* - Se registra automáticamente para navegación por teclado
|
|
14
|
+
* - Aplica data attributes para styling
|
|
15
|
+
* - Soporta render props para control total
|
|
16
|
+
* - Compatible con React Router, Next.js, etc. via prop `as`
|
|
17
|
+
* - Label oculto automáticamente cuando sidebar está colapsado (via CSS container queries)
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* // Uso básico
|
|
22
|
+
* <SidebarItem
|
|
23
|
+
* href="/"
|
|
24
|
+
* icon={<HomeIcon />}
|
|
25
|
+
* label="Home"
|
|
26
|
+
* />
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* // Con React Router
|
|
32
|
+
* <SidebarItem
|
|
33
|
+
* as={Link}
|
|
34
|
+
* to="/dashboard"
|
|
35
|
+
* icon={<DashboardIcon />}
|
|
36
|
+
* label="Dashboard"
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* // Con Next.js Link
|
|
43
|
+
* <SidebarItem
|
|
44
|
+
* LinkComponent={Link}
|
|
45
|
+
* href="/profile"
|
|
46
|
+
* icon={<UserIcon />}
|
|
47
|
+
* label="Profile"
|
|
48
|
+
* />
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* // Con render props
|
|
54
|
+
* <SidebarItem href="/settings">
|
|
55
|
+
* {({ focused, hovered, disabled }) => (
|
|
56
|
+
* <div className={cn(
|
|
57
|
+
* 'flex items-center gap-2',
|
|
58
|
+
* focused && 'ring-2',
|
|
59
|
+
* hovered && 'bg-zinc-800',
|
|
60
|
+
* disabled && 'opacity-50'
|
|
61
|
+
* )}>
|
|
62
|
+
* <SettingsIcon />
|
|
63
|
+
* <span>Settings</span>
|
|
64
|
+
* </div>
|
|
65
|
+
* )}
|
|
66
|
+
* </SidebarItem>
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```tsx
|
|
71
|
+
* // Con callbacks
|
|
72
|
+
* <SidebarItem
|
|
73
|
+
* href="/analytics"
|
|
74
|
+
* icon={<ChartIcon />}
|
|
75
|
+
* label="Analytics"
|
|
76
|
+
* onHover={() => prefetchAnalytics()}
|
|
77
|
+
* onClick={() => trackNavigation('analytics')}
|
|
78
|
+
* />
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare const SidebarItem: import("react").ForwardRefExoticComponent<SidebarItemProps & import("react").RefAttributes<HTMLAnchorElement>>;
|
|
82
|
+
//# sourceMappingURL=SidebarItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarItem.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarItem.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAA;AAQ9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AACH,eAAO,MAAM,WAAW,gHAwKtB,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SidebarNavProps } from "./Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Componente de navegación del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Contenedor de navegación que renderiza un elemento `<nav>` por defecto.
|
|
7
|
+
* Gestiona los eventos de mouse y teclado para el indicador visual y
|
|
8
|
+
* la navegación accesible.
|
|
9
|
+
*
|
|
10
|
+
* Este componente:
|
|
11
|
+
* - Aplica data attributes para reflejar el estado (open/collapsed)
|
|
12
|
+
* - Gestiona eventos de mouse para el indicador visual
|
|
13
|
+
* - Gestiona navegación por teclado (arrows, home, end)
|
|
14
|
+
* - Expone una ref al elemento DOM para mediciones
|
|
15
|
+
*
|
|
16
|
+
* Usa forwardRef para permitir acceso al elemento DOM desde componentes padre.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Sidebar>
|
|
21
|
+
* <SidebarNav className="bg-zinc-900 border-zinc-800">
|
|
22
|
+
* <SidebarToggle />
|
|
23
|
+
* <SidebarIndicator />
|
|
24
|
+
* <SidebarContent>
|
|
25
|
+
* <SidebarItem href="/" />
|
|
26
|
+
* </SidebarContent>
|
|
27
|
+
* </SidebarNav>
|
|
28
|
+
* </Sidebar>
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* // Con data attributes para styling
|
|
34
|
+
* <SidebarNav className="data-[open=true]:w-64 data-[open=false]:w-16">
|
|
35
|
+
* {children}
|
|
36
|
+
* </SidebarNav>
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* // Con elemento personalizado
|
|
42
|
+
* <SidebarNav as="aside" aria-label="Navegación lateral">
|
|
43
|
+
* {children}
|
|
44
|
+
* </SidebarNav>
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare const SidebarNav: import("react").ForwardRefExoticComponent<SidebarNavProps & import("react").RefAttributes<HTMLElement>>;
|
|
48
|
+
//# sourceMappingURL=SidebarNav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarNav.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarNav.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAYtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,UAAU,yGA6erB,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { SidebarSafeAreaProps } from "./Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Componente de área segura del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Área reservada en la parte superior o inferior del sidebar para
|
|
7
|
+
* contenido especial como logos, usuario, configuración, etc.
|
|
8
|
+
*
|
|
9
|
+
* Las áreas seguras:
|
|
10
|
+
* - No contienen items de navegación
|
|
11
|
+
* - Tienen altura porcentual configurable
|
|
12
|
+
* - Pueden mostrar patrones de debug
|
|
13
|
+
* - Son completamente customizables
|
|
14
|
+
*
|
|
15
|
+
* Casos de uso comunes:
|
|
16
|
+
* - Top: Logo, título de la aplicación, búsqueda
|
|
17
|
+
* - Bottom: Usuario, configuración, logout
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <SidebarNav>
|
|
22
|
+
* <SidebarSafeArea position="top" percent={20}>
|
|
23
|
+
* <img src="/logo.png" alt="Logo" />
|
|
24
|
+
* </SidebarSafeArea>
|
|
25
|
+
*
|
|
26
|
+
* <SidebarContent>
|
|
27
|
+
* <SidebarItem href="/" />
|
|
28
|
+
* </SidebarContent>
|
|
29
|
+
*
|
|
30
|
+
* <SidebarSafeArea position="bottom" percent={15}>
|
|
31
|
+
* <UserProfile />
|
|
32
|
+
* </SidebarSafeArea>
|
|
33
|
+
* </SidebarNav>
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* // Con estilos custom
|
|
39
|
+
* <SidebarSafeArea
|
|
40
|
+
* position="top"
|
|
41
|
+
* className="bg-zinc-950 border-b border-zinc-800"
|
|
42
|
+
* >
|
|
43
|
+
* <h1>Mi App</h1>
|
|
44
|
+
* </SidebarSafeArea>
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* // Override de porcentaje
|
|
50
|
+
* <SidebarSafeArea position="bottom" percent={30}>
|
|
51
|
+
* <ExtendedFooter />
|
|
52
|
+
* </SidebarSafeArea>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare const SidebarSafeArea: import("react").ForwardRefExoticComponent<SidebarSafeAreaProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
56
|
+
//# sourceMappingURL=SidebarSafeArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSafeArea.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarSafeArea.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAO3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,eAAO,MAAM,eAAe,iHAsE3B,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface SidebarSubContentProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
title?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function SidebarSubContent({ children, title }: SidebarSubContentProps): null;
|
|
7
|
+
export declare namespace SidebarSubContent {
|
|
8
|
+
var displayName: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=SidebarSubContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSubContent.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarSubContent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,sBAAsB,QAE5E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReactNode, ComponentType, MouseEvent as ReactMouseEvent, CSSProperties } from "react";
|
|
2
|
+
export interface SidebarSubLinkProps {
|
|
3
|
+
href: string;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
LinkComponent?: ComponentType<any>;
|
|
7
|
+
linkProps?: Record<string, any>;
|
|
8
|
+
className?: string;
|
|
9
|
+
onClick?: (e: ReactMouseEvent<HTMLAnchorElement>) => void;
|
|
10
|
+
animationOrder?: number;
|
|
11
|
+
animationState?: 'entering' | 'leaving' | 'static';
|
|
12
|
+
style?: CSSProperties;
|
|
13
|
+
}
|
|
14
|
+
export declare function SidebarSubLink({ href, children, icon, LinkComponent, linkProps, className, onClick, animationOrder, animationState, style }: SidebarSubLinkProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare namespace SidebarSubLink {
|
|
16
|
+
var displayName: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=SidebarSubLink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSubLink.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarSubLink.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,IAAI,eAAe,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAGnG,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACzD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAA;IAClD,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,SAAc,EACd,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,KAAK,EACN,EAAE,mBAAmB,2CA0BrB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { SidebarToggleProps } from "./Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Componente de botón toggle del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Botón que controla el estado abierto/cerrado del sidebar.
|
|
7
|
+
* Renderiza un `<label>` por defecto que controla un checkbox oculto,
|
|
8
|
+
* permitiendo gestionar el estado con CSS puro (:checked selector).
|
|
9
|
+
*
|
|
10
|
+
* Características:
|
|
11
|
+
* - Soporta render props para acceso al estado (open, active)
|
|
12
|
+
* - Renderiza icono de chevron por defecto (customizable)
|
|
13
|
+
* - Aplica data attributes para styling CSS
|
|
14
|
+
* - Accesibilidad completa (aria-label, aria-expanded)
|
|
15
|
+
* - Soporta prop `as` para usar elemento/componente custom
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* // Uso básico con icono por defecto
|
|
20
|
+
* <SidebarToggle />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* // Con render props para estado
|
|
26
|
+
* <SidebarToggle>
|
|
27
|
+
* {({ open, active }) => (
|
|
28
|
+
* <div className={cn(active && 'bg-blue-500')}>
|
|
29
|
+
* {open ? <CloseIcon /> : <MenuIcon />}
|
|
30
|
+
* </div>
|
|
31
|
+
* )}
|
|
32
|
+
* </SidebarToggle>
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* // Con icono custom
|
|
38
|
+
* <SidebarToggle className="bg-zinc-800">
|
|
39
|
+
* <CustomChevronIcon />
|
|
40
|
+
* </SidebarToggle>
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* // Como botón real (sin checkbox)
|
|
46
|
+
* <SidebarToggle as="button" onClick={() => setOpen(!open)}>
|
|
47
|
+
* Toggle
|
|
48
|
+
* </SidebarToggle>
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare const SidebarToggle: import("react").ForwardRefExoticComponent<SidebarToggleProps & import("react").RefAttributes<HTMLButtonElement | HTMLLabelElement>>;
|
|
52
|
+
//# sourceMappingURL=SidebarToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarToggle.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarToggle.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAgD,MAAM,iBAAiB,CAAA;AAoEvG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,aAAa,qIA6EzB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import '@/animations/tooltip-keyframes.css';
|
|
3
|
+
export interface SidebarTooltipProps {
|
|
4
|
+
/** Contenido del tooltip */
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
/** Título opcional del tooltip */
|
|
7
|
+
title?: string;
|
|
8
|
+
/** Modo debug para visualizar safety triangle y layers */
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
/** Handler llamado cuando el mouse sale del tooltip */
|
|
11
|
+
onMouseLeave?: () => void;
|
|
12
|
+
/** Habilitar liquid glass con SVG displacement filters (false = backdrop-blur básico) */
|
|
13
|
+
enableLiquidGlass?: boolean;
|
|
14
|
+
/** Habilitar Edge Glass 3D (dual backdrop layers para profundidad) */
|
|
15
|
+
enableEdgeGlass3D?: boolean;
|
|
16
|
+
/** Habilitar Backdrop Extension (Josh Comeau technique - 200% height) */
|
|
17
|
+
enableBackdropExtension?: boolean;
|
|
18
|
+
/** Habilitar chromatic aberration RGB (requiere enableLiquidGlass) */
|
|
19
|
+
enableChromaticAberration?: boolean;
|
|
20
|
+
/** Habilitar animaciones staggered de items (entrada/salida escalonada) */
|
|
21
|
+
enableTooltipItemAnimations?: boolean;
|
|
22
|
+
/** Habilitar animación 3D de cilindro para el título del tooltip */
|
|
23
|
+
enableCylinderTitle?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare const SidebarTooltip: import("react").NamedExoticComponent<SidebarTooltipProps>;
|
|
26
|
+
//# sourceMappingURL=SidebarTooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/SidebarTooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAgB,MAAM,OAAO,CAAA;AAKpD,OAAO,oCAAoC,CAAA;AAY3C,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,QAAQ,EAAE,SAAS,CAAA;IACnB,mCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IAEzB,0FAAyF;IACzF,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yEAAyE;IACzE,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,sEAAsE;IACtE,yBAAyB,CAAC,EAAE,OAAO,CAAA;IAEnC,2EAA2E;IAC3E,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC,sEAAoE;IACpE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,eAAO,MAAM,cAAc,2DA+VzB,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TooltipTitle3D
|
|
3
|
+
*
|
|
4
|
+
* Enfoque A: Cubo 3D Multi-cara con preserve-3d
|
|
5
|
+
*
|
|
6
|
+
* Implementa un cubo 3D CSS con 4 caras (front, top, bottom, back) que contienen
|
|
7
|
+
* títulos pre-renderizados. La rotación del cubo muestra la cara apropiada
|
|
8
|
+
* basada en la dirección de navegación.
|
|
9
|
+
*
|
|
10
|
+
* Ventajas:
|
|
11
|
+
* - True 3D effect con hardware acceleration
|
|
12
|
+
* - Smooth rotation entre caras
|
|
13
|
+
* - No flickering (títulos pre-renderizados)
|
|
14
|
+
* - Soporte para múltiples títulos (4 caras disponibles)
|
|
15
|
+
*
|
|
16
|
+
* Desventajas:
|
|
17
|
+
* - Require pre-renderizar títulos en todas las caras
|
|
18
|
+
* - Más complejo que crossfade approach
|
|
19
|
+
* - Limitado a 4 títulos diferentes sin regenerar caras
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <TooltipTitle3D
|
|
24
|
+
* titles={['Home', 'Search', 'Settings', 'Profile']}
|
|
25
|
+
* currentFaceIndex={0}
|
|
26
|
+
* debug={false}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export interface TooltipTitle3DProps {
|
|
31
|
+
titles: string[];
|
|
32
|
+
currentFaceIndex?: number;
|
|
33
|
+
debug?: boolean;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface TooltipTitle3DRef {
|
|
37
|
+
scene: HTMLDivElement | null;
|
|
38
|
+
cube: HTMLDivElement | null;
|
|
39
|
+
}
|
|
40
|
+
export declare const TooltipTitle3D: import("react").ForwardRefExoticComponent<TooltipTitle3DProps & import("react").RefAttributes<TooltipTitle3DRef>>;
|
|
41
|
+
export default TooltipTitle3D;
|
|
42
|
+
//# sourceMappingURL=TooltipTitle3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipTitle3D.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/TooltipTitle3D.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,mHAgD1B,CAAC;AAIF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TooltipTitle3DCrossfade
|
|
3
|
+
*
|
|
4
|
+
* Enfoque B: Rotación 3D con Crossfade
|
|
5
|
+
*
|
|
6
|
+
* Implementa transición de título con dos elementos (old/new) que rotan en 3D
|
|
7
|
+
* con crossfade simultáneo. Más simple y flexible que el enfoque de cubo.
|
|
8
|
+
*
|
|
9
|
+
* Ventajas:
|
|
10
|
+
* - Más simple que cubo multi-cara
|
|
11
|
+
* - No requiere pre-renderizar títulos
|
|
12
|
+
* - Flexible para cualquier número de títulos
|
|
13
|
+
* - Mejor performance (solo 2 elementos animados)
|
|
14
|
+
*
|
|
15
|
+
* Desventajas:
|
|
16
|
+
* - Requiere gestión de estado old/new title
|
|
17
|
+
* - Posible flickering si no se maneja bien el timing
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <TooltipTitle3DCrossfade
|
|
22
|
+
* oldTitle="Home"
|
|
23
|
+
* newTitle="Search"
|
|
24
|
+
* direction="down"
|
|
25
|
+
* isTransitioning={true}
|
|
26
|
+
* debug={false}
|
|
27
|
+
* />
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { TooltipDirection } from './hooks/useTooltipDirection';
|
|
31
|
+
export interface TooltipTitle3DCrossfadeProps {
|
|
32
|
+
oldTitle?: string;
|
|
33
|
+
newTitle: string;
|
|
34
|
+
direction?: TooltipDirection;
|
|
35
|
+
isTransitioning?: boolean;
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
className?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface TooltipTitle3DCrossfadeRef {
|
|
40
|
+
container: HTMLDivElement | null;
|
|
41
|
+
oldTitleEl: HTMLDivElement | null;
|
|
42
|
+
newTitleEl: HTMLDivElement | null;
|
|
43
|
+
}
|
|
44
|
+
export declare const TooltipTitle3DCrossfade: import("react").ForwardRefExoticComponent<TooltipTitle3DCrossfadeProps & import("react").RefAttributes<TooltipTitle3DCrossfadeRef>>;
|
|
45
|
+
export default TooltipTitle3DCrossfade;
|
|
46
|
+
//# sourceMappingURL=TooltipTitle3DCrossfade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipTitle3DCrossfade.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/TooltipTitle3DCrossfade.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,uBAAuB,qIAqElC,CAAC;AAIH,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TooltipDirection } from './hooks/useTooltipDirection';
|
|
2
|
+
export interface TooltipTitleCylinderProps {
|
|
3
|
+
title: string;
|
|
4
|
+
direction: TooltipDirection;
|
|
5
|
+
className?: string;
|
|
6
|
+
maxHistory?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function TooltipTitleCylinder({ title, direction, className, maxHistory }: TooltipTitleCylinderProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=TooltipTitleCylinder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipTitleCylinder.d.ts","sourceRoot":"","sources":["../../../src/components/Sidebar/TooltipTitleCylinder.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,gBAAgB,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,SAAS,EACT,SAAS,EACT,UAAe,EAChB,EAAE,yBAAyB,2CA8B3B"}
|