@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.
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts +23 -4
- package/dist/react-ui/primitives/waapi/Gooey/Gooey.types.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts +2 -2
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/GooeyCanvas.js +292 -31
- package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.d.ts +7 -0
- package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.d.ts.map +1 -1
- package/dist/react-ui/primitives/waapi/Gooey/gooey-utils.js +6 -1
- package/dist/react-ui/ui/DynamicToggle/{DynamicToggle-Cm6-VceQ.css → DynamicToggle-DJLwEkHr.css} +116 -51
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.css +116 -51
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts +1 -0
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.styles.js +9 -3
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts +61 -31
- package/dist/react-ui/ui/DynamicToggle/DynamicToggle.types.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.d.ts +9 -3
- package/dist/react-ui/ui/DynamicToggle/index.d.ts.map +1 -1
- package/dist/react-ui/ui/DynamicToggle/index.js +68 -37
- package/package.json +52 -13
- package/src/assets/react.svg +0 -1
- package/src/core/index.ts +0 -7
- package/src/core/types.ts +0 -82
- package/src/css.d.ts +0 -7
- package/src/index.css +0 -129
- package/src/index.ts +0 -29
- package/src/react-ui/blocks/Terminal/ResttyAdapter.ts +0 -278
- package/src/react-ui/blocks/Terminal/Terminal.adapter.ts +0 -97
- package/src/react-ui/blocks/Terminal/Terminal.theme.restty.ts +0 -155
- package/src/react-ui/blocks/Terminal/Terminal.theme.ts +0 -80
- package/src/react-ui/blocks/Terminal/Terminal.types.ts +0 -438
- package/src/react-ui/blocks/Terminal/TerminalDisplay.styles.ts +0 -38
- package/src/react-ui/blocks/Terminal/TerminalDisplay.tsx +0 -254
- package/src/react-ui/blocks/Terminal/TerminalDisplay.types.ts +0 -73
- package/src/react-ui/blocks/Terminal/TerminalPanel.tsx +0 -269
- package/src/react-ui/blocks/Terminal/TerminalRestty.tsx +0 -326
- package/src/react-ui/blocks/Terminal/TerminalXterm.tsx +0 -230
- package/src/react-ui/blocks/Terminal/XTermAdapter.ts +0 -163
- package/src/react-ui/blocks/Terminal/chrome.ts +0 -25
- package/src/react-ui/blocks/Terminal/components/LogLineBadges.tsx +0 -316
- package/src/react-ui/blocks/Terminal/components/SpecializedSyntaxHighlighter.tsx +0 -218
- package/src/react-ui/blocks/Terminal/components/SyntaxHighlight.tsx +0 -386
- package/src/react-ui/blocks/Terminal/components/TerminalLogBadge.tsx +0 -67
- package/src/react-ui/blocks/Terminal/components/index.ts +0 -10
- package/src/react-ui/blocks/Terminal/display.ts +0 -46
- package/src/react-ui/blocks/Terminal/hooks/index.ts +0 -22
- package/src/react-ui/blocks/Terminal/hooks/useTerminalSettings.ts +0 -229
- package/src/react-ui/blocks/Terminal/hooks/useTerminalWebSocket.ts +0 -292
- package/src/react-ui/blocks/Terminal/index.ts +0 -111
- package/src/react-ui/blocks/Terminal/panel/LogLinesViewer.tsx +0 -330
- package/src/react-ui/blocks/Terminal/panel/TerminalDebugPanel.tsx +0 -242
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterDropdown.tsx +0 -202
- package/src/react-ui/blocks/Terminal/panel/TerminalFilterTabs.tsx +0 -140
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.tsx +0 -68
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanel.types.ts +0 -85
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelRestty.tsx +0 -383
- package/src/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.tsx +0 -439
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.tsx +0 -550
- package/src/react-ui/blocks/Terminal/panel/TerminalLogsPanel.types.ts +0 -259
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.styles.ts +0 -75
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx +0 -266
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts +0 -82
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelFooter.tsx +0 -112
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelHeader.tsx +0 -178
- package/src/react-ui/blocks/Terminal/panel/TerminalPanelToolbar.tsx +0 -203
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionControl.tsx +0 -252
- package/src/react-ui/blocks/Terminal/panel/TerminalSessionTabs.tsx +0 -334
- package/src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover.tsx +0 -261
- package/src/react-ui/blocks/Terminal/panel/TerminalThemeSelector.tsx +0 -248
- package/src/react-ui/blocks/Terminal/panel/index.ts +0 -72
- package/src/react-ui/blocks/Terminal/panel/terminal-filter-dropdown.module.css +0 -59
- package/src/react-ui/blocks/Terminal/panel/terminal-session-tabs.module.css +0 -59
- package/src/react-ui/blocks/Terminal/parsing/BadgeFormatter.ts +0 -180
- package/src/react-ui/blocks/Terminal/parsing/HttpLogParser.ts +0 -248
- package/src/react-ui/blocks/Terminal/parsing/LogParser.types.ts +0 -283
- package/src/react-ui/blocks/Terminal/parsing/LogParserService.ts +0 -686
- package/src/react-ui/blocks/Terminal/parsing/MultilineAggregator.ts +0 -466
- package/src/react-ui/blocks/Terminal/parsing/PersistentLogBuffer.ts +0 -343
- package/src/react-ui/blocks/Terminal/parsing/SyntaxHighlighter.ts +0 -167
- package/src/react-ui/blocks/Terminal/parsing/TableParser.ts +0 -348
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiColorMapper.ts +0 -251
- package/src/react-ui/blocks/Terminal/parsing/ansi/AnsiParser.ts +0 -390
- package/src/react-ui/blocks/Terminal/parsing/ansi/ansi.constants.ts +0 -320
- package/src/react-ui/blocks/Terminal/parsing/ansi/index.ts +0 -20
- package/src/react-ui/blocks/Terminal/parsing/index.ts +0 -69
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevel.types.ts +0 -68
- package/src/react-ui/blocks/Terminal/parsing/levels/LogLevelDetector.ts +0 -436
- package/src/react-ui/blocks/Terminal/parsing/levels/index.ts +0 -14
- package/src/react-ui/blocks/index.ts +0 -11
- package/src/react-ui/components/MorphingPopover/MorphingPopover.types.ts +0 -49
- package/src/react-ui/components/MorphingPopover/index.tsx +0 -186
- package/src/react-ui/components/MorphingPopover/morphing-popover.module.css +0 -153
- package/src/react-ui/components/index.ts +0 -9
- package/src/react-ui/hooks/Animation/UseAutoHeight.tsx +0 -123
- package/src/react-ui/hooks/DOM/UseIsInView.tsx +0 -44
- package/src/react-ui/hooks/Formatting/UseListFormat.ts +0 -134
- package/src/react-ui/hooks/State/UseControlledState.tsx +0 -57
- package/src/react-ui/hooks/State/UseDataState.tsx +0 -76
- package/src/react-ui/hooks/index.ts +0 -20
- package/src/react-ui/icons/index.ts +0 -12
- package/src/react-ui/icons/lucide-animated/activity.tsx +0 -109
- package/src/react-ui/icons/lucide-animated/arrow-down-to-line.tsx +0 -51
- package/src/react-ui/icons/lucide-animated/arrow-up.tsx +0 -50
- package/src/react-ui/icons/lucide-animated/bell-electric.tsx +0 -124
- package/src/react-ui/icons/lucide-animated/bell.tsx +0 -93
- package/src/react-ui/icons/lucide-animated/bot.tsx +0 -122
- package/src/react-ui/icons/lucide-animated/box.tsx +0 -117
- package/src/react-ui/icons/lucide-animated/check.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/circle-check.tsx +0 -107
- package/src/react-ui/icons/lucide-animated/delete.tsx +0 -133
- package/src/react-ui/icons/lucide-animated/download.tsx +0 -99
- package/src/react-ui/icons/lucide-animated/edit-2.tsx +0 -21
- package/src/react-ui/icons/lucide-animated/globe.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/home.tsx +0 -103
- package/src/react-ui/icons/lucide-animated/index.ts +0 -38
- package/src/react-ui/icons/lucide-animated/layers.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/layout-panel-top.tsx +0 -143
- package/src/react-ui/icons/lucide-animated/list.tsx +0 -54
- package/src/react-ui/icons/lucide-animated/package.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/palette.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/plus.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/refresh-cw.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/rocket.tsx +0 -24
- package/src/react-ui/icons/lucide-animated/save.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/search.tsx +0 -94
- package/src/react-ui/icons/lucide-animated/settings.tsx +0 -92
- package/src/react-ui/icons/lucide-animated/terminal.tsx +0 -46
- package/src/react-ui/icons/lucide-animated/trash-2.tsx +0 -25
- package/src/react-ui/icons/lucide-animated/trending-down.tsx +0 -151
- package/src/react-ui/icons/lucide-animated/trending-up.tsx +0 -150
- package/src/react-ui/icons/lucide-animated/type.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/upload.tsx +0 -23
- package/src/react-ui/icons/lucide-animated/x.tsx +0 -102
- package/src/react-ui/index.ts +0 -30
- package/src/react-ui/lib/get-strict-context.tsx +0 -56
- package/src/react-ui/lib/icon-wrapper.tsx +0 -70
- package/src/react-ui/lib/index.ts +0 -9
- package/src/react-ui/lib/utils.ts +0 -24
- package/src/react-ui/primitives/AutoHeight/index.tsx +0 -74
- package/src/react-ui/primitives/CountingNumber/index.tsx +0 -147
- package/src/react-ui/primitives/Highlight/Highlight.types.ts +0 -136
- package/src/react-ui/primitives/Highlight/index.tsx +0 -577
- package/src/react-ui/primitives/Slot/index.tsx +0 -128
- package/src/react-ui/primitives/index.ts +0 -16
- package/src/react-ui/primitives/waapi/Gooey/Gooey.types.ts +0 -123
- package/src/react-ui/primitives/waapi/Gooey/GooeyCanvas.tsx +0 -80
- package/src/react-ui/primitives/waapi/Gooey/GooeyFilter.tsx +0 -77
- package/src/react-ui/primitives/waapi/Gooey/MorphPath.tsx +0 -58
- package/src/react-ui/primitives/waapi/Gooey/gooey-utils.ts +0 -244
- package/src/react-ui/primitives/waapi/Gooey/index.ts +0 -50
- package/src/react-ui/primitives/waapi/Gooey/useMorphPath.ts +0 -48
- package/src/react-ui/primitives/waapi/Morph/Morph.types.ts +0 -106
- package/src/react-ui/primitives/waapi/Morph/MorphContext.tsx +0 -21
- package/src/react-ui/primitives/waapi/Morph/index.tsx +0 -56
- package/src/react-ui/primitives/waapi/Morph/techniques/index.ts +0 -12
- package/src/react-ui/primitives/waapi/Morph/techniques/useCSSGridMorph.ts +0 -89
- package/src/react-ui/primitives/waapi/Morph/techniques/useFLIPClipPath.ts +0 -176
- package/src/react-ui/primitives/waapi/Morph/techniques/useViewTransitions.ts +0 -87
- package/src/react-ui/primitives/waapi/Morph/useMorph.ts +0 -101
- package/src/react-ui/primitives/waapi/Reorder/Reorder.types.ts +0 -177
- package/src/react-ui/primitives/waapi/Reorder/index.tsx +0 -260
- package/src/react-ui/primitives/waapi/Reorder/useReorder.ts +0 -47
- package/src/react-ui/primitives/waapi/Reorder/useReorderPresence.ts +0 -209
- package/src/react-ui/primitives/waapi/Reorder/utils/separatorCoordination.ts +0 -104
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.styles.ts +0 -14
- package/src/react-ui/primitives/waapi/SlidingNumber/SlidingNumber.types.ts +0 -84
- package/src/react-ui/primitives/waapi/SlidingNumber/index.tsx +0 -474
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.styles.ts +0 -32
- package/src/react-ui/primitives/waapi/SlidingText/SlidingText.types.ts +0 -69
- package/src/react-ui/primitives/waapi/SlidingText/index.tsx +0 -140
- package/src/react-ui/primitives/waapi/core/animationConstants.ts +0 -215
- package/src/react-ui/primitives/waapi/core/index.ts +0 -53
- package/src/react-ui/primitives/waapi/core/types.ts +0 -200
- package/src/react-ui/primitives/waapi/core/useAnimationOrchestrator.ts +0 -430
- package/src/react-ui/primitives/waapi/core/useElementRegistry.ts +0 -81
- package/src/react-ui/primitives/waapi/core/useFLIPAnimation.ts +0 -138
- package/src/react-ui/primitives/waapi/core/usePositionCapture.ts +0 -106
- package/src/react-ui/primitives/waapi/index.ts +0 -139
- package/src/react-ui/styles/animations.css +0 -369
- package/src/react-ui/ui/Accordion/Accordion.styles.ts +0 -72
- package/src/react-ui/ui/Accordion/Accordion.types.ts +0 -199
- package/src/react-ui/ui/Accordion/index.tsx +0 -362
- package/src/react-ui/ui/AlertDialog/AlertDialog.styles.ts +0 -38
- package/src/react-ui/ui/AlertDialog/AlertDialog.types.ts +0 -296
- package/src/react-ui/ui/AlertDialog/index.tsx +0 -540
- package/src/react-ui/ui/Badge/Badge.styles.ts +0 -43
- package/src/react-ui/ui/Badge/Badge.types.ts +0 -26
- package/src/react-ui/ui/Badge/index.tsx +0 -34
- package/src/react-ui/ui/Button/Button.styles.ts +0 -57
- package/src/react-ui/ui/Button/Button.types.ts +0 -63
- package/src/react-ui/ui/Button/index.tsx +0 -155
- package/src/react-ui/ui/Card/Card.styles.ts +0 -32
- package/src/react-ui/ui/Card/Card.types.ts +0 -39
- package/src/react-ui/ui/Card/index.tsx +0 -130
- package/src/react-ui/ui/Checkbox/Checkbox.styles.ts +0 -40
- package/src/react-ui/ui/Checkbox/Checkbox.types.ts +0 -98
- package/src/react-ui/ui/Checkbox/index.tsx +0 -233
- package/src/react-ui/ui/Combobox/Combobox.styles.ts +0 -34
- package/src/react-ui/ui/Combobox/Combobox.types.ts +0 -89
- package/src/react-ui/ui/Combobox/index.tsx +0 -331
- package/src/react-ui/ui/CornerBracket/CornerBracket.styles.ts +0 -38
- package/src/react-ui/ui/CornerBracket/CornerBracket.types.ts +0 -15
- package/src/react-ui/ui/CornerBracket/index.tsx +0 -49
- package/src/react-ui/ui/DataCard/DataCard.styles.ts +0 -94
- package/src/react-ui/ui/DataCard/DataCard.types.ts +0 -125
- package/src/react-ui/ui/DataCard/index.tsx +0 -340
- package/src/react-ui/ui/Dialog/Dialog.styles.ts +0 -59
- package/src/react-ui/ui/Dialog/Dialog.types.ts +0 -284
- package/src/react-ui/ui/Dialog/index.tsx +0 -452
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.styles.ts +0 -35
- package/src/react-ui/ui/DropdownMenu/DropdownMenu.types.ts +0 -81
- package/src/react-ui/ui/DropdownMenu/index.tsx +0 -300
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.css +0 -303
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.styles.ts +0 -85
- package/src/react-ui/ui/DynamicToggle/DynamicToggle.types.ts +0 -174
- package/src/react-ui/ui/DynamicToggle/index.tsx +0 -294
- package/src/react-ui/ui/DynamicToggle/prototype-v7.html +0 -615
- package/src/react-ui/ui/DynamicToggle/prototype.html +0 -419
- package/src/react-ui/ui/Field/Field.styles.ts +0 -47
- package/src/react-ui/ui/Field/Field.types.ts +0 -60
- package/src/react-ui/ui/Field/index.tsx +0 -254
- package/src/react-ui/ui/Input/Input.styles.ts +0 -11
- package/src/react-ui/ui/Input/Input.types.ts +0 -10
- package/src/react-ui/ui/Input/index.tsx +0 -32
- package/src/react-ui/ui/InputGroup/InputGroup.styles.ts +0 -53
- package/src/react-ui/ui/InputGroup/InputGroup.types.ts +0 -44
- package/src/react-ui/ui/InputGroup/index.tsx +0 -149
- package/src/react-ui/ui/Label/Label.styles.ts +0 -10
- package/src/react-ui/ui/Label/Label.types.ts +0 -9
- package/src/react-ui/ui/Label/index.tsx +0 -27
- package/src/react-ui/ui/Menu/Menu.styles.ts +0 -71
- package/src/react-ui/ui/Menu/Menu.types.ts +0 -425
- package/src/react-ui/ui/Menu/index.tsx +0 -900
- package/src/react-ui/ui/Popover/Popover.styles.ts +0 -55
- package/src/react-ui/ui/Popover/Popover.types.ts +0 -261
- package/src/react-ui/ui/Popover/index.tsx +0 -422
- package/src/react-ui/ui/Progress/Progress.styles.ts +0 -36
- package/src/react-ui/ui/Progress/Progress.types.ts +0 -162
- package/src/react-ui/ui/Progress/index.tsx +0 -254
- package/src/react-ui/ui/Select/Select.styles.ts +0 -30
- package/src/react-ui/ui/Select/Select.types.ts +0 -51
- package/src/react-ui/ui/Select/index.tsx +0 -225
- package/src/react-ui/ui/Separator/Separator.styles.ts +0 -10
- package/src/react-ui/ui/Separator/Separator.types.ts +0 -10
- package/src/react-ui/ui/Separator/index.tsx +0 -37
- package/src/react-ui/ui/Switch/Switch.styles.ts +0 -50
- package/src/react-ui/ui/Switch/Switch.types.ts +0 -155
- package/src/react-ui/ui/Switch/index.tsx +0 -253
- package/src/react-ui/ui/Tabs/Tabs.css +0 -39
- package/src/react-ui/ui/Tabs/Tabs.styles.ts +0 -148
- package/src/react-ui/ui/Tabs/Tabs.types.ts +0 -255
- package/src/react-ui/ui/Tabs/index.tsx +0 -529
- package/src/react-ui/ui/TextFlow/TextFlow.styles.ts +0 -36
- package/src/react-ui/ui/TextFlow/TextFlow.types.ts +0 -118
- package/src/react-ui/ui/TextFlow/index.tsx +0 -276
- package/src/react-ui/ui/Textarea/Textarea.styles.ts +0 -10
- package/src/react-ui/ui/Textarea/Textarea.types.ts +0 -9
- package/src/react-ui/ui/Textarea/index.tsx +0 -27
- package/src/react-ui/ui/Tooltip/Tooltip.styles.ts +0 -43
- package/src/react-ui/ui/Tooltip/Tooltip.types.ts +0 -253
- package/src/react-ui/ui/Tooltip/index.tsx +0 -394
- package/src/react-ui/ui/index.ts +0 -41
- package/src/types/css-modules.d.ts +0 -18
|
@@ -1,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
|
-
});
|