@wakastellar/ui 2.3.4 → 2.4.0
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/blocks/dashboard/index.d.ts +4 -1
- package/dist/blocks/empty-states/index.d.ts +4 -1
- package/dist/blocks/error-pages/index.d.ts +4 -1
- package/dist/blocks/index.d.ts +1 -1
- package/dist/blocks/landing/index.d.ts +4 -1
- package/dist/blocks/pricing/index.d.ts +5 -1
- package/dist/blocks/sidebar/index.d.ts +5 -1
- package/dist/index.cjs.js +130 -130
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +7905 -7856
- package/dist/stories/Button.d.ts +14 -0
- package/dist/stories/Button.stories.d.ts +8 -0
- package/dist/stories/Header.d.ts +11 -0
- package/dist/stories/Header.stories.d.ts +6 -0
- package/dist/stories/Page.d.ts +2 -0
- package/dist/stories/Page.stories.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/link.d.ts +23 -0
- package/package.json +11 -3
- package/src/blocks/activity-timeline/ActivityTimeline.stories.tsx +460 -0
- package/src/blocks/apm-overview/APMOverview.stories.tsx +435 -0
- package/src/blocks/auth-2fa/Auth2FA.stories.tsx +308 -0
- package/src/blocks/calendar-view/CalendarView.stories.tsx +398 -0
- package/src/blocks/chat/Chat.stories.tsx +466 -0
- package/src/blocks/chat-interface/ChatInterface.stories.tsx +412 -0
- package/src/blocks/checkout-flow/CheckoutFlow.stories.tsx +408 -0
- package/src/blocks/cicd-builder/CICDBuilder.stories.tsx +499 -0
- package/src/blocks/cloud-cost-dashboard/CloudCostDashboard.stories.tsx +356 -0
- package/src/blocks/container-orchestrator/ContainerOrchestrator.stories.tsx +461 -0
- package/src/blocks/dashboard/Dashboard.stories.tsx +559 -0
- package/src/blocks/dashboard/index.tsx +68 -27
- package/src/blocks/dashboard-kpi/DashboardKPI.stories.tsx +422 -0
- package/src/blocks/database-admin/DatabaseAdmin.stories.tsx +393 -0
- package/src/blocks/deployment-dashboard/DeploymentDashboard.stories.tsx +457 -0
- package/src/blocks/empty-states/EmptyStates.stories.tsx +467 -0
- package/src/blocks/empty-states/index.tsx +26 -8
- package/src/blocks/error-pages/ErrorPages.stories.tsx +401 -0
- package/src/blocks/error-pages/index.tsx +26 -8
- package/src/blocks/faq/FAQ.stories.tsx +416 -0
- package/src/blocks/file-manager/FileManager.stories.tsx +413 -0
- package/src/blocks/footer/Footer.stories.tsx +328 -0
- package/src/blocks/gitops-sync-status/GitOpsSyncStatus.stories.tsx +529 -0
- package/src/blocks/header/WakaHeader.stories.tsx +455 -0
- package/src/blocks/headtab/Headtab.stories.tsx +369 -0
- package/src/blocks/i18n-editor/I18nEditor.stories.tsx +451 -0
- package/src/blocks/incident-manager/IncidentManager.stories.tsx +464 -0
- package/src/blocks/index.ts +1 -1
- package/src/blocks/infrastructure-map/InfrastructureMap.stories.tsx +533 -0
- package/src/blocks/kanban-board/KanbanBoard.stories.tsx +494 -0
- package/src/blocks/landing/WakaLanding.stories.tsx +449 -0
- package/src/blocks/landing/index.tsx +125 -66
- package/src/blocks/language-selector/LanguageSelector.stories.tsx +345 -0
- package/src/blocks/layout/Layout.stories.tsx +373 -0
- package/src/blocks/login/Login.stories.tsx +443 -0
- package/src/blocks/on-call-schedule/OnCallSchedule.stories.tsx +381 -0
- package/src/blocks/player-profile/PlayerProfile.stories.tsx +316 -0
- package/src/blocks/pricing/WakaPricing.stories.tsx +530 -0
- package/src/blocks/pricing/index.tsx +38 -4
- package/src/blocks/profile/Profile.stories.tsx +371 -0
- package/src/blocks/release-notes/ReleaseNotes.stories.tsx +431 -0
- package/src/blocks/settings/Settings.stories.tsx +520 -0
- package/src/blocks/sidebar/WakaSidebar.stories.tsx +513 -0
- package/src/blocks/sidebar/index.tsx +49 -20
- package/src/blocks/theme-creator-block/ThemeCreatorBlock.stories.tsx +370 -0
- package/src/blocks/user-management/UserManagement.stories.tsx +411 -0
- package/src/blocks/wizard/Wizard.stories.tsx +683 -0
- package/src/components/accordion/Accordion.stories.tsx +93 -0
- package/src/components/alert/Alert.stories.tsx +95 -0
- package/src/components/alert-dialog/AlertDialog.stories.tsx +126 -0
- package/src/components/aspect-ratio/AspectRatio.stories.tsx +118 -0
- package/src/components/avatar/Avatar.stories.tsx +104 -0
- package/src/components/button/Button.stories.tsx +12 -1
- package/src/components/calendar/Calendar.stories.tsx +102 -0
- package/src/components/card/Card.stories.tsx +125 -0
- package/src/components/checkbox/Checkbox.stories.tsx +100 -0
- package/src/components/code/Code.stories.tsx +402 -0
- package/src/components/collapsible/Collapsible.stories.tsx +123 -0
- package/src/components/command/Command.stories.tsx +207 -0
- package/src/components/context-menu/ContextMenu.stories.tsx +220 -0
- package/src/components/dialog/Dialog.stories.tsx +157 -0
- package/src/components/dropdown-menu/DropdownMenu.stories.tsx +225 -0
- package/src/components/form/Form.stories.tsx +413 -0
- package/src/components/hover-card/HoverCard.stories.tsx +148 -0
- package/src/components/input-otp/InputOTP.stories.tsx +255 -0
- package/src/components/label/Label.stories.tsx +68 -0
- package/src/components/menubar/Menubar.stories.tsx +278 -0
- package/src/components/navigation-menu/NavigationMenu.stories.tsx +202 -0
- package/src/components/popover/Popover.stories.tsx +199 -0
- package/src/components/progress/Progress.stories.tsx +104 -0
- package/src/components/radio-group/RadioGroup.stories.tsx +138 -0
- package/src/components/scroll-area/ScrollArea.stories.tsx +153 -0
- package/src/components/select/Select.stories.tsx +146 -0
- package/src/components/separator/Separator.stories.tsx +117 -0
- package/src/components/sheet/Sheet.stories.tsx +195 -0
- package/src/components/skeleton/Skeleton.stories.tsx +114 -0
- package/src/components/slider/Slider.stories.tsx +157 -0
- package/src/components/switch/Switch.stories.tsx +114 -0
- package/src/components/table/Table.stories.tsx +153 -0
- package/src/components/tabs/Tabs.stories.tsx +155 -0
- package/src/components/textarea/Textarea.stories.tsx +116 -0
- package/src/components/toast/Toast.stories.tsx +160 -0
- package/src/components/toggle/Toggle.stories.tsx +125 -0
- package/src/components/tooltip/Tooltip.stories.tsx +133 -0
- package/src/components/typography/Typography.stories.tsx +207 -0
- package/src/components/waka-3d-pie-chart/Waka3DPieChart.stories.tsx +308 -0
- package/src/components/waka-achievement-unlock/WakaAchievementUnlock.stories.tsx +353 -0
- package/src/components/waka-artifact-list/WakaArtifactList.stories.tsx +258 -0
- package/src/components/waka-autocomplete/WakaAutocomplete.stories.tsx +224 -0
- package/src/components/waka-badge-showcase/WakaBadgeShowcase.stories.tsx +269 -0
- package/src/components/waka-barcode/WakaBarcode.stories.tsx +227 -0
- package/src/components/waka-bottom-sheet/WakaBottomSheet.stories.tsx +408 -0
- package/src/components/waka-breadcrumb/WakaBreadcrumb.stories.tsx +237 -0
- package/src/components/waka-build-matrix/WakaBuildMatrix.stories.tsx +328 -0
- package/src/components/waka-carousel/WakaCarousel.stories.tsx +296 -0
- package/src/components/waka-charts/WakaCharts.stories.tsx +519 -0
- package/src/components/waka-color-picker/WakaColorPicker.stories.tsx +200 -0
- package/src/components/waka-combobox/WakaCombobox.stories.tsx +250 -0
- package/src/components/waka-container-list/WakaContainerList.stories.tsx +315 -0
- package/src/components/waka-contribution-graph/WakaContributionGraph.stories.tsx +354 -0
- package/src/components/waka-cost-breakdown/WakaCostBreakdown.stories.tsx +348 -0
- package/src/components/waka-daily-reward/WakaDailyReward.stories.tsx +365 -0
- package/src/components/waka-database-card/WakaDatabaseCard.stories.tsx +306 -0
- package/src/components/waka-date-range-picker/WakaDateRangePicker.stories.tsx +339 -0
- package/src/components/waka-datetime-picker/WakaDateTimePicker.stories.tsx +317 -0
- package/src/components/waka-deployment-lane/WakaDeploymentLane.stories.tsx +292 -0
- package/src/components/waka-dock/WakaDock.stories.tsx +332 -0
- package/src/components/waka-drawer/WakaDrawer.stories.tsx +437 -0
- package/src/components/waka-env-var-editor/WakaEnvVarEditor.stories.tsx +263 -0
- package/src/components/waka-error-shake/WakaErrorShake.stories.tsx +410 -0
- package/src/components/waka-file-upload/WakaFileUpload.stories.tsx +239 -0
- package/src/components/waka-flow-diagram/WakaFlowDiagram.stories.tsx +365 -0
- package/src/components/waka-funnel-chart/WakaFunnelChart.stories.tsx +281 -0
- package/src/components/waka-glow-card/WakaGlowCard.stories.tsx +274 -0
- package/src/components/waka-haptic-button/WakaHapticButton.stories.tsx +349 -0
- package/src/components/waka-health-pulse/WakaHealthPulse.stories.tsx +293 -0
- package/src/components/waka-heatmap/WakaHeatmap.stories.tsx +376 -0
- package/src/components/waka-image/WakaImage.stories.tsx +255 -0
- package/src/components/waka-incident-timeline/WakaIncidentTimeline.stories.tsx +300 -0
- package/src/components/waka-kanban/WakaKanban.stories.tsx +399 -0
- package/src/components/waka-kubernetes-overview/WakaKubernetesOverview.stories.tsx +281 -0
- package/src/components/waka-leaderboard/WakaLeaderboard.stories.tsx +300 -0
- package/src/components/waka-level-progress/WakaLevelProgress.stories.tsx +313 -0
- package/src/components/waka-loading-orbit/WakaLoadingOrbit.stories.tsx +413 -0
- package/src/components/waka-log-viewer/WakaLogViewer.stories.tsx +312 -0
- package/src/components/waka-loot-box/WakaLootBox.stories.tsx +374 -0
- package/src/components/waka-metric-sparkline/WakaMetricSparkline.stories.tsx +312 -0
- package/src/components/waka-migration-list/WakaMigrationList.stories.tsx +289 -0
- package/src/components/waka-modal/WakaModal.stories.tsx +434 -0
- package/src/components/waka-morph-button/WakaMorphButton.stories.tsx +405 -0
- package/src/components/waka-network-topology/WakaNetworkTopology.stories.tsx +364 -0
- package/src/components/waka-notifications/WakaNotifications.stories.tsx +290 -0
- package/src/components/waka-number-input/WakaNumberInput.stories.tsx +282 -0
- package/src/components/waka-pagination/WakaPagination.stories.tsx +328 -0
- package/src/components/waka-password-strength/WakaPasswordStrength.stories.tsx +318 -0
- package/src/components/waka-pipeline-view/WakaPipelineView.stories.tsx +386 -0
- package/src/components/waka-player-card/WakaPlayerCard.stories.tsx +333 -0
- package/src/components/waka-pod-card/WakaPodCard.stories.tsx +435 -0
- package/src/components/waka-qrcode/WakaQRCode.stories.tsx +232 -0
- package/src/components/waka-query-explain/WakaQueryExplain.stories.tsx +407 -0
- package/src/components/waka-quest-card/WakaQuestCard.stories.tsx +394 -0
- package/src/components/waka-quota-bar/WakaQuotaBar.stories.tsx +435 -0
- package/src/components/waka-radar-score/WakaRadarScore.stories.tsx +372 -0
- package/src/components/waka-resource-gauge/WakaResourceGauge.stories.tsx +366 -0
- package/src/components/waka-rich-text-editor/WakaRichTextEditor.stories.tsx +238 -0
- package/src/components/waka-sankey-diagram/WakaSankeyDiagram.stories.tsx +389 -0
- package/src/components/waka-scratch-card/WakaScratchCard.stories.tsx +388 -0
- package/src/components/waka-secret-card/WakaSecretCard.stories.tsx +314 -0
- package/src/components/waka-segmented-control/WakaSegmentedControl.stories.tsx +309 -0
- package/src/components/waka-server-rack/WakaServerRack.stories.tsx +382 -0
- package/src/components/waka-service-graph/WakaServiceGraph.stories.tsx +262 -0
- package/src/components/waka-skeleton-wave/WakaSkeletonWave.stories.tsx +321 -0
- package/src/components/waka-skill-tree/WakaSkillTree.stories.tsx +308 -0
- package/src/components/waka-spin-wheel/WakaSpinWheel.stories.tsx +368 -0
- package/src/components/waka-spinner/WakaSpinner.stories.tsx +156 -0
- package/src/components/waka-stat/WakaStat.stories.tsx +334 -0
- package/src/components/waka-status-matrix/WakaStatusMatrix.stories.tsx +331 -0
- package/src/components/waka-stepper/WakaStepper.stories.tsx +468 -0
- package/src/components/waka-streak-counter/WakaStreakCounter.stories.tsx +235 -0
- package/src/components/waka-success-explosion/WakaSuccessExplosion.stories.tsx +389 -0
- package/src/components/waka-tabs-morph/WakaTabsMorph.stories.tsx +471 -0
- package/src/components/waka-terminal-output/WakaTerminalOutput.stories.tsx +351 -0
- package/src/components/waka-test-report/WakaTestReport.stories.tsx +322 -0
- package/src/components/waka-tilt-card/WakaTiltCard.stories.tsx +300 -0
- package/src/components/waka-time-picker/WakaTimePicker.stories.tsx +227 -0
- package/src/components/waka-timeline/WakaTimeline.stories.tsx +383 -0
- package/src/components/waka-tournament-bracket/WakaTournamentBracket.stories.tsx +375 -0
- package/src/components/waka-trace-viewer/WakaTraceViewer.stories.tsx +445 -0
- package/src/components/waka-tree/WakaTree.stories.tsx +359 -0
- package/src/components/waka-treemap-chart/WakaTreemapChart.stories.tsx +378 -0
- package/src/components/waka-typewriter/WakaTypewriter.stories.tsx +366 -0
- package/src/components/waka-versus-card/WakaVersusCard.stories.tsx +530 -0
- package/src/components/waka-video/WakaVideo.stories.tsx +203 -0
- package/src/components/waka-virtual-list/WakaVirtualList.stories.tsx +273 -0
- package/src/components/waka-xp-bar/WakaXPBar.stories.tsx +305 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
import { WakaTiltCard, WakaTiltShowcaseCard } from './index'
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import { Zap, Rocket, Shield, CreditCard, Cpu, Globe } from 'lucide-react'
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof WakaTiltCard> = {
|
|
7
|
+
title: 'Components/Effects/WakaTiltCard',
|
|
8
|
+
component: WakaTiltCard,
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: 'centered',
|
|
11
|
+
docs: {
|
|
12
|
+
description: {
|
|
13
|
+
component: 'A 3D tilt card component with perspective effect, glare, and gyroscope support.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
argTypes: {
|
|
19
|
+
maxTilt: {
|
|
20
|
+
control: { type: 'range', min: 0, max: 45, step: 1 },
|
|
21
|
+
description: 'Maximum tilt angle in degrees',
|
|
22
|
+
},
|
|
23
|
+
perspective: {
|
|
24
|
+
control: { type: 'range', min: 500, max: 2000, step: 100 },
|
|
25
|
+
description: 'Perspective distance',
|
|
26
|
+
},
|
|
27
|
+
scale: {
|
|
28
|
+
control: { type: 'range', min: 1, max: 1.2, step: 0.01 },
|
|
29
|
+
description: 'Scale on hover',
|
|
30
|
+
},
|
|
31
|
+
speed: {
|
|
32
|
+
control: { type: 'range', min: 100, max: 1000, step: 50 },
|
|
33
|
+
description: 'Transition speed in ms',
|
|
34
|
+
},
|
|
35
|
+
glare: {
|
|
36
|
+
control: 'boolean',
|
|
37
|
+
description: 'Enable glare effect',
|
|
38
|
+
},
|
|
39
|
+
maxGlare: {
|
|
40
|
+
control: { type: 'range', min: 0, max: 1, step: 0.05 },
|
|
41
|
+
description: 'Maximum glare opacity',
|
|
42
|
+
},
|
|
43
|
+
reset: {
|
|
44
|
+
control: 'boolean',
|
|
45
|
+
description: 'Reset on mouse leave',
|
|
46
|
+
},
|
|
47
|
+
reverse: {
|
|
48
|
+
control: 'boolean',
|
|
49
|
+
description: 'Reverse tilt direction',
|
|
50
|
+
},
|
|
51
|
+
disabled: {
|
|
52
|
+
control: 'boolean',
|
|
53
|
+
description: 'Disable tilt effect',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default meta
|
|
59
|
+
type Story = StoryObj<typeof WakaTiltCard>
|
|
60
|
+
|
|
61
|
+
export const Default: Story = {
|
|
62
|
+
args: {},
|
|
63
|
+
render: (args) => (
|
|
64
|
+
<WakaTiltCard {...args}>
|
|
65
|
+
<div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg">
|
|
66
|
+
<h3 className="font-semibold text-lg mb-2">3D Tilt Card</h3>
|
|
67
|
+
<p className="text-muted-foreground">
|
|
68
|
+
Move your cursor over this card to see the 3D tilt effect.
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
</WakaTiltCard>
|
|
72
|
+
),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const WithGlare: Story = {
|
|
76
|
+
render: () => (
|
|
77
|
+
<WakaTiltCard glare maxGlare={0.3}>
|
|
78
|
+
<div className="w-[300px] p-6 bg-gradient-to-br from-primary/20 to-primary/5 border rounded-xl shadow-lg">
|
|
79
|
+
<h3 className="font-semibold text-lg mb-2">Glare Effect</h3>
|
|
80
|
+
<p className="text-muted-foreground">
|
|
81
|
+
Notice the glare effect that follows your cursor.
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</WakaTiltCard>
|
|
85
|
+
),
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export const TiltIntensities: Story = {
|
|
89
|
+
render: () => (
|
|
90
|
+
<div className="flex gap-6">
|
|
91
|
+
<WakaTiltCard maxTilt={5}>
|
|
92
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
93
|
+
<h4 className="font-medium">Subtle</h4>
|
|
94
|
+
<p className="text-sm text-muted-foreground">5° tilt</p>
|
|
95
|
+
</div>
|
|
96
|
+
</WakaTiltCard>
|
|
97
|
+
<WakaTiltCard maxTilt={15}>
|
|
98
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
99
|
+
<h4 className="font-medium">Medium</h4>
|
|
100
|
+
<p className="text-sm text-muted-foreground">15° tilt</p>
|
|
101
|
+
</div>
|
|
102
|
+
</WakaTiltCard>
|
|
103
|
+
<WakaTiltCard maxTilt={30}>
|
|
104
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
105
|
+
<h4 className="font-medium">Strong</h4>
|
|
106
|
+
<p className="text-sm text-muted-foreground">30° tilt</p>
|
|
107
|
+
</div>
|
|
108
|
+
</WakaTiltCard>
|
|
109
|
+
</div>
|
|
110
|
+
),
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export const ReverseTilt: Story = {
|
|
114
|
+
render: () => (
|
|
115
|
+
<div className="flex gap-6">
|
|
116
|
+
<WakaTiltCard reverse={false}>
|
|
117
|
+
<div className="w-[200px] p-4 bg-card border rounded-xl shadow-lg">
|
|
118
|
+
<h4 className="font-medium">Normal</h4>
|
|
119
|
+
<p className="text-sm text-muted-foreground">Standard direction</p>
|
|
120
|
+
</div>
|
|
121
|
+
</WakaTiltCard>
|
|
122
|
+
<WakaTiltCard reverse>
|
|
123
|
+
<div className="w-[200px] p-4 bg-card border rounded-xl shadow-lg">
|
|
124
|
+
<h4 className="font-medium">Reversed</h4>
|
|
125
|
+
<p className="text-sm text-muted-foreground">Inverted direction</p>
|
|
126
|
+
</div>
|
|
127
|
+
</WakaTiltCard>
|
|
128
|
+
</div>
|
|
129
|
+
),
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export const NoReset: Story = {
|
|
133
|
+
render: () => (
|
|
134
|
+
<WakaTiltCard reset={false}>
|
|
135
|
+
<div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg">
|
|
136
|
+
<h3 className="font-semibold text-lg mb-2">No Reset</h3>
|
|
137
|
+
<p className="text-muted-foreground">
|
|
138
|
+
The tilt stays when you move the cursor away.
|
|
139
|
+
</p>
|
|
140
|
+
</div>
|
|
141
|
+
</WakaTiltCard>
|
|
142
|
+
),
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export const WithScale: Story = {
|
|
146
|
+
render: () => (
|
|
147
|
+
<div className="flex gap-6">
|
|
148
|
+
<WakaTiltCard scale={1}>
|
|
149
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
150
|
+
<h4 className="font-medium">No Scale</h4>
|
|
151
|
+
<p className="text-sm text-muted-foreground">scale: 1</p>
|
|
152
|
+
</div>
|
|
153
|
+
</WakaTiltCard>
|
|
154
|
+
<WakaTiltCard scale={1.05}>
|
|
155
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
156
|
+
<h4 className="font-medium">Slight Scale</h4>
|
|
157
|
+
<p className="text-sm text-muted-foreground">scale: 1.05</p>
|
|
158
|
+
</div>
|
|
159
|
+
</WakaTiltCard>
|
|
160
|
+
<WakaTiltCard scale={1.1}>
|
|
161
|
+
<div className="w-[180px] p-4 bg-card border rounded-xl shadow-lg">
|
|
162
|
+
<h4 className="font-medium">More Scale</h4>
|
|
163
|
+
<p className="text-sm text-muted-foreground">scale: 1.1</p>
|
|
164
|
+
</div>
|
|
165
|
+
</WakaTiltCard>
|
|
166
|
+
</div>
|
|
167
|
+
),
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export const ShowcaseCard: Story = {
|
|
171
|
+
render: () => (
|
|
172
|
+
<div className="flex gap-6">
|
|
173
|
+
<WakaTiltShowcaseCard
|
|
174
|
+
title="Fast Performance"
|
|
175
|
+
description="Optimized for speed and efficiency"
|
|
176
|
+
icon={<Zap className="h-6 w-6 text-primary" />}
|
|
177
|
+
glowColor="hsl(var(--primary))"
|
|
178
|
+
/>
|
|
179
|
+
<WakaTiltShowcaseCard
|
|
180
|
+
title="Secure & Reliable"
|
|
181
|
+
description="Enterprise-grade security built-in"
|
|
182
|
+
icon={<Shield className="h-6 w-6 text-green-500" />}
|
|
183
|
+
glowColor="hsl(142.1 76.2% 36.3%)"
|
|
184
|
+
/>
|
|
185
|
+
</div>
|
|
186
|
+
),
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export const ShowcaseWithImage: Story = {
|
|
190
|
+
render: () => (
|
|
191
|
+
<WakaTiltShowcaseCard
|
|
192
|
+
title="Launch Your Project"
|
|
193
|
+
description="Deploy in seconds with our powerful infrastructure"
|
|
194
|
+
icon={<Rocket className="h-6 w-6 text-violet-500" />}
|
|
195
|
+
image="https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=400&h=200&fit=crop"
|
|
196
|
+
glowColor="rgb(139, 92, 246)"
|
|
197
|
+
footer={
|
|
198
|
+
<button className="w-full py-2 bg-primary text-primary-foreground rounded-lg font-medium">
|
|
199
|
+
Get Started
|
|
200
|
+
</button>
|
|
201
|
+
}
|
|
202
|
+
/>
|
|
203
|
+
),
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export const CreditCardStyle: Story = {
|
|
207
|
+
render: () => (
|
|
208
|
+
<WakaTiltCard maxTilt={15} glare maxGlare={0.2}>
|
|
209
|
+
<div className="w-[380px] h-[220px] p-6 bg-gradient-to-br from-violet-600 to-indigo-900 rounded-2xl text-white shadow-2xl">
|
|
210
|
+
<div className="flex justify-between items-start">
|
|
211
|
+
<div className="w-12 h-10 bg-yellow-400/80 rounded-md" />
|
|
212
|
+
<Globe className="h-8 w-8 text-white/50" />
|
|
213
|
+
</div>
|
|
214
|
+
<div className="mt-8">
|
|
215
|
+
<p className="text-lg tracking-[0.25em] font-mono">4242 4242 4242 4242</p>
|
|
216
|
+
</div>
|
|
217
|
+
<div className="mt-6 flex justify-between items-end">
|
|
218
|
+
<div>
|
|
219
|
+
<p className="text-xs text-white/60 uppercase">Card Holder</p>
|
|
220
|
+
<p className="font-medium">John Doe</p>
|
|
221
|
+
</div>
|
|
222
|
+
<div>
|
|
223
|
+
<p className="text-xs text-white/60 uppercase">Expires</p>
|
|
224
|
+
<p className="font-medium">12/28</p>
|
|
225
|
+
</div>
|
|
226
|
+
<div className="flex gap-1">
|
|
227
|
+
<div className="w-8 h-8 rounded-full bg-red-500/80" />
|
|
228
|
+
<div className="w-8 h-8 rounded-full bg-orange-500/80 -ml-4" />
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</WakaTiltCard>
|
|
233
|
+
),
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export const ProductShowcase: Story = {
|
|
237
|
+
render: () => (
|
|
238
|
+
<WakaTiltCard maxTilt={12} scale={1.03} glare>
|
|
239
|
+
<div className="w-[320px] overflow-hidden bg-card border rounded-2xl shadow-xl">
|
|
240
|
+
<div className="aspect-square bg-gradient-to-br from-blue-100 to-blue-50 flex items-center justify-center">
|
|
241
|
+
<div
|
|
242
|
+
className="w-48 h-48 rounded-3xl bg-white shadow-lg flex items-center justify-center"
|
|
243
|
+
style={{ transform: 'translateZ(40px)' }}
|
|
244
|
+
>
|
|
245
|
+
<Cpu className="h-24 w-24 text-blue-500" style={{ transform: 'translateZ(20px)' }} />
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
<div className="p-6">
|
|
249
|
+
<h3 className="font-bold text-lg">Next-Gen Processor</h3>
|
|
250
|
+
<p className="text-sm text-muted-foreground mt-1">
|
|
251
|
+
Ultra-fast computing for demanding workloads
|
|
252
|
+
</p>
|
|
253
|
+
<div className="mt-4 flex items-center justify-between">
|
|
254
|
+
<span className="text-2xl font-bold">$599</span>
|
|
255
|
+
<button className="px-4 py-2 bg-primary text-primary-foreground rounded-lg text-sm font-medium">
|
|
256
|
+
Buy Now
|
|
257
|
+
</button>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
</div>
|
|
261
|
+
</WakaTiltCard>
|
|
262
|
+
),
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export const GridOfCards: Story = {
|
|
266
|
+
render: () => (
|
|
267
|
+
<div className="grid grid-cols-3 gap-6">
|
|
268
|
+
{[
|
|
269
|
+
{ icon: <Zap className="h-5 w-5" />, title: 'Fast', color: 'text-yellow-500' },
|
|
270
|
+
{ icon: <Shield className="h-5 w-5" />, title: 'Secure', color: 'text-green-500' },
|
|
271
|
+
{ icon: <Rocket className="h-5 w-5" />, title: 'Powerful', color: 'text-violet-500' },
|
|
272
|
+
{ icon: <Globe className="h-5 w-5" />, title: 'Global', color: 'text-blue-500' },
|
|
273
|
+
{ icon: <CreditCard className="h-5 w-5" />, title: 'Payments', color: 'text-pink-500' },
|
|
274
|
+
{ icon: <Cpu className="h-5 w-5" />, title: 'Smart', color: 'text-orange-500' },
|
|
275
|
+
].map((item, i) => (
|
|
276
|
+
<WakaTiltCard key={i} maxTilt={10} scale={1.02}>
|
|
277
|
+
<div className="w-[140px] p-4 bg-card border rounded-xl shadow-md text-center">
|
|
278
|
+
<div className={`inline-flex p-2 rounded-lg bg-muted ${item.color}`}>
|
|
279
|
+
{item.icon}
|
|
280
|
+
</div>
|
|
281
|
+
<p className="mt-2 font-medium">{item.title}</p>
|
|
282
|
+
</div>
|
|
283
|
+
</WakaTiltCard>
|
|
284
|
+
))}
|
|
285
|
+
</div>
|
|
286
|
+
),
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export const Disabled: Story = {
|
|
290
|
+
render: () => (
|
|
291
|
+
<WakaTiltCard disabled>
|
|
292
|
+
<div className="w-[300px] p-6 bg-card border rounded-xl shadow-lg opacity-60">
|
|
293
|
+
<h3 className="font-semibold text-lg mb-2">Disabled</h3>
|
|
294
|
+
<p className="text-muted-foreground">
|
|
295
|
+
Tilt effect is disabled on this card.
|
|
296
|
+
</p>
|
|
297
|
+
</div>
|
|
298
|
+
</WakaTiltCard>
|
|
299
|
+
),
|
|
300
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
import { WakaTimePicker } from './index'
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof WakaTimePicker> = {
|
|
6
|
+
title: 'Components/Forms/WakaTimePicker',
|
|
7
|
+
component: WakaTimePicker,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered',
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component: 'A time picker component with 12h/24h format support and quick selection.',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
tags: ['autodocs'],
|
|
17
|
+
argTypes: {
|
|
18
|
+
format: {
|
|
19
|
+
control: 'select',
|
|
20
|
+
options: ['12h', '24h'],
|
|
21
|
+
description: 'Time format',
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
control: 'select',
|
|
25
|
+
options: ['sm', 'md', 'lg'],
|
|
26
|
+
description: 'Size of the component',
|
|
27
|
+
},
|
|
28
|
+
showSeconds: {
|
|
29
|
+
control: 'boolean',
|
|
30
|
+
description: 'Show seconds input',
|
|
31
|
+
},
|
|
32
|
+
disabled: {
|
|
33
|
+
control: 'boolean',
|
|
34
|
+
description: 'Disable the picker',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default meta
|
|
40
|
+
type Story = StoryObj<typeof WakaTimePicker>
|
|
41
|
+
|
|
42
|
+
export const Default: Story = {
|
|
43
|
+
render: function TimePickerDemo() {
|
|
44
|
+
const [time, setTime] = React.useState<string>('')
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div className="w-[200px]">
|
|
48
|
+
<WakaTimePicker
|
|
49
|
+
value={time}
|
|
50
|
+
onChange={setTime}
|
|
51
|
+
placeholder="Select time"
|
|
52
|
+
/>
|
|
53
|
+
{time && (
|
|
54
|
+
<p className="text-sm text-muted-foreground mt-2">Selected: {time}</p>
|
|
55
|
+
)}
|
|
56
|
+
</div>
|
|
57
|
+
)
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const Format24h: Story = {
|
|
62
|
+
render: function Format24hDemo() {
|
|
63
|
+
const [time, setTime] = React.useState<string>('14:30')
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<div className="w-[200px]">
|
|
67
|
+
<WakaTimePicker
|
|
68
|
+
value={time}
|
|
69
|
+
onChange={setTime}
|
|
70
|
+
format="24h"
|
|
71
|
+
placeholder="HH:mm"
|
|
72
|
+
/>
|
|
73
|
+
</div>
|
|
74
|
+
)
|
|
75
|
+
},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export const Format12h: Story = {
|
|
79
|
+
render: function Format12hDemo() {
|
|
80
|
+
const [time, setTime] = React.useState<string>('14:30')
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<div className="w-[200px]">
|
|
84
|
+
<WakaTimePicker
|
|
85
|
+
value={time}
|
|
86
|
+
onChange={setTime}
|
|
87
|
+
format="12h"
|
|
88
|
+
placeholder="hh:mm AM/PM"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
)
|
|
92
|
+
},
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const WithSeconds: Story = {
|
|
96
|
+
render: function WithSecondsDemo() {
|
|
97
|
+
const [time, setTime] = React.useState<string>('09:15:30')
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<div className="w-[200px]">
|
|
101
|
+
<WakaTimePicker
|
|
102
|
+
value={time}
|
|
103
|
+
onChange={setTime}
|
|
104
|
+
showSeconds
|
|
105
|
+
placeholder="HH:mm:ss"
|
|
106
|
+
/>
|
|
107
|
+
</div>
|
|
108
|
+
)
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const WithMinuteStep: Story = {
|
|
113
|
+
render: function MinuteStepDemo() {
|
|
114
|
+
const [time, setTime] = React.useState<string>('')
|
|
115
|
+
|
|
116
|
+
return (
|
|
117
|
+
<div className="w-[200px]">
|
|
118
|
+
<WakaTimePicker
|
|
119
|
+
value={time}
|
|
120
|
+
onChange={setTime}
|
|
121
|
+
minuteStep={15}
|
|
122
|
+
placeholder="15 minute intervals"
|
|
123
|
+
/>
|
|
124
|
+
<p className="text-xs text-muted-foreground mt-2">
|
|
125
|
+
Minutes: 00, 15, 30, 45
|
|
126
|
+
</p>
|
|
127
|
+
</div>
|
|
128
|
+
)
|
|
129
|
+
},
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export const WithMinMaxTime: Story = {
|
|
133
|
+
render: function MinMaxDemo() {
|
|
134
|
+
const [time, setTime] = React.useState<string>('10:00')
|
|
135
|
+
|
|
136
|
+
return (
|
|
137
|
+
<div className="w-[200px]">
|
|
138
|
+
<WakaTimePicker
|
|
139
|
+
value={time}
|
|
140
|
+
onChange={setTime}
|
|
141
|
+
minTime="09:00"
|
|
142
|
+
maxTime="17:00"
|
|
143
|
+
placeholder="Business hours"
|
|
144
|
+
/>
|
|
145
|
+
<p className="text-xs text-muted-foreground mt-2">
|
|
146
|
+
Available: 09:00 - 17:00
|
|
147
|
+
</p>
|
|
148
|
+
</div>
|
|
149
|
+
)
|
|
150
|
+
},
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export const Sizes: Story = {
|
|
154
|
+
render: function SizesDemo() {
|
|
155
|
+
const [time, setTime] = React.useState<string>('12:00')
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
<div className="space-y-4 w-[200px]">
|
|
159
|
+
<div>
|
|
160
|
+
<p className="text-sm text-muted-foreground mb-1">Small</p>
|
|
161
|
+
<WakaTimePicker value={time} onChange={setTime} size="sm" />
|
|
162
|
+
</div>
|
|
163
|
+
<div>
|
|
164
|
+
<p className="text-sm text-muted-foreground mb-1">Medium</p>
|
|
165
|
+
<WakaTimePicker value={time} onChange={setTime} size="md" />
|
|
166
|
+
</div>
|
|
167
|
+
<div>
|
|
168
|
+
<p className="text-sm text-muted-foreground mb-1">Large</p>
|
|
169
|
+
<WakaTimePicker value={time} onChange={setTime} size="lg" />
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
)
|
|
173
|
+
},
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export const WithError: Story = {
|
|
177
|
+
render: () => (
|
|
178
|
+
<div className="w-[200px]">
|
|
179
|
+
<WakaTimePicker value="" error placeholder="Required" />
|
|
180
|
+
<p className="text-sm text-destructive mt-1">Please select a time</p>
|
|
181
|
+
</div>
|
|
182
|
+
),
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export const Disabled: Story = {
|
|
186
|
+
render: () => (
|
|
187
|
+
<div className="w-[200px]">
|
|
188
|
+
<WakaTimePicker value="10:30" disabled />
|
|
189
|
+
</div>
|
|
190
|
+
),
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export const MeetingScheduler: Story = {
|
|
194
|
+
render: function MeetingSchedulerDemo() {
|
|
195
|
+
const [startTime, setStartTime] = React.useState<string>('09:00')
|
|
196
|
+
const [endTime, setEndTime] = React.useState<string>('10:00')
|
|
197
|
+
|
|
198
|
+
return (
|
|
199
|
+
<div className="space-y-4 w-[300px] p-4 border rounded-lg">
|
|
200
|
+
<h3 className="font-semibold">Schedule Meeting</h3>
|
|
201
|
+
<div className="grid grid-cols-2 gap-4">
|
|
202
|
+
<div>
|
|
203
|
+
<p className="text-sm text-muted-foreground mb-1">Start</p>
|
|
204
|
+
<WakaTimePicker
|
|
205
|
+
value={startTime}
|
|
206
|
+
onChange={setStartTime}
|
|
207
|
+
minuteStep={15}
|
|
208
|
+
/>
|
|
209
|
+
</div>
|
|
210
|
+
<div>
|
|
211
|
+
<p className="text-sm text-muted-foreground mb-1">End</p>
|
|
212
|
+
<WakaTimePicker
|
|
213
|
+
value={endTime}
|
|
214
|
+
onChange={setEndTime}
|
|
215
|
+
minuteStep={15}
|
|
216
|
+
/>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
<p className="text-sm text-muted-foreground">
|
|
220
|
+
Duration: {startTime && endTime
|
|
221
|
+
? `${startTime} - ${endTime}`
|
|
222
|
+
: 'Select times'}
|
|
223
|
+
</p>
|
|
224
|
+
</div>
|
|
225
|
+
)
|
|
226
|
+
},
|
|
227
|
+
}
|