@mks2508/mks-ui 0.5.4 → 0.5.8

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.
Files changed (262) hide show
  1. package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts +23 -4
  2. package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts.map +1 -1
  3. package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts +2 -2
  4. package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts.map +1 -1
  5. package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.js +292 -31
  6. package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.d.ts +7 -0
  7. package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.d.ts.map +1 -1
  8. package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.js +6 -1
  9. package/dist/react-ui/ui/DynamicToggle/{DynamicToggle-Cm6-VceQ.css → DynamicToggle-DJLwEkHr.css} +116 -51
  10. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +116 -51
  11. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -0
  12. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts.map +1 -1
  13. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.js +9 -3
  14. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +61 -31
  15. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts.map +1 -1
  16. package/dist/react-ui/ui/DynamicToggle/index.d.ts +9 -3
  17. package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
  18. package/dist/react-ui/ui/DynamicToggle/index.js +68 -37
  19. package/package.json +52 -13
  20. package/src/assets/react.svg +0 -1
  21. package/src/core/index.ts +0 -7
  22. package/src/core/types.ts +0 -82
  23. package/src/css.d.ts +0 -7
  24. package/src/index.css +0 -129
  25. package/src/index.ts +0 -29
  26. package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +0 -278
  27. package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +0 -97
  28. package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +0 -155
  29. package/src/react-ui/blocks/Terminal/Terminal.theme.ts +0 -80
  30. package/src/react-ui/blocks/Terminal/Terminal.types.ts +0 -438
  31. package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +0 -38
  32. package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +0 -254
  33. package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +0 -73
  34. package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +0 -269
  35. package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +0 -326
  36. package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +0 -230
  37. package/src/react-ui/blocks/Terminal/XTermAdapter.ts +0 -163
  38. package/src/react-ui/blocks/Terminal/chrome.ts +0 -25
  39. package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +0 -316
  40. package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +0 -218
  41. package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +0 -386
  42. package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +0 -67
  43. package/src/react-ui/blocks/Terminal/components/index.ts +0 -10
  44. package/src/react-ui/blocks/Terminal/display.ts +0 -46
  45. package/src/react-ui/blocks/Terminal/hooks/index.ts +0 -22
  46. package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +0 -229
  47. package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +0 -292
  48. package/src/react-ui/blocks/Terminal/index.ts +0 -111
  49. package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +0 -330
  50. package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +0 -242
  51. package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +0 -202
  52. package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +0 -140
  53. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +0 -68
  54. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +0 -85
  55. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +0 -383
  56. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +0 -439
  57. package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +0 -550
  58. package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +0 -259
  59. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +0 -75
  60. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +0 -266
  61. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +0 -82
  62. package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +0 -112
  63. package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +0 -178
  64. package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +0 -203
  65. package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +0 -252
  66. package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +0 -334
  67. package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +0 -261
  68. package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +0 -248
  69. package/src/react-ui/blocks/Terminal/panel/index.ts +0 -72
  70. package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +0 -59
  71. package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +0 -59
  72. package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +0 -180
  73. package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +0 -248
  74. package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +0 -283
  75. package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +0 -686
  76. package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +0 -466
  77. package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +0 -343
  78. package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +0 -167
  79. package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +0 -348
  80. package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +0 -251
  81. package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +0 -390
  82. package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +0 -320
  83. package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +0 -20
  84. package/src/react-ui/blocks/Terminal/parsing/index.ts +0 -69
  85. package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +0 -68
  86. package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +0 -436
  87. package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +0 -14
  88. package/src/react-ui/blocks/index.ts +0 -11
  89. package/src/react-ui/components/MorphingPopover/MorphingPopover.types.ts +0 -49
  90. package/src/react-ui/components/MorphingPopover/index.tsx +0 -186
  91. package/src/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -153
  92. package/src/react-ui/components/index.ts +0 -9
  93. package/src/react-ui/hooks/Animation/UseAutoHeight.tsx +0 -123
  94. package/src/react-ui/hooks/DOM/UseIsInView.tsx +0 -44
  95. package/src/react-ui/hooks/Formatting/UseListFormat.ts +0 -134
  96. package/src/react-ui/hooks/State/UseControlledState.tsx +0 -57
  97. package/src/react-ui/hooks/State/UseDataState.tsx +0 -76
  98. package/src/react-ui/hooks/index.ts +0 -20
  99. package/src/react-ui/icons/index.ts +0 -12
  100. package/src/react-ui/icons/lucide-animated/activity.tsx +0 -109
  101. package/src/react-ui/icons/lucide-animated/arrow-down-to-line.tsx +0 -51
  102. package/src/react-ui/icons/lucide-animated/arrow-up.tsx +0 -50
  103. package/src/react-ui/icons/lucide-animated/bell-electric.tsx +0 -124
  104. package/src/react-ui/icons/lucide-animated/bell.tsx +0 -93
  105. package/src/react-ui/icons/lucide-animated/bot.tsx +0 -122
  106. package/src/react-ui/icons/lucide-animated/box.tsx +0 -117
  107. package/src/react-ui/icons/lucide-animated/check.tsx +0 -21
  108. package/src/react-ui/icons/lucide-animated/circle-check.tsx +0 -107
  109. package/src/react-ui/icons/lucide-animated/delete.tsx +0 -133
  110. package/src/react-ui/icons/lucide-animated/download.tsx +0 -99
  111. package/src/react-ui/icons/lucide-animated/edit-2.tsx +0 -21
  112. package/src/react-ui/icons/lucide-animated/globe.tsx +0 -23
  113. package/src/react-ui/icons/lucide-animated/home.tsx +0 -103
  114. package/src/react-ui/icons/lucide-animated/index.ts +0 -38
  115. package/src/react-ui/icons/lucide-animated/layers.tsx +0 -23
  116. package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +0 -143
  117. package/src/react-ui/icons/lucide-animated/list.tsx +0 -54
  118. package/src/react-ui/icons/lucide-animated/package.tsx +0 -24
  119. package/src/react-ui/icons/lucide-animated/palette.tsx +0 -25
  120. package/src/react-ui/icons/lucide-animated/plus.tsx +0 -92
  121. package/src/react-ui/icons/lucide-animated/refresh-cw.tsx +0 -24
  122. package/src/react-ui/icons/lucide-animated/rocket.tsx +0 -24
  123. package/src/react-ui/icons/lucide-animated/save.tsx +0 -23
  124. package/src/react-ui/icons/lucide-animated/search.tsx +0 -94
  125. package/src/react-ui/icons/lucide-animated/settings.tsx +0 -92
  126. package/src/react-ui/icons/lucide-animated/terminal.tsx +0 -46
  127. package/src/react-ui/icons/lucide-animated/trash-2.tsx +0 -25
  128. package/src/react-ui/icons/lucide-animated/trending-down.tsx +0 -151
  129. package/src/react-ui/icons/lucide-animated/trending-up.tsx +0 -150
  130. package/src/react-ui/icons/lucide-animated/type.tsx +0 -23
  131. package/src/react-ui/icons/lucide-animated/upload.tsx +0 -23
  132. package/src/react-ui/icons/lucide-animated/x.tsx +0 -102
  133. package/src/react-ui/index.ts +0 -30
  134. package/src/react-ui/lib/get-strict-context.tsx +0 -56
  135. package/src/react-ui/lib/icon-wrapper.tsx +0 -70
  136. package/src/react-ui/lib/index.ts +0 -9
  137. package/src/react-ui/lib/utils.ts +0 -24
  138. package/src/react-ui/primitives/AutoHeight/index.tsx +0 -74
  139. package/src/react-ui/primitives/CountingNumber/index.tsx +0 -147
  140. package/src/react-ui/primitives/Highlight/Highlight.types.ts +0 -136
  141. package/src/react-ui/primitives/Highlight/index.tsx +0 -577
  142. package/src/react-ui/primitives/Slot/index.tsx +0 -128
  143. package/src/react-ui/primitives/index.ts +0 -16
  144. package/src/react-ui/primitives/waapi/Gooey/Gooey.types.ts +0 -123
  145. package/src/react-ui/primitives/waapi/Gooey/GooeyCanvas.tsx +0 -80
  146. package/src/react-ui/primitives/waapi/Gooey/GooeyFilter.tsx +0 -77
  147. package/src/react-ui/primitives/waapi/Gooey/MorphPath.tsx +0 -58
  148. package/src/react-ui/primitives/waapi/Gooey/gooey-utils.ts +0 -244
  149. package/src/react-ui/primitives/waapi/Gooey/index.ts +0 -50
  150. package/src/react-ui/primitives/waapi/Gooey/useMorphPath.ts +0 -48
  151. package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +0 -106
  152. package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +0 -21
  153. package/src/react-ui/primitives/waapi/Morph/index.tsx +0 -56
  154. package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +0 -12
  155. package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +0 -89
  156. package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +0 -176
  157. package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +0 -87
  158. package/src/react-ui/primitives/waapi/Morph/useMorph.ts +0 -101
  159. package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +0 -177
  160. package/src/react-ui/primitives/waapi/Reorder/index.tsx +0 -260
  161. package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +0 -47
  162. package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +0 -209
  163. package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +0 -104
  164. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +0 -14
  165. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +0 -84
  166. package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +0 -474
  167. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +0 -32
  168. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +0 -69
  169. package/src/react-ui/primitives/waapi/SlidingText/index.tsx +0 -140
  170. package/src/react-ui/primitives/waapi/core/animationConstants.ts +0 -215
  171. package/src/react-ui/primitives/waapi/core/index.ts +0 -53
  172. package/src/react-ui/primitives/waapi/core/types.ts +0 -200
  173. package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +0 -430
  174. package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +0 -81
  175. package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +0 -138
  176. package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +0 -106
  177. package/src/react-ui/primitives/waapi/index.ts +0 -139
  178. package/src/react-ui/styles/animations.css +0 -369
  179. package/src/react-ui/ui/Accordion/Accordion.styles.ts +0 -72
  180. package/src/react-ui/ui/Accordion/Accordion.types.ts +0 -199
  181. package/src/react-ui/ui/Accordion/index.tsx +0 -362
  182. package/src/react-ui/ui/AlertDialog/AlertDialog.styles.ts +0 -38
  183. package/src/react-ui/ui/AlertDialog/AlertDialog.types.ts +0 -296
  184. package/src/react-ui/ui/AlertDialog/index.tsx +0 -540
  185. package/src/react-ui/ui/Badge/Badge.styles.ts +0 -43
  186. package/src/react-ui/ui/Badge/Badge.types.ts +0 -26
  187. package/src/react-ui/ui/Badge/index.tsx +0 -34
  188. package/src/react-ui/ui/Button/Button.styles.ts +0 -57
  189. package/src/react-ui/ui/Button/Button.types.ts +0 -63
  190. package/src/react-ui/ui/Button/index.tsx +0 -155
  191. package/src/react-ui/ui/Card/Card.styles.ts +0 -32
  192. package/src/react-ui/ui/Card/Card.types.ts +0 -39
  193. package/src/react-ui/ui/Card/index.tsx +0 -130
  194. package/src/react-ui/ui/Checkbox/Checkbox.styles.ts +0 -40
  195. package/src/react-ui/ui/Checkbox/Checkbox.types.ts +0 -98
  196. package/src/react-ui/ui/Checkbox/index.tsx +0 -233
  197. package/src/react-ui/ui/Combobox/Combobox.styles.ts +0 -34
  198. package/src/react-ui/ui/Combobox/Combobox.types.ts +0 -89
  199. package/src/react-ui/ui/Combobox/index.tsx +0 -331
  200. package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +0 -38
  201. package/src/react-ui/ui/CornerBracket/CornerBracket.types.ts +0 -15
  202. package/src/react-ui/ui/CornerBracket/index.tsx +0 -49
  203. package/src/react-ui/ui/DataCard/DataCard.styles.ts +0 -94
  204. package/src/react-ui/ui/DataCard/DataCard.types.ts +0 -125
  205. package/src/react-ui/ui/DataCard/index.tsx +0 -340
  206. package/src/react-ui/ui/Dialog/Dialog.styles.ts +0 -59
  207. package/src/react-ui/ui/Dialog/Dialog.types.ts +0 -284
  208. package/src/react-ui/ui/Dialog/index.tsx +0 -452
  209. package/src/react-ui/ui/DropdownMenu/DropdownMenu.styles.ts +0 -35
  210. package/src/react-ui/ui/DropdownMenu/DropdownMenu.types.ts +0 -81
  211. package/src/react-ui/ui/DropdownMenu/index.tsx +0 -300
  212. package/src/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -303
  213. package/src/react-ui/ui/DynamicToggle/DynamicToggle.styles.ts +0 -85
  214. package/src/react-ui/ui/DynamicToggle/DynamicToggle.types.ts +0 -174
  215. package/src/react-ui/ui/DynamicToggle/index.tsx +0 -294
  216. package/src/react-ui/ui/DynamicToggle/prototype-v7.html +0 -615
  217. package/src/react-ui/ui/DynamicToggle/prototype.html +0 -419
  218. package/src/react-ui/ui/Field/Field.styles.ts +0 -47
  219. package/src/react-ui/ui/Field/Field.types.ts +0 -60
  220. package/src/react-ui/ui/Field/index.tsx +0 -254
  221. package/src/react-ui/ui/Input/Input.styles.ts +0 -11
  222. package/src/react-ui/ui/Input/Input.types.ts +0 -10
  223. package/src/react-ui/ui/Input/index.tsx +0 -32
  224. package/src/react-ui/ui/InputGroup/InputGroup.styles.ts +0 -53
  225. package/src/react-ui/ui/InputGroup/InputGroup.types.ts +0 -44
  226. package/src/react-ui/ui/InputGroup/index.tsx +0 -149
  227. package/src/react-ui/ui/Label/Label.styles.ts +0 -10
  228. package/src/react-ui/ui/Label/Label.types.ts +0 -9
  229. package/src/react-ui/ui/Label/index.tsx +0 -27
  230. package/src/react-ui/ui/Menu/Menu.styles.ts +0 -71
  231. package/src/react-ui/ui/Menu/Menu.types.ts +0 -425
  232. package/src/react-ui/ui/Menu/index.tsx +0 -900
  233. package/src/react-ui/ui/Popover/Popover.styles.ts +0 -55
  234. package/src/react-ui/ui/Popover/Popover.types.ts +0 -261
  235. package/src/react-ui/ui/Popover/index.tsx +0 -422
  236. package/src/react-ui/ui/Progress/Progress.styles.ts +0 -36
  237. package/src/react-ui/ui/Progress/Progress.types.ts +0 -162
  238. package/src/react-ui/ui/Progress/index.tsx +0 -254
  239. package/src/react-ui/ui/Select/Select.styles.ts +0 -30
  240. package/src/react-ui/ui/Select/Select.types.ts +0 -51
  241. package/src/react-ui/ui/Select/index.tsx +0 -225
  242. package/src/react-ui/ui/Separator/Separator.styles.ts +0 -10
  243. package/src/react-ui/ui/Separator/Separator.types.ts +0 -10
  244. package/src/react-ui/ui/Separator/index.tsx +0 -37
  245. package/src/react-ui/ui/Switch/Switch.styles.ts +0 -50
  246. package/src/react-ui/ui/Switch/Switch.types.ts +0 -155
  247. package/src/react-ui/ui/Switch/index.tsx +0 -253
  248. package/src/react-ui/ui/Tabs/Tabs.css +0 -39
  249. package/src/react-ui/ui/Tabs/Tabs.styles.ts +0 -148
  250. package/src/react-ui/ui/Tabs/Tabs.types.ts +0 -255
  251. package/src/react-ui/ui/Tabs/index.tsx +0 -529
  252. package/src/react-ui/ui/TextFlow/TextFlow.styles.ts +0 -36
  253. package/src/react-ui/ui/TextFlow/TextFlow.types.ts +0 -118
  254. package/src/react-ui/ui/TextFlow/index.tsx +0 -276
  255. package/src/react-ui/ui/Textarea/Textarea.styles.ts +0 -10
  256. package/src/react-ui/ui/Textarea/Textarea.types.ts +0 -9
  257. package/src/react-ui/ui/Textarea/index.tsx +0 -27
  258. package/src/react-ui/ui/Tooltip/Tooltip.styles.ts +0 -43
  259. package/src/react-ui/ui/Tooltip/Tooltip.types.ts +0 -253
  260. package/src/react-ui/ui/Tooltip/index.tsx +0 -394
  261. package/src/react-ui/ui/index.ts +0 -41
  262. package/src/types/css-modules.d.ts +0 -18
