@mks2508/mks-ui 0.6.7 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/blocks-Sidebar-animations-tooltip.css +330 -0
- package/dist/index.css +1058 -128
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.d.ts +64 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.js +301 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.d.ts +94 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/MobileBottomNav.styles.js +216 -0
- package/dist/react-ui/blocks/BottomNavBar/index.d.ts +10 -0
- package/dist/react-ui/blocks/BottomNavBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/index.js +4 -0
- package/dist/react-ui/blocks/BottomNavBar/types.d.ts +362 -0
- package/dist/react-ui/blocks/BottomNavBar/types.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/types.js +175 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.d.ts +73 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.d.ts.map +1 -0
- package/dist/react-ui/blocks/BottomNavBar/useIOSSafariFix.js +178 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.d.ts +285 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.constants.js +208 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.d.ts +80 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.js +114 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.d.ts +77 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.styles.js +274 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.d.ts +546 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/Sidebar.types.js +149 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.d.ts +46 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContent.js +86 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.d.ts +85 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarContext.js +178 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.d.ts +31 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarFluidIndicator.js +37 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.d.ts +59 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarIndicator.js +106 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.d.ts +82 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarItem.js +209 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.d.ts +48 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarNav.js +317 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.d.ts +56 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSafeArea.js +105 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.d.ts +27 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubContent.js +31 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.d.ts +20 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarSubLink.js +44 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.d.ts +52 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarToggle.js +119 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.d.ts +15 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/SidebarTooltip.js +177 -0
- package/dist/react-ui/blocks/Sidebar/animations/tooltip.css +330 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.d.ts +28 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/components/FluidHoverIndicator.js +74 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.d.ts +18 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/use-fluid-animation.js +166 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.d.ts +48 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarContext.js +59 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.d.ts +72 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.js +159 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.d.ts +51 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.js +150 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.d.ts +42 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/hooks/useSubContent.js +49 -0
- package/dist/react-ui/blocks/Sidebar/index.d.ts +163 -0
- package/dist/react-ui/blocks/Sidebar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Sidebar/index.js +19 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.d.ts +219 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/Terminal.tokens.js +253 -0
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts +2 -1
- package/dist/react-ui/blocks/Terminal/Terminal.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.js +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/TerminalDisplay.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/chrome.js +2 -2
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts +15 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.styles.js +14 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.types.d.ts +106 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/LogLineBadges.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.d.ts +89 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges/index.js +136 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts +21 -7
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.js +81 -71
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.d.ts +33 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/SyntaxHighlight.styles.js +51 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.styles.js +8 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/TerminalLogBadge.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.d.ts +26 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge/index.js +40 -0
- package/dist/react-ui/blocks/Terminal/components/index.js +5 -2
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.styles.js +13 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/TerminalActionBar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.d.ts +75 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalActionBar/index.js +115 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.d.ts +122 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalAtoms.js +128 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.styles.js +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/TerminalConnectionStatus.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.d.ts +37 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalConnectionStatus/index.js +74 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.styles.js +16 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/TerminalFontControls.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalFontControls/index.js +81 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.styles.js +13 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts +28 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/TerminalSplitButton.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalSplitButton/index.js +108 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.styles.js +12 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts +31 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/TerminalStatusBar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.d.ts +73 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/TerminalStatusBar/index.js +99 -0
- package/dist/react-ui/blocks/Terminal/controls/index.d.ts +16 -0
- package/dist/react-ui/blocks/Terminal/controls/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/controls/index.js +11 -0
- package/dist/react-ui/blocks/Terminal/display.d.ts +2 -2
- package/dist/react-ui/blocks/Terminal/display.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/display.js +4 -2
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts +9 -2
- package/dist/react-ui/blocks/Terminal/hooks/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/hooks/index.js +6 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.d.ts +198 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminal.js +198 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.d.ts +81 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalConnection.js +115 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.d.ts +54 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalDimensions.js +57 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.d.ts +81 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalFontSize.js +102 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.d.ts +78 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalKeyboardShortcuts.js +136 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.d.ts +88 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/hooks/useTerminalPaneManager.js +101 -0
- package/dist/react-ui/blocks/Terminal/index.d.ts +10 -6
- package/dist/react-ui/blocks/Terminal/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/index.js +43 -11
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/LogLinesViewer.js +8 -13
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.styles.js +18 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalDebugPanel.d.ts → TerminalDebugPanel/TerminalDebugPanel.types.d.ts} +19 -27
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/TerminalDebugPanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/index.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalDebugPanel.js → TerminalDebugPanel/index.js} +59 -38
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.styles.js +17 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/TerminalFilterDropdown.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/index.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalFilterDropdown.js → TerminalFilterDropdown/index.js} +29 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown/terminal-filter-dropdown.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/TerminalFilterTabs.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/index.d.ts +34 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.js +5 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts +2 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts +6 -3
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.js +43 -264
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.js +248 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts +4 -2
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.js +40 -150
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts +26 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.styles.js +30 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts +123 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/TerminalLogsPanel.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalLogsPanel.d.ts → TerminalLogsPanel/index.d.ts} +10 -21
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalLogsPanel.js → TerminalLogsPanel/index.js} +48 -81
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts +6 -142
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.js +16 -16
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.d.ts +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.js +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts +21 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.styles.js +21 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/TerminalPanelFooter.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.d.ts +37 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter/index.js +127 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts +22 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.styles.js +24 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts +43 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/TerminalPanelHeader.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.d.ts +35 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader/index.js +129 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts +72 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/TerminalPanelToolbar.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalPanelToolbar.d.ts → TerminalPanelToolbar/index.d.ts} +10 -4
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalSessionControl.d.ts → TerminalSessionControl/TerminalSessionControl.types.d.ts} +24 -30
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/TerminalSessionControl.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/index.d.ts +38 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts +23 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.styles.js +27 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts +56 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/TerminalSessionTabs.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/index.d.ts +40 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalSessionTabs.js → TerminalSessionTabs/index.js} +26 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.css +60 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs/terminal-session-tabs.module.js +5 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.styles.js +19 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/TerminalSettingsPopover.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts +25 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.js +217 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts +13 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.styles.js +15 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts +28 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/TerminalThemeSelector.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/index.d.ts +30 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/panel/{TerminalThemeSelector.js → TerminalThemeSelector/index.js} +31 -46
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.d.ts +38 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyContext.js +47 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.d.ts +50 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttySessionProvider.js +60 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.js +278 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.types.d.ts +166 -0
- package/dist/react-ui/blocks/Terminal/restty/ResttyTerminal.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/index.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/restty/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/index.js +7 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.d.ts +51 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPane.js +61 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.d.ts +39 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPanes.js +48 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.d.ts +29 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyPlugins.js +33 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.d.ts +32 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty/useResttyVisibility.js +67 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.d.ts +83 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/wterm/WtermJsonTransport.js +191 -0
- package/dist/react-ui/blocks/index.d.ts +2 -0
- package/dist/react-ui/blocks/index.d.ts.map +1 -1
- package/dist/react-ui/components/MorphingPopover/morphing-popover.module.css +154 -0
- package/dist/react-ui/icons/lucide-animated/terminal.d.ts +45 -13
- package/dist/react-ui/icons/lucide-animated/terminal.d.ts.map +1 -1
- package/dist/react-ui/icons/lucide-animated/terminal.js +118 -28
- package/dist/react-ui/index.d.ts +4 -0
- package/dist/react-ui/index.d.ts.map +1 -1
- package/dist/react-ui/index.js +40 -1
- package/dist/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module.css +20 -0
- package/dist/react-ui/ui/Button/Button.styles.d.ts +2 -2
- package/dist/react-ui/ui/Button/Button.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/Button/Button.styles.js +4 -2
- package/dist/react-ui/ui/Button/Button.types.d.ts +2 -2
- package/dist/react-ui/ui/Button/Button.types.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +369 -0
- package/dist/react-ui/ui/DynamicToggle/index.d.ts +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.js +1 -1
- package/dist/react-ui/ui/Tabs/Tabs.css +38 -0
- package/dist/react-ui/ui/Tabs/Tabs.js +0 -0
- package/dist/react-ui/ui/Tabs/index.d.ts +1 -1
- package/dist/react-ui/ui/Tabs/index.d.ts.map +1 -1
- package/dist/react-ui/ui/Tabs/index.js +2 -1
- package/package.json +21 -7
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.d.ts +0 -146
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/ResttyAdapter.js +0 -213
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts +0 -55
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/Terminal.adapter.js +0 -68
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts +0 -111
- package/dist/react-ui/blocks/Terminal/TerminalRestty.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/TerminalRestty.js +0 -185
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts +0 -160
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/components/LogLineBadges.js +0 -185
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts +0 -36
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/components/TerminalLogBadge.js +0 -52
- package/dist/react-ui/blocks/Terminal/panel/TerminalDebugPanel.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts +0 -42
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts +0 -43
- package/dist/react-ui/blocks/Terminal/panel/TerminalFilterTabs.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts +0 -30
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelFooter.js +0 -126
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts +0 -31
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelHeader.js +0 -149
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionControl.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts +0 -63
- package/dist/react-ui/blocks/Terminal/panel/TerminalSessionTabs.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts +0 -24
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.js +0 -225
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts +0 -35
- package/dist/react-ui/blocks/Terminal/panel/TerminalThemeSelector.d.ts.map +0 -1
- package/dist/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.js +0 -5
- package/dist/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.js +0 -5
- /package/dist/{react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module-p4Aks9qK.css → css/blocks-Terminal-panel-TerminalFilterDropdown-terminal-filter-dropdown.module.css} +0 -0
- /package/dist/{react-ui/blocks/Terminal/panel/terminal-session-tabs.module-D7g8zk0W.css → css/blocks-Terminal-panel-TerminalSessionTabs-terminal-session-tabs.module.css} +0 -0
- /package/dist/{react-ui/components/MorphingPopover/morphing-popover.module-s63snw7C.css → css/components-MorphingPopover-morphing-popover.module.css} +0 -0
- /package/dist/{react-ui/primitives/waapi/Morph/techniques/useViewTransitions.module-7y-To7On.css → css/primitives-waapi-Morph-techniques-useViewTransitions.module.css} +0 -0
- /package/dist/{react-ui/ui/DynamicToggle/DynamicToggle.module-BE6uirOX.css → css/ui-DynamicToggle-DynamicToggle.css} +0 -0
- /package/dist/{react-ui/ui/Tabs/Tabs.module-CFzRKHsx.css → css/ui-Tabs-Tabs.css} +0 -0
- /package/dist/react-ui/{ui/DynamicToggle/DynamicToggle.module.js → blocks/Sidebar/animations/tooltip-keyframes.js} +0 -0
- /package/dist/react-ui/ui/{Tabs/Tabs.module.js → DynamicToggle/DynamicToggle.js} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { useFluidAnimation } from "../hooks/use-fluid-animation.js";
|
|
3
|
+
import { useEffect, useRef } from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/react-ui/blocks/Sidebar/components/FluidHoverIndicator.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Fluid Hover Indicator Component
|
|
9
|
+
*
|
|
10
|
+
* A liquid drop-like hover indicator that uses spring physics
|
|
11
|
+
* and morphing to create organic, fluid motion between sidebar items.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Spring physics with anticipation, stretch, overshoot, and settle
|
|
15
|
+
* - Morphing (scale, skew) based on movement direction
|
|
16
|
+
* - Pure CSS + Web Animations API (no Framer Motion)
|
|
17
|
+
* - GPU-accelerated with will-change and transform
|
|
18
|
+
*/
|
|
19
|
+
function FluidHoverIndicator({ targetElement, isVisible, className = "", containerRef }) {
|
|
20
|
+
const indicatorRef = useRef(null);
|
|
21
|
+
const { animate, reset } = useFluidAnimation();
|
|
22
|
+
const isFirstRender = useRef(true);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!targetElement || !indicatorRef.current || !isVisible) {
|
|
25
|
+
if (!isVisible && indicatorRef.current) {
|
|
26
|
+
reset();
|
|
27
|
+
indicatorRef.current.style.opacity = "0";
|
|
28
|
+
isFirstRender.current = true;
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const targetRect = targetElement.getBoundingClientRect();
|
|
33
|
+
const parentRect = containerRef?.current?.getBoundingClientRect() || targetElement.parentElement?.getBoundingClientRect();
|
|
34
|
+
if (!parentRect) return;
|
|
35
|
+
const padding = 8;
|
|
36
|
+
const position = {
|
|
37
|
+
x: targetRect.left - parentRect.left + padding,
|
|
38
|
+
y: targetRect.top - parentRect.top + 4,
|
|
39
|
+
width: targetRect.width - padding - 4,
|
|
40
|
+
height: targetRect.height - 8
|
|
41
|
+
};
|
|
42
|
+
if (isFirstRender.current) {
|
|
43
|
+
indicatorRef.current.style.transform = `translate(${position.x}px, ${position.y}px)`;
|
|
44
|
+
indicatorRef.current.style.width = `${position.width}px`;
|
|
45
|
+
indicatorRef.current.style.height = `${position.height}px`;
|
|
46
|
+
indicatorRef.current.style.opacity = "1";
|
|
47
|
+
isFirstRender.current = false;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
animate(indicatorRef.current, position);
|
|
51
|
+
}, [
|
|
52
|
+
targetElement,
|
|
53
|
+
isVisible,
|
|
54
|
+
animate,
|
|
55
|
+
reset,
|
|
56
|
+
containerRef
|
|
57
|
+
]);
|
|
58
|
+
return /* @__PURE__ */ jsx("div", {
|
|
59
|
+
ref: indicatorRef,
|
|
60
|
+
className: cn("pointer-events-none absolute z-20", "rounded-xl", "bg-primary/30 backdrop-blur-md", "border-2 border-primary/80", "shadow-lg shadow-primary/40", "will-change-transform", isVisible ? "opacity-100" : "opacity-0", "transition-opacity duration-200", className),
|
|
61
|
+
style: {
|
|
62
|
+
contain: "layout style paint",
|
|
63
|
+
transform: "translate(0, 0) scale(1) skew(0deg)",
|
|
64
|
+
opacity: isVisible ? void 0 : 0
|
|
65
|
+
},
|
|
66
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
67
|
+
className: "absolute inset-0 rounded-xl bg-gradient-to-br from-primary/40 to-transparent opacity-80",
|
|
68
|
+
style: { pointerEvents: "none" }
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
export { FluidHoverIndicator };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Position interface
|
|
3
|
+
*/
|
|
4
|
+
interface Position {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Custom hook for fluid animation with spring physics
|
|
12
|
+
*/
|
|
13
|
+
export declare function useFluidAnimation(): {
|
|
14
|
+
animate: (element: HTMLElement, targetPosition: Position) => Animation;
|
|
15
|
+
reset: () => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=use-fluid-animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-fluid-animation.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Sidebar/hooks/use-fluid-animation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,QAAQ;IAChB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAyID;;GAEG;AACH,wBAAgB,iBAAiB;uBAQO,WAAW,kBAAkB,QAAQ;;EAiF5E"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { useCallback, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/react-ui/blocks/Sidebar/hooks/use-fluid-animation.ts
|
|
4
|
+
/**
|
|
5
|
+
* Spring easing function with damping
|
|
6
|
+
* Simulates spring physics for smooth, bouncy motion
|
|
7
|
+
*/
|
|
8
|
+
const createSpringEasing = (damping = .7, stiffness = .3) => {
|
|
9
|
+
return `cubic-bezier(0.34, ${1 + stiffness}, ${damping}, 1)`;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Calculate direction and distance between two positions
|
|
13
|
+
*/
|
|
14
|
+
const calculateMovement = (from, to) => {
|
|
15
|
+
const dx = to.x - from.x;
|
|
16
|
+
const dy = to.y - from.y;
|
|
17
|
+
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
18
|
+
let direction = "horizontal";
|
|
19
|
+
if (Math.abs(dy) > Math.abs(dx) * 1.5) direction = "vertical";
|
|
20
|
+
else if (Math.abs(dx) > Math.abs(dy) * 1.5) direction = "horizontal";
|
|
21
|
+
else direction = "diagonal";
|
|
22
|
+
const angle = Math.atan2(dy, dx) * (180 / Math.PI);
|
|
23
|
+
return {
|
|
24
|
+
dx,
|
|
25
|
+
dy,
|
|
26
|
+
distance,
|
|
27
|
+
direction,
|
|
28
|
+
angle
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Generate morphing keyframes based on direction
|
|
33
|
+
*/
|
|
34
|
+
const generateMorphingKeyframes = (from, to, direction, angle) => {
|
|
35
|
+
const fromTransform = `translate(${from.x}px, ${from.y}px) scale(1) skew(0deg)`;
|
|
36
|
+
const toTransform = `translate(${to.x}px, ${to.y}px) scale(1) skew(0deg)`;
|
|
37
|
+
let stretchScale = "1.15, 0.95";
|
|
38
|
+
let overshootScale = "1.05, 1.03";
|
|
39
|
+
let skewValue = "5deg";
|
|
40
|
+
if (direction === "vertical") {
|
|
41
|
+
stretchScale = "0.95, 1.15";
|
|
42
|
+
skewValue = "-5deg";
|
|
43
|
+
} else if (direction === "diagonal") {
|
|
44
|
+
stretchScale = "1.1, 1.1";
|
|
45
|
+
skewValue = `${angle * .1}deg`;
|
|
46
|
+
}
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
transform: fromTransform,
|
|
50
|
+
opacity: "0.95",
|
|
51
|
+
offset: 0
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
transform: `translate(${from.x}px, ${from.y}px) scale(0.95) skew(0deg)`,
|
|
55
|
+
opacity: "0.98",
|
|
56
|
+
offset: .15
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
transform: `translate(${(from.x + to.x) / 2}px, ${(from.y + to.y) / 2}px) scale(${stretchScale}) skew(${skewValue})`,
|
|
60
|
+
opacity: "1",
|
|
61
|
+
offset: .45
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
transform: `translate(${to.x + (to.x - from.x) * .1}px, ${to.y + (to.y - from.y) * .1}px) scale(${overshootScale}) skew(${direction === "horizontal" ? "-2deg" : "2deg"})`,
|
|
65
|
+
opacity: "1",
|
|
66
|
+
offset: .75
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
transform: toTransform,
|
|
70
|
+
opacity: "0.95",
|
|
71
|
+
offset: 1
|
|
72
|
+
}
|
|
73
|
+
];
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Extract current position from element's computed transform
|
|
77
|
+
*/
|
|
78
|
+
const getCurrentPosition = (element) => {
|
|
79
|
+
const transform = getComputedStyle(element).transform;
|
|
80
|
+
if (transform === "none") return {
|
|
81
|
+
x: 0,
|
|
82
|
+
y: 0
|
|
83
|
+
};
|
|
84
|
+
const matrix = new DOMMatrix(transform);
|
|
85
|
+
return {
|
|
86
|
+
x: matrix.m41,
|
|
87
|
+
y: matrix.m42
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Generate fast mode keyframes (simple, direct movement)
|
|
92
|
+
*/
|
|
93
|
+
const generateFastKeyframes = (from, to) => {
|
|
94
|
+
return [{
|
|
95
|
+
transform: `translate(${from.x}px, ${from.y}px)`,
|
|
96
|
+
width: `${from.width}px`,
|
|
97
|
+
height: `${from.height}px`,
|
|
98
|
+
offset: 0
|
|
99
|
+
}, {
|
|
100
|
+
transform: `translate(${to.x}px, ${to.y}px)`,
|
|
101
|
+
width: `${to.width}px`,
|
|
102
|
+
height: `${to.height}px`,
|
|
103
|
+
offset: 1
|
|
104
|
+
}];
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Custom hook for fluid animation with spring physics
|
|
108
|
+
*/
|
|
109
|
+
function useFluidAnimation() {
|
|
110
|
+
const previousPositionRef = useRef(null);
|
|
111
|
+
const animationRef = useRef(null);
|
|
112
|
+
const lastChangeTimestampRef = useRef(0);
|
|
113
|
+
return {
|
|
114
|
+
animate: useCallback((element, targetPosition) => {
|
|
115
|
+
const now = Date.now();
|
|
116
|
+
const isFastMode = now - lastChangeTimestampRef.current < 200 && lastChangeTimestampRef.current > 0;
|
|
117
|
+
lastChangeTimestampRef.current = now;
|
|
118
|
+
let from;
|
|
119
|
+
if (animationRef.current) {
|
|
120
|
+
const currentPos = getCurrentPosition(element);
|
|
121
|
+
from = {
|
|
122
|
+
x: currentPos.x,
|
|
123
|
+
y: currentPos.y,
|
|
124
|
+
width: previousPositionRef.current?.width || targetPosition.width,
|
|
125
|
+
height: previousPositionRef.current?.height || targetPosition.height
|
|
126
|
+
};
|
|
127
|
+
animationRef.current.cancel();
|
|
128
|
+
} else from = previousPositionRef.current || targetPosition;
|
|
129
|
+
const to = targetPosition;
|
|
130
|
+
const { direction, angle, distance } = calculateMovement(from, to);
|
|
131
|
+
let keyframes;
|
|
132
|
+
let duration;
|
|
133
|
+
let easing;
|
|
134
|
+
if (isFastMode) {
|
|
135
|
+
keyframes = generateFastKeyframes(from, to);
|
|
136
|
+
duration = Math.min(150, Math.max(100, distance * .5));
|
|
137
|
+
easing = "cubic-bezier(0.25, 0.1, 0.25, 1)";
|
|
138
|
+
} else {
|
|
139
|
+
keyframes = generateMorphingKeyframes(from, to, direction, angle);
|
|
140
|
+
duration = Math.min(450, Math.max(350, distance * 2));
|
|
141
|
+
easing = createSpringEasing(.65, .4);
|
|
142
|
+
}
|
|
143
|
+
const animation = element.animate(keyframes, {
|
|
144
|
+
duration,
|
|
145
|
+
easing,
|
|
146
|
+
fill: "forwards"
|
|
147
|
+
});
|
|
148
|
+
animationRef.current = animation;
|
|
149
|
+
animation.onfinish = () => {
|
|
150
|
+
previousPositionRef.current = to;
|
|
151
|
+
};
|
|
152
|
+
return animation;
|
|
153
|
+
}, []),
|
|
154
|
+
reset: useCallback(() => {
|
|
155
|
+
if (animationRef.current) {
|
|
156
|
+
animationRef.current.cancel();
|
|
157
|
+
animationRef.current = null;
|
|
158
|
+
}
|
|
159
|
+
previousPositionRef.current = null;
|
|
160
|
+
lastChangeTimestampRef.current = 0;
|
|
161
|
+
}, [])
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
//#endregion
|
|
166
|
+
export { useFluidAnimation };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { SidebarContextValue } from "../Sidebar.types";
|
|
2
|
+
/**
|
|
3
|
+
* Hook para acceder al contexto del Sidebar
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Hook personalizado que provee acceso al contexto compartido del Sidebar.
|
|
7
|
+
* Debe ser utilizado dentro de un componente que esté envuelto por
|
|
8
|
+
* `<Sidebar>` o `<SidebarProvider>`.
|
|
9
|
+
*
|
|
10
|
+
* Lanza un error si se utiliza fuera del contexto apropiado, ayudando
|
|
11
|
+
* a detectar problemas de composición durante el desarrollo.
|
|
12
|
+
*
|
|
13
|
+
* @throws {Error} Si se usa fuera de un SidebarProvider
|
|
14
|
+
*
|
|
15
|
+
* @returns {SidebarContextValue} El valor del contexto del sidebar
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* function CustomToggle() {
|
|
20
|
+
* const { open, setOpen } = useSidebarContext()
|
|
21
|
+
*
|
|
22
|
+
* return (
|
|
23
|
+
* <button onClick={() => setOpen(!open)}>
|
|
24
|
+
* {open ? 'Cerrar' : 'Abrir'}
|
|
25
|
+
* </button>
|
|
26
|
+
* )
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* // Acceder a configuración
|
|
33
|
+
* function CustomItem() {
|
|
34
|
+
* const { colors, dimensions } = useSidebarContext()
|
|
35
|
+
*
|
|
36
|
+
* return (
|
|
37
|
+
* <div style={{
|
|
38
|
+
* background: colors.hover,
|
|
39
|
+
* width: dimensions.expandedWidth
|
|
40
|
+
* }}>
|
|
41
|
+
* Item
|
|
42
|
+
* </div>
|
|
43
|
+
* )
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function useSidebarContext(): SidebarContextValue;
|
|
48
|
+
//# sourceMappingURL=useSidebarContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSidebarContext.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Sidebar/hooks/useSidebarContext.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,iBAAiB,IAAI,mBAAmB,CAWvD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { SidebarContext } from "../SidebarContext.js";
|
|
4
|
+
import { useContext } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/react-ui/blocks/Sidebar/hooks/useSidebarContext.ts
|
|
7
|
+
/**
|
|
8
|
+
* Hook para acceder al contexto del Sidebar
|
|
9
|
+
*
|
|
10
|
+
* @description
|
|
11
|
+
* Hook personalizado que provee acceso al contexto compartido del Sidebar.
|
|
12
|
+
* Debe ser utilizado dentro de un componente que esté envuelto por
|
|
13
|
+
* `<Sidebar>` o `<SidebarProvider>`.
|
|
14
|
+
*
|
|
15
|
+
* Lanza un error si se utiliza fuera del contexto apropiado, ayudando
|
|
16
|
+
* a detectar problemas de composición durante el desarrollo.
|
|
17
|
+
*
|
|
18
|
+
* @throws {Error} Si se usa fuera de un SidebarProvider
|
|
19
|
+
*
|
|
20
|
+
* @returns {SidebarContextValue} El valor del contexto del sidebar
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* function CustomToggle() {
|
|
25
|
+
* const { open, setOpen } = useSidebarContext()
|
|
26
|
+
*
|
|
27
|
+
* return (
|
|
28
|
+
* <button onClick={() => setOpen(!open)}>
|
|
29
|
+
* {open ? 'Cerrar' : 'Abrir'}
|
|
30
|
+
* </button>
|
|
31
|
+
* )
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```tsx
|
|
37
|
+
* // Acceder a configuración
|
|
38
|
+
* function CustomItem() {
|
|
39
|
+
* const { colors, dimensions } = useSidebarContext()
|
|
40
|
+
*
|
|
41
|
+
* return (
|
|
42
|
+
* <div style={{
|
|
43
|
+
* background: colors.hover,
|
|
44
|
+
* width: dimensions.expandedWidth
|
|
45
|
+
* }}>
|
|
46
|
+
* Item
|
|
47
|
+
* </div>
|
|
48
|
+
* )
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
function useSidebarContext() {
|
|
53
|
+
const context = useContext(SidebarContext);
|
|
54
|
+
if (!context) throw new Error("useSidebarContext debe ser utilizado dentro de un componente <Sidebar> o <SidebarProvider>. Asegúrate de que tu componente esté envuelto correctamente en la jerarquía del Sidebar.");
|
|
55
|
+
return context;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { useSidebarContext };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { MouseEvent } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Valor de retorno del hook useSidebarIndicator
|
|
4
|
+
* @interface
|
|
5
|
+
*/
|
|
6
|
+
interface UseSidebarIndicatorReturn {
|
|
7
|
+
/** Indica si el indicador está visible */
|
|
8
|
+
isVisible: boolean;
|
|
9
|
+
/** Indica si el mouse está sobre el área de items */
|
|
10
|
+
isOverItems: boolean;
|
|
11
|
+
/** Elemento del item actualmente hovered o enfocado (para FluidHoverIndicator) */
|
|
12
|
+
currentItemElement: HTMLElement | null;
|
|
13
|
+
/** ID del item bajo el indicador (para tooltip con subContent) */
|
|
14
|
+
hoveredItemId: string | null;
|
|
15
|
+
/** Label del item hovered (para tooltip simple) */
|
|
16
|
+
hoveredLabel: string | null;
|
|
17
|
+
/** Manejador de evento mousemove */
|
|
18
|
+
handleMouseMove: (e: MouseEvent<HTMLDivElement>) => void;
|
|
19
|
+
/** Manejador de evento mouseenter */
|
|
20
|
+
handleMouseEnter: () => void;
|
|
21
|
+
/** Manejador de evento mouseleave */
|
|
22
|
+
handleMouseLeave: () => void;
|
|
23
|
+
/** Manejador de evento focus */
|
|
24
|
+
handleFocus: () => void;
|
|
25
|
+
/** Manejador de evento blur */
|
|
26
|
+
handleBlur: (e: React.FocusEvent) => void;
|
|
27
|
+
/** Función para limpiar el estado hovered desde fuera (tooltip mouseleave) */
|
|
28
|
+
clearHoveredState: () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Hook para gestionar el indicador visual del Sidebar
|
|
32
|
+
*
|
|
33
|
+
* @description
|
|
34
|
+
* Hook que implementa la lógica del indicador visual que sigue al cursor
|
|
35
|
+
* del mouse dentro del sidebar. El indicador se muestra cuando:
|
|
36
|
+
* - El mouse está sobre el sidebar (isHovering = true)
|
|
37
|
+
* - El cursor está en el área de items (isOverItems = true)
|
|
38
|
+
*
|
|
39
|
+
* Utiliza requestAnimationFrame para optimizar el rendimiento y evitar
|
|
40
|
+
* cálculos excesivos durante el movimiento del mouse.
|
|
41
|
+
*
|
|
42
|
+
* El indicador también se actualiza cuando se navega por teclado,
|
|
43
|
+
* integrándose con useSidebarKeyboard.
|
|
44
|
+
*
|
|
45
|
+
* @returns {UseSidebarIndicatorReturn} Estado y manejadores de eventos
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* function SidebarNav() {
|
|
50
|
+
* const {
|
|
51
|
+
* isVisible,
|
|
52
|
+
* handleMouseMove,
|
|
53
|
+
* handleMouseEnter,
|
|
54
|
+
* handleMouseLeave
|
|
55
|
+
* } = useSidebarIndicator()
|
|
56
|
+
*
|
|
57
|
+
* return (
|
|
58
|
+
* <nav
|
|
59
|
+
* onMouseMove={handleMouseMove}
|
|
60
|
+
* onMouseEnter={handleMouseEnter}
|
|
61
|
+
* onMouseLeave={handleMouseLeave}
|
|
62
|
+
* >
|
|
63
|
+
* <SidebarIndicator visible={isVisible} />
|
|
64
|
+
* {children}
|
|
65
|
+
* </nav>
|
|
66
|
+
* )
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function useSidebarIndicator(): UseSidebarIndicatorReturn;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=useSidebarIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSidebarIndicator.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGvC;;;GAGG;AACH,UAAU,yBAAyB;IACjC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAA;IAClB,qDAAqD;IACrD,WAAW,EAAE,OAAO,CAAA;IACpB,kFAAkF;IAClF,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAA;IACtC,kEAAkE;IAClE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,mDAAmD;IACnD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,oCAAoC;IACpC,eAAe,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IACxD,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,qCAAqC;IACrC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,gCAAgC;IAChC,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,+BAA+B;IAC/B,UAAU,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IACzC,8EAA8E;IAC9E,iBAAiB,EAAE,MAAM,IAAI,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,mBAAmB,IAAI,yBAAyB,CA2K/D"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useSidebarContext } from "./useSidebarContext.js";
|
|
4
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/react-ui/blocks/Sidebar/hooks/useSidebarIndicator.ts
|
|
7
|
+
/**
|
|
8
|
+
* Hook para gestionar el indicador visual del Sidebar
|
|
9
|
+
*
|
|
10
|
+
* @description
|
|
11
|
+
* Hook que implementa la lógica del indicador visual que sigue al cursor
|
|
12
|
+
* del mouse dentro del sidebar. El indicador se muestra cuando:
|
|
13
|
+
* - El mouse está sobre el sidebar (isHovering = true)
|
|
14
|
+
* - El cursor está en el área de items (isOverItems = true)
|
|
15
|
+
*
|
|
16
|
+
* Utiliza requestAnimationFrame para optimizar el rendimiento y evitar
|
|
17
|
+
* cálculos excesivos durante el movimiento del mouse.
|
|
18
|
+
*
|
|
19
|
+
* El indicador también se actualiza cuando se navega por teclado,
|
|
20
|
+
* integrándose con useSidebarKeyboard.
|
|
21
|
+
*
|
|
22
|
+
* @returns {UseSidebarIndicatorReturn} Estado y manejadores de eventos
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* function SidebarNav() {
|
|
27
|
+
* const {
|
|
28
|
+
* isVisible,
|
|
29
|
+
* handleMouseMove,
|
|
30
|
+
* handleMouseEnter,
|
|
31
|
+
* handleMouseLeave
|
|
32
|
+
* } = useSidebarIndicator()
|
|
33
|
+
*
|
|
34
|
+
* return (
|
|
35
|
+
* <nav
|
|
36
|
+
* onMouseMove={handleMouseMove}
|
|
37
|
+
* onMouseEnter={handleMouseEnter}
|
|
38
|
+
* onMouseLeave={handleMouseLeave}
|
|
39
|
+
* >
|
|
40
|
+
* <SidebarIndicator visible={isVisible} />
|
|
41
|
+
* {children}
|
|
42
|
+
* </nav>
|
|
43
|
+
* )
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function useSidebarIndicator() {
|
|
48
|
+
const { indicatorRef, navRef, contentRef, showIndicatorForKeyboard, setShowIndicatorForKeyboard, isOverItems, setIsOverItems, currentItemElement, setCurrentItemElement } = useSidebarContext();
|
|
49
|
+
const [isHovering, setIsHovering] = useState(false);
|
|
50
|
+
const [refsReady, setRefsReady] = useState(false);
|
|
51
|
+
const [hoveredItemId, setHoveredItemId] = useState(null);
|
|
52
|
+
const [hoveredLabel, setHoveredLabel] = useState(null);
|
|
53
|
+
const rafRef = useRef(null);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (indicatorRef.current && navRef.current && contentRef.current) setRefsReady(true);
|
|
56
|
+
}, [
|
|
57
|
+
indicatorRef,
|
|
58
|
+
navRef,
|
|
59
|
+
contentRef
|
|
60
|
+
]);
|
|
61
|
+
/**
|
|
62
|
+
* Manejador de mousemove con optimización via requestAnimationFrame
|
|
63
|
+
*
|
|
64
|
+
* @param {MouseEvent<HTMLDivElement>} e - Evento de mouse
|
|
65
|
+
*/
|
|
66
|
+
const handleMouseMove = useCallback((e) => {
|
|
67
|
+
if (!indicatorRef.current || !navRef.current || !contentRef.current) return;
|
|
68
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
69
|
+
rafRef.current = requestAnimationFrame(() => {
|
|
70
|
+
if (!indicatorRef.current || !navRef.current || !contentRef.current) return;
|
|
71
|
+
const navRect = navRef.current.getBoundingClientRect();
|
|
72
|
+
const contentRect = contentRef.current.getBoundingClientRect();
|
|
73
|
+
const y = e.clientY - navRect.top;
|
|
74
|
+
const minY = contentRect.top - navRect.top;
|
|
75
|
+
const maxY = contentRect.bottom - navRect.top;
|
|
76
|
+
const clampedY = Math.max(minY, Math.min(maxY, y));
|
|
77
|
+
indicatorRef.current.style.top = `${clampedY}px`;
|
|
78
|
+
setIsOverItems(e.clientY >= contentRect.top && e.clientY <= contentRect.bottom);
|
|
79
|
+
const itemElement = document.elementFromPoint(e.clientX, e.clientY)?.closest("[data-sidebar-item]");
|
|
80
|
+
if (itemElement) {
|
|
81
|
+
setCurrentItemElement(itemElement);
|
|
82
|
+
setHoveredLabel(itemElement.getAttribute("aria-label") || itemElement.getAttribute("title") || null);
|
|
83
|
+
setHoveredItemId(itemElement.getAttribute("data-item-id") || null);
|
|
84
|
+
} else {
|
|
85
|
+
setCurrentItemElement(null);
|
|
86
|
+
setHoveredItemId(null);
|
|
87
|
+
setHoveredLabel(null);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}, [
|
|
91
|
+
indicatorRef,
|
|
92
|
+
navRef,
|
|
93
|
+
contentRef
|
|
94
|
+
]);
|
|
95
|
+
/**
|
|
96
|
+
* Manejador de mouseenter
|
|
97
|
+
*/
|
|
98
|
+
const handleMouseEnter = useCallback(() => {
|
|
99
|
+
setIsHovering(true);
|
|
100
|
+
}, []);
|
|
101
|
+
/**
|
|
102
|
+
* Manejador de mouseleave
|
|
103
|
+
*/
|
|
104
|
+
const handleMouseLeave = useCallback(() => {
|
|
105
|
+
setIsHovering(false);
|
|
106
|
+
setIsOverItems(false);
|
|
107
|
+
setShowIndicatorForKeyboard(false);
|
|
108
|
+
setCurrentItemElement(null);
|
|
109
|
+
setHoveredLabel(null);
|
|
110
|
+
if (rafRef.current) cancelAnimationFrame(rafRef.current);
|
|
111
|
+
}, [setShowIndicatorForKeyboard, setIsOverItems]);
|
|
112
|
+
/**
|
|
113
|
+
* Manejador de focus (cuando se enfoca un elemento dentro del sidebar)
|
|
114
|
+
*/
|
|
115
|
+
const handleFocus = useCallback(() => {
|
|
116
|
+
setIsHovering(true);
|
|
117
|
+
setIsOverItems(true);
|
|
118
|
+
}, [setIsOverItems]);
|
|
119
|
+
/**
|
|
120
|
+
* Manejador de blur (cuando se pierde el focus)
|
|
121
|
+
*
|
|
122
|
+
* @param {React.FocusEvent} e - Evento de blur
|
|
123
|
+
*/
|
|
124
|
+
const handleBlur = useCallback((e) => {
|
|
125
|
+
if (!navRef.current?.contains(e.relatedTarget)) {
|
|
126
|
+
setIsHovering(false);
|
|
127
|
+
setIsOverItems(false);
|
|
128
|
+
setShowIndicatorForKeyboard(false);
|
|
129
|
+
}
|
|
130
|
+
}, [
|
|
131
|
+
navRef,
|
|
132
|
+
setShowIndicatorForKeyboard,
|
|
133
|
+
setIsOverItems
|
|
134
|
+
]);
|
|
135
|
+
/**
|
|
136
|
+
* Limpia el estado hovered (para cuando el mouse sale del tooltip)
|
|
137
|
+
*/
|
|
138
|
+
const clearHoveredState = useCallback(() => {
|
|
139
|
+
setHoveredLabel(null);
|
|
140
|
+
setHoveredItemId(null);
|
|
141
|
+
setCurrentItemElement(null);
|
|
142
|
+
}, []);
|
|
143
|
+
return {
|
|
144
|
+
isVisible: refsReady && (isHovering && isOverItems || showIndicatorForKeyboard),
|
|
145
|
+
isOverItems,
|
|
146
|
+
currentItemElement,
|
|
147
|
+
hoveredItemId,
|
|
148
|
+
hoveredLabel,
|
|
149
|
+
handleMouseMove,
|
|
150
|
+
handleMouseEnter,
|
|
151
|
+
handleMouseLeave,
|
|
152
|
+
handleFocus,
|
|
153
|
+
handleBlur,
|
|
154
|
+
clearHoveredState
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
//#endregion
|
|
159
|
+
export { useSidebarIndicator };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valor de retorno del hook useSidebarKeyboard
|
|
3
|
+
* @interface
|
|
4
|
+
*/
|
|
5
|
+
interface UseSidebarKeyboardReturn {
|
|
6
|
+
/** Índice del item actualmente enfocado (-1 si ninguno) */
|
|
7
|
+
focusedIndex: number;
|
|
8
|
+
/** Función para cambiar el índice enfocado manualmente */
|
|
9
|
+
setFocusedIndex: (index: number) => void;
|
|
10
|
+
/** Callback para actualizar el indicador según el item enfocado */
|
|
11
|
+
updateIndicatorForFocus: (index: number) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Hook para gestionar la navegación por teclado en el Sidebar
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* Hook que implementa navegación accesible por teclado para los items
|
|
18
|
+
* del sidebar, siguiendo las especificaciones WAI-ARIA:
|
|
19
|
+
*
|
|
20
|
+
* - ArrowDown: Navegar al siguiente item
|
|
21
|
+
* - ArrowUp: Navegar al item anterior
|
|
22
|
+
* - Home: Ir al primer item
|
|
23
|
+
* - End: Ir al último item
|
|
24
|
+
* - Tab: Navegación estándar que actualiza el indicador
|
|
25
|
+
*
|
|
26
|
+
* También sincroniza el indicador visual con el item enfocado.
|
|
27
|
+
*
|
|
28
|
+
* @returns {UseSidebarKeyboardReturn} Estado y funciones para navegación
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* function SidebarNav() {
|
|
33
|
+
* const { focusedIndex, updateIndicatorForFocus } = useSidebarKeyboard()
|
|
34
|
+
*
|
|
35
|
+
* return (
|
|
36
|
+
* <nav>
|
|
37
|
+
* {items.map((item, index) => (
|
|
38
|
+
* <SidebarItem
|
|
39
|
+
* key={item.id}
|
|
40
|
+
* focused={index === focusedIndex}
|
|
41
|
+
* onFocus={() => updateIndicatorForFocus(index)}
|
|
42
|
+
* />
|
|
43
|
+
* ))}
|
|
44
|
+
* </nav>
|
|
45
|
+
* )
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function useSidebarKeyboard(): UseSidebarKeyboardReturn;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=useSidebarKeyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSidebarKeyboard.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Sidebar/hooks/useSidebarKeyboard.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,UAAU,wBAAwB;IAChC,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mEAAmE;IACnE,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CA+I7D"}
|