@mks2508/mks-ui 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react-ui/index.js +2 -2
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts +2 -0
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.js +173 -43
- package/dist/react-ui/ui/Dialog/Dialog.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/Dialog/Dialog.styles.js +1 -0
- package/dist/react-ui/ui/Dialog/Dialog.types.d.ts +20 -1
- package/dist/react-ui/ui/Dialog/Dialog.types.d.ts.map +1 -1
- package/dist/react-ui/ui/Dialog/index.d.ts +28 -7
- package/dist/react-ui/ui/Dialog/index.d.ts.map +1 -1
- package/dist/react-ui/ui/Dialog/index.js +32 -5
- package/dist/react-ui/ui/DynamicToggle/{DynamicToggle-DOR3Ld-k.css → DynamicToggle-DJLwEkHr.css} +12 -19
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +12 -20
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -0
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.js +7 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +55 -31
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.d.ts +9 -3
- package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.js +47 -34
- package/dist/react-ui/ui/index.js +1 -1
- package/package.json +52 -13
- package/src/assets/react.svg +0 -1
- package/src/core/index.ts +0 -7
- package/src/core/types.ts +0 -82
- package/src/css.d.ts +0 -7
- package/src/index.css +0 -129
- package/src/index.ts +0 -29
- package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +0 -278
- package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +0 -97
- package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +0 -155
- package/src/react-ui/blocks/Terminal/Terminal.theme.ts +0 -80
- package/src/react-ui/blocks/Terminal/Terminal.types.ts +0 -438
- package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +0 -38
- package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +0 -254
- package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +0 -73
- package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +0 -269
- package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +0 -326
- package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +0 -230
- package/src/react-ui/blocks/Terminal/XTermAdapter.ts +0 -163
- package/src/react-ui/blocks/Terminal/chrome.ts +0 -25
- package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +0 -316
- package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +0 -218
- package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +0 -386
- package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +0 -67
- package/src/react-ui/blocks/Terminal/components/index.ts +0 -10
- package/src/react-ui/blocks/Terminal/display.ts +0 -46
- package/src/react-ui/blocks/Terminal/hooks/index.ts +0 -22
- package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +0 -229
- package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +0 -292
- package/src/react-ui/blocks/Terminal/index.ts +0 -111
- package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +0 -330
- package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +0 -242
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +0 -202
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +0 -140
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +0 -68
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +0 -85
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +0 -383
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +0 -439
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +0 -550
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +0 -259
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +0 -75
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +0 -266
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +0 -82
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +0 -112
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +0 -178
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +0 -203
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +0 -252
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +0 -334
- package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +0 -261
- package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +0 -248
- package/src/react-ui/blocks/Terminal/panel/index.ts +0 -72
- package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +0 -59
- package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +0 -59
- package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +0 -180
- package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +0 -248
- package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +0 -283
- package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +0 -686
- package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +0 -466
- package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +0 -343
- package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +0 -167
- package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +0 -348
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +0 -251
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +0 -390
- package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +0 -320
- package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +0 -20
- package/src/react-ui/blocks/Terminal/parsing/index.ts +0 -69
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +0 -68
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +0 -436
- package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +0 -14
- package/src/react-ui/blocks/index.ts +0 -11
- package/src/react-ui/components/MorphingPopover/MorphingPopover.types.ts +0 -49
- package/src/react-ui/components/MorphingPopover/index.tsx +0 -186
- package/src/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -153
- package/src/react-ui/components/index.ts +0 -9
- package/src/react-ui/hooks/Animation/UseAutoHeight.tsx +0 -123
- package/src/react-ui/hooks/DOM/UseIsInView.tsx +0 -44
- package/src/react-ui/hooks/Formatting/UseListFormat.ts +0 -134
- package/src/react-ui/hooks/State/UseControlledState.tsx +0 -57
- package/src/react-ui/hooks/State/UseDataState.tsx +0 -76
- package/src/react-ui/hooks/index.ts +0 -20
- package/src/react-ui/icons/index.ts +0 -12
- package/src/react-ui/icons/lucide-animated/activity.tsx +0 -109
- package/src/react-ui/icons/lucide-animated/arrow-down-to-line.tsx +0 -51
- package/src/react-ui/icons/lucide-animated/arrow-up.tsx +0 -50
- package/src/react-ui/icons/lucide-animated/bell-electric.tsx +0 -124
- package/src/react-ui/icons/lucide-animated/bell.tsx +0 -93
- package/src/react-ui/icons/lucide-animated/bot.tsx +0 -122
- package/src/react-ui/icons/lucide-animated/box.tsx +0 -117
- package/src/react-ui/icons/lucide-animated/check.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/circle-check.tsx +0 -107
- package/src/react-ui/icons/lucide-animated/delete.tsx +0 -133
- package/src/react-ui/icons/lucide-animated/download.tsx +0 -99
- package/src/react-ui/icons/lucide-animated/edit-2.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/globe.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/home.tsx +0 -103
- package/src/react-ui/icons/lucide-animated/index.ts +0 -38
- package/src/react-ui/icons/lucide-animated/layers.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +0 -143
- package/src/react-ui/icons/lucide-animated/list.tsx +0 -54
- package/src/react-ui/icons/lucide-animated/package.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/palette.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/plus.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/refresh-cw.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/rocket.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/save.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/search.tsx +0 -94
- package/src/react-ui/icons/lucide-animated/settings.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/terminal.tsx +0 -46
- package/src/react-ui/icons/lucide-animated/trash-2.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/trending-down.tsx +0 -151
- package/src/react-ui/icons/lucide-animated/trending-up.tsx +0 -150
- package/src/react-ui/icons/lucide-animated/type.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/upload.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/x.tsx +0 -102
- package/src/react-ui/index.ts +0 -30
- package/src/react-ui/lib/get-strict-context.tsx +0 -56
- package/src/react-ui/lib/icon-wrapper.tsx +0 -70
- package/src/react-ui/lib/index.ts +0 -9
- package/src/react-ui/lib/utils.ts +0 -24
- package/src/react-ui/primitives/AutoHeight/index.tsx +0 -74
- package/src/react-ui/primitives/CountingNumber/index.tsx +0 -147
- package/src/react-ui/primitives/Highlight/Highlight.types.ts +0 -136
- package/src/react-ui/primitives/Highlight/index.tsx +0 -577
- package/src/react-ui/primitives/Slot/index.tsx +0 -128
- package/src/react-ui/primitives/index.ts +0 -16
- package/src/react-ui/primitives/waapi/Gooey/Gooey.types.ts +0 -141
- package/src/react-ui/primitives/waapi/Gooey/GooeyCanvas.tsx +0 -217
- package/src/react-ui/primitives/waapi/Gooey/GooeyFilter.tsx +0 -77
- package/src/react-ui/primitives/waapi/Gooey/MorphPath.tsx +0 -58
- package/src/react-ui/primitives/waapi/Gooey/gooey-utils.ts +0 -253
- package/src/react-ui/primitives/waapi/Gooey/index.ts +0 -50
- package/src/react-ui/primitives/waapi/Gooey/useMorphPath.ts +0 -48
- package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +0 -106
- package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +0 -21
- package/src/react-ui/primitives/waapi/Morph/index.tsx +0 -56
- package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +0 -12
- package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +0 -89
- package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +0 -176
- package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +0 -87
- package/src/react-ui/primitives/waapi/Morph/useMorph.ts +0 -101
- package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +0 -177
- package/src/react-ui/primitives/waapi/Reorder/index.tsx +0 -260
- package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +0 -47
- package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +0 -209
- package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +0 -104
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +0 -14
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +0 -84
- package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +0 -474
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +0 -32
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +0 -69
- package/src/react-ui/primitives/waapi/SlidingText/index.tsx +0 -140
- package/src/react-ui/primitives/waapi/core/animationConstants.ts +0 -215
- package/src/react-ui/primitives/waapi/core/index.ts +0 -53
- package/src/react-ui/primitives/waapi/core/types.ts +0 -200
- package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +0 -430
- package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +0 -81
- package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +0 -138
- package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +0 -106
- package/src/react-ui/primitives/waapi/index.ts +0 -139
- package/src/react-ui/styles/animations.css +0 -369
- package/src/react-ui/ui/Accordion/Accordion.styles.ts +0 -72
- package/src/react-ui/ui/Accordion/Accordion.types.ts +0 -199
- package/src/react-ui/ui/Accordion/index.tsx +0 -362
- package/src/react-ui/ui/AlertDialog/AlertDialog.styles.ts +0 -38
- package/src/react-ui/ui/AlertDialog/AlertDialog.types.ts +0 -296
- package/src/react-ui/ui/AlertDialog/index.tsx +0 -540
- package/src/react-ui/ui/Badge/Badge.styles.ts +0 -43
- package/src/react-ui/ui/Badge/Badge.types.ts +0 -26
- package/src/react-ui/ui/Badge/index.tsx +0 -34
- package/src/react-ui/ui/Button/Button.styles.ts +0 -57
- package/src/react-ui/ui/Button/Button.types.ts +0 -63
- package/src/react-ui/ui/Button/index.tsx +0 -155
- package/src/react-ui/ui/Card/Card.styles.ts +0 -32
- package/src/react-ui/ui/Card/Card.types.ts +0 -39
- package/src/react-ui/ui/Card/index.tsx +0 -130
- package/src/react-ui/ui/Checkbox/Checkbox.styles.ts +0 -40
- package/src/react-ui/ui/Checkbox/Checkbox.types.ts +0 -98
- package/src/react-ui/ui/Checkbox/index.tsx +0 -233
- package/src/react-ui/ui/Combobox/Combobox.styles.ts +0 -34
- package/src/react-ui/ui/Combobox/Combobox.types.ts +0 -89
- package/src/react-ui/ui/Combobox/index.tsx +0 -331
- package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +0 -38
- package/src/react-ui/ui/CornerBracket/CornerBracket.types.ts +0 -15
- package/src/react-ui/ui/CornerBracket/index.tsx +0 -49
- package/src/react-ui/ui/DataCard/DataCard.styles.ts +0 -94
- package/src/react-ui/ui/DataCard/DataCard.types.ts +0 -125
- package/src/react-ui/ui/DataCard/index.tsx +0 -340
- package/src/react-ui/ui/Dialog/Dialog.styles.ts +0 -59
- package/src/react-ui/ui/Dialog/Dialog.types.ts +0 -284
- package/src/react-ui/ui/Dialog/index.tsx +0 -452
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.styles.ts +0 -35
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.types.ts +0 -81
- package/src/react-ui/ui/DropdownMenu/index.tsx +0 -300
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -376
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.styles.ts +0 -85
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.types.ts +0 -180
- package/src/react-ui/ui/DynamicToggle/index.tsx +0 -316
- package/src/react-ui/ui/DynamicToggle/prototype-v7-ios.html +0 -413
- package/src/react-ui/ui/DynamicToggle/prototype-v7.html +0 -615
- package/src/react-ui/ui/DynamicToggle/prototype-v8-gooey-safari.html +0 -560
- package/src/react-ui/ui/DynamicToggle/prototype-v8b-react-structure.html +0 -227
- package/src/react-ui/ui/DynamicToggle/prototype.html +0 -419
- package/src/react-ui/ui/Field/Field.styles.ts +0 -47
- package/src/react-ui/ui/Field/Field.types.ts +0 -60
- package/src/react-ui/ui/Field/index.tsx +0 -254
- package/src/react-ui/ui/Input/Input.styles.ts +0 -11
- package/src/react-ui/ui/Input/Input.types.ts +0 -10
- package/src/react-ui/ui/Input/index.tsx +0 -32
- package/src/react-ui/ui/InputGroup/InputGroup.styles.ts +0 -53
- package/src/react-ui/ui/InputGroup/InputGroup.types.ts +0 -44
- package/src/react-ui/ui/InputGroup/index.tsx +0 -149
- package/src/react-ui/ui/Label/Label.styles.ts +0 -10
- package/src/react-ui/ui/Label/Label.types.ts +0 -9
- package/src/react-ui/ui/Label/index.tsx +0 -27
- package/src/react-ui/ui/Menu/Menu.styles.ts +0 -71
- package/src/react-ui/ui/Menu/Menu.types.ts +0 -425
- package/src/react-ui/ui/Menu/index.tsx +0 -900
- package/src/react-ui/ui/Popover/Popover.styles.ts +0 -55
- package/src/react-ui/ui/Popover/Popover.types.ts +0 -261
- package/src/react-ui/ui/Popover/index.tsx +0 -422
- package/src/react-ui/ui/Progress/Progress.styles.ts +0 -36
- package/src/react-ui/ui/Progress/Progress.types.ts +0 -162
- package/src/react-ui/ui/Progress/index.tsx +0 -254
- package/src/react-ui/ui/Select/Select.styles.ts +0 -30
- package/src/react-ui/ui/Select/Select.types.ts +0 -51
- package/src/react-ui/ui/Select/index.tsx +0 -225
- package/src/react-ui/ui/Separator/Separator.styles.ts +0 -10
- package/src/react-ui/ui/Separator/Separator.types.ts +0 -10
- package/src/react-ui/ui/Separator/index.tsx +0 -37
- package/src/react-ui/ui/Switch/Switch.styles.ts +0 -50
- package/src/react-ui/ui/Switch/Switch.types.ts +0 -155
- package/src/react-ui/ui/Switch/index.tsx +0 -253
- package/src/react-ui/ui/Tabs/Tabs.css +0 -39
- package/src/react-ui/ui/Tabs/Tabs.styles.ts +0 -148
- package/src/react-ui/ui/Tabs/Tabs.types.ts +0 -255
- package/src/react-ui/ui/Tabs/index.tsx +0 -529
- package/src/react-ui/ui/TextFlow/TextFlow.styles.ts +0 -36
- package/src/react-ui/ui/TextFlow/TextFlow.types.ts +0 -118
- package/src/react-ui/ui/TextFlow/index.tsx +0 -276
- package/src/react-ui/ui/Textarea/Textarea.styles.ts +0 -10
- package/src/react-ui/ui/Textarea/Textarea.types.ts +0 -9
- package/src/react-ui/ui/Textarea/index.tsx +0 -27
- package/src/react-ui/ui/Tooltip/Tooltip.styles.ts +0 -43
- package/src/react-ui/ui/Tooltip/Tooltip.types.ts +0 -253
- package/src/react-ui/ui/Tooltip/index.tsx +0 -394
- package/src/react-ui/ui/index.ts +0 -41
- package/src/types/css-modules.d.ts +0 -18
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useRef, useCallback, useEffect, useState } from 'react';
|
|
3
|
-
import { TIMING, EASINGS } from '../../core/animationConstants';
|
|
4
|
-
import type { IFLIPClipPathOptions, IFLIPClipPathAPI } from '../Morph.types';
|
|
5
|
-
|
|
6
|
-
const DEFAULT_DURATION = TIMING.FLIP_DURATION;
|
|
7
|
-
const DEFAULT_EASING = EASINGS.EASE_OUT_CUBIC;
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Hook for FLIP + clip-path morphing technique.
|
|
11
|
-
*
|
|
12
|
-
* Combines:
|
|
13
|
-
* 1. FLIP for position/size transitions
|
|
14
|
-
* 2. clip-path for shape morphing
|
|
15
|
-
* 3. Opacity crossfade for smooth visual transition
|
|
16
|
-
*
|
|
17
|
-
* @param options - Duration, easing, and clip-path overrides
|
|
18
|
-
* @returns API with morph trigger, cancel, and morphing state
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```tsx
|
|
22
|
-
* const { isMorphing, morph, cancel } = useFLIPClipPath({ duration: 300 });
|
|
23
|
-
*
|
|
24
|
-
* const handleMorph = async () => {
|
|
25
|
-
* await morph(fromRef.current, toRef.current);
|
|
26
|
-
* };
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export function useFLIPClipPath(options?: IFLIPClipPathOptions): IFLIPClipPathAPI {
|
|
30
|
-
const [isMorphing, setIsMorphing] = useState(false);
|
|
31
|
-
const activeAnimationsRef = useRef<Animation[]>([]);
|
|
32
|
-
const optionsRef = useRef(options);
|
|
33
|
-
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
optionsRef.current = options;
|
|
36
|
-
}, [options]);
|
|
37
|
-
|
|
38
|
-
const cancel = useCallback(() => {
|
|
39
|
-
activeAnimationsRef.current.forEach(anim => anim.cancel());
|
|
40
|
-
activeAnimationsRef.current = [];
|
|
41
|
-
setIsMorphing(false);
|
|
42
|
-
}, []);
|
|
43
|
-
|
|
44
|
-
const morph = useCallback(async (
|
|
45
|
-
fromElement: HTMLElement,
|
|
46
|
-
toElement: HTMLElement
|
|
47
|
-
): Promise<void> => {
|
|
48
|
-
if (isMorphing) {
|
|
49
|
-
cancel();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
setIsMorphing(true);
|
|
53
|
-
|
|
54
|
-
const duration = optionsRef.current?.duration ?? DEFAULT_DURATION;
|
|
55
|
-
const easing = optionsRef.current?.easing ?? DEFAULT_EASING;
|
|
56
|
-
|
|
57
|
-
const fromRect = fromElement.getBoundingClientRect();
|
|
58
|
-
const toRect = toElement.getBoundingClientRect();
|
|
59
|
-
|
|
60
|
-
const deltaX = fromRect.left - toRect.left;
|
|
61
|
-
const deltaY = fromRect.top - toRect.top;
|
|
62
|
-
const scaleX = fromRect.width / toRect.width;
|
|
63
|
-
const scaleY = fromRect.height / toRect.height;
|
|
64
|
-
|
|
65
|
-
const fromBorderRadius = getComputedStyle(fromElement).borderRadius;
|
|
66
|
-
const toBorderRadius = getComputedStyle(toElement).borderRadius;
|
|
67
|
-
|
|
68
|
-
const fromClipPath = optionsRef.current?.clipPathStart ||
|
|
69
|
-
borderRadiusToInset(fromBorderRadius, fromRect);
|
|
70
|
-
const toClipPath = optionsRef.current?.clipPathEnd ||
|
|
71
|
-
borderRadiusToInset(toBorderRadius, toRect);
|
|
72
|
-
|
|
73
|
-
const originalFromStyles = {
|
|
74
|
-
position: fromElement.style.position,
|
|
75
|
-
opacity: fromElement.style.opacity,
|
|
76
|
-
pointerEvents: fromElement.style.pointerEvents
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const originalToStyles = {
|
|
80
|
-
position: toElement.style.position,
|
|
81
|
-
opacity: toElement.style.opacity,
|
|
82
|
-
transform: toElement.style.transform,
|
|
83
|
-
clipPath: toElement.style.clipPath
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
fromElement.style.position = 'absolute';
|
|
87
|
-
fromElement.style.pointerEvents = 'none';
|
|
88
|
-
|
|
89
|
-
toElement.style.position = 'relative';
|
|
90
|
-
toElement.style.transform = `translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY})`;
|
|
91
|
-
toElement.style.clipPath = fromClipPath;
|
|
92
|
-
toElement.style.opacity = '0';
|
|
93
|
-
|
|
94
|
-
const fromFadeOut = fromElement.animate([
|
|
95
|
-
{ opacity: 1 },
|
|
96
|
-
{ opacity: 0 }
|
|
97
|
-
], {
|
|
98
|
-
duration: duration * 0.5,
|
|
99
|
-
easing,
|
|
100
|
-
fill: 'forwards'
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
const toFadeIn = toElement.animate([
|
|
104
|
-
{ opacity: 0 },
|
|
105
|
-
{ opacity: 1 }
|
|
106
|
-
], {
|
|
107
|
-
duration: duration * 0.5,
|
|
108
|
-
delay: duration * 0.25,
|
|
109
|
-
easing,
|
|
110
|
-
fill: 'forwards'
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
const toTransform = toElement.animate([
|
|
114
|
-
{
|
|
115
|
-
transform: `translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY})`,
|
|
116
|
-
clipPath: fromClipPath
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
transform: 'translate(0, 0) scale(1, 1)',
|
|
120
|
-
clipPath: toClipPath
|
|
121
|
-
}
|
|
122
|
-
], {
|
|
123
|
-
duration,
|
|
124
|
-
easing,
|
|
125
|
-
fill: 'forwards'
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
activeAnimationsRef.current = [fromFadeOut, toFadeIn, toTransform];
|
|
129
|
-
|
|
130
|
-
try {
|
|
131
|
-
await Promise.all([
|
|
132
|
-
fromFadeOut.finished,
|
|
133
|
-
toFadeIn.finished,
|
|
134
|
-
toTransform.finished
|
|
135
|
-
]);
|
|
136
|
-
} catch {
|
|
137
|
-
Object.assign(fromElement.style, originalFromStyles);
|
|
138
|
-
Object.assign(toElement.style, originalToStyles);
|
|
139
|
-
setIsMorphing(false);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
Object.assign(fromElement.style, originalFromStyles);
|
|
144
|
-
toElement.style.transform = '';
|
|
145
|
-
toElement.style.clipPath = '';
|
|
146
|
-
toElement.style.opacity = '1';
|
|
147
|
-
|
|
148
|
-
activeAnimationsRef.current = [];
|
|
149
|
-
setIsMorphing(false);
|
|
150
|
-
}, [isMorphing, cancel]);
|
|
151
|
-
|
|
152
|
-
useEffect(() => {
|
|
153
|
-
return () => {
|
|
154
|
-
cancel();
|
|
155
|
-
};
|
|
156
|
-
}, [cancel]);
|
|
157
|
-
|
|
158
|
-
return {
|
|
159
|
-
isMorphing,
|
|
160
|
-
morph,
|
|
161
|
-
cancel
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Convert a CSS border-radius value to an inset() clip-path with rounded corners.
|
|
167
|
-
* @param borderRadius - CSS border-radius string
|
|
168
|
-
* @param rect - Bounding rect of the element
|
|
169
|
-
* @returns inset() clip-path string
|
|
170
|
-
*/
|
|
171
|
-
function borderRadiusToInset(borderRadius: string, rect: DOMRect): string {
|
|
172
|
-
const radius = parseFloat(borderRadius) || 0;
|
|
173
|
-
const percentX = (radius / rect.width) * 100;
|
|
174
|
-
const percentY = (radius / rect.height) * 100;
|
|
175
|
-
return `inset(0 round ${percentX}% ${percentY}%)`;
|
|
176
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useRef, useCallback, useMemo } from 'react';
|
|
3
|
-
import type { IViewTransitionsOptions, IViewTransitionsAPI } from '../Morph.types';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Hook for the View Transitions API.
|
|
7
|
-
*
|
|
8
|
-
* Provides a wrapper around the native View Transitions API
|
|
9
|
-
* with automatic feature detection and fallback handling.
|
|
10
|
-
*
|
|
11
|
-
* Browser support:
|
|
12
|
-
* - Chrome 111+
|
|
13
|
-
* - Firefox 144+
|
|
14
|
-
* - Safari latest
|
|
15
|
-
*
|
|
16
|
-
* @param options - Optional view transition name and types
|
|
17
|
-
* @returns View Transitions API with support detection and transition trigger
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* const { isSupported, startTransition } = useViewTransitions({ name: 'hero' });
|
|
22
|
-
*
|
|
23
|
-
* const handleTransition = async () => {
|
|
24
|
-
* await startTransition(() => {
|
|
25
|
-
* setActiveImage(nextImage);
|
|
26
|
-
* });
|
|
27
|
-
* };
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export function useViewTransitions(options?: IViewTransitionsOptions): IViewTransitionsAPI {
|
|
31
|
-
const optionsRef = useRef(options);
|
|
32
|
-
const typesRef = useRef<string[]>(options?.types || []);
|
|
33
|
-
|
|
34
|
-
const isSupported = useMemo(() => {
|
|
35
|
-
if (typeof document === 'undefined') return false;
|
|
36
|
-
return 'startViewTransition' in document;
|
|
37
|
-
}, []);
|
|
38
|
-
|
|
39
|
-
const setTypes = useCallback((types: string[]) => {
|
|
40
|
-
typesRef.current = types;
|
|
41
|
-
}, []);
|
|
42
|
-
|
|
43
|
-
const startTransition = useCallback(async (
|
|
44
|
-
callback: () => void | Promise<void>
|
|
45
|
-
): Promise<void> => {
|
|
46
|
-
if (!document.startViewTransition) {
|
|
47
|
-
await callback();
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const viewTransitionName = optionsRef.current?.name;
|
|
52
|
-
|
|
53
|
-
const setupStyles = () => {
|
|
54
|
-
if (viewTransitionName) {
|
|
55
|
-
const styleEl = document.createElement('style');
|
|
56
|
-
styleEl.id = `view-transition-${viewTransitionName}`;
|
|
57
|
-
styleEl.textContent = `
|
|
58
|
-
::view-transition-old(${viewTransitionName}),
|
|
59
|
-
::view-transition-new(${viewTransitionName}) {
|
|
60
|
-
animation-duration: 300ms;
|
|
61
|
-
animation-timing-function: ease-out;
|
|
62
|
-
}
|
|
63
|
-
`;
|
|
64
|
-
document.head.appendChild(styleEl);
|
|
65
|
-
return () => {
|
|
66
|
-
styleEl.remove();
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
return () => {};
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const cleanup = setupStyles();
|
|
73
|
-
|
|
74
|
-
try {
|
|
75
|
-
const transition = document.startViewTransition(callback);
|
|
76
|
-
await transition.finished;
|
|
77
|
-
} finally {
|
|
78
|
-
cleanup();
|
|
79
|
-
}
|
|
80
|
-
}, []);
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
isSupported,
|
|
84
|
-
startTransition,
|
|
85
|
-
setTypes
|
|
86
|
-
};
|
|
87
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useCallback, useRef, useEffect } from 'react';
|
|
3
|
-
import { useFLIPClipPath } from './techniques/useFLIPClipPath';
|
|
4
|
-
import { useCSSGridMorph } from './techniques/useCSSGridMorph';
|
|
5
|
-
import { useViewTransitions } from './techniques/useViewTransitions';
|
|
6
|
-
import type { IUseMorphReturn, IUseMorphConfig, MorphTechnique } from './Morph.types';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Unified hook for morphing animations.
|
|
10
|
-
*
|
|
11
|
-
* Provides access to multiple morphing techniques:
|
|
12
|
-
* - FLIP + clip-path (default): Best for element-to-element transitions
|
|
13
|
-
* - CSS Grid: Best for expand/collapse animations
|
|
14
|
-
* - View Transitions: Best for page/route transitions (requires browser support)
|
|
15
|
-
*
|
|
16
|
-
* Falls back to FLIP + clip-path when View Transitions API is unsupported.
|
|
17
|
-
*
|
|
18
|
-
* @param options - Technique selection, timing, and callbacks
|
|
19
|
-
* @returns Unified morph API with access to individual techniques
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```tsx
|
|
23
|
-
* const morph = useMorph({ technique: 'flip-clip-path' });
|
|
24
|
-
*
|
|
25
|
-
* // Unified API:
|
|
26
|
-
* await morph.morph(fromElement, toElement);
|
|
27
|
-
*
|
|
28
|
-
* // Or individual techniques:
|
|
29
|
-
* morph.cssGrid.toggle();
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export function useMorph(options?: IUseMorphConfig): IUseMorphReturn {
|
|
33
|
-
const technique: MorphTechnique = options?.technique ?? 'flip-clip-path';
|
|
34
|
-
|
|
35
|
-
const optionsRef = useRef(options);
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
optionsRef.current = options;
|
|
38
|
-
}, [options]);
|
|
39
|
-
|
|
40
|
-
const flipClipPath = useFLIPClipPath({
|
|
41
|
-
duration: options?.duration,
|
|
42
|
-
easing: options?.easing
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const cssGrid = useCSSGridMorph({
|
|
46
|
-
duration: options?.duration,
|
|
47
|
-
easing: options?.easing
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const viewTransitions = useViewTransitions();
|
|
51
|
-
|
|
52
|
-
const isMorphing = flipClipPath.isMorphing;
|
|
53
|
-
|
|
54
|
-
const morph = useCallback(async (
|
|
55
|
-
fromElement: HTMLElement,
|
|
56
|
-
toElement: HTMLElement
|
|
57
|
-
): Promise<void> => {
|
|
58
|
-
optionsRef.current?.onMorphStart?.();
|
|
59
|
-
|
|
60
|
-
const currentTechnique = optionsRef.current?.technique ?? 'flip-clip-path';
|
|
61
|
-
|
|
62
|
-
switch (currentTechnique) {
|
|
63
|
-
case 'flip-clip-path':
|
|
64
|
-
await flipClipPath.morph(fromElement, toElement);
|
|
65
|
-
break;
|
|
66
|
-
|
|
67
|
-
case 'view-transitions':
|
|
68
|
-
if (viewTransitions.isSupported) {
|
|
69
|
-
await viewTransitions.startTransition(() => {
|
|
70
|
-
fromElement.style.opacity = '0';
|
|
71
|
-
toElement.style.opacity = '1';
|
|
72
|
-
});
|
|
73
|
-
} else {
|
|
74
|
-
// Fallback to FLIP when View Transitions unsupported
|
|
75
|
-
await flipClipPath.morph(fromElement, toElement);
|
|
76
|
-
}
|
|
77
|
-
break;
|
|
78
|
-
|
|
79
|
-
case 'css-grid':
|
|
80
|
-
cssGrid.toggle();
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
optionsRef.current?.onMorphEnd?.();
|
|
85
|
-
}, [flipClipPath, viewTransitions, cssGrid]);
|
|
86
|
-
|
|
87
|
-
const cancel = useCallback(() => {
|
|
88
|
-
flipClipPath.cancel();
|
|
89
|
-
}, [flipClipPath]);
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
isMorphing,
|
|
93
|
-
technique,
|
|
94
|
-
isViewTransitionsSupported: viewTransitions.isSupported,
|
|
95
|
-
morph,
|
|
96
|
-
cancel,
|
|
97
|
-
flipClipPath,
|
|
98
|
-
cssGrid,
|
|
99
|
-
viewTransitions
|
|
100
|
-
};
|
|
101
|
-
}
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import type { ReactNode, ElementType } from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
IAnimationOrchestratorAPI,
|
|
4
|
-
FLIPBehavior,
|
|
5
|
-
ExitPositionStrategy
|
|
6
|
-
} from '../core/types';
|
|
7
|
-
|
|
8
|
-
// Re-export core types used by consumers
|
|
9
|
-
export type { FLIPBehavior, ExitPositionStrategy } from '../core/types';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Layout direction for reorder items.
|
|
13
|
-
*
|
|
14
|
-
* - `auto`: No layout applied (consumer handles positioning)
|
|
15
|
-
* - `horizontal`: Flexbox row layout with wrapping
|
|
16
|
-
* - `inline-horizontal`: Inline-flexbox row layout without wrapping
|
|
17
|
-
* - `vertical`: Flexbox column layout
|
|
18
|
-
* - `grid`: CSS Grid with auto-fill columns
|
|
19
|
-
*/
|
|
20
|
-
export type ReorderLayout = 'auto' | 'horizontal' | 'inline-horizontal' | 'vertical' | 'grid';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Stagger configuration for animations.
|
|
24
|
-
* A single number applies to both enter/exit; an object allows separate values.
|
|
25
|
-
*/
|
|
26
|
-
export type StaggerConfig = number | { enter: number; exit: number };
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Duration configuration for animations.
|
|
30
|
-
* A single number applies to both enter/exit; an object allows separate values.
|
|
31
|
-
*/
|
|
32
|
-
export type DurationConfig = number | { enter: number; exit: number };
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Animation state for individual reorder items.
|
|
36
|
-
*/
|
|
37
|
-
export interface IReorderItemState {
|
|
38
|
-
/** True when the item is currently animating out */
|
|
39
|
-
isExiting: boolean;
|
|
40
|
-
/** True when the item is currently animating in */
|
|
41
|
-
isEntering: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Props for Reorder container component.
|
|
46
|
-
* Agnostic primitive for animated list reordering using FLIP technique.
|
|
47
|
-
*/
|
|
48
|
-
export interface IReorderProps {
|
|
49
|
-
/** Child elements to be animated. Each child should have a unique `key` prop */
|
|
50
|
-
children: ReactNode;
|
|
51
|
-
/** Layout arrangement for child elements */
|
|
52
|
-
layout?: ReorderLayout;
|
|
53
|
-
/** Stagger delay between item animations */
|
|
54
|
-
stagger?: StaggerConfig;
|
|
55
|
-
/** Animation duration in milliseconds */
|
|
56
|
-
duration?: DurationConfig;
|
|
57
|
-
/** Additional CSS class name for the container */
|
|
58
|
-
className?: string;
|
|
59
|
-
/** FLIP animation behavior strategy */
|
|
60
|
-
flipBehavior?: FLIPBehavior;
|
|
61
|
-
/** Strategy for positioning elements during exit animation */
|
|
62
|
-
exitPositionStrategy?: ExitPositionStrategy;
|
|
63
|
-
/** Callback fired when an item starts its exit animation */
|
|
64
|
-
onItemExit?: (id: string) => void;
|
|
65
|
-
/** Callback fired when an item completes its enter animation */
|
|
66
|
-
onItemEnter?: (id: string) => void;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Configuration options for useReorder hook.
|
|
71
|
-
* All timing values are in milliseconds.
|
|
72
|
-
*/
|
|
73
|
-
export interface IUseReorderConfig {
|
|
74
|
-
/** Duration of enter animation in milliseconds. @default 200 */
|
|
75
|
-
enterDuration?: number;
|
|
76
|
-
/** Duration of exit animation in milliseconds. @default 180 */
|
|
77
|
-
exitDuration?: number;
|
|
78
|
-
/** Duration of FLIP animation in milliseconds. @default 300 */
|
|
79
|
-
flipDuration?: number;
|
|
80
|
-
/** Easing function for enter animation */
|
|
81
|
-
enterEasing?: string;
|
|
82
|
-
/** Easing function for exit animation */
|
|
83
|
-
exitEasing?: string;
|
|
84
|
-
/** Easing function for FLIP animation */
|
|
85
|
-
flipEasing?: string;
|
|
86
|
-
/** FLIP animation behavior strategy. @default 'all' */
|
|
87
|
-
flipBehavior?: FLIPBehavior;
|
|
88
|
-
/** Strategy for positioning elements during exit animation. @default 'absolute-fixed' */
|
|
89
|
-
exitPositionStrategy?: ExitPositionStrategy;
|
|
90
|
-
/** Callback called when an item's exit animation completes */
|
|
91
|
-
onComplete?: (id: string) => void;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Return type for useReorder hook.
|
|
96
|
-
* Extends the full AnimationOrchestratorAPI with semantic aliases.
|
|
97
|
-
*/
|
|
98
|
-
export interface IUseReorderReturn extends IAnimationOrchestratorAPI {
|
|
99
|
-
/** Start exit animation for an item (alias for startExit) */
|
|
100
|
-
startItemExit: (id: string) => Promise<void>;
|
|
101
|
-
/** Start enter animation for an item (alias for startEnter) */
|
|
102
|
-
startItemEnter: (id: string) => Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Context value passed to Reorder children.
|
|
107
|
-
* @internal Consumed by ReorderItem component.
|
|
108
|
-
*/
|
|
109
|
-
export interface IReorderContextValue {
|
|
110
|
-
/** Reorder instance with animation methods */
|
|
111
|
-
reorder: IUseReorderReturn;
|
|
112
|
-
/** Current layout setting */
|
|
113
|
-
layout: ReorderLayout;
|
|
114
|
-
/** Check if an item is currently exiting */
|
|
115
|
-
isExiting: (id: string) => boolean;
|
|
116
|
-
/** Check if an item is currently entering */
|
|
117
|
-
isEntering: (id: string) => boolean;
|
|
118
|
-
/** Array of item IDs currently exiting */
|
|
119
|
-
exitingIds: string[];
|
|
120
|
-
/** Array of item IDs currently entering */
|
|
121
|
-
enteringIds: string[];
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Configuration for useReorderPresence hook.
|
|
126
|
-
* An alternative to the Reorder component giving full control
|
|
127
|
-
* over rendering while handling animation orchestration.
|
|
128
|
-
*/
|
|
129
|
-
export interface IUseReorderPresenceConfig {
|
|
130
|
-
/** Enable automatic enter animations for new children. @default true */
|
|
131
|
-
autoAnimate?: boolean;
|
|
132
|
-
/** Stagger delay between item animations */
|
|
133
|
-
stagger?: StaggerConfig;
|
|
134
|
-
/** Duration of enter animation in milliseconds */
|
|
135
|
-
enterDuration?: number;
|
|
136
|
-
/** Duration of exit animation in milliseconds */
|
|
137
|
-
exitDuration?: number;
|
|
138
|
-
/** Duration of FLIP animation in milliseconds */
|
|
139
|
-
flipDuration?: number;
|
|
140
|
-
/** Easing function for enter animation */
|
|
141
|
-
enterEasing?: string;
|
|
142
|
-
/** Easing function for exit animation */
|
|
143
|
-
exitEasing?: string;
|
|
144
|
-
/** Easing function for FLIP animation */
|
|
145
|
-
flipEasing?: string;
|
|
146
|
-
/** FLIP animation behavior strategy */
|
|
147
|
-
flipBehavior?: FLIPBehavior;
|
|
148
|
-
/** Strategy for positioning elements during exit animation */
|
|
149
|
-
exitPositionStrategy?: ExitPositionStrategy;
|
|
150
|
-
/** Callback fired when an item starts its exit animation */
|
|
151
|
-
onItemExit?: (id: string) => void;
|
|
152
|
-
/** Callback fired when an item completes its enter animation */
|
|
153
|
-
onItemEnter?: (id: string) => void;
|
|
154
|
-
/** Callback fired when an item's exit animation completes */
|
|
155
|
-
onAnimationComplete?: (id: string) => void;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Return type for useReorderPresence hook.
|
|
160
|
-
* Provides rendered children and methods for triggering animations.
|
|
161
|
-
*/
|
|
162
|
-
export interface IUseReorderPresenceReturn {
|
|
163
|
-
/** Rendered children with animation data attributes applied */
|
|
164
|
-
presentChildren: ReactNode;
|
|
165
|
-
/** Trigger exit animation for an item */
|
|
166
|
-
triggerExit: (id: string) => void;
|
|
167
|
-
/** Check if an item is currently exiting */
|
|
168
|
-
isExiting: (id: string) => boolean;
|
|
169
|
-
/** Check if an item is currently entering */
|
|
170
|
-
isEntering: (id: string) => boolean;
|
|
171
|
-
/** Array of item IDs currently exiting */
|
|
172
|
-
exitingIds: string[];
|
|
173
|
-
/** Array of item IDs currently entering */
|
|
174
|
-
enteringIds: string[];
|
|
175
|
-
/** Underlying reorder instance */
|
|
176
|
-
reorder: IUseReorderReturn;
|
|
177
|
-
}
|