@@ -1,106 +0,0 @@
1
- import type { ReactNode, RefObject } from 'react';
2
-
3
- /**
4
- * Available morphing techniques.
5
- */
6
- export type MorphTechnique = 'flip-clip-path' | 'css-grid' | 'view-transitions';
7
-
8
- // =============================================================================
9
- // FLIP + clip-path
10
- // =============================================================================
11
-
12
- /** Options for the FLIP + clip-path morphing technique */
13
- export interface IFLIPClipPathOptions {
14
- duration?: number;
15
- easing?: string;
16
- clipPathStart?: string;
17
- clipPathEnd?: string;
18
- }
19
-
20
- /** API returned by useFLIPClipPath */
21
- export interface IFLIPClipPathAPI {
22
- isMorphing: boolean;
23
- morph: (fromElement: HTMLElement, toElement: HTMLElement) => Promise<void>;
24
- cancel: () => void;
25
- }
26
-
27
- // =============================================================================
28
- // CSS Grid
29
- // =============================================================================
30
-
31
- /** Options for the CSS Grid expand/collapse technique */
32
- export interface ICSSGridMorphOptions {
33
- duration?: number;
34
- easing?: string;
35
- }
36
-
37
- /** API returned by useCSSGridMorph */
38
- export interface ICSSGridMorphAPI {
39
- isExpanded: boolean;
40
- expand: () => void;
41
- collapse: () => void;
42
- toggle: () => void;
43
- containerRef: RefObject<HTMLElement | null>;
44
- }
45
-
46
- // =============================================================================
47
- // View Transitions
48
- // =============================================================================
49
-
50
- /** Options for the View Transitions API wrapper */
51
- export interface IViewTransitionsOptions {
52
- name?: string;
53
- types?: string[];
54
- }
55
-
56
- /** API returned by useViewTransitions */
57
- export interface IViewTransitionsAPI {
58
- isSupported: boolean;
59
- startTransition: (callback: () => void | Promise<void>) => Promise<void>;
60
- setTypes: (types: string[]) => void;
61
- }
62
-
63
- // =============================================================================
64
- // Unified Morph
65
- // =============================================================================
66
-
67
- /** Configuration for useMorph hook */
68
- export interface IUseMorphConfig {
69
- technique?: MorphTechnique;
70
- duration?: number;
71
- easing?: string;
72
- onMorphStart?: () => void;
73
- onMorphEnd?: () => void;
74
- }
75
-
76
- /** Return type for useMorph hook */
77
- export interface IUseMorphReturn {
78
- isMorphing: boolean;
79
- technique: MorphTechnique;
80
- isViewTransitionsSupported: boolean;
81
- morph: (fromElement: HTMLElement, toElement: HTMLElement) => Promise<void>;
82
- cancel: () => void;
83
- flipClipPath: IFLIPClipPathAPI;
84
- cssGrid: ICSSGridMorphAPI;
85
- viewTransitions: IViewTransitionsAPI;
86
- }
87
-
88
- // =============================================================================
89
- // Component Props
90
- // =============================================================================
91
-
92
- /** Props for Morph container component */
93
- export interface IMorphProps {
94
- children: ReactNode;
95
- technique?: MorphTechnique;
96
- duration?: number;
97
- easing?: string;
98
- className?: string;
99
- onMorphStart?: () => void;
100
- onMorphEnd?: () => void;
101
- }
102
-
103
- /** Context value for Morph components */
104
- export interface IMorphContextValue {
105
- morph: IUseMorphReturn;
106
- }
@@ -1,21 +0,0 @@
1
- "use client";
2
-
3
- import React, { createContext, useContext } from 'react';
4
- import type { IMorphContextValue } from './Morph.types';
5
-
6
- const MorphContext = createContext<IMorphContextValue | null>(null);
7
-
8
- /**
9
- * Hook to access morph context
10
- *
11
- * @throws Error if used outside of Morph provider
12
- */
13
- export function useMorphContext(): IMorphContextValue {
14
- const context = useContext(MorphContext);
15
- if (!context) {
16
- throw new Error('useMorphContext must be used within a Morph component');
17
- }
18
- return context;
19
- }
20
-
21
- export { MorphContext };
@@ -1,56 +0,0 @@
1
- "use client";
2
-
3
- import React, { useMemo, type ReactNode } from 'react';
4
- import { MorphContext } from './MorphContext';
5
- import { useMorph } from './useMorph';
6
- import type { IMorphProps, IMorphContextValue } from './Morph.types';
7
- import { cn } from '@/react-ui/lib/utils';
8
-
9
- /**
10
- * Morph - Container component for morphable elements.
11
- *
12
- * Provides morphing capabilities to child components through context.
13
- * Supports FLIP + clip-path, CSS Grid, and View Transitions techniques.
14
- *
15
- * @example
16
- * ```tsx
17
- * <Morph technique="flip-clip-path" duration={300}>
18
- * <button onClick={() => morph(fromRef.current, toRef.current)}>
19
- * Morph
20
- * </button>
21
- * </Morph>
22
- * ```
23
- */
24
- export function Morph({
25
- children,
26
- technique = 'flip-clip-path',
27
- duration,
28
- easing,
29
- className = '',
30
- onMorphStart,
31
- onMorphEnd
32
- }: IMorphProps): ReactNode {
33
- const morph = useMorph({
34
- technique,
35
- duration,
36
- easing,
37
- onMorphStart,
38
- onMorphEnd
39
- });
40
-
41
- const contextValue = useMemo<IMorphContextValue>(() => ({
42
- morph
43
- }), [morph]);
44
-
45
- return (
46
- <MorphContext.Provider value={contextValue}>
47
- <div className={cn('morph-container', className)}>
48
- {children}
49
- </div>
50
- </MorphContext.Provider>
51
- );
52
- }
53
-
54
- Morph.displayName = 'Morph';
55
-
56
- export type { IMorphProps, IMorphContextValue };
@@ -1,12 +0,0 @@
1
- /**
2
- * Morph techniques.
3
- *
4
- * Individual morphing implementations that can be used
5
- * standalone or composed through useMorph.
6
- *
7
- * @module primitives/waapi/Morph/techniques
8
- */
9
-
10
- export { useFLIPClipPath } from './useFLIPClipPath';
11
- export { useCSSGridMorph } from './useCSSGridMorph';
12
- export { useViewTransitions } from './useViewTransitions';
@@ -1,89 +0,0 @@
1
- 'use client';
2
- import { useRef, useCallback, useState } from 'react';
3
- import { TIMING, EASINGS } from '../../core/animationConstants';
4
- import type { ICSSGridMorphOptions, ICSSGridMorphAPI } from '../Morph.types';
5
-
6
- const DEFAULT_DURATION = TIMING.FLIP_DURATION;
7
- const DEFAULT_EASING = EASINGS.MATERIAL_STANDARD;
8
-
9
- /**
10
- * Hook for CSS Grid-based expand/collapse animations.
11
- *
12
- * Uses the `grid-template-rows: 0fr/1fr` technique for smooth height
13
- * animations without needing to know the content height in advance.
14
- *
15
- * CSS required on container:
16
- * ```css
17
- * .morph-container {
18
- * display: grid;
19
- * grid-template-rows: 0fr;
20
- * transition: grid-template-rows 300ms ease;
21
- * }
22
- * .morph-container.expanded {
23
- * grid-template-rows: 1fr;
24
- * }
25
- * .morph-content {
26
- * overflow: hidden;
27
- * }
28
- * ```
29
- *
30
- * @param options - Duration and easing overrides
31
- * @returns Grid morph API with expand, collapse, toggle, and container ref
32
- *
33
- * @example
34
- * ```tsx
35
- * const { isExpanded, toggle, containerRef } = useCSSGridMorph();
36
- *
37
- * return (
38
- * <div ref={containerRef} className={isExpanded ? 'expanded' : ''}>
39
- * <div className="morph-content">Collapsible content</div>
40
- * </div>
41
- * );
42
- * ```
43
- */
44
- export function useCSSGridMorph(options?: ICSSGridMorphOptions): ICSSGridMorphAPI {
45
- const [isExpanded, setIsExpanded] = useState(false);
46
- const containerRef = useRef<HTMLElement | null>(null);
47
- const optionsRef = useRef(options);
48
-
49
- const duration = optionsRef.current?.duration ?? DEFAULT_DURATION;
50
- const easing = optionsRef.current?.easing ?? DEFAULT_EASING;
51
-
52
- const applyTransition = useCallback(() => {
53
- if (containerRef.current) {
54
- containerRef.current.style.transition = `grid-template-rows ${duration}ms ${easing}`;
55
- }
56
- }, [duration, easing]);
57
-
58
- const expand = useCallback(() => {
59
- applyTransition();
60
- if (containerRef.current) {
61
- containerRef.current.style.gridTemplateRows = '1fr';
62
- }
63
- setIsExpanded(true);
64
- }, [applyTransition]);
65
-
66
- const collapse = useCallback(() => {
67
- applyTransition();
68
- if (containerRef.current) {
69
- containerRef.current.style.gridTemplateRows = '0fr';
70
- }
71
- setIsExpanded(false);
72
- }, [applyTransition]);
73
-
74
- const toggle = useCallback(() => {
75
- if (isExpanded) {
76
- collapse();
77
- } else {
78
- expand();
79
- }
80
- }, [isExpanded, expand, collapse]);
81
-
82
- return {
83
- isExpanded,
84
- expand,
85
- collapse,
86
- toggle,
87
- containerRef
88
- };
89
- }
@@ -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
- }