@mks2508/mks-ui 0.5.7 → 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 +2 -0
  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 +1 -1
  4. package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts.map +1 -1
  5. package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.js +173 -43
  6. package/dist/react-ui/ui/DynamicToggle/{DynamicToggle-DOR3Ld-k.css → DynamicToggle-DJLwEkHr.css} +12 -19
  7. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +12 -20
  8. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -0
  9. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts.map +1 -1
  10. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.js +7 -1
  11. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +55 -31
  12. package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts.map +1 -1
  13. package/dist/react-ui/ui/DynamicToggle/index.d.ts +9 -3
  14. package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
  15. package/dist/react-ui/ui/DynamicToggle/index.js +47 -34
  16. package/package.json +52 -13
  17. package/src/assets/react.svg +0 -1
  18. package/src/core/index.ts +0 -7
  19. package/src/core/types.ts +0 -82
  20. package/src/css.d.ts +0 -7
  21. package/src/index.css +0 -129
  22. package/src/index.ts +0 -29
  23. package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +0 -278
  24. package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +0 -97
  25. package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +0 -155
  26. package/src/react-ui/blocks/Terminal/Terminal.theme.ts +0 -80
  27. package/src/react-ui/blocks/Terminal/Terminal.types.ts +0 -438
  28. package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +0 -38
  29. package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +0 -254
  30. package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +0 -73
  31. package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +0 -269
  32. package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +0 -326
  33. package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +0 -230
  34. package/src/react-ui/blocks/Terminal/XTermAdapter.ts +0 -163
  35. package/src/react-ui/blocks/Terminal/chrome.ts +0 -25
  36. package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +0 -316
  37. package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +0 -218
  38. package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +0 -386
  39. package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +0 -67
  40. package/src/react-ui/blocks/Terminal/components/index.ts +0 -10
  41. package/src/react-ui/blocks/Terminal/display.ts +0 -46
  42. package/src/react-ui/blocks/Terminal/hooks/index.ts +0 -22
  43. package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +0 -229
  44. package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +0 -292
  45. package/src/react-ui/blocks/Terminal/index.ts +0 -111
  46. package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +0 -330
  47. package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +0 -242
  48. package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +0 -202
  49. package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +0 -140
  50. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +0 -68
  51. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +0 -85
  52. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +0 -383
  53. package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +0 -439
  54. package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +0 -550
  55. package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +0 -259
  56. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +0 -75
  57. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +0 -266
  58. package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +0 -82
  59. package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +0 -112
  60. package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +0 -178
  61. package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +0 -203
  62. package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +0 -252
  63. package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +0 -334
  64. package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +0 -261
  65. package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +0 -248
  66. package/src/react-ui/blocks/Terminal/panel/index.ts +0 -72
  67. package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +0 -59
  68. package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +0 -59
  69. package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +0 -180
  70. package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +0 -248
  71. package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +0 -283
  72. package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +0 -686
  73. package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +0 -466
  74. package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +0 -343
  75. package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +0 -167
  76. package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +0 -348
  77. package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +0 -251
  78. package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +0 -390
  79. package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +0 -320
  80. package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +0 -20
  81. package/src/react-ui/blocks/Terminal/parsing/index.ts +0 -69
  82. package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +0 -68
  83. package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +0 -436
  84. package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +0 -14
  85. package/src/react-ui/blocks/index.ts +0 -11
  86. package/src/react-ui/components/MorphingPopover/MorphingPopover.types.ts +0 -49
  87. package/src/react-ui/components/MorphingPopover/index.tsx +0 -186
  88. package/src/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -153
  89. package/src/react-ui/components/index.ts +0 -9
  90. package/src/react-ui/hooks/Animation/UseAutoHeight.tsx +0 -123
  91. package/src/react-ui/hooks/DOM/UseIsInView.tsx +0 -44
  92. package/src/react-ui/hooks/Formatting/UseListFormat.ts +0 -134
  93. package/src/react-ui/hooks/State/UseControlledState.tsx +0 -57
  94. package/src/react-ui/hooks/State/UseDataState.tsx +0 -76
  95. package/src/react-ui/hooks/index.ts +0 -20
  96. package/src/react-ui/icons/index.ts +0 -12
  97. package/src/react-ui/icons/lucide-animated/activity.tsx +0 -109
  98. package/src/react-ui/icons/lucide-animated/arrow-down-to-line.tsx +0 -51
  99. package/src/react-ui/icons/lucide-animated/arrow-up.tsx +0 -50
  100. package/src/react-ui/icons/lucide-animated/bell-electric.tsx +0 -124
  101. package/src/react-ui/icons/lucide-animated/bell.tsx +0 -93
  102. package/src/react-ui/icons/lucide-animated/bot.tsx +0 -122
  103. package/src/react-ui/icons/lucide-animated/box.tsx +0 -117
  104. package/src/react-ui/icons/lucide-animated/check.tsx +0 -21
  105. package/src/react-ui/icons/lucide-animated/circle-check.tsx +0 -107
  106. package/src/react-ui/icons/lucide-animated/delete.tsx +0 -133
  107. package/src/react-ui/icons/lucide-animated/download.tsx +0 -99
  108. package/src/react-ui/icons/lucide-animated/edit-2.tsx +0 -21
  109. package/src/react-ui/icons/lucide-animated/globe.tsx +0 -23
  110. package/src/react-ui/icons/lucide-animated/home.tsx +0 -103
  111. package/src/react-ui/icons/lucide-animated/index.ts +0 -38
  112. package/src/react-ui/icons/lucide-animated/layers.tsx +0 -23
  113. package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +0 -143
  114. package/src/react-ui/icons/lucide-animated/list.tsx +0 -54
  115. package/src/react-ui/icons/lucide-animated/package.tsx +0 -24
  116. package/src/react-ui/icons/lucide-animated/palette.tsx +0 -25
  117. package/src/react-ui/icons/lucide-animated/plus.tsx +0 -92
  118. package/src/react-ui/icons/lucide-animated/refresh-cw.tsx +0 -24
  119. package/src/react-ui/icons/lucide-animated/rocket.tsx +0 -24
  120. package/src/react-ui/icons/lucide-animated/save.tsx +0 -23
  121. package/src/react-ui/icons/lucide-animated/search.tsx +0 -94
  122. package/src/react-ui/icons/lucide-animated/settings.tsx +0 -92
  123. package/src/react-ui/icons/lucide-animated/terminal.tsx +0 -46
  124. package/src/react-ui/icons/lucide-animated/trash-2.tsx +0 -25
  125. package/src/react-ui/icons/lucide-animated/trending-down.tsx +0 -151
  126. package/src/react-ui/icons/lucide-animated/trending-up.tsx +0 -150
  127. package/src/react-ui/icons/lucide-animated/type.tsx +0 -23
  128. package/src/react-ui/icons/lucide-animated/upload.tsx +0 -23
  129. package/src/react-ui/icons/lucide-animated/x.tsx +0 -102
  130. package/src/react-ui/index.ts +0 -30
  131. package/src/react-ui/lib/get-strict-context.tsx +0 -56
  132. package/src/react-ui/lib/icon-wrapper.tsx +0 -70
  133. package/src/react-ui/lib/index.ts +0 -9
  134. package/src/react-ui/lib/utils.ts +0 -24
  135. package/src/react-ui/primitives/AutoHeight/index.tsx +0 -74
  136. package/src/react-ui/primitives/CountingNumber/index.tsx +0 -147
  137. package/src/react-ui/primitives/Highlight/Highlight.types.ts +0 -136
  138. package/src/react-ui/primitives/Highlight/index.tsx +0 -577
  139. package/src/react-ui/primitives/Slot/index.tsx +0 -128
  140. package/src/react-ui/primitives/index.ts +0 -16
  141. package/src/react-ui/primitives/waapi/Gooey/Gooey.types.ts +0 -141
  142. package/src/react-ui/primitives/waapi/Gooey/GooeyCanvas.tsx +0 -217
  143. package/src/react-ui/primitives/waapi/Gooey/GooeyFilter.tsx +0 -77
  144. package/src/react-ui/primitives/waapi/Gooey/MorphPath.tsx +0 -58
  145. package/src/react-ui/primitives/waapi/Gooey/gooey-utils.ts +0 -253
  146. package/src/react-ui/primitives/waapi/Gooey/index.ts +0 -50
  147. package/src/react-ui/primitives/waapi/Gooey/useMorphPath.ts +0 -48
  148. package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +0 -106
  149. package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +0 -21
  150. package/src/react-ui/primitives/waapi/Morph/index.tsx +0 -56
  151. package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +0 -12
  152. package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +0 -89
  153. package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +0 -176
  154. package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +0 -87
  155. package/src/react-ui/primitives/waapi/Morph/useMorph.ts +0 -101
  156. package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +0 -177
  157. package/src/react-ui/primitives/waapi/Reorder/index.tsx +0 -260
  158. package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +0 -47
  159. package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +0 -209
  160. package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +0 -104
  161. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +0 -14
  162. package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +0 -84
  163. package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +0 -474
  164. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +0 -32
  165. package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +0 -69
  166. package/src/react-ui/primitives/waapi/SlidingText/index.tsx +0 -140
  167. package/src/react-ui/primitives/waapi/core/animationConstants.ts +0 -215
  168. package/src/react-ui/primitives/waapi/core/index.ts +0 -53
  169. package/src/react-ui/primitives/waapi/core/types.ts +0 -200
  170. package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +0 -430
  171. package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +0 -81
  172. package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +0 -138
  173. package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +0 -106
  174. package/src/react-ui/primitives/waapi/index.ts +0 -139
  175. package/src/react-ui/styles/animations.css +0 -369
  176. package/src/react-ui/ui/Accordion/Accordion.styles.ts +0 -72
  177. package/src/react-ui/ui/Accordion/Accordion.types.ts +0 -199
  178. package/src/react-ui/ui/Accordion/index.tsx +0 -362
  179. package/src/react-ui/ui/AlertDialog/AlertDialog.styles.ts +0 -38
  180. package/src/react-ui/ui/AlertDialog/AlertDialog.types.ts +0 -296
  181. package/src/react-ui/ui/AlertDialog/index.tsx +0 -540
  182. package/src/react-ui/ui/Badge/Badge.styles.ts +0 -43
  183. package/src/react-ui/ui/Badge/Badge.types.ts +0 -26
  184. package/src/react-ui/ui/Badge/index.tsx +0 -34
  185. package/src/react-ui/ui/Button/Button.styles.ts +0 -57
  186. package/src/react-ui/ui/Button/Button.types.ts +0 -63
  187. package/src/react-ui/ui/Button/index.tsx +0 -155
  188. package/src/react-ui/ui/Card/Card.styles.ts +0 -32
  189. package/src/react-ui/ui/Card/Card.types.ts +0 -39
  190. package/src/react-ui/ui/Card/index.tsx +0 -130
  191. package/src/react-ui/ui/Checkbox/Checkbox.styles.ts +0 -40
  192. package/src/react-ui/ui/Checkbox/Checkbox.types.ts +0 -98
  193. package/src/react-ui/ui/Checkbox/index.tsx +0 -233
  194. package/src/react-ui/ui/Combobox/Combobox.styles.ts +0 -34
  195. package/src/react-ui/ui/Combobox/Combobox.types.ts +0 -89
  196. package/src/react-ui/ui/Combobox/index.tsx +0 -331
  197. package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +0 -38
  198. package/src/react-ui/ui/CornerBracket/CornerBracket.types.ts +0 -15
  199. package/src/react-ui/ui/CornerBracket/index.tsx +0 -49
  200. package/src/react-ui/ui/DataCard/DataCard.styles.ts +0 -94
  201. package/src/react-ui/ui/DataCard/DataCard.types.ts +0 -125
  202. package/src/react-ui/ui/DataCard/index.tsx +0 -340
  203. package/src/react-ui/ui/Dialog/Dialog.styles.ts +0 -59
  204. package/src/react-ui/ui/Dialog/Dialog.types.ts +0 -284
  205. package/src/react-ui/ui/Dialog/index.tsx +0 -452
  206. package/src/react-ui/ui/DropdownMenu/DropdownMenu.styles.ts +0 -35
  207. package/src/react-ui/ui/DropdownMenu/DropdownMenu.types.ts +0 -81
  208. package/src/react-ui/ui/DropdownMenu/index.tsx +0 -300
  209. package/src/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -376
  210. package/src/react-ui/ui/DynamicToggle/DynamicToggle.styles.ts +0 -85
  211. package/src/react-ui/ui/DynamicToggle/DynamicToggle.types.ts +0 -180
  212. package/src/react-ui/ui/DynamicToggle/index.tsx +0 -316
  213. package/src/react-ui/ui/DynamicToggle/prototype-v7-ios.html +0 -413
  214. package/src/react-ui/ui/DynamicToggle/prototype-v7.html +0 -615
  215. package/src/react-ui/ui/DynamicToggle/prototype-v8-gooey-safari.html +0 -560
  216. package/src/react-ui/ui/DynamicToggle/prototype-v8b-react-structure.html +0 -227
  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,452 +0,0 @@
