sa2kit 2.0.1 → 2.0.3
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 +1 -1
- package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
- package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
- package/dist/ConfigService-BxK06xP6.d.mts +262 -0
- package/dist/ConfigService-BxK06xP6.d.ts +262 -0
- package/dist/UniversalFileService-BpvbZitV.d.mts +139 -0
- package/dist/UniversalFileService-GsP6D3Rc.d.ts +139 -0
- package/dist/audioDetection/index.d.mts +449 -0
- package/dist/audioDetection/index.d.ts +449 -0
- package/dist/audioDetection/index.js +1244 -0
- package/dist/audioDetection/index.js.map +1 -0
- package/dist/audioDetection/index.mjs +1227 -0
- package/dist/audioDetection/index.mjs.map +1 -0
- package/dist/auth/legacy/core/index.d.mts +42 -0
- package/dist/auth/legacy/core/index.d.ts +42 -0
- package/dist/auth/legacy/core/index.js +242 -0
- package/dist/auth/legacy/core/index.js.map +1 -0
- package/dist/auth/legacy/core/index.mjs +226 -0
- package/dist/auth/legacy/core/index.mjs.map +1 -0
- package/dist/auth/legacy/db/index.d.mts +5 -0
- package/dist/auth/legacy/db/index.d.ts +5 -0
- package/dist/auth/legacy/db/index.js +261 -0
- package/dist/auth/legacy/db/index.js.map +1 -0
- package/dist/auth/legacy/db/index.mjs +250 -0
- package/dist/auth/legacy/db/index.mjs.map +1 -0
- package/dist/auth/legacy/index.d.mts +5 -0
- package/dist/auth/legacy/index.d.ts +5 -0
- package/dist/auth/legacy/index.js +1107 -0
- package/dist/auth/legacy/index.js.map +1 -0
- package/dist/auth/legacy/index.mjs +1086 -0
- package/dist/auth/legacy/index.mjs.map +1 -0
- package/dist/auth/legacy/logic/index.d.mts +9 -0
- package/dist/auth/legacy/logic/index.d.ts +9 -0
- package/dist/auth/legacy/logic/index.js +194 -0
- package/dist/auth/legacy/logic/index.js.map +1 -0
- package/dist/auth/legacy/logic/index.mjs +187 -0
- package/dist/auth/legacy/logic/index.mjs.map +1 -0
- package/dist/auth/legacy/miniapp/index.d.mts +5 -0
- package/dist/auth/legacy/miniapp/index.d.ts +5 -0
- package/dist/auth/legacy/miniapp/index.js +506 -0
- package/dist/auth/legacy/miniapp/index.js.map +1 -0
- package/dist/auth/legacy/miniapp/index.mjs +487 -0
- package/dist/auth/legacy/miniapp/index.mjs.map +1 -0
- package/dist/auth/legacy/routes/index.d.mts +53 -0
- package/dist/auth/legacy/routes/index.d.ts +53 -0
- package/dist/auth/legacy/routes/index.js +278 -0
- package/dist/auth/legacy/routes/index.js.map +1 -0
- package/dist/auth/legacy/routes/index.mjs +271 -0
- package/dist/auth/legacy/routes/index.mjs.map +1 -0
- package/dist/auth/legacy/schema/index.d.mts +401 -0
- package/dist/auth/legacy/schema/index.d.ts +401 -0
- package/dist/auth/legacy/schema/index.js +50 -0
- package/dist/auth/legacy/schema/index.js.map +1 -0
- package/dist/auth/legacy/schema/index.mjs +44 -0
- package/dist/auth/legacy/schema/index.mjs.map +1 -0
- package/dist/auth/legacy/server/index.d.mts +13 -0
- package/dist/auth/legacy/server/index.d.ts +13 -0
- package/dist/auth/legacy/server/index.js +21 -0
- package/dist/auth/legacy/server/index.js.map +1 -0
- package/dist/auth/legacy/server/index.mjs +19 -0
- package/dist/auth/legacy/server/index.mjs.map +1 -0
- package/dist/auth/legacy/services/index.d.mts +40 -0
- package/dist/auth/legacy/services/index.d.ts +40 -0
- package/dist/auth/legacy/services/index.js +258 -0
- package/dist/auth/legacy/services/index.js.map +1 -0
- package/dist/auth/legacy/services/index.mjs +252 -0
- package/dist/auth/legacy/services/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.js +298 -0
- package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs +290 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/web/index.d.mts +22 -0
- package/dist/auth/legacy/ui/web/index.d.ts +22 -0
- package/dist/auth/legacy/ui/web/index.js +899 -0
- package/dist/auth/legacy/ui/web/index.js.map +1 -0
- package/dist/auth/legacy/ui/web/index.mjs +889 -0
- package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
- package/dist/auth/legacy/web/index.d.mts +5 -0
- package/dist/auth/legacy/web/index.d.ts +5 -0
- package/dist/auth/legacy/web/index.js +1107 -0
- package/dist/auth/legacy/web/index.js.map +1 -0
- package/dist/auth/legacy/web/index.mjs +1086 -0
- package/dist/auth/legacy/web/index.mjs.map +1 -0
- package/dist/auth/rn/index.d.mts +64 -0
- package/dist/auth/rn/index.d.ts +64 -0
- package/dist/auth/rn/index.js +765 -0
- package/dist/auth/rn/index.js.map +1 -0
- package/dist/auth/rn/index.mjs +754 -0
- package/dist/auth/rn/index.mjs.map +1 -0
- package/dist/base-api-client-ACKKt13v.d.mts +277 -0
- package/dist/base-api-client-ACKKt13v.d.ts +277 -0
- package/dist/boothVaultService-Cn4WPhjg.d.mts +83 -0
- package/dist/boothVaultService-Cn4WPhjg.d.ts +83 -0
- package/dist/business/index.d.mts +6 -0
- package/dist/business/index.d.ts +6 -0
- package/dist/business/index.js +1682 -0
- package/dist/business/index.js.map +1 -0
- package/dist/business/index.mjs +1675 -0
- package/dist/business/index.mjs.map +1 -0
- package/dist/calendar/index.d.mts +1325 -0
- package/dist/calendar/index.d.ts +1325 -0
- package/dist/calendar/index.js +5964 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/calendar/index.mjs +5878 -0
- package/dist/calendar/index.mjs.map +1 -0
- package/dist/calendar/routes/index.d.mts +118 -0
- package/dist/calendar/routes/index.d.ts +118 -0
- package/dist/calendar/routes/index.js +755 -0
- package/dist/calendar/routes/index.js.map +1 -0
- package/dist/calendar/routes/index.mjs +747 -0
- package/dist/calendar/routes/index.mjs.map +1 -0
- package/dist/components/index.d.mts +405 -0
- package/dist/components/index.d.ts +405 -0
- package/dist/components/index.js +2516 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +2396 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/drizzle-schema-BNhqj2AZ.d.mts +1114 -0
- package/dist/drizzle-schema-BNhqj2AZ.d.ts +1114 -0
- package/dist/festivalCard/index.d.mts +76 -0
- package/dist/festivalCard/index.d.ts +76 -0
- package/dist/festivalCard/index.js +1492 -0
- package/dist/festivalCard/index.js.map +1 -0
- package/dist/festivalCard/index.mjs +1475 -0
- package/dist/festivalCard/index.mjs.map +1 -0
- package/dist/festivalCard/routes/index.d.mts +42 -0
- package/dist/festivalCard/routes/index.d.ts +42 -0
- package/dist/festivalCard/routes/index.js +361 -0
- package/dist/festivalCard/routes/index.js.map +1 -0
- package/dist/festivalCard/routes/index.mjs +356 -0
- package/dist/festivalCard/routes/index.mjs.map +1 -0
- package/dist/festivalCard/server/index.d.mts +120 -0
- package/dist/festivalCard/server/index.d.ts +120 -0
- package/dist/festivalCard/server/index.js +272 -0
- package/dist/festivalCard/server/index.js.map +1 -0
- package/dist/festivalCard/server/index.mjs +265 -0
- package/dist/festivalCard/server/index.mjs.map +1 -0
- package/dist/festivalCardService-BFCRhJrq.d.ts +13 -0
- package/dist/festivalCardService-GriR2VMc.d.mts +13 -0
- package/dist/index-1Ag7IBXN.d.ts +144 -0
- package/dist/index-DNKZ7-R_.d.mts +184 -0
- package/dist/index-DNKZ7-R_.d.ts +184 -0
- package/dist/index-DSel44Ke.d.mts +93 -0
- package/dist/index-DSel44Ke.d.ts +93 -0
- package/dist/index-DdeZSeTJ.d.mts +144 -0
- package/dist/index-DrPcMJPc.d.mts +250 -0
- package/dist/index-DrPcMJPc.d.ts +250 -0
- package/dist/index.d.mts +5334 -0
- package/dist/index.d.ts +5334 -0
- package/dist/index.js +18809 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +18533 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mikuContest/ui/web/index.d.mts +2 -0
- package/dist/mikuContest/ui/web/index.d.ts +2 -0
- package/dist/mikuContest/ui/web/index.js +353 -0
- package/dist/mikuContest/ui/web/index.js.map +1 -0
- package/dist/mikuContest/ui/web/index.mjs +343 -0
- package/dist/mikuContest/ui/web/index.mjs.map +1 -0
- package/dist/mikuFireworks3D/index.d.mts +268 -0
- package/dist/mikuFireworks3D/index.d.ts +268 -0
- package/dist/mikuFireworks3D/index.js +1267 -0
- package/dist/mikuFireworks3D/index.js.map +1 -0
- package/dist/mikuFireworks3D/index.mjs +1228 -0
- package/dist/mikuFireworks3D/index.mjs.map +1 -0
- package/dist/mikuFusionGame/index.d.mts +117 -0
- package/dist/mikuFusionGame/index.d.ts +117 -0
- package/dist/mikuFusionGame/index.js +1208 -0
- package/dist/mikuFusionGame/index.js.map +1 -0
- package/dist/mikuFusionGame/index.mjs +1195 -0
- package/dist/mikuFusionGame/index.mjs.map +1 -0
- package/dist/mmd/admin/index.d.mts +487 -0
- package/dist/mmd/admin/index.d.ts +487 -0
- package/dist/mmd/admin/index.js +1058 -0
- package/dist/mmd/admin/index.js.map +1 -0
- package/dist/mmd/admin/index.mjs +1027 -0
- package/dist/mmd/admin/index.mjs.map +1 -0
- package/dist/mmd/index.d.mts +2467 -0
- package/dist/mmd/index.d.ts +2467 -0
- package/dist/mmd/index.js +10119 -0
- package/dist/mmd/index.js.map +1 -0
- package/dist/mmd/index.mjs +10028 -0
- package/dist/mmd/index.mjs.map +1 -0
- package/dist/mmd/server/index.d.mts +139 -0
- package/dist/mmd/server/index.d.ts +139 -0
- package/dist/mmd/server/index.js +424 -0
- package/dist/mmd/server/index.js.map +1 -0
- package/dist/mmd/server/index.mjs +404 -0
- package/dist/mmd/server/index.mjs.map +1 -0
- package/dist/music/index.d.mts +74 -0
- package/dist/music/index.d.ts +74 -0
- package/dist/music/index.js +830 -0
- package/dist/music/index.js.map +1 -0
- package/dist/music/index.mjs +809 -0
- package/dist/music/index.mjs.map +1 -0
- package/dist/music/server/index.d.mts +1 -0
- package/dist/music/server/index.d.ts +1 -0
- package/dist/music/server/index.js +194 -0
- package/dist/music/server/index.js.map +1 -0
- package/dist/music/server/index.mjs +182 -0
- package/dist/music/server/index.mjs.map +1 -0
- package/dist/navigation/index.d.mts +93 -0
- package/dist/navigation/index.d.ts +93 -0
- package/dist/navigation/index.js +453 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/index.mjs +443 -0
- package/dist/navigation/index.mjs.map +1 -0
- package/dist/portfolio/index.d.mts +66 -0
- package/dist/portfolio/index.d.ts +66 -0
- package/dist/portfolio/index.js +736 -0
- package/dist/portfolio/index.js.map +1 -0
- package/dist/portfolio/index.mjs +724 -0
- package/dist/portfolio/index.mjs.map +1 -0
- package/dist/qqbot/server/index.d.mts +216 -0
- package/dist/qqbot/server/index.d.ts +216 -0
- package/dist/qqbot/server/index.js +394 -0
- package/dist/qqbot/server/index.js.map +1 -0
- package/dist/qqbot/server/index.mjs +385 -0
- package/dist/qqbot/server/index.mjs.map +1 -0
- package/dist/qqbot/ui/web/index.d.mts +10 -0
- package/dist/qqbot/ui/web/index.d.ts +10 -0
- package/dist/qqbot/ui/web/index.js +105 -0
- package/dist/qqbot/ui/web/index.js.map +1 -0
- package/dist/qqbot/ui/web/index.mjs +99 -0
- package/dist/qqbot/ui/web/index.mjs.map +1 -0
- package/dist/screenReceiver/index.d.mts +86 -0
- package/dist/screenReceiver/index.d.ts +86 -0
- package/dist/screenReceiver/index.js +281 -0
- package/dist/screenReceiver/index.js.map +1 -0
- package/dist/screenReceiver/index.mjs +273 -0
- package/dist/screenReceiver/index.mjs.map +1 -0
- package/dist/testYourself/admin/index.d.mts +58 -0
- package/dist/testYourself/admin/index.d.ts +58 -0
- package/dist/testYourself/admin/index.js +1009 -0
- package/dist/testYourself/admin/index.js.map +1 -0
- package/dist/testYourself/admin/index.mjs +1002 -0
- package/dist/testYourself/admin/index.mjs.map +1 -0
- package/dist/testYourself/index.d.mts +53 -0
- package/dist/testYourself/index.d.ts +53 -0
- package/dist/testYourself/index.js +2551 -0
- package/dist/testYourself/index.js.map +1 -0
- package/dist/testYourself/index.mjs +2531 -0
- package/dist/testYourself/index.mjs.map +1 -0
- package/dist/testYourself/server/index.d.mts +1029 -0
- package/dist/testYourself/server/index.d.ts +1029 -0
- package/dist/testYourself/server/index.js +825 -0
- package/dist/testYourself/server/index.js.map +1 -0
- package/dist/testYourself/server/index.mjs +816 -0
- package/dist/testYourself/server/index.mjs.map +1 -0
- package/dist/types-BTiaMsBz.d.mts +292 -0
- package/dist/types-DyG3ZV9V.d.mts +270 -0
- package/dist/types-DyG3ZV9V.d.ts +270 -0
- package/dist/types-ERmJyjx8.d.ts +292 -0
- package/dist/types-HorDyIRv.d.mts +303 -0
- package/dist/types-HorDyIRv.d.ts +303 -0
- package/dist/types-tQfupO6d.d.mts +70 -0
- package/dist/types-tQfupO6d.d.ts +70 -0
- package/dist/vocaloidBooth/index.d.mts +64 -0
- package/dist/vocaloidBooth/index.d.ts +64 -0
- package/dist/vocaloidBooth/index.js +376 -0
- package/dist/vocaloidBooth/index.js.map +1 -0
- package/dist/vocaloidBooth/index.mjs +362 -0
- package/dist/vocaloidBooth/index.mjs.map +1 -0
- package/dist/vocaloidBooth/server/index.d.mts +111 -0
- package/dist/vocaloidBooth/server/index.d.ts +111 -0
- package/dist/vocaloidBooth/server/index.js +247 -0
- package/dist/vocaloidBooth/server/index.js.map +1 -0
- package/dist/vocaloidBooth/server/index.mjs +237 -0
- package/dist/vocaloidBooth/server/index.mjs.map +1 -0
- package/dist/vocaloidBooth/web/index.d.mts +3 -0
- package/dist/vocaloidBooth/web/index.d.ts +3 -0
- package/dist/vocaloidBooth/web/index.js +376 -0
- package/dist/vocaloidBooth/web/index.js.map +1 -0
- package/dist/vocaloidBooth/web/index.mjs +362 -0
- package/dist/vocaloidBooth/web/index.mjs.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React__default, { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type NavigationDirection = 'horizontal' | 'vertical';
|
|
4
|
+
type NavigationPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
5
|
+
interface NavigationItem {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
href: string;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
isExternal?: boolean;
|
|
11
|
+
target?: '_blank' | '_self';
|
|
12
|
+
}
|
|
13
|
+
interface NavigationConfig {
|
|
14
|
+
direction: NavigationDirection;
|
|
15
|
+
position: NavigationPosition;
|
|
16
|
+
items: NavigationItem[];
|
|
17
|
+
avatar?: {
|
|
18
|
+
src: string;
|
|
19
|
+
alt?: string;
|
|
20
|
+
};
|
|
21
|
+
logo?: {
|
|
22
|
+
src: string;
|
|
23
|
+
alt?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
interface NavigationProps {
|
|
27
|
+
config: NavigationConfig;
|
|
28
|
+
isOpen: boolean;
|
|
29
|
+
onToggle: () => void;
|
|
30
|
+
activeItemId?: string;
|
|
31
|
+
onItemClick?: (item: NavigationItem) => void;
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare const Navigation: React__default.FC<NavigationProps>;
|
|
36
|
+
|
|
37
|
+
interface NavigationItemProps {
|
|
38
|
+
item: NavigationItem;
|
|
39
|
+
direction: NavigationDirection;
|
|
40
|
+
isActive?: boolean;
|
|
41
|
+
onClick: (item: NavigationItem) => void;
|
|
42
|
+
}
|
|
43
|
+
declare const NavigationItemComponent: React__default.FC<NavigationItemProps>;
|
|
44
|
+
|
|
45
|
+
interface NavigationToggleProps {
|
|
46
|
+
isOpen: boolean;
|
|
47
|
+
onClick: () => void;
|
|
48
|
+
position: NavigationPosition;
|
|
49
|
+
}
|
|
50
|
+
declare const NavigationToggle: React__default.FC<NavigationToggleProps>;
|
|
51
|
+
|
|
52
|
+
interface FloatingMenuProps {
|
|
53
|
+
/**
|
|
54
|
+
* 触发按钮的内容
|
|
55
|
+
*/
|
|
56
|
+
trigger: ReactNode;
|
|
57
|
+
/**
|
|
58
|
+
* 菜单内容
|
|
59
|
+
*/
|
|
60
|
+
menu: ReactNode;
|
|
61
|
+
/**
|
|
62
|
+
* 初始位置
|
|
63
|
+
*/
|
|
64
|
+
initialPosition?: {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* 是否默认打开菜单
|
|
70
|
+
*/
|
|
71
|
+
defaultOpen?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* 自定义类名
|
|
74
|
+
*/
|
|
75
|
+
className?: string;
|
|
76
|
+
/**
|
|
77
|
+
* 菜单类名
|
|
78
|
+
*/
|
|
79
|
+
menuClassName?: string;
|
|
80
|
+
/**
|
|
81
|
+
* 触发器类名
|
|
82
|
+
*/
|
|
83
|
+
triggerClassName?: string;
|
|
84
|
+
/**
|
|
85
|
+
* z-index
|
|
86
|
+
*/
|
|
87
|
+
zIndex?: number;
|
|
88
|
+
}
|
|
89
|
+
declare const FloatingMenu: React__default.FC<FloatingMenuProps>;
|
|
90
|
+
|
|
91
|
+
declare const FloatingMenuExample: React__default.FC;
|
|
92
|
+
|
|
93
|
+
export { FloatingMenu, FloatingMenuExample, Navigation, type NavigationConfig, type NavigationDirection, NavigationItemComponent as NavigationItem, type NavigationPosition, type NavigationProps, NavigationToggle };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React__default, { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
type NavigationDirection = 'horizontal' | 'vertical';
|
|
4
|
+
type NavigationPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
5
|
+
interface NavigationItem {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
href: string;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
isExternal?: boolean;
|
|
11
|
+
target?: '_blank' | '_self';
|
|
12
|
+
}
|
|
13
|
+
interface NavigationConfig {
|
|
14
|
+
direction: NavigationDirection;
|
|
15
|
+
position: NavigationPosition;
|
|
16
|
+
items: NavigationItem[];
|
|
17
|
+
avatar?: {
|
|
18
|
+
src: string;
|
|
19
|
+
alt?: string;
|
|
20
|
+
};
|
|
21
|
+
logo?: {
|
|
22
|
+
src: string;
|
|
23
|
+
alt?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
interface NavigationProps {
|
|
27
|
+
config: NavigationConfig;
|
|
28
|
+
isOpen: boolean;
|
|
29
|
+
onToggle: () => void;
|
|
30
|
+
activeItemId?: string;
|
|
31
|
+
onItemClick?: (item: NavigationItem) => void;
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare const Navigation: React__default.FC<NavigationProps>;
|
|
36
|
+
|
|
37
|
+
interface NavigationItemProps {
|
|
38
|
+
item: NavigationItem;
|
|
39
|
+
direction: NavigationDirection;
|
|
40
|
+
isActive?: boolean;
|
|
41
|
+
onClick: (item: NavigationItem) => void;
|
|
42
|
+
}
|
|
43
|
+
declare const NavigationItemComponent: React__default.FC<NavigationItemProps>;
|
|
44
|
+
|
|
45
|
+
interface NavigationToggleProps {
|
|
46
|
+
isOpen: boolean;
|
|
47
|
+
onClick: () => void;
|
|
48
|
+
position: NavigationPosition;
|
|
49
|
+
}
|
|
50
|
+
declare const NavigationToggle: React__default.FC<NavigationToggleProps>;
|
|
51
|
+
|
|
52
|
+
interface FloatingMenuProps {
|
|
53
|
+
/**
|
|
54
|
+
* 触发按钮的内容
|
|
55
|
+
*/
|
|
56
|
+
trigger: ReactNode;
|
|
57
|
+
/**
|
|
58
|
+
* 菜单内容
|
|
59
|
+
*/
|
|
60
|
+
menu: ReactNode;
|
|
61
|
+
/**
|
|
62
|
+
* 初始位置
|
|
63
|
+
*/
|
|
64
|
+
initialPosition?: {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* 是否默认打开菜单
|
|
70
|
+
*/
|
|
71
|
+
defaultOpen?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* 自定义类名
|
|
74
|
+
*/
|
|
75
|
+
className?: string;
|
|
76
|
+
/**
|
|
77
|
+
* 菜单类名
|
|
78
|
+
*/
|
|
79
|
+
menuClassName?: string;
|
|
80
|
+
/**
|
|
81
|
+
* 触发器类名
|
|
82
|
+
*/
|
|
83
|
+
triggerClassName?: string;
|
|
84
|
+
/**
|
|
85
|
+
* z-index
|
|
86
|
+
*/
|
|
87
|
+
zIndex?: number;
|
|
88
|
+
}
|
|
89
|
+
declare const FloatingMenu: React__default.FC<FloatingMenuProps>;
|
|
90
|
+
|
|
91
|
+
declare const FloatingMenuExample: React__default.FC;
|
|
92
|
+
|
|
93
|
+
export { FloatingMenu, FloatingMenuExample, Navigation, type NavigationConfig, type NavigationDirection, NavigationItemComponent as NavigationItem, type NavigationPosition, type NavigationProps, NavigationToggle };
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React5 = require('react');
|
|
4
|
+
var clsx = require('clsx');
|
|
5
|
+
var reactDom = require('react-dom');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var React5__default = /*#__PURE__*/_interopDefault(React5);
|
|
10
|
+
|
|
11
|
+
// src/navigation/Navigation.tsx
|
|
12
|
+
var NavigationItemComponent = ({
|
|
13
|
+
item,
|
|
14
|
+
direction,
|
|
15
|
+
isActive,
|
|
16
|
+
onClick
|
|
17
|
+
}) => {
|
|
18
|
+
const handleClick = (e) => {
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
onClick(item);
|
|
21
|
+
};
|
|
22
|
+
const getItemClasses = () => {
|
|
23
|
+
const baseClasses = `
|
|
24
|
+
group relative flex items-center gap-3
|
|
25
|
+
transition-all duration-300 ease-in-out
|
|
26
|
+
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50
|
|
27
|
+
rounded-lg
|
|
28
|
+
`;
|
|
29
|
+
const directionClasses = direction === "vertical" ? "px-4 py-3 w-full justify-start" : "px-3 py-2 justify-center";
|
|
30
|
+
const stateClasses = isActive ? "bg-blue-500 text-white shadow-lg" : item.isExternal ? "text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200" : "text-gray-700 hover:bg-blue-50 hover:text-blue-600";
|
|
31
|
+
return baseClasses + " " + directionClasses + " " + stateClasses;
|
|
32
|
+
};
|
|
33
|
+
return /* @__PURE__ */ React5__default.default.createElement(
|
|
34
|
+
"a",
|
|
35
|
+
{
|
|
36
|
+
href: item.href,
|
|
37
|
+
onClick: handleClick,
|
|
38
|
+
target: item.target,
|
|
39
|
+
rel: item.isExternal ? "noopener noreferrer" : void 0,
|
|
40
|
+
className: getItemClasses()
|
|
41
|
+
},
|
|
42
|
+
item.icon && /* @__PURE__ */ React5__default.default.createElement("span", { className: "flex-shrink-0" }, item.icon),
|
|
43
|
+
/* @__PURE__ */ React5__default.default.createElement("span", { className: clsx.clsx("font-medium", direction === "vertical" ? "text-sm" : "text-xs") }, item.label),
|
|
44
|
+
item.isExternal && /* @__PURE__ */ React5__default.default.createElement(
|
|
45
|
+
"svg",
|
|
46
|
+
{
|
|
47
|
+
className: "w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity",
|
|
48
|
+
fill: "none",
|
|
49
|
+
stroke: "currentColor",
|
|
50
|
+
viewBox: "0 0 24 24"
|
|
51
|
+
},
|
|
52
|
+
/* @__PURE__ */ React5__default.default.createElement(
|
|
53
|
+
"path",
|
|
54
|
+
{
|
|
55
|
+
strokeLinecap: "round",
|
|
56
|
+
strokeLinejoin: "round",
|
|
57
|
+
strokeWidth: 2,
|
|
58
|
+
d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
),
|
|
62
|
+
direction === "vertical" && isActive && /* @__PURE__ */ React5__default.default.createElement("div", { className: "absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full" })
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
var NavigationItem_default = NavigationItemComponent;
|
|
66
|
+
var Navigation = ({
|
|
67
|
+
config,
|
|
68
|
+
isOpen,
|
|
69
|
+
activeItemId,
|
|
70
|
+
onItemClick,
|
|
71
|
+
className = ""
|
|
72
|
+
}) => {
|
|
73
|
+
const { direction, position, items, avatar, logo } = config;
|
|
74
|
+
const getContainerClasses = () => {
|
|
75
|
+
const baseClasses = `
|
|
76
|
+
fixed z-[90]
|
|
77
|
+
bg-white/95 backdrop-blur-lg
|
|
78
|
+
border border-gray-200/50
|
|
79
|
+
shadow-2xl
|
|
80
|
+
transition-all duration-500 ease-in-out
|
|
81
|
+
`;
|
|
82
|
+
if (direction === "vertical") {
|
|
83
|
+
const verticalClasses = "h-screen w-64 flex flex-col";
|
|
84
|
+
const positionClasses = position === "left" ? "left-0 top-0 " + (isOpen ? "translate-x-0" : "-translate-x-full") : "right-0 top-0 " + (isOpen ? "translate-x-0" : "translate-x-full");
|
|
85
|
+
return baseClasses + " " + verticalClasses + " " + positionClasses;
|
|
86
|
+
} else {
|
|
87
|
+
const horizontalClasses = "w-full h-16 flex items-center";
|
|
88
|
+
const positionClasses = position === "top" ? "top-0 left-0 right-0 " + (isOpen ? "translate-y-0" : "-translate-y-full") : "bottom-0 left-0 right-0 " + (isOpen ? "translate-y-0" : "translate-y-full");
|
|
89
|
+
return baseClasses + " " + horizontalClasses + " " + positionClasses;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const getContentClasses = () => {
|
|
93
|
+
if (direction === "vertical") {
|
|
94
|
+
return "flex flex-col h-full p-4";
|
|
95
|
+
} else {
|
|
96
|
+
return "flex items-center justify-between w-full px-6";
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const getItemsListClasses = () => {
|
|
100
|
+
if (direction === "vertical") {
|
|
101
|
+
return "flex flex-col gap-2 flex-1 overflow-y-auto mt-4";
|
|
102
|
+
} else {
|
|
103
|
+
return "flex items-center gap-4";
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const handleItemClick = (item) => {
|
|
107
|
+
if (item.isExternal) {
|
|
108
|
+
window.open(item.href, item.target || "_blank");
|
|
109
|
+
} else if (item.href.startsWith("#")) {
|
|
110
|
+
const element = document.getElementById(item.id);
|
|
111
|
+
if (element) {
|
|
112
|
+
element.scrollIntoView({ behavior: "smooth" });
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
window.location.href = item.href;
|
|
116
|
+
}
|
|
117
|
+
onItemClick?.(item);
|
|
118
|
+
};
|
|
119
|
+
if (!isOpen) return null;
|
|
120
|
+
return /* @__PURE__ */ React5__default.default.createElement("nav", { className: clsx.clsx(getContainerClasses(), className) }, /* @__PURE__ */ React5__default.default.createElement("div", { className: getContentClasses() }, logo && /* @__PURE__ */ React5__default.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React5__default.default.createElement(
|
|
121
|
+
"img",
|
|
122
|
+
{
|
|
123
|
+
src: logo.src,
|
|
124
|
+
alt: logo.alt || "Logo",
|
|
125
|
+
className: "h-8 w-auto"
|
|
126
|
+
}
|
|
127
|
+
)), direction === "vertical" && /* @__PURE__ */ React5__default.default.createElement("div", { className: "h-12 flex-shrink-0" }), /* @__PURE__ */ React5__default.default.createElement("div", { className: getItemsListClasses() }, items.map((item) => /* @__PURE__ */ React5__default.default.createElement(
|
|
128
|
+
NavigationItem_default,
|
|
129
|
+
{
|
|
130
|
+
key: item.id,
|
|
131
|
+
item,
|
|
132
|
+
direction,
|
|
133
|
+
isActive: activeItemId === item.id,
|
|
134
|
+
onClick: handleItemClick
|
|
135
|
+
}
|
|
136
|
+
))), avatar && direction === "vertical" && /* @__PURE__ */ React5__default.default.createElement("div", { className: "flex items-center justify-center mt-auto pt-4" }, /* @__PURE__ */ React5__default.default.createElement(
|
|
137
|
+
"img",
|
|
138
|
+
{
|
|
139
|
+
src: avatar.src,
|
|
140
|
+
alt: avatar.alt || "Avatar",
|
|
141
|
+
className: "w-10 h-10 rounded-full border-2 border-gray-200"
|
|
142
|
+
}
|
|
143
|
+
)), avatar && direction === "horizontal" && /* @__PURE__ */ React5__default.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React5__default.default.createElement(
|
|
144
|
+
"img",
|
|
145
|
+
{
|
|
146
|
+
src: avatar.src,
|
|
147
|
+
alt: avatar.alt || "Avatar",
|
|
148
|
+
className: "w-8 h-8 rounded-full border-2 border-gray-200"
|
|
149
|
+
}
|
|
150
|
+
))));
|
|
151
|
+
};
|
|
152
|
+
var Navigation_default = Navigation;
|
|
153
|
+
var NavigationToggle = ({
|
|
154
|
+
isOpen,
|
|
155
|
+
onClick,
|
|
156
|
+
position
|
|
157
|
+
}) => {
|
|
158
|
+
const getPositionClasses = () => {
|
|
159
|
+
switch (position) {
|
|
160
|
+
case "top":
|
|
161
|
+
return "top-4 left-4";
|
|
162
|
+
case "bottom":
|
|
163
|
+
return "bottom-4 left-4";
|
|
164
|
+
case "left":
|
|
165
|
+
return "top-4 left-4";
|
|
166
|
+
case "right":
|
|
167
|
+
return "top-4 right-4";
|
|
168
|
+
default:
|
|
169
|
+
return "top-4 left-4";
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return /* @__PURE__ */ React5__default.default.createElement(
|
|
173
|
+
"button",
|
|
174
|
+
{
|
|
175
|
+
onClick,
|
|
176
|
+
className: clsx.clsx(
|
|
177
|
+
"fixed",
|
|
178
|
+
getPositionClasses(),
|
|
179
|
+
"z-[100] p-3 rounded-xl bg-white/90 backdrop-blur-md shadow-lg hover:shadow-xl border border-gray-200/50 transition-all duration-300 ease-in-out hover:scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50"
|
|
180
|
+
),
|
|
181
|
+
"aria-label": isOpen ? "\u5173\u95ED\u5BFC\u822A\u680F" : "\u6253\u5F00\u5BFC\u822A\u680F"
|
|
182
|
+
},
|
|
183
|
+
/* @__PURE__ */ React5__default.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React5__default.default.createElement(
|
|
184
|
+
"span",
|
|
185
|
+
{
|
|
186
|
+
className: clsx.clsx(
|
|
187
|
+
"block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out",
|
|
188
|
+
isOpen ? "rotate-45 translate-y-0.5" : ""
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
), /* @__PURE__ */ React5__default.default.createElement(
|
|
192
|
+
"span",
|
|
193
|
+
{
|
|
194
|
+
className: clsx.clsx(
|
|
195
|
+
"block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1",
|
|
196
|
+
isOpen ? "opacity-0 scale-0" : "opacity-100 scale-100"
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
), /* @__PURE__ */ React5__default.default.createElement(
|
|
200
|
+
"span",
|
|
201
|
+
{
|
|
202
|
+
className: clsx.clsx(
|
|
203
|
+
"block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1",
|
|
204
|
+
isOpen ? "-rotate-45 -translate-y-2.5" : ""
|
|
205
|
+
)
|
|
206
|
+
}
|
|
207
|
+
))
|
|
208
|
+
);
|
|
209
|
+
};
|
|
210
|
+
var NavigationToggle_default = NavigationToggle;
|
|
211
|
+
var FloatingMenu = ({
|
|
212
|
+
trigger,
|
|
213
|
+
menu,
|
|
214
|
+
initialPosition = { x: 20, y: 20 },
|
|
215
|
+
defaultOpen = false,
|
|
216
|
+
className = "",
|
|
217
|
+
menuClassName = "",
|
|
218
|
+
triggerClassName = "",
|
|
219
|
+
zIndex = 1e3
|
|
220
|
+
}) => {
|
|
221
|
+
const [position, setPosition] = React5.useState(initialPosition);
|
|
222
|
+
const [isMenuOpen, setIsMenuOpen] = React5.useState(defaultOpen);
|
|
223
|
+
const [menuDirection, setMenuDirection] = React5.useState("right");
|
|
224
|
+
const [isDragging, setIsDragging] = React5.useState(false);
|
|
225
|
+
const [dragOffset, setDragOffset] = React5.useState({ x: 0, y: 0 });
|
|
226
|
+
const containerRef = React5.useRef(null);
|
|
227
|
+
const [mounted, setMounted] = React5.useState(false);
|
|
228
|
+
const [hasDragged, setHasDragged] = React5.useState(false);
|
|
229
|
+
const dragTimerRef = React5.useRef(null);
|
|
230
|
+
const mouseDownPosRef = React5.useRef(null);
|
|
231
|
+
React5.useEffect(() => {
|
|
232
|
+
setMounted(true);
|
|
233
|
+
return () => setMounted(false);
|
|
234
|
+
}, []);
|
|
235
|
+
React5.useEffect(() => {
|
|
236
|
+
if (!mounted || !containerRef.current) return;
|
|
237
|
+
const updateMenuDirection = () => {
|
|
238
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
239
|
+
if (!rect) return;
|
|
240
|
+
const windowWidth = window.innerWidth;
|
|
241
|
+
const middlePoint = windowWidth / 2;
|
|
242
|
+
setMenuDirection(rect.left < middlePoint ? "right" : "left");
|
|
243
|
+
};
|
|
244
|
+
updateMenuDirection();
|
|
245
|
+
window.addEventListener("resize", updateMenuDirection);
|
|
246
|
+
window.addEventListener("scroll", updateMenuDirection);
|
|
247
|
+
return () => {
|
|
248
|
+
window.removeEventListener("resize", updateMenuDirection);
|
|
249
|
+
window.removeEventListener("scroll", updateMenuDirection);
|
|
250
|
+
};
|
|
251
|
+
}, [mounted]);
|
|
252
|
+
const handleMouseDown = (e) => {
|
|
253
|
+
if (!containerRef.current) return;
|
|
254
|
+
e.stopPropagation();
|
|
255
|
+
mouseDownPosRef.current = { x: e.clientX, y: e.clientY };
|
|
256
|
+
const rect = containerRef.current.getBoundingClientRect();
|
|
257
|
+
setDragOffset({
|
|
258
|
+
x: e.clientX - rect.left,
|
|
259
|
+
y: e.clientY - rect.top
|
|
260
|
+
});
|
|
261
|
+
setHasDragged(false);
|
|
262
|
+
setIsDragging(true);
|
|
263
|
+
};
|
|
264
|
+
React5.useEffect(() => {
|
|
265
|
+
if (!isDragging) return;
|
|
266
|
+
const handleMouseMove = (e) => {
|
|
267
|
+
if (mouseDownPosRef.current) {
|
|
268
|
+
const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);
|
|
269
|
+
const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);
|
|
270
|
+
if (dx > 3 || dy > 3) {
|
|
271
|
+
setHasDragged(true);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
const newX = e.clientX - dragOffset.x;
|
|
275
|
+
const newY = e.clientY - dragOffset.y;
|
|
276
|
+
const windowWidth = window.innerWidth;
|
|
277
|
+
const windowHeight = window.innerHeight;
|
|
278
|
+
setPosition({
|
|
279
|
+
x: Math.min(Math.max(newX, 0), windowWidth - 50),
|
|
280
|
+
y: Math.min(Math.max(newY, 0), windowHeight - 50)
|
|
281
|
+
});
|
|
282
|
+
};
|
|
283
|
+
const handleMouseUp = () => {
|
|
284
|
+
setIsDragging(false);
|
|
285
|
+
mouseDownPosRef.current = null;
|
|
286
|
+
if (dragTimerRef.current) {
|
|
287
|
+
window.clearTimeout(dragTimerRef.current);
|
|
288
|
+
}
|
|
289
|
+
dragTimerRef.current = window.setTimeout(() => {
|
|
290
|
+
setHasDragged(false);
|
|
291
|
+
}, 300);
|
|
292
|
+
};
|
|
293
|
+
document.addEventListener("mousemove", handleMouseMove);
|
|
294
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
295
|
+
return () => {
|
|
296
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
297
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
298
|
+
};
|
|
299
|
+
}, [isDragging, dragOffset]);
|
|
300
|
+
React5.useEffect(() => {
|
|
301
|
+
return () => {
|
|
302
|
+
if (dragTimerRef.current) {
|
|
303
|
+
window.clearTimeout(dragTimerRef.current);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}, []);
|
|
307
|
+
const toggleMenu = (e) => {
|
|
308
|
+
e.stopPropagation();
|
|
309
|
+
if (hasDragged) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
setIsMenuOpen(!isMenuOpen);
|
|
313
|
+
};
|
|
314
|
+
React5.useEffect(() => {
|
|
315
|
+
if (!isMenuOpen) return;
|
|
316
|
+
const handleClickOutside = (e) => {
|
|
317
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
318
|
+
setIsMenuOpen(false);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
322
|
+
return () => {
|
|
323
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
324
|
+
};
|
|
325
|
+
}, [isMenuOpen]);
|
|
326
|
+
React5.useEffect(() => {
|
|
327
|
+
if (!mounted) return;
|
|
328
|
+
const checkBoundaries = () => {
|
|
329
|
+
const windowWidth = window.innerWidth;
|
|
330
|
+
const windowHeight = window.innerHeight;
|
|
331
|
+
setPosition((prev) => {
|
|
332
|
+
const newX = Math.min(Math.max(prev.x, 0), windowWidth - 50);
|
|
333
|
+
const newY = Math.min(Math.max(prev.y, 0), windowHeight - 50);
|
|
334
|
+
if (newX !== prev.x || newY !== prev.y) {
|
|
335
|
+
return { x: newX, y: newY };
|
|
336
|
+
}
|
|
337
|
+
return prev;
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
window.addEventListener("resize", checkBoundaries);
|
|
341
|
+
return () => {
|
|
342
|
+
window.removeEventListener("resize", checkBoundaries);
|
|
343
|
+
};
|
|
344
|
+
}, [mounted]);
|
|
345
|
+
if (!mounted) return null;
|
|
346
|
+
return reactDom.createPortal(
|
|
347
|
+
/* @__PURE__ */ React5__default.default.createElement(
|
|
348
|
+
"div",
|
|
349
|
+
{
|
|
350
|
+
ref: containerRef,
|
|
351
|
+
className: clsx.clsx("fixed select-none box-border", className),
|
|
352
|
+
style: {
|
|
353
|
+
left: position.x + "px",
|
|
354
|
+
top: position.y + "px",
|
|
355
|
+
zIndex
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
/* @__PURE__ */ React5__default.default.createElement(
|
|
359
|
+
"div",
|
|
360
|
+
{
|
|
361
|
+
className: clsx.clsx(
|
|
362
|
+
"flex items-center justify-center w-12 h-12 md:w-12 md:h-12 bg-white rounded-full shadow-md hover:shadow-lg cursor-grab active:cursor-grabbing transition-all duration-200 hover:scale-105 active:scale-95",
|
|
363
|
+
triggerClassName
|
|
364
|
+
),
|
|
365
|
+
onMouseDown: handleMouseDown,
|
|
366
|
+
onClick: toggleMenu
|
|
367
|
+
},
|
|
368
|
+
trigger
|
|
369
|
+
),
|
|
370
|
+
isMenuOpen && /* @__PURE__ */ React5__default.default.createElement(
|
|
371
|
+
"div",
|
|
372
|
+
{
|
|
373
|
+
className: clsx.clsx(
|
|
374
|
+
"absolute top-0 bg-white rounded-lg shadow-xl p-3 min-w-[200px] md:min-w-[200px] max-w-[300px] z-[1000] transition-all duration-200",
|
|
375
|
+
isMenuOpen ? "opacity-100 scale-100" : "opacity-0 scale-95",
|
|
376
|
+
menuDirection === "left" ? "right-[calc(100%+10px)]" : "left-[calc(100%+10px)]",
|
|
377
|
+
menuClassName
|
|
378
|
+
),
|
|
379
|
+
onClick: (e) => e.stopPropagation(),
|
|
380
|
+
onMouseDown: (e) => e.stopPropagation(),
|
|
381
|
+
onMouseUp: (e) => e.stopPropagation(),
|
|
382
|
+
onTouchStart: (e) => e.stopPropagation(),
|
|
383
|
+
onTouchMove: (e) => e.stopPropagation(),
|
|
384
|
+
onTouchEnd: (e) => e.stopPropagation(),
|
|
385
|
+
onPointerDown: (e) => e.stopPropagation(),
|
|
386
|
+
onPointerUp: (e) => e.stopPropagation()
|
|
387
|
+
},
|
|
388
|
+
menu
|
|
389
|
+
)
|
|
390
|
+
),
|
|
391
|
+
document.body
|
|
392
|
+
);
|
|
393
|
+
};
|
|
394
|
+
var FloatingMenu_default = FloatingMenu;
|
|
395
|
+
var FloatingMenuExample = () => {
|
|
396
|
+
const [windowWidth, setWindowWidth] = React5.useState(0);
|
|
397
|
+
React5.useEffect(() => {
|
|
398
|
+
setWindowWidth(window.innerWidth);
|
|
399
|
+
const handleResize = () => setWindowWidth(window.innerWidth);
|
|
400
|
+
window.addEventListener("resize", handleResize);
|
|
401
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
402
|
+
}, []);
|
|
403
|
+
const menuItems = [
|
|
404
|
+
{ id: 1, label: "\u9996\u9875", icon: "\u{1F3E0}" },
|
|
405
|
+
{ id: 2, label: "\u8BBE\u7F6E", icon: "\u2699\uFE0F" },
|
|
406
|
+
{ id: 3, label: "\u6D88\u606F", icon: "\u{1F4E9}" },
|
|
407
|
+
{ id: 4, label: "\u5E2E\u52A9", icon: "\u2753" },
|
|
408
|
+
{ id: 5, label: "\u9000\u51FA", icon: "\u{1F6AA}" }
|
|
409
|
+
];
|
|
410
|
+
const handleMenuItemClick = (id) => {
|
|
411
|
+
console.log("\u70B9\u51FB\u4E86\u83DC\u5355\u9879: " + id);
|
|
412
|
+
};
|
|
413
|
+
return /* @__PURE__ */ React5__default.default.createElement("div", { className: "w-full h-screen bg-gray-100 relative p-8" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "max-w-2xl mx-auto bg-white rounded-2xl shadow-sm p-8 mt-12" }, /* @__PURE__ */ React5__default.default.createElement("h1", { className: "text-3xl font-bold mb-4 text-gray-900" }, "\u60AC\u6D6E\u83DC\u5355\u793A\u4F8B"), /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-gray-600 leading-relaxed mb-6" }, "\u8FD9\u662F\u4E00\u4E2A\u53EF\u62D6\u62FD\u7684\u60AC\u6D6E\u83DC\u5355\u7EC4\u4EF6\u793A\u4F8B\u3002\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u62D6\u52A8\u4E0B\u65B9\u7684 ", /* @__PURE__ */ React5__default.default.createElement("span", { className: "font-bold text-blue-600" }, "\u84DD\u8272\u6309\u94AE"), " \u5230\u5904\u79FB\u52A8\u3002"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "bg-blue-50 border-l-4 border-blue-500 p-4 mb-6" }, /* @__PURE__ */ React5__default.default.createElement("p", { className: "text-sm text-blue-700" }, /* @__PURE__ */ React5__default.default.createElement("strong", null, "\u667A\u80FD\u5B9A\u4F4D\uFF1A"), " \u83DC\u5355\u4F1A\u6839\u636E\u6309\u94AE\u5728\u5C4F\u5E55\u4E0A\u7684\u4F4D\u7F6E\u81EA\u52A8\u8C03\u6574\u5F39\u51FA\u65B9\u5411\uFF08\u5411\u5DE6\u6216\u5411\u53F3\uFF09\u3002"))), /* @__PURE__ */ React5__default.default.createElement(
|
|
414
|
+
FloatingMenu_default,
|
|
415
|
+
{
|
|
416
|
+
trigger: /* @__PURE__ */ React5__default.default.createElement("div", { className: "w-12 h-12 bg-blue-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React5__default.default.createElement("span", { className: "text-xl" }, "\u2795")),
|
|
417
|
+
menu: /* @__PURE__ */ React5__default.default.createElement("div", { className: "w-48 bg-white rounded-xl shadow-xl border border-gray-100 overflow-hidden" }, /* @__PURE__ */ React5__default.default.createElement("div", { className: "px-4 py-3 border-b border-gray-100" }, /* @__PURE__ */ React5__default.default.createElement("h3", { className: "text-sm font-bold text-gray-900" }, "\u5FEB\u6377\u83DC\u5355")), /* @__PURE__ */ React5__default.default.createElement("ul", { className: "py-1" }, menuItems.map((item) => /* @__PURE__ */ React5__default.default.createElement(
|
|
418
|
+
"li",
|
|
419
|
+
{
|
|
420
|
+
key: item.id,
|
|
421
|
+
className: "flex items-center gap-3 px-4 py-2.5 hover:bg-blue-50 text-gray-700 hover:text-blue-600 cursor-pointer transition-colors text-sm",
|
|
422
|
+
onClick: () => handleMenuItemClick(item.id)
|
|
423
|
+
},
|
|
424
|
+
/* @__PURE__ */ React5__default.default.createElement("span", { className: "text-lg" }, item.icon),
|
|
425
|
+
/* @__PURE__ */ React5__default.default.createElement("span", { className: "font-medium" }, item.label)
|
|
426
|
+
)))),
|
|
427
|
+
initialPosition: { x: 100, y: 100 }
|
|
428
|
+
}
|
|
429
|
+
), windowWidth > 0 && /* @__PURE__ */ React5__default.default.createElement(
|
|
430
|
+
FloatingMenu_default,
|
|
431
|
+
{
|
|
432
|
+
trigger: /* @__PURE__ */ React5__default.default.createElement("div", { className: "w-12 h-12 bg-purple-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React5__default.default.createElement("span", { className: "text-xl" }, "\u{1F50D}")),
|
|
433
|
+
menu: /* @__PURE__ */ React5__default.default.createElement("div", { className: "w-64 bg-white rounded-xl shadow-xl border border-gray-100 p-4" }, /* @__PURE__ */ React5__default.default.createElement("h3", { className: "text-sm font-bold text-gray-900 mb-3" }, "\u5FEB\u901F\u641C\u7D22"), /* @__PURE__ */ React5__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React5__default.default.createElement(
|
|
434
|
+
"input",
|
|
435
|
+
{
|
|
436
|
+
type: "text",
|
|
437
|
+
placeholder: "\u8F93\u5165\u5173\u952E\u5B57...",
|
|
438
|
+
className: "w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent outline-none"
|
|
439
|
+
}
|
|
440
|
+
), /* @__PURE__ */ React5__default.default.createElement("button", { className: "w-full bg-purple-600 text-white py-2 rounded-lg text-sm font-medium hover:bg-purple-700 transition-colors" }, "\u641C\u7D22"))),
|
|
441
|
+
initialPosition: { x: windowWidth - 100, y: 100 }
|
|
442
|
+
}
|
|
443
|
+
));
|
|
444
|
+
};
|
|
445
|
+
var FloatingMenuExample_default = FloatingMenuExample;
|
|
446
|
+
|
|
447
|
+
exports.FloatingMenu = FloatingMenu_default;
|
|
448
|
+
exports.FloatingMenuExample = FloatingMenuExample_default;
|
|
449
|
+
exports.Navigation = Navigation_default;
|
|
450
|
+
exports.NavigationItem = NavigationItem_default;
|
|
451
|
+
exports.NavigationToggle = NavigationToggle_default;
|
|
452
|
+
//# sourceMappingURL=index.js.map
|
|
453
|
+
//# sourceMappingURL=index.js.map
|