@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,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
- });