1
- 'use client';
2
-
3
- /**
4
- * Animated Dialog component built on Base UI Dialog and Motion.
5
- *
6
- * Provides a modal dialog overlay with perspective-flip entrance animation,
7
- * animated backdrop, and full AnimatePresence exit support. All sub-components
8
- * accept a `slots` prop for class-name overrides following the StyleSlots pattern.
9
- *
10
- * @module @mks2508/mks-ui/react/ui/Dialog
11
- *
12
- * @example
13
- * ```tsx
14
- * import {
15
- * Dialog,
16
- * DialogTrigger,
17
- * DialogPortal,
18
- * DialogBackdrop,
19
- * DialogPopup,
20
- * DialogHeader,
21
- * DialogTitle,
22
- * DialogDescription,
23
- * DialogFooter,
24
- * DialogClose,
25
- * } from '@mks2508/mks-ui';
26
- *
27
- * function ConfirmDialog() {
28
- * return (
29
- * <Dialog>
30
- * <DialogTrigger>
31
- * <button>Delete Item</button>
32
- * </DialogTrigger>
33
- * <DialogPortal>
34
- * <DialogBackdrop />
35
- * <DialogPopup from="bottom">
36
- * <DialogHeader>
37
- * <DialogTitle>Confirm Deletion</DialogTitle>
38
- * <DialogDescription>This action cannot be undone.</DialogDescription>
39
- * </DialogHeader>
40
- * <DialogFooter>
41
- * <DialogClose><button>Cancel</button></DialogClose>
42
- * <button>Delete</button>
43
- * </DialogFooter>
44
- * </DialogPopup>
45
- * </DialogPortal>
46
- * </Dialog>
47
- * );
48
- * }
49
- * ```
50
- */
51
-
52
- import * as React from 'react';
53
- import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';
54
- import { AnimatePresence, motion } from 'motion/react';
55
-
56
- import { useControlledState } from '@/react-ui/hooks/State/UseControlledState';
57
- import { getStrictContext } from '@/react-ui/lib/get-strict-context';
58
- import { cn } from '@/react-ui/lib/utils';
59
-
60
- import { dialogStyles } from './Dialog.styles';
61
- import type {
62
- DialogContextType,
63
- DialogFlipDirection,
64
- IDialogProps,
65
- IDialogTriggerProps,
66
- IDialogPortalProps,
67
- IDialogBackdropProps,
68
- IDialogPopupProps,
69
- IDialogCloseProps,
70
- IDialogHeaderProps,
71
- IDialogFooterProps,
72
- IDialogTitleProps,
73
- IDialogDescriptionProps,
74
- } from './Dialog.types';
75
-
76
- /* -------------------------------------------------------------------------- */
77
- /* Context */
78
- /* -------------------------------------------------------------------------- */
79
-
80
- const [DialogProvider, useDialog] =
81
- getStrictContext<DialogContextType>('DialogContext');
82
-
83
- /* -------------------------------------------------------------------------- */
84
- /* Dialog (Root) */
85
- /* -------------------------------------------------------------------------- */
86
-
87
- /**
88
- * Root Dialog component.
89
- * Manages controlled/uncontrolled open state and provides context to children.
90
- *
91
- * @param props - Dialog root props including `open`, `defaultOpen`, and `onOpenChange`
92
- *
93
- * @example
94
- * ```tsx
95
- * <Dialog open={isOpen} onOpenChange={setIsOpen}>
96
- * {children}
97
- * </Dialog>
98
- * ```
99
- */
100
- function Dialog(props: IDialogProps) {
101
- const { slots, config: _config, ...rest } = props;
102
-
103
- const [isOpen, setIsOpen] = useControlledState({
104
- value: rest?.open,
105
- defaultValue: rest?.defaultOpen,
106
- onChange: rest?.onOpenChange,
107
- });
108
-
109
- return (
110
- <DialogProvider value={{ isOpen, setIsOpen }}>
111
- <DialogPrimitive.Root
112
- data-slot="dialog"
113
- {...rest}
114
- onOpenChange={setIsOpen}
115
- />
116
- </DialogProvider>
117
- );
118
- }
119
-
120
- /* -------------------------------------------------------------------------- */
121
- /* DialogTrigger */
122
- /* -------------------------------------------------------------------------- */
123
-
124
- /**
125
- * Trigger element that opens the dialog on interaction.
126
- *
127
- * @param props - Trigger props forwarded to Base UI Dialog.Trigger
128
- *
129
- * @example
130
- * ```tsx
131
- * <DialogTrigger>
132
- * <button>Open</button>
133
- * </DialogTrigger>
134
- * ```
135
- */
136
- function DialogTrigger({ slots, className, ...props }: IDialogTriggerProps) {
137
- return (
138
- <DialogPrimitive.Trigger
139
- data-slot="dialog-trigger"
140
- className={cn(dialogStyles.root, slots?.root, className)}
141
- {...props}
142
- />
143
- );
144
- }
145
-
146
- /* -------------------------------------------------------------------------- */
147
- /* DialogPortal */
148
- /* -------------------------------------------------------------------------- */
149
-
150
- /**
151
- * Portal wrapper with AnimatePresence for coordinated enter/exit animations.
152
- * Internally sets `keepMounted` so motion exit animations play correctly.
153
- *
154
- * @param props - Portal props (without keepMounted)
155
- *
156
- * @example
157
- * ```tsx
158
- * <DialogPortal>
159
- * <DialogBackdrop />
160
- * <DialogPopup>...</DialogPopup>
161
- * </DialogPortal>
162
- * ```
163
- */
164
- function DialogPortal({ slots: _slots, ...props }: IDialogPortalProps) {
165
- const { isOpen } = useDialog();
166
-
167
- return (
168
- <AnimatePresence>
169
- {isOpen && (
170
- <DialogPrimitive.Portal
171
- data-slot="dialog-portal"
172
- keepMounted
173
- {...props}
174
- />
175
- )}
176
- </AnimatePresence>
177
- );
178
- }
179
-
180
- /* -------------------------------------------------------------------------- */
181
- /* DialogBackdrop */
182
- /* -------------------------------------------------------------------------- */
183
-
184
- /**
185
- * Animated overlay backdrop behind the dialog popup.
186
- * Uses a blur + fade entrance/exit animation via Motion.
187
- *
188
- * @param props - Backdrop props including motion transition overrides
189
- *
190
- * @example
191
- * ```tsx
192
- * <DialogBackdrop slots={{ backdrop: 'bg-black/60' }} />
193
- * ```
194
- */
195
- function DialogBackdrop({
196
- slots,
197
- className,
198
- transition = { duration: 0.2, ease: 'easeInOut' },
199
- ...props
200
- }: IDialogBackdropProps) {
201
- return (
202
- <DialogPrimitive.Backdrop
203
- data-slot="dialog-backdrop"
204
- render={
205
- <motion.div
206
- key="dialog-backdrop"
207
- className={cn(dialogStyles.backdrop, slots?.backdrop, className)}
208
- initial={{ opacity: 0, filter: 'blur(4px)' }}
209
- animate={{ opacity: 1, filter: 'blur(0px)' }}
210
- exit={{ opacity: 0, filter: 'blur(4px)' }}
211
- transition={transition}
212
- {...(props as any)}
213
- />
214
- }
215
- />
216
- );
217
- }
218
-
219
- /* -------------------------------------------------------------------------- */
220
- /* DialogPopup */
221
- /* -------------------------------------------------------------------------- */
222
-
223
- /**
224
- * Main dialog content container with a perspective-flip entrance animation.
225
- * The `from` prop controls the axis and direction of the 3D rotation.
226
- *
227
- * @param props - Popup props including `from` direction and motion transition overrides
228
- *
229
- * @example
230
- * ```tsx
231
- * <DialogPopup from="bottom" className="max-w-md">
232
- * <DialogTitle>Confirm</DialogTitle>
233
- * <p>Are you sure?</p>
234
- * </DialogPopup>
235
- * ```
236
- */
237
- function DialogPopup({
238
- from = 'top',
239
- initialFocus,
240
- finalFocus,
241
- slots,
242
- className,
243
- transition = { type: 'spring', stiffness: 150, damping: 25 },
244
- ...props
245
- }: IDialogPopupProps) {
246
- const initialRotation =
247
- from === 'bottom' || from === 'left' ? '20deg' : '-20deg';
248
- const isVertical = from === 'top' || from === 'bottom';
249
- const rotateAxis = isVertical ? 'rotateX' : 'rotateY';
250
-
251
- return (
252
- <DialogPrimitive.Popup
253
- initialFocus={initialFocus}
254
- finalFocus={finalFocus}
255
- render={
256
- <motion.div
257
- key="dialog-popup"
258
- data-slot="dialog-popup"
259
- className={cn(dialogStyles.popup, slots?.popup, className)}
260
- initial={{
261
- opacity: 0,
262
- filter: 'blur(4px)',
263
- transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
264
- }}
265
- animate={{
266
- opacity: 1,
267
- filter: 'blur(0px)',
268
- transform: `perspective(500px) ${rotateAxis}(0deg) scale(1)`,
269
- }}
270
- exit={{
271
- opacity: 0,
272
- filter: 'blur(4px)',
273
- transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
274
- }}
275
- transition={transition}
276
- {...(props as any)}
277
- />
278
- }
279
- />
280
- );
281
- }
282
-
283
- /* -------------------------------------------------------------------------- */
284
- /* DialogClose */
285
- /* -------------------------------------------------------------------------- */
286
-
287
- /**
288
- * Button that closes the dialog when clicked.
289
- *
290
- * @param props - Close button props forwarded to Base UI Dialog.Close
291
- *
292
- * @example
293
- * ```tsx
294
- * <DialogClose slots={{ close: 'text-muted-foreground' }}>
295
- * <button>Cancel</button>
296
- * </DialogClose>
297
- * ```
298
- */
299
- function DialogClose({ slots, className, ...props }: IDialogCloseProps) {
300
- return (
301
- <DialogPrimitive.Close
302
- data-slot="dialog-close"
303
- className={cn(dialogStyles.close, slots?.close, className)}
304
- {...props}
305
- />
306
- );
307
- }
308
-
309
- /* -------------------------------------------------------------------------- */
310
- /* DialogHeader */
311
- /* -------------------------------------------------------------------------- */
312
-
313
- /**
314
- * Layout wrapper for the dialog header region (title + description).
315
- *
316
- * @param props - Standard div props with optional slot overrides
317
- *
318
- * @example
319
- * ```tsx
320
- * <DialogHeader>
321
- * <DialogTitle>Settings</DialogTitle>
322
- * <DialogDescription>Configure your preferences.</DialogDescription>
323
- * </DialogHeader>
324
- * ```
325
- */
326
- function DialogHeader({ slots, className, ...props }: IDialogHeaderProps) {
327
- return (
328
- <div
329
- data-slot="dialog-header"
330
- className={cn(dialogStyles.header, slots?.header, className)}
331
- {...props}
332
- />
333
- );
334
- }
335
-
336
- /* -------------------------------------------------------------------------- */
337
- /* DialogFooter */
338
- /* -------------------------------------------------------------------------- */
339
-
340
- /**
341
- * Layout wrapper for the dialog footer region (action buttons).
342
- *
343
- * @param props - Standard div props with optional slot overrides
344
- *
345
- * @example
346
- * ```tsx
347
- * <DialogFooter>
348
- * <DialogClose><button>Cancel</button></DialogClose>
349
- * <button>Confirm</button>
350
- * </DialogFooter>
351
- * ```
352
- */
353
- function DialogFooter({ slots, className, ...props }: IDialogFooterProps) {
354
- return (
355
- <div
356
- data-slot="dialog-footer"
357
- className={cn(dialogStyles.footer, slots?.footer, className)}
358
- {...props}
359
- />
360
- );
361
- }
362
-
363
- /* -------------------------------------------------------------------------- */
364
- /* DialogTitle */
365
- /* -------------------------------------------------------------------------- */
366
-
367
- /**
368
- * Accessible title for the dialog. Rendered as a heading element.
369
- *
370
- * @param props - Title props forwarded to Base UI Dialog.Title
371
- *
372
- * @example
373
- * ```tsx
374
- * <DialogTitle>Delete Workspace</DialogTitle>
375
- * ```
376
- */
377
- function DialogTitle({ slots, className, ...props }: IDialogTitleProps) {
378
- return (
379
- <DialogPrimitive.Title
380
- data-slot="dialog-title"
381
- className={cn(dialogStyles.title, slots?.title, className)}
382
- {...props}
383
- />
384
- );
385
- }
386
-
387
- /* -------------------------------------------------------------------------- */
388
- /* DialogDescription */
389
- /* -------------------------------------------------------------------------- */
390
-
391
- /**
392
- * Accessible description for the dialog. Provides supplementary context.
393
- *
394
- * @param props - Description props forwarded to Base UI Dialog.Description
395
- *
396
- * @example
397
- * ```tsx
398
- * <DialogDescription>This will permanently remove the workspace.</DialogDescription>
399
- * ```
400
- */
401
- function DialogDescription({
402
- slots,
403
- className,
404
- ...props
405
- }: IDialogDescriptionProps) {
406
- return (
407
- <DialogPrimitive.Description
408
- data-slot="dialog-description"
409
- className={cn(dialogStyles.description, slots?.description, className)}
410
- {...props}
411
- />
412
- );
413
- }
414
-
415
- /* -------------------------------------------------------------------------- */
416
- /* Exports */
417
- /* -------------------------------------------------------------------------- */
418
-
419
- export {
420
- Dialog,
421
- DialogPortal,
422
- DialogBackdrop,
423
- DialogClose,
424
- DialogTrigger,
425
- DialogPopup,
426
- DialogHeader,
427
- DialogFooter,
428
- DialogTitle,
429
- DialogDescription,
430
- useDialog,
431
- };
432
-
433
- // Re-exports from types
434
- export type {
435
- IDialogProps,
436
- IDialogTriggerProps,
437
- IDialogPortalProps,
438
- IDialogCloseProps,
439
- IDialogBackdropProps,
440
- IDialogPopupProps,
441
- IDialogHeaderProps,
442
- IDialogFooterProps,
443
- IDialogTitleProps,
444
- IDialogDescriptionProps,
445
- DialogContextType,
446
- DialogFlipDirection,
447
- DialogSlot,
448
- IDialogConfig,
449
- } from './Dialog.types';
450
-
451
- // Re-exports from styles
452
- export { dialogStyles } from './Dialog.styles';
@@ -1,35 +0,0 @@
1
- import type { StyleSlots } from '@/core/types';
2
-
3
- /** Visual regions for the DropdownMenu component family. */
4
- type DropdownMenuSlot =
5
- | 'root'
6
- | 'content'
7
- | 'item'
8
- | 'label'
9
- | 'separator'
10
- | 'shortcut'
11
- | 'subTrigger'
12
- | 'subContent'
13
- | 'checkboxItem'
14
- | 'radioItem';
15
-
16
- const dropdownMenuStyles: StyleSlots<DropdownMenuSlot> = {
17
- root: '',
18
- content:
19
- 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden',
20
- item: 'focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*=\'size-\'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',
21
- label: 'text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7',
22
- separator: 'bg-border -mx-1 my-1 h-px',
23
- shortcut: 'text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest',
24
- subTrigger:
25
- 'focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*=\'size-\'])]:size-4 data-popup-open:bg-accent data-popup-open:text-accent-foreground flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0',
26
- subContent:
27
- 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-md p-1 shadow-lg ring-1 duration-100 w-auto',
28
- checkboxItem:
29
- 'focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*=\'size-\'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',
30
- radioItem:
31
- 'focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*=\'size-\'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',
32
- };
33
-
34
- export { dropdownMenuStyles };
35
- export type { DropdownMenuSlot };
@@ -1,81 +0,0 @@
1
- import type { Menu as MenuPrimitive } from '@base-ui/react/menu';
2
- import type { SlotOverrides } from '@/core/types';
3
- import type { DropdownMenuSlot } from './DropdownMenu.styles';
4
-
5
- /** Props for the DropdownMenu root. */
6
- type IDropdownMenuProps = MenuPrimitive.Root.Props;
7
-
8
- /** Props for DropdownMenuPortal. */
9
- type IDropdownMenuPortalProps = MenuPrimitive.Portal.Props;
10
-
11
- /** Props for DropdownMenuTrigger. */
12
- type IDropdownMenuTriggerProps = MenuPrimitive.Trigger.Props;
13
-
14
- /** Props for DropdownMenuContent. */
15
- interface IDropdownMenuContentProps
16
- extends MenuPrimitive.Popup.Props,
17
- Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'> {
18
- /** Override classes for dropdown menu visual regions. */
19
- slots?: SlotOverrides<DropdownMenuSlot>;
20
- }
21
-
22
- /** Props for DropdownMenuGroup. */
23
- type IDropdownMenuGroupProps = MenuPrimitive.Group.Props;
24
-
25
- /** Props for DropdownMenuLabel. */
26
- interface IDropdownMenuLabelProps extends MenuPrimitive.GroupLabel.Props {
27
- /** Indent the label to align with items that have icons. */
28
- inset?: boolean;
29
- }
30
-
31
- /** Props for DropdownMenuItem. */
32
- interface IDropdownMenuItemProps extends MenuPrimitive.Item.Props {
33
- /** Indent the item. */
34
- inset?: boolean;
35
- /** Visual style variant. */
36
- variant?: 'default' | 'destructive';
37
- }
38
-
39
- /** Props for DropdownMenuSub. */
40
- type IDropdownMenuSubProps = MenuPrimitive.SubmenuRoot.Props;
41
-
42
- /** Props for DropdownMenuSubTrigger. */
43
- interface IDropdownMenuSubTriggerProps extends MenuPrimitive.SubmenuTrigger.Props {
44
- inset?: boolean;
45
- }
46
-
47
- /** Props for DropdownMenuCheckboxItem. */
48
- interface IDropdownMenuCheckboxItemProps extends MenuPrimitive.CheckboxItem.Props {
49
- inset?: boolean;
50
- }
51
-
52
- /** Props for DropdownMenuRadioGroup. */
53
- type IDropdownMenuRadioGroupProps = MenuPrimitive.RadioGroup.Props;
54
-
55
- /** Props for DropdownMenuRadioItem. */
56
- interface IDropdownMenuRadioItemProps extends MenuPrimitive.RadioItem.Props {
57
- inset?: boolean;
58
- }
59
-
60
- /** Props for DropdownMenuSeparator. */
61
- type IDropdownMenuSeparatorProps = MenuPrimitive.Separator.Props;
62
-
63
- /** Props for DropdownMenuShortcut. */
64
- type IDropdownMenuShortcutProps = React.ComponentProps<'span'>;
65
-
66
- export type {
67
- IDropdownMenuProps,
68
- IDropdownMenuPortalProps,
69
- IDropdownMenuTriggerProps,
70
- IDropdownMenuContentProps,
71
- IDropdownMenuGroupProps,
72
- IDropdownMenuLabelProps,
73
- IDropdownMenuItemProps,
74
- IDropdownMenuSubProps,
75
- IDropdownMenuSubTriggerProps,
76
- IDropdownMenuCheckboxItemProps,
77
- IDropdownMenuRadioGroupProps,
78
- IDropdownMenuRadioItemProps,
79
- IDropdownMenuSeparatorProps,
80
- IDropdownMenuShortcutProps,
81
- };