@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,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gooey morphing primitive types.
|
|
3
|
-
*
|
|
4
|
-
* @module @mks2508/mks-ui/react/primitives/waapi/Gooey
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { ReactNode } from 'react';
|
|
8
|
-
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// GooeyFilter
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Props for the GooeyFilter SVG filter definition.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <GooeyFilter id="my-goo" blur={8} />
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export interface IGooeyFilterProps {
|
|
22
|
-
/** Unique filter ID — referenced via `filter: url(#id)` */
|
|
23
|
-
id: string;
|
|
24
|
-
/** Gaussian blur stdDeviation (default: 8) */
|
|
25
|
-
blur?: number;
|
|
26
|
-
/** Alpha channel multiplier in feColorMatrix (default: 20) */
|
|
27
|
-
alphaGain?: number;
|
|
28
|
-
/** Alpha channel offset in feColorMatrix (default: -10) */
|
|
29
|
-
alphaOffset?: number;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// ---------------------------------------------------------------------------
|
|
33
|
-
// GooeyCanvas
|
|
34
|
-
// ---------------------------------------------------------------------------
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Props for the GooeyCanvas container.
|
|
38
|
-
*
|
|
39
|
-
* Wraps children with an SVG gooey filter. All same-colored children
|
|
40
|
-
* inside automatically merge visually into an organic blob.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```tsx
|
|
44
|
-
* <GooeyCanvas height={40}>
|
|
45
|
-
* <div className="bg-card rounded-full h-10 w-64" />
|
|
46
|
-
* <div className="bg-card absolute bottom-full w-32 h-6" />
|
|
47
|
-
* </GooeyCanvas>
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export interface IGooeyCanvasProps {
|
|
51
|
-
/** Blur radius override. If omitted, auto-calculated from `height`. */
|
|
52
|
-
blur?: number;
|
|
53
|
-
/** Pill height in px (default: 32) */
|
|
54
|
-
height?: number;
|
|
55
|
-
/** Pill width in px (default: 260) */
|
|
56
|
-
width?: number;
|
|
57
|
-
/** Border radius in px (default: 9999) */
|
|
58
|
-
radius?: number;
|
|
59
|
-
/** Fill color (default: 'var(--card)') */
|
|
60
|
-
fillColor?: string;
|
|
61
|
-
/** Bubble height in px when expanded (default: 40% of height) */
|
|
62
|
-
bubbleHeight?: number;
|
|
63
|
-
/** Bubble inset from edges as fraction 0-1 (default: 0.2) */
|
|
64
|
-
bubbleInset?: number;
|
|
65
|
-
/** Whether the bubble is expanded */
|
|
66
|
-
expanded?: boolean;
|
|
67
|
-
/** Drop-shadow outline blur in px (default: 0.5) */
|
|
68
|
-
outlineBlur?: number;
|
|
69
|
-
/** Drop-shadow outline color (default: 'var(--border)') */
|
|
70
|
-
outlineColor?: string;
|
|
71
|
-
/** Number of stacked drop-shadows for outline thickness (default: 2) */
|
|
72
|
-
outlineLayers?: number;
|
|
73
|
-
/** Alpha gain override */
|
|
74
|
-
alphaGain?: number;
|
|
75
|
-
/** Alpha offset override */
|
|
76
|
-
alphaOffset?: number;
|
|
77
|
-
/** Expand animation duration in ms (default: 550) */
|
|
78
|
-
expandDuration?: number;
|
|
79
|
-
/** Collapse animation duration in ms (default: 400) */
|
|
80
|
-
collapseDuration?: number;
|
|
81
|
-
/** Expand easing override (default: SPRING_GENTLE) */
|
|
82
|
-
expandEasing?: string;
|
|
83
|
-
/** Collapse easing override (default: EASE_OUT_CUBIC) */
|
|
84
|
-
collapseEasing?: string;
|
|
85
|
-
/** Extra className on the filter container */
|
|
86
|
-
className?: string;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
// MorphPath
|
|
91
|
-
// ---------------------------------------------------------------------------
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Props for the MorphPath SVG path component.
|
|
95
|
-
*
|
|
96
|
-
* Renders a parametric `<path>` that morphs from a pill shape to a
|
|
97
|
-
* pill+body blob based on the `progress` value.
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```tsx
|
|
101
|
-
* <svg>
|
|
102
|
-
* <MorphPath pillWidth={260} bodyWidth={180} totalHeight={60} progress={0.5} fill="var(--card)" />
|
|
103
|
-
* </svg>
|
|
104
|
-
* ```
|
|
105
|
-
*/
|
|
106
|
-
export interface IMorphPathProps extends React.SVGProps<SVGPathElement> {
|
|
107
|
-
/** Pill width in px */
|
|
108
|
-
pillWidth: number;
|
|
109
|
-
/** Body (expanded area) width in px */
|
|
110
|
-
bodyWidth: number;
|
|
111
|
-
/** Total height (pill + body) in px */
|
|
112
|
-
totalHeight: number;
|
|
113
|
-
/** Morph progress: 0 = pill only, 1 = fully expanded */
|
|
114
|
-
progress: number;
|
|
115
|
-
/** Pill height (default: 34) */
|
|
116
|
-
pillHeight?: number;
|
|
117
|
-
/** Body expansion direction relative to pill */
|
|
118
|
-
direction?: 'down' | 'up';
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// ---------------------------------------------------------------------------
|
|
122
|
-
// useMorphPath
|
|
123
|
-
// ---------------------------------------------------------------------------
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Options for the useMorphPath hook.
|
|
127
|
-
*/
|
|
128
|
-
export interface IUseMorphPathOptions {
|
|
129
|
-
/** Pill width in px */
|
|
130
|
-
pillWidth: number;
|
|
131
|
-
/** Body width in px */
|
|
132
|
-
bodyWidth: number;
|
|
133
|
-
/** Total height in px */
|
|
134
|
-
totalHeight: number;
|
|
135
|
-
/** Morph progress 0→1 */
|
|
136
|
-
progress: number;
|
|
137
|
-
/** Pill height (default: 34) */
|
|
138
|
-
pillHeight?: number;
|
|
139
|
-
/** Body direction */
|
|
140
|
-
direction?: 'down' | 'up';
|
|
141
|
-
}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* GooeyCanvas — SVG-based gooey filter with animated pill + bubble rects.
|
|
5
|
-
*
|
|
6
|
-
* Uses SVG `<rect>` elements inside a filtered container. The bubble rect
|
|
7
|
-
* animates via WAAPI for smooth cross-browser rendering.
|
|
8
|
-
*
|
|
9
|
-
* Key patterns (derived from Sileo):
|
|
10
|
-
* - Filter applied to canvas div, SVG content inside (not HTML children)
|
|
11
|
-
* - `transform: translateZ(0)` + `contain: layout style` on canvas
|
|
12
|
-
* - No DOM mutation during/after animation — `fill: 'forwards'` only
|
|
13
|
-
* - Readiness gate: 1-frame rAF delay before first animation (Sileo pattern)
|
|
14
|
-
*
|
|
15
|
-
* @module @mks2508/mks-ui/react/primitives/waapi/Gooey
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import * as React from 'react';
|
|
19
|
-
import { cn } from '@/react-ui/lib/utils';
|
|
20
|
-
import { EASINGS, getResponsiveDuration } from '@/react-ui/primitives/waapi/core/animationConstants';
|
|
21
|
-
import { computeBlur, GOOEY_TIMING } from './gooey-utils';
|
|
22
|
-
import type { IGooeyCanvasProps } from './Gooey.types';
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* GooeyCanvas — SVG rects + gooey filter, WAAPI-animated bubble.
|
|
26
|
-
*/
|
|
27
|
-
function GooeyCanvas({
|
|
28
|
-
blur,
|
|
29
|
-
height = 32,
|
|
30
|
-
width = 260,
|
|
31
|
-
radius = 9999,
|
|
32
|
-
fillColor = 'var(--card)',
|
|
33
|
-
bubbleHeight: bubbleHeightProp,
|
|
34
|
-
bubbleInset = 0.2,
|
|
35
|
-
expanded = false,
|
|
36
|
-
outlineBlur = 0.5,
|
|
37
|
-
outlineColor = 'var(--border)',
|
|
38
|
-
outlineLayers = 2,
|
|
39
|
-
alphaGain,
|
|
40
|
-
alphaOffset,
|
|
41
|
-
expandDuration,
|
|
42
|
-
collapseDuration,
|
|
43
|
-
expandEasing,
|
|
44
|
-
collapseEasing,
|
|
45
|
-
className,
|
|
46
|
-
}: IGooeyCanvasProps) {
|
|
47
|
-
const filterId = React.useId().replace(/:/g, '') + '-goo';
|
|
48
|
-
const computedBlur = blur ?? computeBlur(height);
|
|
49
|
-
const bubbleRectRef = React.useRef<SVGRectElement>(null);
|
|
50
|
-
const animRef = React.useRef<Animation | null>(null);
|
|
51
|
-
const [ready, setReady] = React.useState(false);
|
|
52
|
-
const lastValues = React.useRef({ y: -1, h: -1 });
|
|
53
|
-
|
|
54
|
-
// Computed geometry
|
|
55
|
-
const pad = 2;
|
|
56
|
-
const effectiveR = Math.min(radius, height / 2);
|
|
57
|
-
const bubbleH = bubbleHeightProp ?? Math.round(height * 0.4);
|
|
58
|
-
const insetPx = width * bubbleInset;
|
|
59
|
-
const bubbleW = width - 2 * insetPx;
|
|
60
|
-
const bubbleR = Math.min(effectiveR * 0.6, bubbleH * 0.45, 12);
|
|
61
|
-
const totalH = height + bubbleH;
|
|
62
|
-
|
|
63
|
-
// Static filter string — never changes after mount (critical for Safari)
|
|
64
|
-
const filterUrl = React.useMemo(() => `url(#${filterId})`, [filterId]);
|
|
65
|
-
|
|
66
|
-
// Drop-shadow outline — separate from SVG filter for cleaner compositing
|
|
67
|
-
const outlineShadow = React.useMemo(() => {
|
|
68
|
-
const shadow = `drop-shadow(0 0 ${outlineBlur}px ${outlineColor})`;
|
|
69
|
-
return Array(outlineLayers).fill(shadow).join(' ');
|
|
70
|
-
}, [outlineBlur, outlineColor, outlineLayers]);
|
|
71
|
-
|
|
72
|
-
// Canvas style — Sileo pattern: translateZ(0) + contain + static filter
|
|
73
|
-
const canvasStyle = React.useMemo(
|
|
74
|
-
() => ({
|
|
75
|
-
filter: `${filterUrl} ${outlineShadow}`,
|
|
76
|
-
transform: 'translateZ(0)',
|
|
77
|
-
contain: 'layout style' as const,
|
|
78
|
-
}),
|
|
79
|
-
[filterUrl, outlineShadow],
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
// Readiness gate — Sileo pattern: defer first animation by 1 rAF frame.
|
|
83
|
-
// Ensures the initial DOM state is painted before any animation starts.
|
|
84
|
-
React.useEffect(() => {
|
|
85
|
-
const rect = bubbleRectRef.current;
|
|
86
|
-
if (!rect) return;
|
|
87
|
-
|
|
88
|
-
// Set initial visual state
|
|
89
|
-
const initY = expanded ? 0 : bubbleH;
|
|
90
|
-
const initH = expanded ? bubbleH : 0;
|
|
91
|
-
lastValues.current = { y: initY, h: initH };
|
|
92
|
-
if (expanded) {
|
|
93
|
-
rect.animate([{ y: '0px', height: `${bubbleH}px` }], { duration: 0, fill: 'forwards' });
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// After 1 painted frame, mark as ready — triggers re-render so animation
|
|
97
|
-
// effect can pick up any expanded changes that arrived during the wait.
|
|
98
|
-
const raf = requestAnimationFrame(() => setReady(true));
|
|
99
|
-
return () => cancelAnimationFrame(raf);
|
|
100
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
-
}, []);
|
|
102
|
-
|
|
103
|
-
// WAAPI animation — tracks values in ref for smooth mid-animation reversals.
|
|
104
|
-
React.useEffect(() => {
|
|
105
|
-
const rect = bubbleRectRef.current;
|
|
106
|
-
if (!rect || !ready) return;
|
|
107
|
-
|
|
108
|
-
const isExpanding = expanded;
|
|
109
|
-
|
|
110
|
-
// Direction-aware timing
|
|
111
|
-
const baseDuration = isExpanding
|
|
112
|
-
? (expandDuration ?? GOOEY_TIMING.EXPAND_DURATION)
|
|
113
|
-
: (collapseDuration ?? GOOEY_TIMING.COLLAPSE_DURATION);
|
|
114
|
-
const duration = getResponsiveDuration(baseDuration);
|
|
115
|
-
const easing = isExpanding
|
|
116
|
-
? (expandEasing ?? EASINGS.SPRING_GENTLE)
|
|
117
|
-
: (collapseEasing ?? EASINGS.EASE_OUT_CUBIC);
|
|
118
|
-
|
|
119
|
-
// Target state
|
|
120
|
-
const toY = isExpanding ? 0 : bubbleH;
|
|
121
|
-
const toH = isExpanding ? bubbleH : 0;
|
|
122
|
-
|
|
123
|
-
// From state: use tracked values (survives animation cancel)
|
|
124
|
-
const fromY = lastValues.current.y;
|
|
125
|
-
const fromH = lastValues.current.h;
|
|
126
|
-
|
|
127
|
-
// Update tracked values to target
|
|
128
|
-
lastValues.current = { y: toY, h: toH };
|
|
129
|
-
|
|
130
|
-
// Reduced motion: instant
|
|
131
|
-
if (duration === 0) {
|
|
132
|
-
if (animRef.current) animRef.current.cancel();
|
|
133
|
-
rect.animate([{ y: `${toY}px`, height: `${toH}px` }], { duration: 0, fill: 'forwards' });
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Cancel previous animation (visual state maintained by lastValues tracking)
|
|
138
|
-
if (animRef.current) animRef.current.cancel();
|
|
139
|
-
|
|
140
|
-
// 2-keyframe animation — fill:forwards, no DOM mutation.
|
|
141
|
-
// CRITICAL: Chrome WAAPI requires "px" units for SVG geometry props.
|
|
142
|
-
animRef.current = rect.animate(
|
|
143
|
-
[
|
|
144
|
-
{ y: `${fromY}px`, height: `${fromH}px` },
|
|
145
|
-
{ y: `${toY}px`, height: `${toH}px` },
|
|
146
|
-
],
|
|
147
|
-
{ duration, easing, fill: 'forwards' },
|
|
148
|
-
);
|
|
149
|
-
}, [ready, expanded, bubbleH, expandDuration, collapseDuration, expandEasing, collapseEasing]);
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
<div
|
|
153
|
-
data-slot="gooey-canvas"
|
|
154
|
-
style={canvasStyle}
|
|
155
|
-
className={cn(
|
|
156
|
-
'absolute inset-0 rounded-[inherit] pointer-events-none z-0 overflow-visible',
|
|
157
|
-
className,
|
|
158
|
-
)}
|
|
159
|
-
>
|
|
160
|
-
<svg
|
|
161
|
-
data-slot="gooey-svg"
|
|
162
|
-
width={width}
|
|
163
|
-
height={totalH}
|
|
164
|
-
viewBox={`0 0 ${width} ${totalH}`}
|
|
165
|
-
style={{ position: 'absolute', top: -bubbleH, left: 0, overflow: 'visible' }}
|
|
166
|
-
aria-hidden="true"
|
|
167
|
-
>
|
|
168
|
-
<defs>
|
|
169
|
-
<filter
|
|
170
|
-
id={filterId}
|
|
171
|
-
x="-20%"
|
|
172
|
-
y="-20%"
|
|
173
|
-
width="140%"
|
|
174
|
-
height="140%"
|
|
175
|
-
colorInterpolationFilters="sRGB"
|
|
176
|
-
>
|
|
177
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation={computedBlur} result="blur" />
|
|
178
|
-
<feColorMatrix
|
|
179
|
-
in="blur"
|
|
180
|
-
mode="matrix"
|
|
181
|
-
values={`1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ${alphaGain ?? 20} ${alphaOffset ?? -10}`}
|
|
182
|
-
result="goo"
|
|
183
|
-
/>
|
|
184
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop" />
|
|
185
|
-
</filter>
|
|
186
|
-
</defs>
|
|
187
|
-
|
|
188
|
-
{/* Pill rect — static background */}
|
|
189
|
-
<rect
|
|
190
|
-
x={pad}
|
|
191
|
-
y={bubbleH}
|
|
192
|
-
width={width - pad * 2}
|
|
193
|
-
height={height - pad * 2}
|
|
194
|
-
rx={effectiveR}
|
|
195
|
-
ry={effectiveR}
|
|
196
|
-
fill={fillColor}
|
|
197
|
-
/>
|
|
198
|
-
|
|
199
|
-
{/* Bubble rect — always collapsed in DOM, WAAPI controls visual state */}
|
|
200
|
-
<rect
|
|
201
|
-
ref={bubbleRectRef}
|
|
202
|
-
x={insetPx}
|
|
203
|
-
y={bubbleH}
|
|
204
|
-
width={bubbleW}
|
|
205
|
-
height={0}
|
|
206
|
-
rx={bubbleR}
|
|
207
|
-
ry={bubbleR}
|
|
208
|
-
fill={fillColor}
|
|
209
|
-
/>
|
|
210
|
-
</svg>
|
|
211
|
-
</div>
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
GooeyCanvas.displayName = 'GooeyCanvas';
|
|
216
|
-
|
|
217
|
-
export { GooeyCanvas };
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* GooeyFilter — SVG filter definition for gooey morphing effects.
|
|
5
|
-
*
|
|
6
|
-
* Renders a hidden `<svg>` with a `<filter>` that uses `feGaussianBlur` +
|
|
7
|
-
* `feColorMatrix` + `feComposite` to merge same-colored shapes organically.
|
|
8
|
-
*
|
|
9
|
-
* Apply via `filter: url(#id)` on a container. All same-colored children merge.
|
|
10
|
-
* `feComposite operator="atop"` preserves sharp text/content on top.
|
|
11
|
-
*
|
|
12
|
-
* @param id - Unique filter ID
|
|
13
|
-
* @param blur - Gaussian blur stdDeviation (default: 8)
|
|
14
|
-
* @param alphaGain - Alpha multiplier for merge threshold (default: 20)
|
|
15
|
-
* @param alphaOffset - Alpha offset for edge sharpness (default: -10)
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* <GooeyFilter id="my-goo" blur={6} />
|
|
20
|
-
* <div style={{ filter: 'url(#my-goo)' }}>
|
|
21
|
-
* <div className="bg-card" /> // these merge
|
|
22
|
-
* <div className="bg-card" /> // organically
|
|
23
|
-
* </div>
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* @module @mks2508/mks-ui/react/primitives/waapi/Gooey
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
import { memo } from 'react';
|
|
30
|
-
import { GOOEY_DEFAULTS, buildColorMatrixValues } from './gooey-utils';
|
|
31
|
-
import type { IGooeyFilterProps } from './Gooey.types';
|
|
32
|
-
|
|
33
|
-
const HIDDEN_SVG_STYLE = {
|
|
34
|
-
position: 'absolute' as const,
|
|
35
|
-
width: 0,
|
|
36
|
-
height: 0,
|
|
37
|
-
overflow: 'hidden' as const,
|
|
38
|
-
pointerEvents: 'none' as const,
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* GooeyFilter — renders an SVG filter definition for gooey morphing.
|
|
43
|
-
*/
|
|
44
|
-
const GooeyFilter = memo(function GooeyFilter({
|
|
45
|
-
id,
|
|
46
|
-
blur = 8,
|
|
47
|
-
alphaGain = GOOEY_DEFAULTS.ALPHA_GAIN,
|
|
48
|
-
alphaOffset = GOOEY_DEFAULTS.ALPHA_OFFSET,
|
|
49
|
-
}: IGooeyFilterProps) {
|
|
50
|
-
return (
|
|
51
|
-
<svg aria-hidden="true" style={HIDDEN_SVG_STYLE}>
|
|
52
|
-
<defs>
|
|
53
|
-
<filter
|
|
54
|
-
id={id}
|
|
55
|
-
x="-20%"
|
|
56
|
-
y="-20%"
|
|
57
|
-
width="140%"
|
|
58
|
-
height="140%"
|
|
59
|
-
colorInterpolationFilters="sRGB"
|
|
60
|
-
>
|
|
61
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation={blur} result="blur" />
|
|
62
|
-
<feColorMatrix
|
|
63
|
-
in="blur"
|
|
64
|
-
mode="matrix"
|
|
65
|
-
values={buildColorMatrixValues(alphaGain, alphaOffset)}
|
|
66
|
-
result="goo"
|
|
67
|
-
/>
|
|
68
|
-
<feComposite in="SourceGraphic" in2="goo" operator="atop" />
|
|
69
|
-
</filter>
|
|
70
|
-
</defs>
|
|
71
|
-
</svg>
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
GooeyFilter.displayName = 'GooeyFilter';
|
|
76
|
-
|
|
77
|
-
export { GooeyFilter };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* MorphPath — SVG `<path>` component with parametric pill-to-blob morphing.
|
|
5
|
-
*
|
|
6
|
-
* Generates a `<path d="...">` that transitions from a pill shape to an
|
|
7
|
-
* expanded blob based on the `progress` value (0→1). Uses quadratic Bezier
|
|
8
|
-
* curves at the junction for organic concave connections.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```tsx
|
|
12
|
-
* <svg width={300} height={80} style={{ position: 'absolute' }}>
|
|
13
|
-
* <MorphPath
|
|
14
|
-
* pillWidth={260}
|
|
15
|
-
* bodyWidth={180}
|
|
16
|
-
* totalHeight={80}
|
|
17
|
-
* progress={expanded ? 1 : 0}
|
|
18
|
-
* direction="up"
|
|
19
|
-
* fill="var(--card)"
|
|
20
|
-
* />
|
|
21
|
-
* </svg>
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @module @mks2508/mks-ui/react/primitives/waapi/Gooey
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
import { memo } from 'react';
|
|
28
|
-
import { useMorphPath } from './useMorphPath';
|
|
29
|
-
import type { IMorphPathProps } from './Gooey.types';
|
|
30
|
-
import { GOOEY_DEFAULTS } from './gooey-utils';
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* MorphPath — parametric SVG path for pill→blob morphing.
|
|
34
|
-
*/
|
|
35
|
-
const MorphPath = memo(function MorphPath({
|
|
36
|
-
pillWidth,
|
|
37
|
-
bodyWidth,
|
|
38
|
-
totalHeight,
|
|
39
|
-
progress,
|
|
40
|
-
pillHeight = GOOEY_DEFAULTS.PILL_HEIGHT,
|
|
41
|
-
direction = 'down',
|
|
42
|
-
...pathProps
|
|
43
|
-
}: IMorphPathProps) {
|
|
44
|
-
const d = useMorphPath({
|
|
45
|
-
pillWidth,
|
|
46
|
-
bodyWidth,
|
|
47
|
-
totalHeight,
|
|
48
|
-
progress,
|
|
49
|
-
pillHeight,
|
|
50
|
-
direction,
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
return <path d={d} {...pathProps} />;
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
MorphPath.displayName = 'MorphPath';
|
|
57
|
-
|
|
58
|
-
export { MorphPath };
|