@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,540 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* AlertDialog component with animated 3D flip entrance.
|
|
5
|
-
*
|
|
6
|
-
* Built on top of Base UI's AlertDialog primitive with Motion (Framer Motion)
|
|
7
|
-
* animations. Features a perspective-based flip animation from configurable
|
|
8
|
-
* directions, backdrop blur effects, and the StyleSlots pattern for granular
|
|
9
|
-
* style overrides.
|
|
10
|
-
*
|
|
11
|
-
* AlertDialog is specifically designed for destructive or important confirmations
|
|
12
|
-
* that require explicit user acknowledgment. Unlike Dialog, it blocks interaction
|
|
13
|
-
* with the rest of the page.
|
|
14
|
-
*
|
|
15
|
-
* @module @mks2508/mks-ui/react/ui/AlertDialog
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* import {
|
|
20
|
-
* AlertDialog,
|
|
21
|
-
* AlertDialogTrigger,
|
|
22
|
-
* AlertDialogPortal,
|
|
23
|
-
* AlertDialogBackdrop,
|
|
24
|
-
* AlertDialogPopup,
|
|
25
|
-
* AlertDialogHeader,
|
|
26
|
-
* AlertDialogFooter,
|
|
27
|
-
* AlertDialogTitle,
|
|
28
|
-
* AlertDialogDescription,
|
|
29
|
-
* AlertDialogClose,
|
|
30
|
-
* } from '@mks2508/mks-ui';
|
|
31
|
-
*
|
|
32
|
-
* function DeleteConfirmation() {
|
|
33
|
-
* return (
|
|
34
|
-
* <AlertDialog>
|
|
35
|
-
* <AlertDialogTrigger>Delete Account</AlertDialogTrigger>
|
|
36
|
-
* <AlertDialogPortal>
|
|
37
|
-
* <AlertDialogBackdrop />
|
|
38
|
-
* <AlertDialogPopup from="top">
|
|
39
|
-
* <AlertDialogHeader>
|
|
40
|
-
* <AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle>
|
|
41
|
-
* <AlertDialogDescription>
|
|
42
|
-
* This action cannot be undone.
|
|
43
|
-
* </AlertDialogDescription>
|
|
44
|
-
* </AlertDialogHeader>
|
|
45
|
-
* <AlertDialogFooter>
|
|
46
|
-
* <AlertDialogClose>Cancel</AlertDialogClose>
|
|
47
|
-
* <button>Delete</button>
|
|
48
|
-
* </AlertDialogFooter>
|
|
49
|
-
* </AlertDialogPopup>
|
|
50
|
-
* </AlertDialogPortal>
|
|
51
|
-
* </AlertDialog>
|
|
52
|
-
* );
|
|
53
|
-
* }
|
|
54
|
-
* ```
|
|
55
|
-
*/
|
|
56
|
-
|
|
57
|
-
import * as React from 'react';
|
|
58
|
-
import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog';
|
|
59
|
-
import { AnimatePresence, motion } from 'motion/react';
|
|
60
|
-
|
|
61
|
-
import { cn } from '@/react-ui/lib/utils';
|
|
62
|
-
import { getStrictContext } from '@/react-ui/lib/get-strict-context';
|
|
63
|
-
import { useControlledState } from '@/react-ui/hooks/State/UseControlledState';
|
|
64
|
-
|
|
65
|
-
import { AlertDialogStyles } from './AlertDialog.styles';
|
|
66
|
-
import type {
|
|
67
|
-
AlertDialogContextType,
|
|
68
|
-
IAlertDialogProps,
|
|
69
|
-
IAlertDialogTriggerProps,
|
|
70
|
-
IAlertDialogPortalProps,
|
|
71
|
-
IAlertDialogBackdropProps,
|
|
72
|
-
IAlertDialogPopupProps,
|
|
73
|
-
IAlertDialogCloseProps,
|
|
74
|
-
IAlertDialogHeaderProps,
|
|
75
|
-
IAlertDialogFooterProps,
|
|
76
|
-
IAlertDialogTitleProps,
|
|
77
|
-
IAlertDialogDescriptionProps,
|
|
78
|
-
} from './AlertDialog.types';
|
|
79
|
-
|
|
80
|
-
// ---------------------------------------------------------------------------
|
|
81
|
-
// Context
|
|
82
|
-
// ---------------------------------------------------------------------------
|
|
83
|
-
|
|
84
|
-
const [AlertDialogProvider, useAlertDialog] =
|
|
85
|
-
getStrictContext<AlertDialogContextType>('AlertDialogContext');
|
|
86
|
-
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
// AlertDialog (root)
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Root AlertDialog component. Manages open state and provides context
|
|
93
|
-
* to all child sub-components.
|
|
94
|
-
*
|
|
95
|
-
* Supports both controlled (`open` + `onOpenChange`) and uncontrolled
|
|
96
|
-
* (`defaultOpen`) usage patterns.
|
|
97
|
-
*
|
|
98
|
-
* @param props - {@link IAlertDialogProps}
|
|
99
|
-
* @returns The rendered alert dialog root
|
|
100
|
-
*
|
|
101
|
-
* @example
|
|
102
|
-
* ```tsx
|
|
103
|
-
* // Uncontrolled
|
|
104
|
-
* <AlertDialog>
|
|
105
|
-
* <AlertDialogTrigger>Open</AlertDialogTrigger>
|
|
106
|
-
* <AlertDialogPortal>...</AlertDialogPortal>
|
|
107
|
-
* </AlertDialog>
|
|
108
|
-
*
|
|
109
|
-
* // Controlled
|
|
110
|
-
* const [open, setOpen] = useState(false);
|
|
111
|
-
* <AlertDialog open={open} onOpenChange={setOpen}>
|
|
112
|
-
* ...
|
|
113
|
-
* </AlertDialog>
|
|
114
|
-
* ```
|
|
115
|
-
*/
|
|
116
|
-
function AlertDialog({
|
|
117
|
-
slots: _slots,
|
|
118
|
-
config: _config,
|
|
119
|
-
...props
|
|
120
|
-
}: IAlertDialogProps) {
|
|
121
|
-
const [isOpen, setIsOpen] = useControlledState({
|
|
122
|
-
value: props?.open,
|
|
123
|
-
defaultValue: props?.defaultOpen,
|
|
124
|
-
onChange: props?.onOpenChange,
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
return (
|
|
128
|
-
<AlertDialogProvider value={{ isOpen, setIsOpen }}>
|
|
129
|
-
<AlertDialogPrimitive.Root
|
|
130
|
-
data-slot="alert-dialog"
|
|
131
|
-
{...props}
|
|
132
|
-
onOpenChange={setIsOpen}
|
|
133
|
-
/>
|
|
134
|
-
</AlertDialogProvider>
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// ---------------------------------------------------------------------------
|
|
139
|
-
// AlertDialogTrigger
|
|
140
|
-
// ---------------------------------------------------------------------------
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Button that opens the AlertDialog when clicked.
|
|
144
|
-
* Renders as a button element by default.
|
|
145
|
-
*
|
|
146
|
-
* @param props - {@link IAlertDialogTriggerProps}
|
|
147
|
-
* @returns The rendered trigger button
|
|
148
|
-
*
|
|
149
|
-
* @example
|
|
150
|
-
* ```tsx
|
|
151
|
-
* <AlertDialogTrigger className="bg-destructive text-destructive-foreground">
|
|
152
|
-
* Delete Account
|
|
153
|
-
* </AlertDialogTrigger>
|
|
154
|
-
* ```
|
|
155
|
-
*/
|
|
156
|
-
function AlertDialogTrigger({
|
|
157
|
-
slots: _slots,
|
|
158
|
-
...props
|
|
159
|
-
}: IAlertDialogTriggerProps) {
|
|
160
|
-
return (
|
|
161
|
-
<AlertDialogPrimitive.Trigger
|
|
162
|
-
data-slot="alert-dialog-trigger"
|
|
163
|
-
{...props}
|
|
164
|
-
/>
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// ---------------------------------------------------------------------------
|
|
169
|
-
// AlertDialogPortal
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Portal wrapper that renders alert dialog content outside the DOM hierarchy.
|
|
174
|
-
* Manages AnimatePresence for enter/exit animations of the backdrop and popup.
|
|
175
|
-
*
|
|
176
|
-
* The portal is automatically kept mounted for exit animations and only
|
|
177
|
-
* renders its children when the dialog is open.
|
|
178
|
-
*
|
|
179
|
-
* @param props - {@link IAlertDialogPortalProps}
|
|
180
|
-
* @returns The rendered portal with AnimatePresence
|
|
181
|
-
*
|
|
182
|
-
* @example
|
|
183
|
-
* ```tsx
|
|
184
|
-
* <AlertDialogPortal>
|
|
185
|
-
* <AlertDialogBackdrop />
|
|
186
|
-
* <AlertDialogPopup>...</AlertDialogPopup>
|
|
187
|
-
* </AlertDialogPortal>
|
|
188
|
-
* ```
|
|
189
|
-
*/
|
|
190
|
-
function AlertDialogPortal(props: IAlertDialogPortalProps) {
|
|
191
|
-
const { isOpen } = useAlertDialog();
|
|
192
|
-
|
|
193
|
-
return (
|
|
194
|
-
<AnimatePresence>
|
|
195
|
-
{isOpen && (
|
|
196
|
-
<AlertDialogPrimitive.Portal
|
|
197
|
-
data-slot="alert-dialog-portal"
|
|
198
|
-
keepMounted
|
|
199
|
-
{...props}
|
|
200
|
-
/>
|
|
201
|
-
)}
|
|
202
|
-
</AnimatePresence>
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// ---------------------------------------------------------------------------
|
|
207
|
-
// AlertDialogBackdrop
|
|
208
|
-
// ---------------------------------------------------------------------------
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Semi-transparent overlay behind the alert dialog.
|
|
212
|
-
* Animates in with a fade and optional blur effect.
|
|
213
|
-
*
|
|
214
|
-
* @param props - {@link IAlertDialogBackdropProps}
|
|
215
|
-
* @returns The rendered animated backdrop
|
|
216
|
-
*
|
|
217
|
-
* @example
|
|
218
|
-
* ```tsx
|
|
219
|
-
* // Default backdrop
|
|
220
|
-
* <AlertDialogBackdrop />
|
|
221
|
-
*
|
|
222
|
-
* // Custom backdrop with blur
|
|
223
|
-
* <AlertDialogBackdrop
|
|
224
|
-
* className="bg-black/60 backdrop-blur-md"
|
|
225
|
-
* transition={{ duration: 0.3 }}
|
|
226
|
-
* />
|
|
227
|
-
* ```
|
|
228
|
-
*/
|
|
229
|
-
function AlertDialogBackdrop({
|
|
230
|
-
transition = { duration: 0.2, ease: 'easeInOut' },
|
|
231
|
-
slots,
|
|
232
|
-
className,
|
|
233
|
-
...props
|
|
234
|
-
}: IAlertDialogBackdropProps) {
|
|
235
|
-
return (
|
|
236
|
-
<AlertDialogPrimitive.Backdrop
|
|
237
|
-
data-slot="alert-dialog-backdrop"
|
|
238
|
-
render={
|
|
239
|
-
<motion.div
|
|
240
|
-
key="alert-dialog-backdrop"
|
|
241
|
-
className={cn(
|
|
242
|
-
AlertDialogStyles.backdrop,
|
|
243
|
-
slots?.backdrop,
|
|
244
|
-
className,
|
|
245
|
-
)}
|
|
246
|
-
initial={{ opacity: 0, filter: 'blur(4px)' }}
|
|
247
|
-
animate={{ opacity: 1, filter: 'blur(0px)' }}
|
|
248
|
-
exit={{ opacity: 0, filter: 'blur(4px)' }}
|
|
249
|
-
transition={transition}
|
|
250
|
-
{...(props as any)}
|
|
251
|
-
/>
|
|
252
|
-
}
|
|
253
|
-
/>
|
|
254
|
-
);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// ---------------------------------------------------------------------------
|
|
258
|
-
// AlertDialogPopup
|
|
259
|
-
// ---------------------------------------------------------------------------
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Main dialog container with a 3D perspective flip animation.
|
|
263
|
-
*
|
|
264
|
-
* The `from` prop controls which direction the dialog flips from:
|
|
265
|
-
* - `top` / `bottom` rotate around the X axis
|
|
266
|
-
* - `left` / `right` rotate around the Y axis
|
|
267
|
-
*
|
|
268
|
-
* Uses spring physics for a natural, bouncy entrance.
|
|
269
|
-
*
|
|
270
|
-
* @param props - {@link IAlertDialogPopupProps}
|
|
271
|
-
* @returns The rendered animated popup
|
|
272
|
-
*
|
|
273
|
-
* @example
|
|
274
|
-
* ```tsx
|
|
275
|
-
* // Flip from top (default)
|
|
276
|
-
* <AlertDialogPopup>...</AlertDialogPopup>
|
|
277
|
-
*
|
|
278
|
-
* // Flip from bottom with custom spring
|
|
279
|
-
* <AlertDialogPopup
|
|
280
|
-
* from="bottom"
|
|
281
|
-
* transition={{ type: 'spring', stiffness: 200, damping: 30 }}
|
|
282
|
-
* >
|
|
283
|
-
* ...
|
|
284
|
-
* </AlertDialogPopup>
|
|
285
|
-
* ```
|
|
286
|
-
*/
|
|
287
|
-
function AlertDialogPopup({
|
|
288
|
-
from = 'top',
|
|
289
|
-
initialFocus,
|
|
290
|
-
finalFocus,
|
|
291
|
-
transition = { type: 'spring', stiffness: 150, damping: 25 },
|
|
292
|
-
slots,
|
|
293
|
-
className,
|
|
294
|
-
...props
|
|
295
|
-
}: IAlertDialogPopupProps) {
|
|
296
|
-
const initialRotation =
|
|
297
|
-
from === 'bottom' || from === 'left' ? '20deg' : '-20deg';
|
|
298
|
-
const isVertical = from === 'top' || from === 'bottom';
|
|
299
|
-
const rotateAxis = isVertical ? 'rotateX' : 'rotateY';
|
|
300
|
-
|
|
301
|
-
return (
|
|
302
|
-
<AlertDialogPrimitive.Popup
|
|
303
|
-
initialFocus={initialFocus}
|
|
304
|
-
finalFocus={finalFocus}
|
|
305
|
-
render={
|
|
306
|
-
<motion.div
|
|
307
|
-
key="alert-dialog-popup"
|
|
308
|
-
data-slot="alert-dialog-popup"
|
|
309
|
-
className={cn(AlertDialogStyles.popup, slots?.popup, className)}
|
|
310
|
-
initial={{
|
|
311
|
-
opacity: 0,
|
|
312
|
-
filter: 'blur(4px)',
|
|
313
|
-
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
314
|
-
}}
|
|
315
|
-
animate={{
|
|
316
|
-
opacity: 1,
|
|
317
|
-
filter: 'blur(0px)',
|
|
318
|
-
transform: `perspective(500px) ${rotateAxis}(0deg) scale(1)`,
|
|
319
|
-
}}
|
|
320
|
-
exit={{
|
|
321
|
-
opacity: 0,
|
|
322
|
-
filter: 'blur(4px)',
|
|
323
|
-
transform: `perspective(500px) ${rotateAxis}(${initialRotation}) scale(0.8)`,
|
|
324
|
-
}}
|
|
325
|
-
transition={transition}
|
|
326
|
-
{...(props as any)}
|
|
327
|
-
/>
|
|
328
|
-
}
|
|
329
|
-
/>
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// ---------------------------------------------------------------------------
|
|
334
|
-
// AlertDialogClose
|
|
335
|
-
// ---------------------------------------------------------------------------
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Button that closes the AlertDialog when clicked.
|
|
339
|
-
* Typically used in the footer alongside a confirm action.
|
|
340
|
-
*
|
|
341
|
-
* @param props - {@link IAlertDialogCloseProps}
|
|
342
|
-
* @returns The rendered close button
|
|
343
|
-
*
|
|
344
|
-
* @example
|
|
345
|
-
* ```tsx
|
|
346
|
-
* <AlertDialogClose className="border border-border px-4 py-2 rounded-md">
|
|
347
|
-
* Cancel
|
|
348
|
-
* </AlertDialogClose>
|
|
349
|
-
* ```
|
|
350
|
-
*/
|
|
351
|
-
function AlertDialogClose({
|
|
352
|
-
slots,
|
|
353
|
-
className,
|
|
354
|
-
...props
|
|
355
|
-
}: IAlertDialogCloseProps) {
|
|
356
|
-
return (
|
|
357
|
-
<AlertDialogPrimitive.Close
|
|
358
|
-
data-slot="alert-dialog-close"
|
|
359
|
-
className={cn(AlertDialogStyles.close, slots?.close, className)}
|
|
360
|
-
{...props}
|
|
361
|
-
/>
|
|
362
|
-
);
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// ---------------------------------------------------------------------------
|
|
366
|
-
// AlertDialogHeader
|
|
367
|
-
// ---------------------------------------------------------------------------
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Layout wrapper for the dialog title and description.
|
|
371
|
-
* Provides consistent spacing and text alignment.
|
|
372
|
-
*
|
|
373
|
-
* @param props - {@link IAlertDialogHeaderProps}
|
|
374
|
-
* @returns The rendered header container
|
|
375
|
-
*
|
|
376
|
-
* @example
|
|
377
|
-
* ```tsx
|
|
378
|
-
* <AlertDialogHeader>
|
|
379
|
-
* <AlertDialogTitle>Confirm Action</AlertDialogTitle>
|
|
380
|
-
* <AlertDialogDescription>This cannot be undone.</AlertDialogDescription>
|
|
381
|
-
* </AlertDialogHeader>
|
|
382
|
-
* ```
|
|
383
|
-
*/
|
|
384
|
-
function AlertDialogHeader({
|
|
385
|
-
slots,
|
|
386
|
-
className,
|
|
387
|
-
...props
|
|
388
|
-
}: IAlertDialogHeaderProps) {
|
|
389
|
-
return (
|
|
390
|
-
<div
|
|
391
|
-
data-slot="alert-dialog-header"
|
|
392
|
-
className={cn(AlertDialogStyles.header, slots?.header, className)}
|
|
393
|
-
{...props}
|
|
394
|
-
/>
|
|
395
|
-
);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
// ---------------------------------------------------------------------------
|
|
399
|
-
// AlertDialogFooter
|
|
400
|
-
// ---------------------------------------------------------------------------
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Layout wrapper for dialog action buttons.
|
|
404
|
-
* Uses responsive flex layout: column on mobile, row on desktop.
|
|
405
|
-
*
|
|
406
|
-
* @param props - {@link IAlertDialogFooterProps}
|
|
407
|
-
* @returns The rendered footer container
|
|
408
|
-
*
|
|
409
|
-
* @example
|
|
410
|
-
* ```tsx
|
|
411
|
-
* <AlertDialogFooter>
|
|
412
|
-
* <AlertDialogClose>Cancel</AlertDialogClose>
|
|
413
|
-
* <Button variant="destructive" onClick={handleDelete}>
|
|
414
|
-
* Delete
|
|
415
|
-
* </Button>
|
|
416
|
-
* </AlertDialogFooter>
|
|
417
|
-
* ```
|
|
418
|
-
*/
|
|
419
|
-
function AlertDialogFooter({
|
|
420
|
-
slots,
|
|
421
|
-
className,
|
|
422
|
-
...props
|
|
423
|
-
}: IAlertDialogFooterProps) {
|
|
424
|
-
return (
|
|
425
|
-
<div
|
|
426
|
-
data-slot="alert-dialog-footer"
|
|
427
|
-
className={cn(AlertDialogStyles.footer, slots?.footer, className)}
|
|
428
|
-
{...props}
|
|
429
|
-
/>
|
|
430
|
-
);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// ---------------------------------------------------------------------------
|
|
434
|
-
// AlertDialogTitle
|
|
435
|
-
// ---------------------------------------------------------------------------
|
|
436
|
-
|
|
437
|
-
/**
|
|
438
|
-
* Title element for the AlertDialog.
|
|
439
|
-
* Automatically associated with the dialog for accessibility via Base UI.
|
|
440
|
-
*
|
|
441
|
-
* @param props - {@link IAlertDialogTitleProps}
|
|
442
|
-
* @returns The rendered title element
|
|
443
|
-
*
|
|
444
|
-
* @example
|
|
445
|
-
* ```tsx
|
|
446
|
-
* <AlertDialogTitle className="text-destructive">
|
|
447
|
-
* Delete Workspace
|
|
448
|
-
* </AlertDialogTitle>
|
|
449
|
-
* ```
|
|
450
|
-
*/
|
|
451
|
-
function AlertDialogTitle({
|
|
452
|
-
slots,
|
|
453
|
-
className,
|
|
454
|
-
...props
|
|
455
|
-
}: IAlertDialogTitleProps) {
|
|
456
|
-
return (
|
|
457
|
-
<AlertDialogPrimitive.Title
|
|
458
|
-
data-slot="alert-dialog-title"
|
|
459
|
-
className={cn(AlertDialogStyles.title, slots?.title, className)}
|
|
460
|
-
{...props}
|
|
461
|
-
/>
|
|
462
|
-
);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
// ---------------------------------------------------------------------------
|
|
466
|
-
// AlertDialogDescription
|
|
467
|
-
// ---------------------------------------------------------------------------
|
|
468
|
-
|
|
469
|
-
/**
|
|
470
|
-
* Description element for the AlertDialog.
|
|
471
|
-
* Provides additional context about the action being confirmed.
|
|
472
|
-
* Automatically associated with the dialog for accessibility via Base UI.
|
|
473
|
-
*
|
|
474
|
-
* @param props - {@link IAlertDialogDescriptionProps}
|
|
475
|
-
* @returns The rendered description element
|
|
476
|
-
*
|
|
477
|
-
* @example
|
|
478
|
-
* ```tsx
|
|
479
|
-
* <AlertDialogDescription>
|
|
480
|
-
* This will permanently delete the workspace and all associated data.
|
|
481
|
-
* This action cannot be undone.
|
|
482
|
-
* </AlertDialogDescription>
|
|
483
|
-
* ```
|
|
484
|
-
*/
|
|
485
|
-
function AlertDialogDescription({
|
|
486
|
-
slots,
|
|
487
|
-
className,
|
|
488
|
-
...props
|
|
489
|
-
}: IAlertDialogDescriptionProps) {
|
|
490
|
-
return (
|
|
491
|
-
<AlertDialogPrimitive.Description
|
|
492
|
-
data-slot="alert-dialog-description"
|
|
493
|
-
className={cn(
|
|
494
|
-
AlertDialogStyles.description,
|
|
495
|
-
slots?.description,
|
|
496
|
-
className,
|
|
497
|
-
)}
|
|
498
|
-
{...props}
|
|
499
|
-
/>
|
|
500
|
-
);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// ---------------------------------------------------------------------------
|
|
504
|
-
// Exports
|
|
505
|
-
// ---------------------------------------------------------------------------
|
|
506
|
-
|
|
507
|
-
export {
|
|
508
|
-
AlertDialog,
|
|
509
|
-
AlertDialogPortal,
|
|
510
|
-
AlertDialogBackdrop,
|
|
511
|
-
AlertDialogClose,
|
|
512
|
-
AlertDialogTrigger,
|
|
513
|
-
AlertDialogPopup,
|
|
514
|
-
AlertDialogHeader,
|
|
515
|
-
AlertDialogFooter,
|
|
516
|
-
AlertDialogTitle,
|
|
517
|
-
AlertDialogDescription,
|
|
518
|
-
useAlertDialog,
|
|
519
|
-
};
|
|
520
|
-
|
|
521
|
-
// Re-export types
|
|
522
|
-
export type {
|
|
523
|
-
IAlertDialogProps,
|
|
524
|
-
IAlertDialogTriggerProps,
|
|
525
|
-
IAlertDialogPortalProps,
|
|
526
|
-
IAlertDialogCloseProps,
|
|
527
|
-
IAlertDialogBackdropProps,
|
|
528
|
-
IAlertDialogPopupProps,
|
|
529
|
-
IAlertDialogHeaderProps,
|
|
530
|
-
IAlertDialogFooterProps,
|
|
531
|
-
IAlertDialogTitleProps,
|
|
532
|
-
IAlertDialogDescriptionProps,
|
|
533
|
-
IAlertDialogConfig,
|
|
534
|
-
AlertDialogSlot,
|
|
535
|
-
AlertDialogContextType,
|
|
536
|
-
AlertDialogFlipDirection,
|
|
537
|
-
} from './AlertDialog.types';
|
|
538
|
-
|
|
539
|
-
// Re-export styles
|
|
540
|
-
export { AlertDialogStyles } from './AlertDialog.styles';
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { cva } from 'class-variance-authority';
|
|
2
|
-
import type { StyleSlots } from '@/core/types';
|
|
3
|
-
|
|
4
|
-
/** Visual regions for the Badge component. */
|
|
5
|
-
type BadgeSlot = 'root';
|
|
6
|
-
|
|
7
|
-
const badgeStyles: StyleSlots<BadgeSlot> = {
|
|
8
|
-
root: 'inline-flex items-center justify-center rounded-full border font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* CVA variants for the Badge root.
|
|
13
|
-
*
|
|
14
|
-
* @see {@link https://cva.style/docs/getting-started/variants}
|
|
15
|
-
*/
|
|
16
|
-
const badgeVariants = cva(
|
|
17
|
-
'inline-flex items-center justify-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
|
|
18
|
-
{
|
|
19
|
-
variants: {
|
|
20
|
-
variant: {
|
|
21
|
-
default:
|
|
22
|
-
'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
|
|
23
|
-
secondary:
|
|
24
|
-
'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
25
|
-
destructive:
|
|
26
|
-
'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
|
|
27
|
-
outline: 'text-foreground',
|
|
28
|
-
},
|
|
29
|
-
size: {
|
|
30
|
-
default: 'h-6 px-2.5 py-0.5',
|
|
31
|
-
sm: 'h-5 px-2 text-[10px]',
|
|
32
|
-
lg: 'h-7 px-3 text-sm',
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
defaultVariants: {
|
|
36
|
-
variant: 'default',
|
|
37
|
-
size: 'default',
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
export { badgeStyles, badgeVariants };
|
|
43
|
-
export type { BadgeSlot };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { VariantProps } from 'class-variance-authority';
|
|
2
|
-
import type { SlotOverrides } from '@/core/types';
|
|
3
|
-
import type { badgeVariants, BadgeSlot } from './Badge.styles';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Props for the Badge component.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```tsx
|
|
10
|
-
* <Badge variant="secondary" size="sm">New</Badge>
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
interface IBadgeProps
|
|
14
|
-
extends React.HTMLAttributes<HTMLDivElement>,
|
|
15
|
-
VariantProps<typeof badgeVariants> {
|
|
16
|
-
/** Override classes for badge visual regions. */
|
|
17
|
-
slots?: SlotOverrides<BadgeSlot>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** Available badge variants. */
|
|
21
|
-
type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline';
|
|
22
|
-
|
|
23
|
-
/** Available badge sizes. */
|
|
24
|
-
type BadgeSize = 'default' | 'sm' | 'lg';
|
|
25
|
-
|
|
26
|
-
export type { IBadgeProps, BadgeVariant, BadgeSize };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
import { cn } from '@/react-ui/lib/utils';
|
|
4
|
-
import { badgeVariants } from './Badge.styles';
|
|
5
|
-
import type { IBadgeProps } from './Badge.types';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Badge — displays status labels, categories, or indicators.
|
|
9
|
-
*
|
|
10
|
-
* @param variant - Visual style: 'default', 'secondary', 'destructive', 'outline'
|
|
11
|
-
* @param size - Badge size: 'default', 'sm', 'lg'
|
|
12
|
-
* @param slots - Override classes for badge visual regions
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```tsx
|
|
16
|
-
* <Badge variant="secondary">New</Badge>
|
|
17
|
-
* <Badge variant="destructive" size="sm">Error</Badge>
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
function Badge({ className, variant, size, slots, ...props }: IBadgeProps) {
|
|
21
|
-
return (
|
|
22
|
-
<div
|
|
23
|
-
data-slot="badge"
|
|
24
|
-
data-variant={variant}
|
|
25
|
-
data-size={size}
|
|
26
|
-
className={cn(badgeVariants({ variant, size }), slots?.root, className)}
|
|
27
|
-
{...props}
|
|
28
|
-
/>
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export { Badge, badgeVariants };
|
|
33
|
-
export type { IBadgeProps, BadgeVariant, BadgeSize } from './Badge.types';
|
|
34
|
-
export type { BadgeSlot } from './Badge.styles';
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { cva } from 'class-variance-authority';
|
|
2
|
-
import type { StyleSlots } from '@/core/types';
|
|
3
|
-
|
|
4
|
-
/** Visual regions for the Button component. */
|
|
5
|
-
type ButtonSlot = 'root';
|
|
6
|
-
|
|
7
|
-
const buttonStyles: StyleSlots<ButtonSlot> = {
|
|
8
|
-
root: 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* CVA variants for the Button root.
|
|
13
|
-
*
|
|
14
|
-
* @see {@link https://cva.style/docs/getting-started/variants}
|
|
15
|
-
*/
|
|
16
|
-
const buttonVariants = cva(
|
|
17
|
-
'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 active:scale-[0.98]',
|
|
18
|
-
{
|
|
19
|
-
variants: {
|
|
20
|
-
variant: {
|
|
21
|
-
default:
|
|
22
|
-
'bg-primary text-primary-foreground hover:bg-primary/90',
|
|
23
|
-
secondary:
|
|
24
|
-
'bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
25
|
-
destructive:
|
|
26
|
-
'bg-destructive text-destructive-foreground hover:bg-destructive/90',
|
|
27
|
-
outline:
|
|
28
|
-
'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
|
|
29
|
-
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
|
30
|
-
link: 'text-primary underline-offset-4 hover:underline',
|
|
31
|
-
success:
|
|
32
|
-
'bg-emerald-600 text-white hover:bg-emerald-700 focus-visible:ring-emerald-600',
|
|
33
|
-
warning:
|
|
34
|
-
'bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-500',
|
|
35
|
-
},
|
|
36
|
-
size: {
|
|
37
|
-
default: 'h-10 px-4 py-2',
|
|
38
|
-
sm: 'h-9 rounded-md px-3 text-xs',
|
|
39
|
-
lg: 'h-11 rounded-md px-8 text-base',
|
|
40
|
-
icon: 'h-10 w-10 p-0',
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
defaultVariants: {
|
|
44
|
-
variant: 'default',
|
|
45
|
-
size: 'default',
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
/** State-specific style classes for Button. */
|
|
51
|
-
const buttonStateStyles = {
|
|
52
|
-
pressed: 'scale-[0.98]',
|
|
53
|
-
disabled: 'opacity-50 pointer-events-none',
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export { buttonStyles, buttonVariants, buttonStateStyles };
|
|
57
|
-
export type { ButtonSlot };
|