@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,155 +0,0 @@
1
- /**
2
- * Type definitions for the Switch component.
3
- *
4
- * @module @mks2508/mks-ui/react/ui/Switch/Switch.types
5
- */
6
-
7
- import type { Switch as SwitchPrimitives } from '@base-ui/react/switch';
8
- import type {
9
- HTMLMotionProps,
10
- LegacyAnimationControls,
11
- TargetAndTransition,
12
- VariantLabels,
13
- } from 'motion/react';
14
-
15
- import type { IBaseConfig, SlotOverrides } from '@/core/types';
16
-
17
- /**
18
- * Available style slot names for the Switch component.
19
- * Each slot maps to a visual region that can be customized via the `slots` prop.
20
- *
21
- * - `root` - The outer switch track/button element
22
- * - `thumb` - The sliding thumb indicator
23
- * - `icon` - Icons displayed at left/right/thumb positions
24
- *
25
- * @example
26
- * ```tsx
27
- * <Switch slots={{ root: 'bg-zinc-800', thumb: 'bg-white', icon: 'text-zinc-400' }} />
28
- * ```
29
- */
30
- export type SwitchSlot = 'root' | 'thumb' | 'icon';
31
-
32
- /**
33
- * Position of an icon within the Switch component.
34
- *
35
- * - `left` - Shown when the switch is ON (checked)
36
- * - `right` - Shown when the switch is OFF (unchecked)
37
- * - `thumb` - Always visible on the thumb
38
- */
39
- export type SwitchIconPosition = 'left' | 'right' | 'thumb';
40
-
41
- /**
42
- * Internal context type for Switch state management.
43
- * Shared between the Switch root and its child components via React context.
44
- */
45
- export type SwitchContextType = {
46
- /** Whether the switch is currently checked (on). */
47
- isChecked: boolean;
48
- /** Callback to update the checked state. */
49
- setIsChecked: ISwitchProps['onCheckedChange'];
50
- /** Whether the switch is currently being pressed. */
51
- isPressed: boolean;
52
- /** Callback to update the pressed state. */
53
- setIsPressed: (isPressed: boolean) => void;
54
- };
55
-
56
- /**
57
- * Configuration options for Switch behavior and animation.
58
- * Extends the base config with switch-specific settings.
59
- *
60
- * @example
61
- * ```tsx
62
- * <Switch config={{ animation: { duration: 0.3 } }} />
63
- * ```
64
- */
65
- export interface ISwitchConfig extends IBaseConfig {
66
- /**
67
- * Spring stiffness for the thumb animation.
68
- * @defaultValue 300
69
- */
70
- springStiffness?: number;
71
- /**
72
- * Spring damping for the thumb animation.
73
- * @defaultValue 25
74
- */
75
- springDamping?: number;
76
- }
77
-
78
- /**
79
- * Props for the Switch root component.
80
- * Combines Base UI Switch.Root props (without `render`) with Motion button props,
81
- * plus slot overrides and configuration.
82
- *
83
- * @example
84
- * ```tsx
85
- * <Switch
86
- * checked={isOn}
87
- * onCheckedChange={setIsOn}
88
- * slots={{ root: 'w-11 h-6 rounded-full' }}
89
- * >
90
- * <SwitchThumb />
91
- * </Switch>
92
- * ```
93
- */
94
- export type ISwitchProps = Omit<
95
- React.ComponentProps<typeof SwitchPrimitives.Root>,
96
- 'render'
97
- > &
98
- HTMLMotionProps<'button'> & {
99
- /** Partial class overrides for each visual slot. */
100
- slots?: SlotOverrides<SwitchSlot>;
101
- /** Behavioral and animation configuration. */
102
- config?: ISwitchConfig;
103
- };
104
-
105
- /**
106
- * Props for the SwitchThumb sub-component.
107
- * Combines Base UI Switch.Thumb props (without `render`) with Motion div props,
108
- * plus an optional pressed animation target.
109
- *
110
- * @example
111
- * ```tsx
112
- * <SwitchThumb
113
- * pressedAnimation={{ width: 28 }}
114
- * className="size-5 rounded-full bg-white"
115
- * />
116
- * ```
117
- */
118
- export type ISwitchThumbProps = Omit<
119
- React.ComponentProps<typeof SwitchPrimitives.Thumb>,
120
- 'render'
121
- > &
122
- HTMLMotionProps<'div'> & {
123
- /**
124
- * Animation target applied while the switch is being pressed.
125
- * Can be a motion target object, variant labels, or a boolean.
126
- */
127
- pressedAnimation?:
128
- | TargetAndTransition
129
- | VariantLabels
130
- | boolean
131
- | LegacyAnimationControls;
132
- /** Partial class overrides for each visual slot. */
133
- slots?: SlotOverrides<SwitchSlot>;
134
- };
135
-
136
- /**
137
- * Props for the SwitchIcon sub-component.
138
- * Renders an icon at a specified position within the switch track or thumb.
139
- *
140
- * @example
141
- * ```tsx
142
- * <SwitchIcon position="left">
143
- * <SunIcon className="size-3" />
144
- * </SwitchIcon>
145
- * <SwitchIcon position="right">
146
- * <MoonIcon className="size-3" />
147
- * </SwitchIcon>
148
- * ```
149
- */
150
- export type ISwitchIconProps = HTMLMotionProps<'div'> & {
151
- /** Where this icon is positioned within the switch. */
152
- position: SwitchIconPosition;
153
- /** Partial class overrides for each visual slot. */
154
- slots?: SlotOverrides<SwitchSlot>;
155
- };
@@ -1,253 +0,0 @@
1
- 'use client';
2
-
3
- /**
4
- * Switch component with animated thumb and icon transitions.
5
- *
6
- * Built on Base UI Switch primitives with Motion animations for
7
- * spring-based thumb movement, press interactions, and icon visibility.
8
- *
9
- * @module @mks2508/mks-ui/react/ui/Switch
10
- *
11
- * @example
12
- * ```tsx
13
- * import { Switch, SwitchThumb } from '@mks2508/mks-ui';
14
- *
15
- * function MySwitch() {
16
- * const [checked, setChecked] = useState(false);
17
- * return (
18
- * <Switch checked={checked} onCheckedChange={setChecked}>
19
- * <SwitchThumb />
20
- * </Switch>
21
- * );
22
- * }
23
- * ```
24
- *
25
- * @example
26
- * ```tsx
27
- * // With icons
28
- * import { Switch, SwitchThumb, SwitchIcon } from '@mks2508/mks-ui';
29
- *
30
- * <Switch checked={darkMode} onCheckedChange={setDarkMode}>
31
- * <SwitchIcon position="left"><SunIcon /></SwitchIcon>
32
- * <SwitchThumb />
33
- * <SwitchIcon position="right"><MoonIcon /></SwitchIcon>
34
- * </Switch>
35
- * ```
36
- */
37
-
38
- import * as React from 'react';
39
- import { Switch as SwitchPrimitives } from '@base-ui/react/switch';
40
- import { motion } from 'motion/react';
41
-
42
- import { cn } from '@/react-ui/lib/utils';
43
- import { getStrictContext } from '@/react-ui/lib/get-strict-context';
44
- import { useControlledState } from '@/react-ui/hooks/State/UseControlledState';
45
-
46
- import { switchStyles } from './Switch.styles';
47
- import type {
48
- SwitchContextType,
49
- ISwitchProps,
50
- ISwitchThumbProps,
51
- ISwitchIconProps,
52
- } from './Switch.types';
53
-
54
- const [SwitchProvider, useSwitch] =
55
- getStrictContext<SwitchContextType>('SwitchContext');
56
-
57
- /**
58
- * Switch root component with animated tap interactions.
59
- *
60
- * Wraps Base UI `Switch.Root` with a `motion.button` render element,
61
- * providing tap start/end tracking for press animation support on the thumb.
62
- * Supports both controlled and uncontrolled checked state via `useControlledState`.
63
- *
64
- * @param props - Switch props including Base UI root props, motion props, slots, and config
65
- * @returns A switch button element with press tracking
66
- *
67
- * @example
68
- * ```tsx
69
- * <Switch
70
- * checked={isEnabled}
71
- * onCheckedChange={setIsEnabled}
72
- * slots={{ root: 'w-14 h-7 rounded-full bg-zinc-700' }}
73
- * >
74
- * <SwitchThumb />
75
- * </Switch>
76
- * ```
77
- */
78
- function Switch({
79
- name,
80
- defaultChecked,
81
- checked,
82
- onCheckedChange,
83
- nativeButton,
84
- disabled,
85
- readOnly,
86
- required,
87
- inputRef,
88
- id,
89
- className,
90
- slots,
91
- config: _config,
92
- ...props
93
- }: ISwitchProps) {
94
- const [isPressed, setIsPressed] = React.useState(false);
95
- const [isChecked, setIsChecked] = useControlledState({
96
- value: checked,
97
- defaultValue: defaultChecked,
98
- onChange: onCheckedChange,
99
- });
100
-
101
- return (
102
- <SwitchProvider
103
- value={{ isChecked, setIsChecked, isPressed, setIsPressed }}
104
- >
105
- <SwitchPrimitives.Root
106
- name={name}
107
- defaultChecked={defaultChecked}
108
- checked={checked}
109
- onCheckedChange={setIsChecked}
110
- nativeButton={nativeButton ?? true}
111
- disabled={disabled}
112
- readOnly={readOnly}
113
- required={required}
114
- inputRef={inputRef}
115
- id={id}
116
- render={
117
- <motion.button
118
- data-slot="switch"
119
- whileTap="tap"
120
- initial={false}
121
- onTapStart={() => setIsPressed(true)}
122
- onTapCancel={() => setIsPressed(false)}
123
- onTap={() => setIsPressed(false)}
124
- className={cn(switchStyles.root, slots?.root, className)}
125
- {...props}
126
- />
127
- }
128
- />
129
- </SwitchProvider>
130
- );
131
- }
132
-
133
- /**
134
- * SwitchThumb renders the sliding thumb indicator with spring-based layout animation.
135
- *
136
- * Uses Motion `layout` for smooth position transitions between checked/unchecked states.
137
- * Optionally accepts a `pressedAnimation` target applied while the switch is being pressed.
138
- *
139
- * @param props - Thumb props including motion props, pressed animation, and slot overrides
140
- * @returns An animated thumb div element
141
- *
142
- * @example
143
- * ```tsx
144
- * <SwitchThumb
145
- * pressedAnimation={{ width: 28 }}
146
- * slots={{ thumb: 'bg-white shadow-md' }}
147
- * />
148
- * ```
149
- *
150
- * @example
151
- * ```tsx
152
- * // Default spring animation
153
- * <SwitchThumb />
154
- * ```
155
- */
156
- function SwitchThumb({
157
- pressedAnimation,
158
- transition = { type: 'spring', stiffness: 300, damping: 25 },
159
- className,
160
- slots,
161
- ...props
162
- }: ISwitchThumbProps) {
163
- const { isPressed } = useSwitch();
164
-
165
- return (
166
- <SwitchPrimitives.Thumb
167
- render={
168
- <motion.div
169
- data-slot="switch-thumb"
170
- whileTap="tab"
171
- layout
172
- transition={transition}
173
- animate={isPressed ? pressedAnimation : undefined}
174
- className={cn(switchStyles.thumb, slots?.thumb, className)}
175
- {...props}
176
- />
177
- }
178
- />
179
- );
180
- }
181
-
182
- /**
183
- * SwitchIcon renders an animated icon at a specified position within the switch.
184
- *
185
- * - `left` position: visible when the switch is ON (checked)
186
- * - `right` position: visible when the switch is OFF (unchecked)
187
- * - `thumb` position: always visible on the thumb element
188
- *
189
- * Uses spring-based scale and opacity transitions for smooth show/hide animations.
190
- *
191
- * @param props - Icon props including position, motion props, and slot overrides
192
- * @returns An animated icon container div
193
- *
194
- * @example
195
- * ```tsx
196
- * <SwitchIcon position="left">
197
- * <CheckIcon className="size-3 text-white" />
198
- * </SwitchIcon>
199
- * ```
200
- *
201
- * @example
202
- * ```tsx
203
- * <SwitchIcon position="thumb">
204
- * <GripIcon className="size-2.5 text-zinc-400" />
205
- * </SwitchIcon>
206
- * ```
207
- */
208
- function SwitchIcon({
209
- position,
210
- transition = { type: 'spring', bounce: 0 },
211
- className,
212
- slots,
213
- ...props
214
- }: ISwitchIconProps) {
215
- const { isChecked } = useSwitch();
216
-
217
- const isAnimated = React.useMemo(() => {
218
- if (position === 'right') return !isChecked;
219
- if (position === 'left') return isChecked;
220
- if (position === 'thumb') return true;
221
- return false;
222
- }, [position, isChecked]);
223
-
224
- return (
225
- <motion.div
226
- data-slot={`switch-${position}-icon`}
227
- animate={isAnimated ? { scale: 1, opacity: 1 } : { scale: 0, opacity: 0 }}
228
- transition={transition}
229
- className={cn(switchStyles.icon, slots?.icon, className)}
230
- {...props}
231
- />
232
- );
233
- }
234
-
235
- export {
236
- Switch,
237
- SwitchThumb,
238
- SwitchIcon,
239
- useSwitch,
240
- };
241
-
242
- // Re-exports
243
- export type {
244
- ISwitchProps,
245
- ISwitchThumbProps,
246
- ISwitchIconProps,
247
- ISwitchConfig,
248
- SwitchContextType,
249
- SwitchIconPosition,
250
- SwitchSlot,
251
- } from './Switch.types';
252
-
253
- export { switchStyles } from './Switch.styles';
@@ -1,39 +0,0 @@
1
- /**
2
- * CSS Anchor Positioning for the Tabs sliding indicator.
3
- *
4
- * The selected tab declares itself as anchor via `anchor-name: --tabs-active`.
5
- * The indicator element positions itself against that anchor, and CSS
6
- * transitions handle the smooth sliding animation (WAAPI-compatible).
7
- *
8
- * Uses `anchor-scope` on the list to support multiple Tabs instances
9
- * on the same page without anchor name collisions.
10
- */
11
-
12
- /* Scope anchors to each TabsList instance */
13
- [data-slot="tabs-list"] {
14
- anchor-scope: --tabs-active;
15
- }
16
-
17
- /* Selected tab becomes the anchor */
18
- [data-slot="tabs-tab"][data-selected] {
19
- anchor-name: --tabs-active;
20
- }
21
-
22
- /* Indicator follows the selected tab via CSS Anchor */
23
- [data-slot="tabs-indicator"] {
24
- position-anchor: --tabs-active;
25
- left: anchor(left);
26
- right: anchor(right);
27
-
28
- /* Smooth sliding via CSS transitions (WAAPI-compatible) */
29
- transition-property: top, left, right, bottom, width, height, inset;
30
- transition-duration: 200ms;
31
- transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
32
- }
33
-
34
- /* Reduce motion for accessibility */
35
- @media (prefers-reduced-motion: reduce) {
36
- [data-slot="tabs-indicator"] {
37
- transition-duration: 0ms;
38
- }
39
- }
@@ -1,148 +0,0 @@
1
- /**
2
- * Style slots, CVA variants, and defaults for the Tabs component.
3
- *
4
- * Provides sensible out-of-the-box styling using semantic theme tokens
5
- * (bg-muted, text-foreground, etc.) while remaining fully overridable
6
- * via the `slots` prop and CVA variant/size system.
7
- *
8
- * The sliding indicator uses CSS Anchor Positioning API for
9
- * zero-JS position tracking with WAAPI-driven transitions.
10
- *
11
- * @module @mks2508/mks-ui/react/ui/Tabs/Tabs.styles
12
- */
13
-
14
- import { cva } from 'class-variance-authority';
15
- import type { StyleSlots } from '@/core/types';
16
-
17
- /**
18
- * Union of all visual regions (slots) in the Tabs component tree.
19
- */
20
- export type TabsSlot =
21
- | 'root'
22
- | 'list'
23
- | 'tab'
24
- | 'panel'
25
- | 'panels'
26
- | 'highlight'
27
- | 'highlightItem'
28
- | 'indicator';
29
-
30
- /**
31
- * Default style map for every Tabs slot.
32
- * Provides complete styling that works without any overrides.
33
- */
34
- export const tabsStyles: StyleSlots<TabsSlot> = {
35
- root: '',
36
- list: 'inline-flex items-center relative',
37
- tab: [
38
- 'inline-flex items-center justify-center gap-2 whitespace-nowrap',
39
- 'font-medium cursor-pointer select-none relative z-[1]',
40
- 'text-muted-foreground transition-colors duration-150',
41
- 'hover:text-foreground',
42
- 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
43
- 'disabled:pointer-events-none disabled:opacity-50',
44
- 'data-[active]:text-foreground',
45
- '[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4',
46
- ].join(' '),
47
- panel: '',
48
- panels: '',
49
- highlight: '',
50
- highlightItem: '',
51
- indicator: 'absolute pointer-events-none z-0',
52
- };
53
-
54
- // ---------------------------------------------------------------------------
55
- // TabsList CVA
56
- // ---------------------------------------------------------------------------
57
-
58
- /**
59
- * CVA variants for the TabsList container.
60
- *
61
- * @example
62
- * ```tsx
63
- * <TabsList variant="underline" size="lg">
64
- * <TabsTab value="a">Tab A</TabsTab>
65
- * </TabsList>
66
- * ```
67
- */
68
- export const tabsListVariants = cva(tabsStyles.list, {
69
- variants: {
70
- variant: {
71
- default: 'gap-1 rounded-lg bg-muted p-1',
72
- outline: 'gap-1 rounded-lg border border-border p-1',
73
- ghost: 'gap-2 p-0',
74
- underline: 'gap-0 rounded-none border-b border-border p-0',
75
- pill: 'gap-1 rounded-full bg-muted p-1',
76
- },
77
- size: {
78
- default: 'h-10',
79
- sm: 'h-8',
80
- lg: 'h-12',
81
- },
82
- },
83
- defaultVariants: {
84
- variant: 'default',
85
- size: 'default',
86
- },
87
- });
88
-
89
- // ---------------------------------------------------------------------------
90
- // TabsTab CVA
91
- // ---------------------------------------------------------------------------
92
-
93
- /**
94
- * CVA variants for individual tab triggers.
95
- *
96
- * @example
97
- * ```tsx
98
- * <TabsTab value="general" variant="underline" size="sm">
99
- * General
100
- * </TabsTab>
101
- * ```
102
- */
103
- export const tabsTabVariants = cva(tabsStyles.tab, {
104
- variants: {
105
- variant: {
106
- default: 'rounded-md',
107
- outline: 'rounded-md',
108
- ghost: 'rounded-md hover:bg-accent data-[active]:text-accent-foreground',
109
- underline: 'rounded-none border-b-2 border-transparent data-[active]:border-primary',
110
- pill: 'rounded-full',
111
- },
112
- size: {
113
- default: 'px-3 py-1.5 text-sm',
114
- sm: 'px-2.5 py-1 text-xs',
115
- lg: 'px-4 py-2 text-base',
116
- },
117
- },
118
- defaultVariants: {
119
- variant: 'default',
120
- size: 'default',
121
- },
122
- });
123
-
124
- // ---------------------------------------------------------------------------
125
- // Indicator CVA
126
- // ---------------------------------------------------------------------------
127
-
128
- /**
129
- * CVA variants for the sliding indicator.
130
- *
131
- * The indicator is positioned via CSS Anchor Positioning API
132
- * (anchor-name on the selected tab, position-anchor on the indicator)
133
- * and animated via WAAPI transitions in CSS.
134
- */
135
- export const tabsIndicatorVariants = cva(tabsStyles.indicator, {
136
- variants: {
137
- variant: {
138
- default: 'bg-background shadow-sm rounded-md inset-y-1',
139
- outline: 'bg-background shadow-sm border border-border/50 rounded-md inset-y-1',
140
- ghost: 'bg-accent rounded-md inset-y-0',
141
- underline: 'bg-primary h-0.5 rounded-full !inset-y-auto bottom-0',
142
- pill: 'bg-background shadow-sm rounded-full inset-y-1',
143
- },
144
- },
145
- defaultVariants: {
146
- variant: 'default',
147
- },
148
- });