@hua-labs/ui 1.0.0 → 1.1.0-alpha.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +897 -210
- package/dist/ComponentLayout-BxCenSAm.d.mts +73 -0
- package/dist/advanced/dashboard.d.ts +7 -0
- package/dist/advanced/dashboard.d.ts.map +1 -0
- package/dist/advanced/motion.d.ts +2 -0
- package/dist/advanced/motion.d.ts.map +1 -0
- package/dist/advanced-dashboard.d.mts +4 -0
- package/dist/advanced-dashboard.js +2 -0
- package/dist/advanced-dashboard.js.map +1 -0
- package/dist/advanced-dashboard.mjs +2 -0
- package/dist/advanced-dashboard.mjs.map +1 -0
- package/dist/advanced-motion.d.mts +93 -0
- package/dist/advanced-motion.js +2 -0
- package/dist/advanced-motion.js.map +1 -0
- package/dist/advanced-motion.mjs +2 -0
- package/dist/advanced-motion.mjs.map +1 -0
- package/dist/advanced.d.mts +734 -0
- package/dist/advanced.d.ts +17 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +2 -0
- package/dist/advanced.js.map +1 -0
- package/dist/advanced.mjs +2 -0
- package/dist/advanced.mjs.map +1 -0
- package/dist/chunk-627HOIRV.mjs +2 -0
- package/dist/chunk-627HOIRV.mjs.map +1 -0
- package/dist/chunk-ACEKLG37.mjs +2 -0
- package/dist/chunk-ACEKLG37.mjs.map +1 -0
- package/dist/chunk-E5PN4LUS.mjs +2 -0
- package/dist/chunk-E5PN4LUS.mjs.map +1 -0
- package/dist/chunk-KHEJZ3U4.mjs +2 -0
- package/dist/chunk-KHEJZ3U4.mjs.map +1 -0
- package/dist/chunk-MXGXBG63.mjs +2 -0
- package/dist/chunk-MXGXBG63.mjs.map +1 -0
- package/dist/chunk-R5KCFRYV.mjs +2 -0
- package/dist/chunk-R5KCFRYV.mjs.map +1 -0
- package/dist/chunk-UGSYQDR4.mjs +2 -0
- package/dist/chunk-UGSYQDR4.mjs.map +1 -0
- package/dist/chunk-UUHAXGMO.mjs +2 -0
- package/dist/chunk-UUHAXGMO.mjs.map +1 -0
- package/dist/chunk-VU264VFN.mjs +2 -0
- package/dist/chunk-VU264VFN.mjs.map +1 -0
- package/dist/chunk-ZFS4B5QT.mjs +2 -0
- package/dist/chunk-ZFS4B5QT.mjs.map +1 -0
- package/dist/components/Accordion.d.ts +109 -1
- package/dist/components/Accordion.d.ts.map +1 -1
- package/dist/components/Action.d.ts +68 -0
- package/dist/components/Action.d.ts.map +1 -0
- package/dist/components/ActionToolbar.d.ts +65 -0
- package/dist/components/ActionToolbar.d.ts.map +1 -0
- package/dist/components/Alert.d.ts +49 -0
- package/dist/components/Alert.d.ts.map +1 -1
- package/dist/components/Autocomplete.d.ts +88 -0
- package/dist/components/Autocomplete.d.ts.map +1 -0
- package/dist/components/Avatar.d.ts +71 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Badge.d.ts +32 -2
- package/dist/components/Badge.d.ts.map +1 -1
- package/dist/components/Bookmark.d.ts +49 -0
- package/dist/components/Bookmark.d.ts.map +1 -0
- package/dist/components/BottomSheet.d.ts +91 -1
- package/dist/components/BottomSheet.d.ts.map +1 -1
- package/dist/components/Breadcrumb.d.ts +73 -14
- package/dist/components/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Button.d.ts +82 -7
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Card.d.ts +122 -5
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/ChatMessage.d.ts +67 -1
- package/dist/components/ChatMessage.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +48 -2
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Command.d.ts +82 -1
- package/dist/components/Command.d.ts.map +1 -1
- package/dist/components/ComponentLayout.d.ts +72 -0
- package/dist/components/ComponentLayout.d.ts.map +1 -0
- package/dist/components/ConfirmModal.d.ts +66 -1
- package/dist/components/ConfirmModal.d.ts.map +1 -1
- package/dist/components/Container.d.ts +39 -0
- package/dist/components/Container.d.ts.map +1 -1
- package/dist/components/ContextMenu.d.ts +51 -1
- package/dist/components/ContextMenu.d.ts.map +1 -1
- package/dist/components/DatePicker.d.ts +62 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/Divider.d.ts +13 -3
- package/dist/components/Divider.d.ts.map +1 -1
- package/dist/components/Drawer.d.ts +103 -1
- package/dist/components/Drawer.d.ts.map +1 -1
- package/dist/components/Dropdown.d.ts +51 -1
- package/dist/components/Dropdown.d.ts.map +1 -1
- package/dist/components/EmotionAnalysis.d.ts +59 -1
- package/dist/components/EmotionAnalysis.d.ts.map +1 -1
- package/dist/components/EmotionButton.d.ts +35 -1
- package/dist/components/EmotionButton.d.ts.map +1 -1
- package/dist/components/EmotionMeter.d.ts +38 -2
- package/dist/components/EmotionMeter.d.ts.map +1 -1
- package/dist/components/EmotionSelector.d.ts +51 -1
- package/dist/components/EmotionSelector.d.ts.map +1 -1
- package/dist/components/FeatureCard.d.ts +61 -0
- package/dist/components/FeatureCard.d.ts.map +1 -0
- package/dist/components/Form.d.ts +114 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/Grid.d.ts +42 -1
- package/dist/components/Grid.d.ts.map +1 -1
- package/dist/components/HeroSection.d.ts +77 -0
- package/dist/components/HeroSection.d.ts.map +1 -0
- package/dist/components/Icon/Icon.d.ts +159 -0
- package/dist/components/Icon/Icon.d.ts.map +1 -0
- package/dist/components/Icon/IconProvider.d.ts +94 -0
- package/dist/components/Icon/IconProvider.d.ts.map +1 -0
- package/dist/components/Icon/icon-store.d.ts +21 -0
- package/dist/components/Icon/icon-store.d.ts.map +1 -0
- package/dist/components/Icon/index.d.ts +10 -0
- package/dist/components/Icon/index.d.ts.map +1 -0
- package/dist/components/InfoCard.d.ts +48 -0
- package/dist/components/InfoCard.d.ts.map +1 -0
- package/dist/components/Input.d.ts +40 -8
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +50 -0
- package/dist/components/Label.d.ts.map +1 -0
- package/dist/components/LanguageToggle.d.ts +41 -1
- package/dist/components/LanguageToggle.d.ts.map +1 -1
- package/dist/components/Link.d.ts +52 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/LoadingSpinner.d.ts +44 -5
- package/dist/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/Menu.d.ts +92 -1
- package/dist/components/Menu.d.ts.map +1 -1
- package/dist/components/Modal.d.ts +67 -5
- package/dist/components/Modal.d.ts.map +1 -1
- package/dist/components/Navigation.d.ts +72 -0
- package/dist/components/Navigation.d.ts.map +1 -0
- package/dist/components/PageNavigation.d.ts +48 -0
- package/dist/components/PageNavigation.d.ts.map +1 -0
- package/dist/components/PageTransition.d.ts +44 -1
- package/dist/components/PageTransition.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +52 -1
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Panel.d.ts +99 -0
- package/dist/components/Panel.d.ts.map +1 -0
- package/dist/components/Popover.d.ts +46 -1
- package/dist/components/Popover.d.ts.map +1 -1
- package/dist/components/Progress.d.ts +52 -3
- package/dist/components/Progress.d.ts.map +1 -1
- package/dist/components/Radio.d.ts +44 -2
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/ScrollArea.d.ts +53 -1
- package/dist/components/ScrollArea.d.ts.map +1 -1
- package/dist/components/ScrollIndicator.d.ts +43 -1
- package/dist/components/ScrollIndicator.d.ts.map +1 -1
- package/dist/components/ScrollProgress.d.ts +37 -0
- package/dist/components/ScrollProgress.d.ts.map +1 -1
- package/dist/components/ScrollToTop.d.ts +48 -11
- package/dist/components/ScrollToTop.d.ts.map +1 -1
- package/dist/components/SectionHeader.d.ts +42 -0
- package/dist/components/SectionHeader.d.ts.map +1 -0
- package/dist/components/Select.d.ts +59 -2
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Skeleton.d.ts +44 -1
- package/dist/components/Skeleton.d.ts.map +1 -1
- package/dist/components/Slider.d.ts +75 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Stack.d.ts +42 -1
- package/dist/components/Stack.d.ts.map +1 -1
- package/dist/components/StatsPanel.d.ts +72 -0
- package/dist/components/StatsPanel.d.ts.map +1 -0
- package/dist/components/Switch.d.ts +48 -2
- package/dist/components/Switch.d.ts.map +1 -1
- package/dist/components/Table.d.ts +206 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Tabs.d.ts +123 -10
- package/dist/components/Tabs.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts +48 -2
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/ThemeProvider.d.ts +67 -2
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeToggle.d.ts +44 -0
- package/dist/components/ThemeToggle.d.ts.map +1 -1
- package/dist/components/Toast.d.ts +75 -1
- package/dist/components/Toast.d.ts.map +1 -1
- package/dist/components/Toggle.d.ts +62 -0
- package/dist/components/Toggle.d.ts.map +1 -0
- package/dist/components/Tooltip.d.ts +48 -1
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Upload.d.ts +87 -0
- package/dist/components/Upload.d.ts.map +1 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts +25 -0
- package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -0
- package/dist/components/advanced/index.d.ts +4 -0
- package/dist/components/advanced/index.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransition.d.ts +33 -0
- package/dist/components/advanced/usePageTransition.d.ts.map +1 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts +44 -0
- package/dist/components/advanced/usePageTransitionManager.d.ts.map +1 -0
- package/dist/components/dashboard/ActivityFeed.d.ts +87 -0
- package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -0
- package/dist/components/dashboard/BarChart.d.ts +82 -0
- package/dist/components/dashboard/BarChart.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardGrid.d.ts +44 -0
- package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts +105 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts +120 -0
- package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -0
- package/dist/components/dashboard/EmptyState.d.ts +61 -0
- package/dist/components/dashboard/EmptyState.d.ts.map +1 -0
- package/dist/components/dashboard/MembershipBadge.d.ts +45 -0
- package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -0
- package/dist/components/dashboard/MerchantList.d.ts +98 -0
- package/dist/components/dashboard/MerchantList.d.ts.map +1 -0
- package/dist/components/dashboard/MetricCard.d.ts +75 -0
- package/dist/components/dashboard/MetricCard.d.ts.map +1 -0
- package/dist/components/dashboard/MiniBarChart.d.ts +60 -0
- package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -0
- package/dist/components/dashboard/NotificationCard.d.ts +89 -0
- package/dist/components/dashboard/NotificationCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProfileCard.d.ts +82 -0
- package/dist/components/dashboard/ProfileCard.d.ts.map +1 -0
- package/dist/components/dashboard/ProgressCard.d.ts +71 -0
- package/dist/components/dashboard/ProgressCard.d.ts.map +1 -0
- package/dist/components/dashboard/QuickActionCard.d.ts +63 -0
- package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts +88 -0
- package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts +90 -0
- package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -0
- package/dist/components/dashboard/StatCard.d.ts +70 -0
- package/dist/components/dashboard/StatCard.d.ts.map +1 -0
- package/dist/components/dashboard/SummaryCard.d.ts +73 -0
- package/dist/components/dashboard/SummaryCard.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts +183 -0
- package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -0
- package/dist/components/dashboard/TransactionsTable.d.ts +137 -0
- package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -0
- package/dist/components/dashboard/TrendChart.d.ts +75 -0
- package/dist/components/dashboard/TrendChart.d.ts.map +1 -0
- package/dist/components/dashboard/index.d.ts +41 -0
- package/dist/components/dashboard/index.d.ts.map +1 -0
- package/dist/components/scrollbar/scrollbar.d.ts +12 -0
- package/dist/components/scrollbar/scrollbar.d.ts.map +1 -0
- package/dist/dashboard-QMssHf5j.d.mts +1801 -0
- package/dist/feedback.d.mts +103 -0
- package/dist/feedback.d.ts +21 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +2 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +2 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/form.d.mts +803 -0
- package/dist/form.d.ts +42 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +2 -0
- package/dist/form.js.map +1 -0
- package/dist/form.mjs +2 -0
- package/dist/form.mjs.map +1 -0
- package/dist/hooks/useScrollToggle.d.ts +12 -0
- package/dist/hooks/useScrollToggle.d.ts.map +1 -0
- package/dist/icons-DoSGIez_.d.mts +135 -0
- package/dist/index.d.mts +3770 -0
- package/dist/index.d.ts +76 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -49
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +37 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/icon-aliases.d.ts +24 -0
- package/dist/lib/icon-aliases.d.ts.map +1 -0
- package/dist/lib/icon-names.d.ts +47 -0
- package/dist/lib/icon-names.d.ts.map +1 -0
- package/dist/lib/icon-providers.d.ts +559 -0
- package/dist/lib/icon-providers.d.ts.map +1 -0
- package/dist/lib/icons.d.ts +113 -24
- package/dist/lib/icons.d.ts.map +1 -1
- package/dist/lib/phosphor-icons.d.ts +6 -0
- package/dist/lib/phosphor-icons.d.ts.map +1 -0
- package/dist/lib/styles/colors.d.ts +131 -0
- package/dist/lib/styles/colors.d.ts.map +1 -0
- package/dist/lib/styles/index.d.ts +8 -0
- package/dist/lib/styles/index.d.ts.map +1 -0
- package/dist/lib/styles/utils.d.ts +87 -0
- package/dist/lib/styles/utils.d.ts.map +1 -0
- package/dist/lib/styles/variants.d.ts +79 -0
- package/dist/lib/styles/variants.d.ts.map +1 -0
- package/dist/lib/types/common.d.ts +80 -0
- package/dist/lib/types/common.d.ts.map +1 -0
- package/dist/lib/types/index.d.ts +6 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +73 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/navigation.d.mts +105 -0
- package/dist/navigation.d.ts +22 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +2 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +2 -0
- package/dist/navigation.mjs.map +1 -0
- package/package.json +92 -25
- package/src/styles/toast.css +23 -0
- package/dist/components/Accordion.js +0 -84
- package/dist/components/Alert.js +0 -61
- package/dist/components/Avatar.js +0 -18
- package/dist/components/Badge.js +0 -15
- package/dist/components/BottomSheet.js +0 -96
- package/dist/components/Breadcrumb.js +0 -47
- package/dist/components/Button.js +0 -23
- package/dist/components/Card.js +0 -18
- package/dist/components/ChatMessage.js +0 -59
- package/dist/components/Checkbox.js +0 -30
- package/dist/components/Command.js +0 -119
- package/dist/components/ConfirmModal.js +0 -53
- package/dist/components/Container.js +0 -23
- package/dist/components/ContextMenu.js +0 -110
- package/dist/components/Divider.js +0 -39
- package/dist/components/Drawer.js +0 -79
- package/dist/components/Dropdown.js +0 -174
- package/dist/components/EmotionAnalysis.js +0 -40
- package/dist/components/EmotionButton.js +0 -16
- package/dist/components/EmotionMeter.js +0 -21
- package/dist/components/EmotionSelector.js +0 -46
- package/dist/components/Grid.js +0 -44
- package/dist/components/Icon.d.ts +0 -26
- package/dist/components/Icon.d.ts.map +0 -1
- package/dist/components/Icon.js +0 -48
- package/dist/components/Input.js +0 -25
- package/dist/components/LanguageToggle.js +0 -61
- package/dist/components/LoadingSpinner.js +0 -37
- package/dist/components/Menu.js +0 -122
- package/dist/components/Modal.js +0 -62
- package/dist/components/PageTransition.js +0 -39
- package/dist/components/Pagination.js +0 -87
- package/dist/components/Popover.js +0 -159
- package/dist/components/Progress.js +0 -51
- package/dist/components/Radio.js +0 -29
- package/dist/components/ScrollArea.js +0 -42
- package/dist/components/ScrollIndicator.js +0 -60
- package/dist/components/ScrollProgress.js +0 -39
- package/dist/components/ScrollToTop.js +0 -46
- package/dist/components/Select.js +0 -29
- package/dist/components/Skeleton.js +0 -71
- package/dist/components/Stack.js +0 -34
- package/dist/components/Switch.js +0 -29
- package/dist/components/Tabs.js +0 -117
- package/dist/components/Textarea.js +0 -31
- package/dist/components/ThemeProvider.js +0 -76
- package/dist/components/ThemeToggle.js +0 -49
- package/dist/components/Toast.js +0 -138
- package/dist/components/Tooltip.js +0 -102
- package/dist/lib/icons.js +0 -321
- package/dist/lib/utils.js +0 -5
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{d as ActivityFeed,l as DashboardEmptyState,c as DashboardGrid,m as DashboardSidebar,o as DashboardToolbar,f as MembershipBadge,t as MerchantList,j as MetricCard,g as MiniBarChart,i as NotificationCard,e as ProfileCard,k as ProgressCard,b as QuickActionCard,s as RoutingBreakdownCard,v as SectionHeader,r as SettlementTimeline,a as StatCard,u as StatsPanel,h as SummaryCard,q as TransactionDetailDrawer,n as TransactionsTable,p as TrendChart}from'./chunk-R5KCFRYV.mjs';import'./chunk-E5PN4LUS.mjs';import'./chunk-ACEKLG37.mjs';import'./chunk-UGSYQDR4.mjs';import'./chunk-UUHAXGMO.mjs';//# sourceMappingURL=advanced-dashboard.mjs.map
|
|
2
|
+
//# sourceMappingURL=advanced-dashboard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"advanced-dashboard.mjs"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
type TransitionType$1 = 'fade' | 'slide' | 'scale' | 'flip' | 'morph' | 'cube' | 'zoom' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right';
|
|
4
|
+
type TransitionEasing$1 = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'bounce' | 'elastic' | 'smooth';
|
|
5
|
+
interface AdvancedPageTransitionProps {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
type?: TransitionType$1;
|
|
9
|
+
duration?: number;
|
|
10
|
+
easing?: TransitionEasing$1;
|
|
11
|
+
delay?: number;
|
|
12
|
+
autoStart?: boolean;
|
|
13
|
+
onStart?: () => void;
|
|
14
|
+
onComplete?: () => void;
|
|
15
|
+
showProgress?: boolean;
|
|
16
|
+
progressClassName?: string;
|
|
17
|
+
}
|
|
18
|
+
declare const AdvancedPageTransition: React.ForwardRefExoticComponent<AdvancedPageTransitionProps & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
declare const FadePageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
20
|
+
declare const SlidePageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
declare const ScalePageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
declare const FlipPageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
declare const MorphPageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
24
|
+
declare const CubePageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
declare const ZoomPageTransition: React.ForwardRefExoticComponent<Omit<AdvancedPageTransitionProps, "type"> & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
|
|
27
|
+
type TransitionType = 'fade' | 'slide' | 'scale' | 'flip' | 'morph' | 'cube' | 'zoom' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right';
|
|
28
|
+
type TransitionEasing = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'bounce' | 'elastic' | 'smooth';
|
|
29
|
+
interface TransitionConfig {
|
|
30
|
+
type: TransitionType;
|
|
31
|
+
duration: number;
|
|
32
|
+
easing: TransitionEasing;
|
|
33
|
+
delay?: number;
|
|
34
|
+
stagger?: number;
|
|
35
|
+
direction?: 'forward' | 'backward';
|
|
36
|
+
onStart?: () => void;
|
|
37
|
+
onComplete?: () => void;
|
|
38
|
+
onReverse?: () => void;
|
|
39
|
+
}
|
|
40
|
+
interface PageTransitionState {
|
|
41
|
+
isTransitioning: boolean;
|
|
42
|
+
isVisible: boolean;
|
|
43
|
+
currentStep: number;
|
|
44
|
+
progress: number;
|
|
45
|
+
}
|
|
46
|
+
interface PageTransitionControls {
|
|
47
|
+
start: (config?: Partial<TransitionConfig>) => Promise<void>;
|
|
48
|
+
reverse: () => Promise<void>;
|
|
49
|
+
pause: () => void;
|
|
50
|
+
resume: () => void;
|
|
51
|
+
reset: () => void;
|
|
52
|
+
}
|
|
53
|
+
declare const usePageTransition: (initialConfig?: Partial<TransitionConfig>) => [PageTransitionState, PageTransitionControls];
|
|
54
|
+
|
|
55
|
+
interface PageTransitionManagerConfig {
|
|
56
|
+
defaultType?: TransitionType;
|
|
57
|
+
defaultDuration?: number;
|
|
58
|
+
defaultEasing?: TransitionEasing;
|
|
59
|
+
enableHistory?: boolean;
|
|
60
|
+
enableProgress?: boolean;
|
|
61
|
+
enableDebug?: boolean;
|
|
62
|
+
}
|
|
63
|
+
interface PageTransitionEvent {
|
|
64
|
+
id: string;
|
|
65
|
+
type: TransitionType;
|
|
66
|
+
duration: number;
|
|
67
|
+
easing: TransitionEasing;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
status: 'pending' | 'active' | 'completed' | 'failed';
|
|
70
|
+
}
|
|
71
|
+
interface PageTransitionManagerState {
|
|
72
|
+
isTransitioning: boolean;
|
|
73
|
+
currentTransition: PageTransitionEvent | null;
|
|
74
|
+
transitionHistory: PageTransitionEvent[];
|
|
75
|
+
totalTransitions: number;
|
|
76
|
+
averageDuration: number;
|
|
77
|
+
}
|
|
78
|
+
interface PageTransitionManagerControls {
|
|
79
|
+
startTransition: (config: Partial<TransitionConfig>) => Promise<string>;
|
|
80
|
+
cancelTransition: (id: string) => void;
|
|
81
|
+
pauseAll: () => void;
|
|
82
|
+
resumeAll: () => void;
|
|
83
|
+
clearHistory: () => void;
|
|
84
|
+
getTransitionStats: () => {
|
|
85
|
+
total: number;
|
|
86
|
+
average: number;
|
|
87
|
+
byType: Record<TransitionType, number>;
|
|
88
|
+
byStatus: Record<string, number>;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
declare const usePageTransitionManager: (config?: PageTransitionManagerConfig) => [PageTransitionManagerState, PageTransitionManagerControls];
|
|
92
|
+
|
|
93
|
+
export { AdvancedPageTransition, type AdvancedPageTransitionProps, CubePageTransition, FadePageTransition, FlipPageTransition, MorphPageTransition, ScalePageTransition, SlidePageTransition, type TransitionEasing$1 as TransitionEasing, type TransitionType$1 as TransitionType, ZoomPageTransition, usePageTransition, usePageTransitionManager };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var E=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var E__default=/*#__PURE__*/_interopDefault(E);function N(...s){return tailwindMerge.twMerge(clsx.clsx(s))}var R=E__default.default.forwardRef(({children:s,className:i,type:M="fade",duration:l=500,easing:f="smooth",delay:x=0,autoStart:C=true,onStart:g,onComplete:m,showProgress:T=false,progressClassName:F},y)=>{let[c,d]=E.useState(false),[r,e]=E.useState(0),[A,p]=E.useState(false),w=E.useRef(null),t=E.useRef(null),a=b=>({linear:n=>n,"ease-in":n=>n*n,"ease-out":n=>1-Math.pow(1-n,2),"ease-in-out":n=>n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2,bounce:n=>n<.36363636363636365?7.5625*n*n:n<.7272727272727273?7.5625*(n-=.5454545454545454)*n+.75:n<.9090909090909091?7.5625*(n-=.8181818181818182)*n+.9375:7.5625*(n-=.9545454545454546)*n+.984375,elastic:n=>Math.pow(2,-10*n)*Math.sin((n-.075)*(2*Math.PI)/.3)+1,smooth:n=>n*n*(3-2*n)})[b],o=b=>{t.current||(t.current=b);let H=b-t.current,n=a(f),$=Math.min(H/l,1);$=n($),e($),d($>.1),$<1?w.current=requestAnimationFrame(o):(p(false),e(1),m==null||m());},u=()=>{p(true),e(0),g==null||g(),t.current=null,w.current=requestAnimationFrame(o);};E.useEffect(()=>{if(C){let b=setTimeout(()=>{u();},x);return ()=>clearTimeout(b)}},[C,x]),E.useEffect(()=>()=>{w.current&&cancelAnimationFrame(w.current);},[]);let v=(()=>{switch(M){case "fade":return {opacity:c?1:0,transform:"none"};case "slide":return {opacity:c?1:0,transform:`translateX(${(1-r)*100}%)`};case "slide-up":return {opacity:c?1:0,transform:`translateY(${(1-r)*100}%)`};case "slide-down":return {opacity:c?1:0,transform:`translateY(-${(1-r)*100}%)`};case "slide-left":return {opacity:c?1:0,transform:`translateX(-${(1-r)*100}%)`};case "slide-right":return {opacity:c?1:0,transform:`translateX(${(1-r)*100}%)`};case "scale":return {opacity:c?1:0,transform:`scale(${.8+r*.2})`};case "flip":return {opacity:c?1:0,transform:`perspective(1000px) rotateY(${(1-r)*90}deg)`};case "morph":return {opacity:c?1:0,transform:`scale(${.9+r*.1}) rotate(${(1-r)*5}deg)`};case "cube":return {opacity:c?1:0,transform:`perspective(1000px) rotateX(${(1-r)*90}deg) rotateY(${(1-r)*45}deg)`};case "zoom":return {opacity:c?1:0,transform:`scale(${.5+r*.5})`};default:return {opacity:c?1:0,transform:"none"}}})();return jsxRuntime.jsxs("div",{className:"relative",children:[T&&jsxRuntime.jsxs("div",{className:N("fixed top-4 right-4 z-50 bg-white dark:bg-gray-800 rounded-lg px-3 py-2 shadow-lg border",F),children:[jsxRuntime.jsxs("div",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:["Progress: ",Math.round(r*100),"%"]}),jsxRuntime.jsx("div",{className:"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full mt-2",children:jsxRuntime.jsx("div",{className:"h-full bg-blue-500 rounded-full transition-all duration-100",style:{width:`${r*100}%`}})})]}),jsxRuntime.jsx("div",{ref:y,className:N("transition-all duration-500 ease-out",i),style:{...v,transitionDuration:`${l}ms`,transitionTimingFunction:f==="smooth"?"cubic-bezier(0.4, 0, 0.2, 1)":f==="bounce"?"cubic-bezier(0.68, -0.55, 0.265, 1.55)":f==="elastic"?"cubic-bezier(0.175, 0.885, 0.32, 1.275)":f},children:s})]})});R.displayName="AdvancedPageTransition";var X=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"fade",...s})),Y=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"slide",...s})),Z=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"scale",...s})),j=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"flip",...s})),J=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"morph",...s})),_=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"cube",...s})),B=E__default.default.forwardRef((s,i)=>jsxRuntime.jsx(R,{ref:i,type:"zoom",...s}));X.displayName="FadePageTransition";Y.displayName="SlidePageTransition";Z.displayName="ScalePageTransition";j.displayName="FlipPageTransition";J.displayName="MorphPageTransition";_.displayName="CubePageTransition";B.displayName="ZoomPageTransition";var U=(s={})=>{let[i,M]=E.useState({isTransitioning:false,isVisible:false,currentStep:0,progress:0}),l=E.useRef(null),f=E.useRef(null),x=E.useRef({type:"fade",duration:500,easing:"smooth",delay:0,stagger:0,direction:"forward",...s}),C=E.useCallback(d=>({linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>1-Math.pow(1-e,2),"ease-in-out":e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,bounce:e=>e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375,elastic:e=>Math.pow(2,-10*e)*Math.sin((e-.075)*(2*Math.PI)/.3)+1,smooth:e=>e*e*(3-2*e)})[d],[]),g=E.useCallback(d=>{var w;f.current||(f.current=d);let r=d-f.current,e=x.current,A=C(e.easing),p=Math.min(r/e.duration,1);p=A(p),M(t=>({...t,progress:p,isVisible:e.direction==="forward"?p>.1:p<.9,currentStep:Math.floor(p*10)})),p<1?l.current=requestAnimationFrame(g):(M(t=>({...t,isTransitioning:false,progress:e.direction==="forward"?1:0})),(w=e.onComplete)==null||w.call(e));},[C]),m=E.useCallback(async d=>new Promise(r=>{var A;d&&(x.current={...x.current,...d});let e=x.current;e.onComplete=()=>r(),M(p=>({...p,isTransitioning:true,progress:e.direction==="forward"?0:1})),f.current=null,(A=e.onStart)==null||A.call(e),e.delay?setTimeout(()=>{l.current=requestAnimationFrame(g);},e.delay):l.current=requestAnimationFrame(g);}),[g]),T=E.useCallback(async()=>new Promise(d=>{let r=x.current;r.direction="backward",r.onComplete=()=>d(),m();}),[m]),F=E.useCallback(()=>{l.current&&cancelAnimationFrame(l.current);},[]),y=E.useCallback(()=>{i.isTransitioning&&(l.current=requestAnimationFrame(g));},[i.isTransitioning,g]),c=E.useCallback(()=>{l.current&&cancelAnimationFrame(l.current),M({isTransitioning:false,isVisible:false,currentStep:0,progress:0});},[]);return E.useEffect(()=>()=>{l.current&&cancelAnimationFrame(l.current);},[]),[i,{start:m,reverse:T,pause:F,resume:y,reset:c}]};var ne=(s={})=>{let{defaultType:i="fade",defaultDuration:M=500,defaultEasing:l="smooth",enableHistory:f=true,enableProgress:x=true,enableDebug:C=false}=s,[g,m]=E.useState({isTransitioning:false,currentTransition:null,transitionHistory:[],totalTransitions:0,averageDuration:0}),T=E.useRef(new Map),F=E.useRef(0),y=E.useCallback((t,a)=>{C&&console.log(`[PageTransitionManager] ${t}`,a);},[C]),c=E.useCallback(t=>{m(a=>{let o=f?[...a.transitionHistory,t]:a.transitionHistory,u=o.length,P=o.reduce((v,b)=>v+b.duration,0)/u;return {...a,totalTransitions:u,averageDuration:P,transitionHistory:o}});},[f]),d=E.useCallback(async t=>{let a=`transition_${++F.current}`,o={type:i,duration:M,easing:l,...t},u={id:a,type:o.type,duration:o.duration,easing:o.easing,timestamp:Date.now(),status:"pending"};y("Starting transition",{id:a,config:o}),m(v=>({...v,isTransitioning:true,currentTransition:u}));let P=setTimeout(()=>{var b;let v={...u,status:"completed"};m(H=>({...H,isTransitioning:false,currentTransition:null})),c(v),T.current.delete(a),y("Transition completed",{id:a}),(b=o.onComplete)==null||b.call(o);},o.duration);return T.current.set(a,{timer:P,config:o}),setTimeout(()=>{m(v=>({...v,currentTransition:{...v.currentTransition,status:"active"}}));},50),a},[i,M,l,y,c]),r=E.useCallback(t=>{let a=T.current.get(t);a&&(clearTimeout(a.timer),T.current.delete(t),m(o=>{var u;return {...o,isTransitioning:T.current.size>0,currentTransition:((u=o.currentTransition)==null?void 0:u.id)===t?null:o.currentTransition}}),y("Transition cancelled",{id:t}));},[y]),e=E.useCallback(()=>{T.current.forEach(({timer:t},a)=>{clearTimeout(t),y("Transition paused",{id:a});});},[y]),A=E.useCallback(()=>{T.current.forEach(({config:t},a)=>{d(t);});},[d]),p=E.useCallback(()=>{m(t=>({...t,transitionHistory:[],totalTransitions:0,averageDuration:0})),y("History cleared");},[y]),w=E.useCallback(()=>{let{transitionHistory:t}=g,a=t.reduce((u,P)=>(u[P.type]=(u[P.type]||0)+1,u),{}),o=t.reduce((u,P)=>(u[P.status]=(u[P.status]||0)+1,u),{});return {total:t.length,average:g.averageDuration,byType:a,byStatus:o}},[g]);return E.useEffect(()=>()=>{T.current.forEach(({timer:t})=>{clearTimeout(t);}),T.current.clear();},[]),[g,{startTransition:d,cancelTransition:r,pauseAll:e,resumeAll:A,clearHistory:p,getTransitionStats:w}]};exports.AdvancedPageTransition=R;exports.CubePageTransition=_;exports.FadePageTransition=X;exports.FlipPageTransition=j;exports.MorphPageTransition=J;exports.ScalePageTransition=Z;exports.SlidePageTransition=Y;exports.ZoomPageTransition=B;exports.usePageTransition=U;exports.usePageTransitionManager=ne;//# sourceMappingURL=advanced-motion.js.map
|
|
2
|
+
//# sourceMappingURL=advanced-motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/advanced/AdvancedPageTransition.tsx","../src/components/advanced/usePageTransition.ts","../src/components/advanced/usePageTransitionManager.ts"],"names":["merge","inputs","twMerge","clsx","AdvancedPageTransition","React","children","className","type","duration","easing","delay","autoStart","onStart","onComplete","showProgress","progressClassName","ref","isVisible","setIsVisible","useState","progress","setProgress","isTransitioning","setIsTransitioning","animationRef","useRef","startTimeRef","getEasingFunction","easingType","t","animate","timestamp","elapsed","easingFunction","currentProgress","startTransition","useEffect","timer","transitionStyles","jsxs","jsx","FadePageTransition","props","SlidePageTransition","ScalePageTransition","FlipPageTransition","MorphPageTransition","CubePageTransition","ZoomPageTransition","usePageTransition","initialConfig","state","setState","configRef","useCallback","_a","config","prev","start","resolve","finalConfig","reverse","pause","resume","reset","usePageTransitionManager","defaultType","defaultDuration","defaultEasing","enableHistory","enableProgress","enableDebug","activeTransitionsRef","transitionCounterRef","logDebug","message","data","updateStats","newTransition","newHistory","total","average","sum","transitionId","fullConfig","transitionEvent","completedEvent","cancelTransition","id","transition","pauseAll","resumeAll","clearHistory","getTransitionStats","transitionHistory","byType","acc","byStatus"],"mappings":"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","file":"advanced-motion.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\n/**\n * HUA UI의 스마트 클래스 병합 유틸리티\n * clsx와 tailwind-merge를 결합하여 중복 클래스를 자동으로 해결합니다.\n * \n * @param inputs - 병합할 클래스 값들\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * merge(\"px-2 py-1\", \"px-4\") // \"py-1 px-4\"\n * merge(\"text-red-500\", \"text-blue-500\") // \"text-blue-500\"\n * merge(\"bg-white\", \"dark:bg-slate-900\") // \"bg-white dark:bg-slate-900\"\n * ```\n */\nexport function merge(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n/**\n * 조건부 클래스 병합 유틸리티\n * 조건에 따라 클래스를 선택적으로 병합합니다.\n * \n * @param condition - 클래스를 적용할 조건\n * @param trueClass - 조건이 true일 때 적용할 클래스\n * @param falseClass - 조건이 false일 때 적용할 클래스 (선택사항)\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeIf(isActive, \"bg-blue-500\", \"bg-gray-200\")\n * mergeIf(isLoading, \"opacity-50 cursor-not-allowed\")\n * ```\n */\nexport function mergeIf(\n condition: boolean,\n trueClass: ClassValue,\n falseClass?: ClassValue\n) {\n return merge(condition ? trueClass : falseClass || \"\")\n}\n\n/**\n * 상대 시간 포맷팅 유틸리티\n * \n * 날짜를 상대 시간 형식으로 포맷팅합니다 (예: \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * 7일 이상 경과한 경우 절대 날짜를 반환합니다.\n * \n * Formats a date as relative time (e.g., \"방금 전\", \"5분 전\", \"2시간 전\", \"3일 전\").\n * Returns absolute date for dates older than 7 days.\n * \n * @param timestamp - 포맷팅할 날짜 (Date 객체 또는 ISO 문자열) / Date to format (Date object or ISO string)\n * @param locale - 로케일 (기본값: \"ko-KR\") / Locale (default: \"ko-KR\")\n * @returns 포맷팅된 상대 시간 문자열 / Formatted relative time string\n * \n * @example\n * ```tsx\n * formatRelativeTime(new Date()) // \"방금 전\"\n * formatRelativeTime(new Date(Date.now() - 5 * 60000)) // \"5분 전\"\n * formatRelativeTime(new Date(Date.now() - 2 * 3600000)) // \"2시간 전\"\n * formatRelativeTime(new Date(Date.now() - 3 * 86400000)) // \"3일 전\"\n * formatRelativeTime(new Date(\"2024-01-01\")) // \"2024. 1. 1.\" (7일 이상 경과)\n * ```\n */\nexport function formatRelativeTime(timestamp: Date | string, locale = \"ko-KR\"): string {\n const date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 1) return locale === \"ko-KR\" ? \"방금 전\" : \"just now\";\n if (minutes < 60) return locale === \"ko-KR\" ? `${minutes}분 전` : `${minutes}m ago`;\n if (hours < 24) return locale === \"ko-KR\" ? `${hours}시간 전` : `${hours}h ago`;\n if (days < 7) return locale === \"ko-KR\" ? `${days}일 전` : `${days}d ago`;\n return date.toLocaleDateString(locale);\n}\n\n/**\n * 객체 기반 클래스 병합 유틸리티\n * 객체의 키-값 쌍을 기반으로 조건부 클래스를 병합합니다.\n * \n * @param classMap - 클래스 맵 객체\n * @returns 병합된 클래스 문자열\n * \n * @example\n * ```tsx\n * mergeMap({\n * \"bg-blue-500\": isPrimary,\n * \"bg-gray-500\": !isPrimary,\n * \"text-white\": true,\n * \"opacity-50\": isDisabled\n * })\n * ```\n */\nexport function mergeMap(classMap: Record<string, boolean | undefined | null>) {\n const classes = Object.entries(classMap)\n .filter(([, condition]) => condition)\n .map(([className]) => className)\n \n return merge(...classes)\n}\n\n// 하위 호환성을 위해 cn도 export (점진적 마이그레이션 지원)\nexport const cn = merge ","'use client'\n\nimport React, { useState, useEffect, useRef } from 'react'\nimport { merge } from '../../lib/utils'\n\nexport type TransitionType = \n | 'fade' \n | 'slide' \n | 'scale' \n | 'flip' \n | 'morph' \n | 'cube' \n | 'zoom' \n | 'slide-up' \n | 'slide-down' \n | 'slide-left' \n | 'slide-right'\n\nexport type TransitionEasing = \n | 'linear' \n | 'ease-in' \n | 'ease-out' \n | 'ease-in-out' \n | 'bounce' \n | 'elastic' \n | 'smooth'\n\nexport interface AdvancedPageTransitionProps {\n children: React.ReactNode\n className?: string\n type?: TransitionType\n duration?: number\n easing?: TransitionEasing\n delay?: number\n autoStart?: boolean\n onStart?: () => void\n onComplete?: () => void\n showProgress?: boolean\n progressClassName?: string\n}\n\nexport const AdvancedPageTransition = React.forwardRef<HTMLDivElement, AdvancedPageTransitionProps>(({\n children,\n className,\n type = 'fade',\n duration = 500,\n easing = 'smooth',\n delay = 0,\n autoStart = true,\n onStart,\n onComplete,\n showProgress = false,\n progressClassName\n}, ref) => {\n const [isVisible, setIsVisible] = useState(false)\n const [progress, setProgress] = useState(0)\n const [isTransitioning, setIsTransitioning] = useState(false)\n const animationRef = useRef<number | null>(null)\n const startTimeRef = useRef<number | null>(null)\n\n const getEasingFunction = (easingType: TransitionEasing) => {\n const easingFunctions = {\n linear: (t: number) => t,\n 'ease-in': (t: number) => t * t,\n 'ease-out': (t: number) => 1 - Math.pow(1 - t, 2),\n 'ease-in-out': (t: number) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2,\n bounce: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375\n },\n elastic: (t: number) => {\n return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1\n },\n smooth: (t: number) => {\n return t * t * (3 - 2 * t)\n }\n }\n return easingFunctions[easingType]\n }\n\n const animate = (timestamp: number) => {\n if (!startTimeRef.current) {\n startTimeRef.current = timestamp\n }\n\n const elapsed = timestamp - startTimeRef.current\n const easingFunction = getEasingFunction(easing)\n \n let currentProgress = Math.min(elapsed / duration, 1)\n currentProgress = easingFunction(currentProgress)\n\n setProgress(currentProgress)\n setIsVisible(currentProgress > 0.1)\n\n if (currentProgress < 1) {\n animationRef.current = requestAnimationFrame(animate)\n } else {\n setIsTransitioning(false)\n setProgress(1)\n onComplete?.()\n }\n }\n\n const startTransition = () => {\n setIsTransitioning(true)\n setProgress(0)\n onStart?.()\n \n startTimeRef.current = null\n animationRef.current = requestAnimationFrame(animate)\n }\n\n useEffect(() => {\n if (autoStart) {\n const timer = setTimeout(() => {\n startTransition()\n }, delay)\n \n return () => clearTimeout(timer)\n }\n }, [autoStart, delay])\n\n useEffect(() => {\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n }\n }\n }, [])\n\n const getTransitionStyles = () => {\n switch (type) {\n case 'fade':\n return {\n opacity: isVisible ? 1 : 0,\n transform: 'none'\n }\n \n case 'slide':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `translateX(${(1 - progress) * 100}%)`\n }\n \n case 'slide-up':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `translateY(${(1 - progress) * 100}%)`\n }\n \n case 'slide-down':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `translateY(-${(1 - progress) * 100}%)`\n }\n \n case 'slide-left':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `translateX(-${(1 - progress) * 100}%)`\n }\n \n case 'slide-right':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `translateX(${(1 - progress) * 100}%)`\n }\n \n case 'scale':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `scale(${0.8 + progress * 0.2})`\n }\n \n case 'flip':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `perspective(1000px) rotateY(${(1 - progress) * 90}deg)`\n }\n \n case 'morph':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `scale(${0.9 + progress * 0.1}) rotate(${(1 - progress) * 5}deg)`\n }\n \n case 'cube':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `perspective(1000px) rotateX(${(1 - progress) * 90}deg) rotateY(${(1 - progress) * 45}deg)`\n }\n \n case 'zoom':\n return {\n opacity: isVisible ? 1 : 0,\n transform: `scale(${0.5 + progress * 0.5})`\n }\n \n default:\n return {\n opacity: isVisible ? 1 : 0,\n transform: 'none'\n }\n }\n }\n\n const transitionStyles = getTransitionStyles()\n\n return (\n <div className=\"relative\">\n {showProgress && (\n <div className={merge(\n 'fixed top-4 right-4 z-50 bg-white dark:bg-gray-800 rounded-lg px-3 py-2 shadow-lg border',\n progressClassName\n )}>\n <div className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n Progress: {Math.round(progress * 100)}%\n </div>\n <div className=\"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full mt-2\">\n <div \n className=\"h-full bg-blue-500 rounded-full transition-all duration-100\"\n style={{ width: `${progress * 100}%` }}\n />\n </div>\n </div>\n )}\n \n <div\n ref={ref}\n className={merge(\n 'transition-all duration-500 ease-out',\n className\n )}\n style={{\n ...transitionStyles,\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: easing === 'smooth' \n ? 'cubic-bezier(0.4, 0, 0.2, 1)'\n : easing === 'bounce'\n ? 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'\n : easing === 'elastic'\n ? 'cubic-bezier(0.175, 0.885, 0.32, 1.275)'\n : easing\n }}\n >\n {children}\n </div>\n </div>\n )\n})\n\nAdvancedPageTransition.displayName = 'AdvancedPageTransition'\n\n// 편의 컴포넌트들\nexport const FadePageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"fade\" {...props} />\n))\n\nexport const SlidePageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"slide\" {...props} />\n))\n\nexport const ScalePageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"scale\" {...props} />\n))\n\nexport const FlipPageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"flip\" {...props} />\n))\n\nexport const MorphPageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"morph\" {...props} />\n))\n\nexport const CubePageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"cube\" {...props} />\n))\n\nexport const ZoomPageTransition = React.forwardRef<HTMLDivElement, Omit<AdvancedPageTransitionProps, 'type'>>((props, ref) => (\n <AdvancedPageTransition ref={ref} type=\"zoom\" {...props} />\n))\n\n// displayName 설정\nFadePageTransition.displayName = 'FadePageTransition'\nSlidePageTransition.displayName = 'SlidePageTransition'\nScalePageTransition.displayName = 'ScalePageTransition'\nFlipPageTransition.displayName = 'FlipPageTransition'\nMorphPageTransition.displayName = 'MorphPageTransition'\nCubePageTransition.displayName = 'CubePageTransition'\nZoomPageTransition.displayName = 'ZoomPageTransition'\n","'use client'\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport type TransitionType = \n | 'fade' \n | 'slide' \n | 'scale' \n | 'flip' \n | 'morph' \n | 'cube' \n | 'zoom' \n | 'slide-up' \n | 'slide-down' \n | 'slide-left' \n | 'slide-right'\n\nexport type TransitionEasing = \n | 'linear' \n | 'ease-in' \n | 'ease-out' \n | 'ease-in-out' \n | 'bounce' \n | 'elastic' \n | 'smooth'\n\nexport interface TransitionConfig {\n type: TransitionType\n duration: number\n easing: TransitionEasing\n delay?: number\n stagger?: number\n direction?: 'forward' | 'backward'\n onStart?: () => void\n onComplete?: () => void\n onReverse?: () => void\n}\n\nexport interface PageTransitionState {\n isTransitioning: boolean\n isVisible: boolean\n currentStep: number\n progress: number\n}\n\nexport interface PageTransitionControls {\n start: (config?: Partial<TransitionConfig>) => Promise<void>\n reverse: () => Promise<void>\n pause: () => void\n resume: () => void\n reset: () => void\n}\n\nexport const usePageTransition = (\n initialConfig: Partial<TransitionConfig> = {}\n): [PageTransitionState, PageTransitionControls] => {\n const [state, setState] = useState<PageTransitionState>({\n isTransitioning: false,\n isVisible: false,\n currentStep: 0,\n progress: 0\n })\n\n const animationRef = useRef<number | null>(null)\n const startTimeRef = useRef<number | null>(null)\n const configRef = useRef<TransitionConfig>({\n type: 'fade',\n duration: 500,\n easing: 'smooth',\n delay: 0,\n stagger: 0,\n direction: 'forward',\n ...initialConfig\n })\n\n const getEasingFunction = useCallback((easing: TransitionEasing) => {\n const easingFunctions = {\n linear: (t: number) => t,\n 'ease-in': (t: number) => t * t,\n 'ease-out': (t: number) => 1 - Math.pow(1 - t, 2),\n 'ease-in-out': (t: number) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2,\n bounce: (t: number) => {\n if (t < 1 / 2.75) return 7.5625 * t * t\n if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75\n if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375\n },\n elastic: (t: number) => {\n return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1\n },\n smooth: (t: number) => {\n return t * t * (3 - 2 * t)\n }\n }\n return easingFunctions[easing]\n }, [])\n\n const animate = useCallback((timestamp: number) => {\n if (!startTimeRef.current) {\n startTimeRef.current = timestamp\n }\n\n const elapsed = timestamp - startTimeRef.current\n const config = configRef.current\n const easing = getEasingFunction(config.easing)\n \n let progress = Math.min(elapsed / config.duration, 1)\n progress = easing(progress)\n\n setState(prev => ({\n ...prev,\n progress,\n isVisible: config.direction === 'forward' ? progress > 0.1 : progress < 0.9,\n currentStep: Math.floor(progress * 10)\n }))\n\n if (progress < 1) {\n animationRef.current = requestAnimationFrame(animate)\n } else {\n setState(prev => ({\n ...prev,\n isTransitioning: false,\n progress: config.direction === 'forward' ? 1 : 0\n }))\n config.onComplete?.()\n }\n }, [getEasingFunction])\n\n const start = useCallback(async (config?: Partial<TransitionConfig>) => {\n return new Promise<void>((resolve) => {\n if (config) {\n configRef.current = { ...configRef.current, ...config }\n }\n\n const finalConfig = configRef.current\n finalConfig.onComplete = () => resolve()\n\n setState(prev => ({\n ...prev,\n isTransitioning: true,\n progress: finalConfig.direction === 'forward' ? 0 : 1\n }))\n\n startTimeRef.current = null\n finalConfig.onStart?.()\n \n if (finalConfig.delay) {\n setTimeout(() => {\n animationRef.current = requestAnimationFrame(animate)\n }, finalConfig.delay)\n } else {\n animationRef.current = requestAnimationFrame(animate)\n }\n })\n }, [animate])\n\n const reverse = useCallback(async () => {\n return new Promise<void>((resolve) => {\n const config = configRef.current\n config.direction = 'backward'\n config.onComplete = () => resolve()\n \n start()\n })\n }, [start])\n\n const pause = useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n }\n }, [])\n\n const resume = useCallback(() => {\n if (state.isTransitioning) {\n animationRef.current = requestAnimationFrame(animate)\n }\n }, [state.isTransitioning, animate])\n\n const reset = useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n }\n setState({\n isTransitioning: false,\n isVisible: false,\n currentStep: 0,\n progress: 0\n })\n }, [])\n\n useEffect(() => {\n return () => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n }\n }\n }, [])\n\n return [state, { start, reverse, pause, resume, reset }]\n}\n\n// 특정 전환 타입을 위한 편의 훅들\nexport const useFadeTransition = (config?: Partial<TransitionConfig>) => {\n return usePageTransition({ type: 'fade', duration: 400, ...config })\n}\n\nexport const useSlideTransition = (config?: Partial<TransitionConfig>) => {\n return usePageTransition({ type: 'slide', duration: 600, ...config })\n}\n\nexport const useScaleTransition = (config?: Partial<TransitionConfig>) => {\n return usePageTransition({ type: 'scale', duration: 500, ...config })\n}\n\nexport const useMorphTransition = (config?: Partial<TransitionConfig>) => {\n return usePageTransition({ type: 'morph', duration: 800, ...config })\n}\n\nexport const useCubeTransition = (config?: Partial<TransitionConfig>) => {\n return usePageTransition({ type: 'cube', duration: 1000, ...config })\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\nimport { TransitionType, TransitionEasing, TransitionConfig } from './usePageTransition'\n\nexport interface PageTransitionManagerConfig {\n defaultType?: TransitionType\n defaultDuration?: number\n defaultEasing?: TransitionEasing\n enableHistory?: boolean\n enableProgress?: boolean\n enableDebug?: boolean\n}\n\nexport interface PageTransitionEvent {\n id: string\n type: TransitionType\n duration: number\n easing: TransitionEasing\n timestamp: number\n status: 'pending' | 'active' | 'completed' | 'failed'\n}\n\nexport interface PageTransitionManagerState {\n isTransitioning: boolean\n currentTransition: PageTransitionEvent | null\n transitionHistory: PageTransitionEvent[]\n totalTransitions: number\n averageDuration: number\n}\n\nexport interface PageTransitionManagerControls {\n startTransition: (config: Partial<TransitionConfig>) => Promise<string>\n cancelTransition: (id: string) => void\n pauseAll: () => void\n resumeAll: () => void\n clearHistory: () => void\n getTransitionStats: () => {\n total: number\n average: number\n byType: Record<TransitionType, number>\n byStatus: Record<string, number>\n }\n}\n\nexport const usePageTransitionManager = (\n config: PageTransitionManagerConfig = {}\n): [PageTransitionManagerState, PageTransitionManagerControls] => {\n const {\n defaultType = 'fade',\n defaultDuration = 500,\n defaultEasing = 'smooth',\n enableHistory = true,\n enableProgress = true,\n enableDebug = false\n } = config\n\n const [state, setState] = useState<PageTransitionManagerState>({\n isTransitioning: false,\n currentTransition: null,\n transitionHistory: [],\n totalTransitions: 0,\n averageDuration: 0\n })\n\n const activeTransitionsRef = useRef<Map<string, { timer: NodeJS.Timeout; config: TransitionConfig }>>(new Map())\n const transitionCounterRef = useRef(0)\n\n const logDebug = useCallback((message: string, data?: unknown) => {\n if (enableDebug) {\n console.log(`[PageTransitionManager] ${message}`, data)\n }\n }, [enableDebug])\n\n const updateStats = useCallback((newTransition: PageTransitionEvent) => {\n setState(prev => {\n const newHistory = enableHistory ? [...prev.transitionHistory, newTransition] : prev.transitionHistory\n const total = newHistory.length\n const average = newHistory.reduce((sum, t) => sum + t.duration, 0) / total\n\n return {\n ...prev,\n totalTransitions: total,\n averageDuration: average,\n transitionHistory: newHistory\n }\n })\n }, [enableHistory])\n\n const startTransition = useCallback(async (config: Partial<TransitionConfig>): Promise<string> => {\n const transitionId = `transition_${++transitionCounterRef.current}`\n const fullConfig: TransitionConfig = {\n type: defaultType,\n duration: defaultDuration,\n easing: defaultEasing,\n ...config\n }\n\n const transitionEvent: PageTransitionEvent = {\n id: transitionId,\n type: fullConfig.type,\n duration: fullConfig.duration,\n easing: fullConfig.easing,\n timestamp: Date.now(),\n status: 'pending'\n }\n\n logDebug('Starting transition', { id: transitionId, config: fullConfig })\n\n setState(prev => ({\n ...prev,\n isTransitioning: true,\n currentTransition: transitionEvent\n }))\n\n // 실제 전환 로직을 시뮬레이션 (실제로는 usePageTransition과 연동)\n const timer = setTimeout(() => {\n const completedEvent: PageTransitionEvent = {\n ...transitionEvent,\n status: 'completed'\n }\n\n setState(prev => ({\n ...prev,\n isTransitioning: false,\n currentTransition: null\n }))\n\n updateStats(completedEvent)\n activeTransitionsRef.current.delete(transitionId)\n logDebug('Transition completed', { id: transitionId })\n\n fullConfig.onComplete?.()\n }, fullConfig.duration)\n\n activeTransitionsRef.current.set(transitionId, { timer, config: fullConfig })\n\n // 진행 상태 업데이트\n setTimeout(() => {\n setState(prev => ({\n ...prev,\n currentTransition: {\n ...prev.currentTransition!,\n status: 'active'\n }\n }))\n }, 50)\n\n return transitionId\n }, [defaultType, defaultDuration, defaultEasing, logDebug, updateStats])\n\n const cancelTransition = useCallback((id: string) => {\n const transition = activeTransitionsRef.current.get(id)\n if (transition) {\n clearTimeout(transition.timer)\n activeTransitionsRef.current.delete(id)\n\n setState(prev => ({\n ...prev,\n isTransitioning: activeTransitionsRef.current.size > 0,\n currentTransition: prev.currentTransition?.id === id ? null : prev.currentTransition\n }))\n\n logDebug('Transition cancelled', { id })\n }\n }, [logDebug])\n\n const pauseAll = useCallback(() => {\n activeTransitionsRef.current.forEach(({ timer }, id) => {\n clearTimeout(timer)\n logDebug('Transition paused', { id })\n })\n }, [logDebug])\n\n const resumeAll = useCallback(() => {\n activeTransitionsRef.current.forEach(({ config }, id) => {\n startTransition(config)\n })\n }, [startTransition])\n\n const clearHistory = useCallback(() => {\n setState(prev => ({\n ...prev,\n transitionHistory: [],\n totalTransitions: 0,\n averageDuration: 0\n }))\n logDebug('History cleared')\n }, [logDebug])\n\n const getTransitionStats = useCallback(() => {\n const { transitionHistory } = state\n const byType = transitionHistory.reduce((acc, t) => {\n acc[t.type] = (acc[t.type] || 0) + 1\n return acc\n }, {} as Record<TransitionType, number>)\n\n const byStatus = transitionHistory.reduce((acc, t) => {\n acc[t.status] = (acc[t.status] || 0) + 1\n return acc\n }, {} as Record<string, number>)\n\n return {\n total: transitionHistory.length,\n average: state.averageDuration,\n byType,\n byStatus\n }\n }, [state])\n\n useEffect(() => {\n return () => {\n // 컴포넌트 언마운트 시 모든 타이머 정리\n activeTransitionsRef.current.forEach(({ timer }) => {\n clearTimeout(timer)\n })\n activeTransitionsRef.current.clear()\n }\n }, [])\n\n return [state, {\n startTransition,\n cancelTransition,\n pauseAll,\n resumeAll,\n clearHistory,\n getTransitionStats\n }]\n}\n\n// 특정 전환 타입을 위한 편의 훅들\nexport const useFadeTransitionManager = (config?: PageTransitionManagerConfig) => {\n return usePageTransitionManager({ ...config, defaultType: 'fade' })\n}\n\nexport const useSlideTransitionManager = (config?: PageTransitionManagerConfig) => {\n return usePageTransitionManager({ ...config, defaultType: 'slide' })\n}\n\nexport const useScaleTransitionManager = (config?: PageTransitionManagerConfig) => {\n return usePageTransitionManager({ ...config, defaultType: 'scale' })\n}\n\nexport const useMorphTransitionManager = (config?: PageTransitionManagerConfig) => {\n return usePageTransitionManager({ ...config, defaultType: 'morph' })\n}\n\nexport const useCubeTransitionManager = (config?: PageTransitionManagerConfig) => {\n return usePageTransitionManager({ ...config, defaultType: 'cube' })\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{a as AdvancedPageTransition,g as CubePageTransition,b as FadePageTransition,e as FlipPageTransition,f as MorphPageTransition,d as ScalePageTransition,c as SlidePageTransition,h as ZoomPageTransition,i as usePageTransition,j as usePageTransitionManager}from'./chunk-KHEJZ3U4.mjs';import'./chunk-UUHAXGMO.mjs';//# sourceMappingURL=advanced-motion.mjs.map
|
|
2
|
+
//# sourceMappingURL=advanced-motion.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"advanced-motion.mjs"}
|