veloria-ui 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +90 -145
  2. package/README.md +139 -15
  3. package/dist/cli/index.js +125 -35
  4. package/dist/index.d.mts +283 -60
  5. package/dist/index.d.ts +283 -60
  6. package/dist/index.js +2659 -1064
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +2647 -1064
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/provider.js +288 -209
  11. package/dist/provider.js.map +1 -1
  12. package/dist/provider.mjs +288 -209
  13. package/dist/provider.mjs.map +1 -1
  14. package/dist/tailwind.d.ts +7 -11
  15. package/dist/tailwind.js +9 -4
  16. package/package.json +141 -19
  17. package/src/cli/registry.ts +143 -101
  18. package/src/components/basic/Button.tsx +13 -7
  19. package/src/components/basic/IconButton.tsx +8 -1
  20. package/src/components/basic/index.tsx +120 -92
  21. package/src/components/data-display/AuroraCard.tsx +117 -0
  22. package/src/components/data-display/FileCard.tsx +231 -0
  23. package/src/components/data-display/GaugeChart.tsx +254 -0
  24. package/src/components/data-display/PricingCard.tsx +181 -0
  25. package/src/components/data-display/RadialProgressChart.tsx +175 -0
  26. package/src/components/data-display/SparklineChart.tsx +139 -0
  27. package/src/components/data-display/index.tsx +467 -470
  28. package/src/components/feedback/StepProgress.tsx +96 -0
  29. package/src/components/feedback/index.tsx +194 -144
  30. package/src/components/forms/AvatarUpload.tsx +251 -0
  31. package/src/components/forms/NumberInput.tsx +181 -0
  32. package/src/components/forms/index.tsx +293 -100
  33. package/src/components/utility/TypewriterText.tsx +121 -0
  34. package/src/components/utility/index.tsx +108 -95
  35. package/src/index.ts +36 -1
  36. package/src/styles/veloria.css +93 -82
  37. package/src/tailwind.ts +45 -23
package/CHANGELOG.md CHANGED
@@ -1,13 +1,97 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to Veloria UI are documented here.
3
+ All notable changes to Veloria UI are documented here.
4
4
  Project by [JohnDev19](https://github.com/JohnDev19) · [GitHub](https://github.com/JohnDev19/Veloria-UI) · [ui-veloria.vercel.app](https://ui-veloria.vercel.app/)
5
5
 
6
6
  This project follows [Semantic Versioning](https://semver.org).
7
7
 
8
8
  ---
9
9
 
10
- ## [0.1.3] — 2026-03-16 (Edited)
10
+ ## [0.1.4] — 2026-03-16
11
+
12
+ ### New Components (10)
13
+
14
+ **Charts**
15
+ - `SparklineChart` — zero-dependency SVG inline trend line with optional area fill, animated draw-on, and end-point dot. Designed to slot directly into `StatsCard` or any compact metric surface. No external chart library needed.
16
+ - `RadialProgressChart` — multi-segment animated SVG donut ring. Each arc is independently sized via `stroke-dasharray`, eased in on mount, with a customizable center label slot and an optional colour legend below.
17
+ - `GaugeChart` — half-circle SVG gauge with a `requestAnimationFrame`-driven animated needle, configurable colour zones (green → amber → red by default), per-zone stroke arcs, and rendered min/max/value labels. Fully controlled via `value`, `min`, `max`, and `zones` props.
18
+
19
+ **Modern & Unique**
20
+ - `AuroraCard` — dark-surface card with three aurora gradient blobs that track mouse position via `onMouseMove` offset math. Each blob moves at a different speed and direction, creating a parallax aurora effect. The content renders inside a relative `z-10` panel on top. Zero external dependencies — pure CSS transforms + inline style.
21
+ - `TypewriterText` — cycles through a `strings[]` array, typing each character-by-character then erasing, with configurable `speed`, `deleteSpeed`, `pause`, `cursor`, and `loop` props. Cursor blinks independently of the typing loop via a separate `setInterval`. Accessible with `aria-live="polite"`.
22
+
23
+ **Data Display**
24
+ - `FileCard` — file attachment surface with auto-derived type badge (colour-coded per extension), formatted file size, optional upload/download progress bar that turns green on completion, and download/remove action buttons. Two layout variants: `compact` (inline pill) and `full` (card with icon block).
25
+ - `PricingCard` — structured pricing tier with plan name, price + billing period, optional description, feature list with check/cross icons and optional notes, a CTA button that highlights when `popular` is set, and a "Most popular" ribbon badge. Supports `classic` bevel variant.
26
+
27
+ **Forms**
28
+ - `NumberInput` — stepper input flanked by − and + buttons. Clamps to `min`/`max`, steps by configurable `step` amount, increments on `ArrowUp`/`ArrowDown` keyboard events, and adjusts on mouse scroll when focused. Hides native browser spinners. Supports controlled and uncontrolled modes. Sizes `xs`–`lg`.
29
+ - `AvatarUpload` — avatar circle with a camera overlay that appears on hover, a hidden `<input type="file">` triggered on click or keyboard, instant `FileReader` base64 preview, max-size validation with an error message, and a "Remove photo" link. Sizes `sm`–`xl`. Fully accessible with `role="button"` and `aria-label`.
30
+
31
+ **Feedback**
32
+ - `StepProgress` — animated segmented progress bar. Each segment fills left-to-right with a staggered CSS `scaleX` transition (40ms per-segment delay). Props: `steps`, `current`, `color`, `animated`, `showLabel`, `size`. Renders a `role="progressbar"` with correct ARIA attributes.
33
+
34
+ **Utility**
35
+ - `TypewriterText` — see Modern & Unique above (also exported from `utility`).
36
+
37
+ ### Architecture
38
+
39
+ All 10 new components are **standalone files** — each lives in its own `.tsx` file alongside the relevant `index.tsx`. This means `index.tsx` re-exports them without duplicating implementation, tree-shaking works per-component, and diffs stay minimal when individual components change.
40
+
41
+ - `src/components/data-display/SparklineChart.tsx`
42
+ - `src/components/data-display/RadialProgressChart.tsx`
43
+ - `src/components/data-display/GaugeChart.tsx`
44
+ - `src/components/data-display/AuroraCard.tsx`
45
+ - `src/components/data-display/FileCard.tsx`
46
+ - `src/components/data-display/PricingCard.tsx`
47
+ - `src/components/forms/NumberInput.tsx`
48
+ - `src/components/forms/AvatarUpload.tsx`
49
+ - `src/components/feedback/StepProgress.tsx`
50
+ - `src/components/utility/TypewriterText.tsx`
51
+
52
+ ### CLI Registry
53
+
54
+ All 10 new components are registered in `src/cli/registry.ts` and are available via:
55
+
56
+ ```bash
57
+ npx veloria-ui add sparkline-chart
58
+ npx veloria-ui add radial-progress-chart
59
+ npx veloria-ui add gauge-chart
60
+ npx veloria-ui add aurora-card
61
+ npx veloria-ui add pricing-card
62
+ npx veloria-ui add file-card
63
+ npx veloria-ui add number-input
64
+ npx veloria-ui add avatar-upload
65
+ npx veloria-ui add step-progress
66
+ npx veloria-ui add typewriter-text
67
+ ```
68
+
69
+ ---
70
+
71
+ ## [0.1.3] — 2026-03-16
72
+
73
+ ### Classic Variant
74
+
75
+ Added `classic` variant across **Button**, **IconButton**, **Badge**, **Tag**, **Chip**, and **Card** components. The classic style uses beveled inset box-shadows to mimic the tactile feel of physical plastic or rubber:
76
+ - Top-left inset highlight (`rgba(255,255,255,0.72)` light mode, `rgba(255,255,255,0.10)` dark)
77
+ - Bottom-right inset shadow (`rgba(0,0,0,0.14)` light mode, `rgba(0,0,0,0.50)` dark)
78
+ - Active/pressed state inverts the bevel to simulate a physical click-down
79
+
80
+ New CSS utilities added to `veloria.css`:
81
+ - `.veloria-classic` — applies the raised bevel shadow
82
+ - `.veloria-classic-pressed` — applies the pressed/inverted bevel shadow
83
+ - CSS custom properties `--classic-highlight`, `--classic-shadow`, `--classic-bevel`, `--classic-bevel-pressed` — all responsive to dark mode
84
+
85
+ ### Select Dropdown Redesign
86
+
87
+ Replaced the system-native OS picker with a fully custom animated dropdown:
88
+ - Layered `box-shadow` (soft ambient + key shadow, separate dark mode values)
89
+ - Open animation: `fade-in-0` + `zoom-in-[0.97]` + directional slide from trigger
90
+ - Close animation: `fade-out-0` + `zoom-out-95` + reverse slide
91
+ - `SelectScrollUpButton` / `SelectScrollDownButton` — appear when list overflows, replacing the OS scrollbar
92
+ - Chevron icon rotates 180° when dropdown is open (CSS rule on `.atlas-select-trigger[data-state="open"] svg`)
93
+ - `SelectLabel` styled as uppercase tracking-widened group headers
94
+ - Max height capped to `min(available-height, 18rem)` to prevent off-screen overflow
11
95
 
12
96
  ### Branding & Naming
13
97
 
@@ -21,15 +105,16 @@ This project follows [Semantic Versioning](https://semver.org).
21
105
  - Renamed localStorage theme key from `atlas-theme` to `veloria-theme`
22
106
  - Removed legacy `atlas` bin alias from `package.json`
23
107
  - Updated all homepage and docs URLs to `https://ui-veloria.vercel.app/`
24
- - Removed hardcoded component count from descriptions and CLI copy
25
108
 
26
109
  ### Bug Fixes
27
110
 
28
111
  - Fixed `TypeError: Cannot read properties of null (reading 'matches')` — `window.matchMedia` now uses optional chaining (`?.`) in `useTheme` and an explicit null guard in `useMediaQuery`, preventing crashes in jsdom and certain SSR environments
112
+ - Fixed `TS2430` on `StatisticProps` — added `Omit<..., "prefix">` to resolve conflict with `HTMLAttributes.prefix`
113
+ - Fixed `TS2430` on `CalendarProps` — added `Omit<..., "onChange">` to resolve conflict with `HTMLAttributes.onChange`
29
114
 
30
115
  ---
31
116
 
32
- ## [0.1.2] — 2026-03-15 (UPDATED)
117
+ ## [0.1.2] — 2026-03-15
33
118
 
34
119
  ### New Components (20)
35
120
 
@@ -68,7 +153,7 @@ This project follows [Semantic Versioning](https://semver.org).
68
153
 
69
154
  ---
70
155
 
71
- ## [0.1.1] — 2026-03-13 (UPDATED)
156
+ ## [0.1.1] — 2026-03-13
72
157
 
73
158
  ### Build fixes
74
159
 
@@ -86,143 +171,3 @@ This project follows [Semantic Versioning](https://semver.org).
86
171
  ### Initial Release
87
172
 
88
173
  First public release of Veloria UI. A full CLI, hooks, a Tailwind plugin, and a complete CSS token system with light + dark mode.
89
-
90
- ---
91
-
92
- #### veloria-ui
93
-
94
- **Basic (10)**
95
- - `Button` — solid, outline, ghost, soft, link, danger variants · sizes xs–xl · loading state · left/right icon slots
96
- - `IconButton` — square or circular icon-only button with all button variants
97
- - `Link` — anchor with external link indicator and underline control
98
- - `Badge` — compact label with 5 color variants and optional dot
99
- - `Avatar` — image with fallback initials, online/offline status ring, 6 sizes
100
- - `AvatarGroup` — stacked avatar row with overflow count
101
- - `Divider` — horizontal/vertical with optional center label
102
- - `Tag` — closable colored tag with icon slot
103
- - `Chip` — toggleable with avatar/icon support and remove button
104
- - `Tooltip` — Radix-powered, all four sides, configurable delay
105
-
106
- **Layout (10)**
107
- - `Container` — responsive max-width wrapper with padding control
108
- - `Stack` — flex column/row with gap, align, justify, and divider support
109
- - `Grid` — CSS Grid with column/row/gap config
110
- - `Flex` — inline flex with full directional control
111
- - `Section` — semantic `<section>` with vertical padding presets
112
- - `Spacer` — invisible spacer
113
- - `AspectRatio` — Radix aspect-ratio wrapper
114
- - `Center` — flex centering helper
115
- - `ScrollArea` — custom scrollbar via Radix ScrollArea
116
- - `Masonry` — CSS multi-column masonry grid
117
-
118
- **Navigation (10)**
119
- - `Navbar` — sticky + glass-blur top bar
120
- - `Sidebar` — collapsible with width transition
121
- - `Menu` / `MenuItem` — vertical nav with active/disabled states
122
- - `DropdownMenu` — full Radix Dropdown with all sub-primitives
123
- - `Breadcrumb` — accessible trail with custom separator
124
- - `Pagination` — page numbers, ellipsis, prev/next
125
- - `Tabs` — line, pills, enclosed variants · Radix powered
126
- - `Stepper` — horizontal/vertical multi-step progress indicator
127
- - `CommandDialog` — ⌘K command palette via cmdk
128
-
129
- **Forms (10)**
130
- - `Input` — left/right icon slots, sizes, error state
131
- - `TextArea` — resize control, error state
132
- - `Select` — full Radix Select with all sub-primitives
133
- - `Checkbox` — with label, description, error state
134
- - `RadioGroup` — per-option labels and descriptions
135
- - `Switch` — three sizes, label, description
136
- - `Slider` — range slider
137
- - `RangeSlider` — dual-thumb slider
138
- - `DatePicker` — calendar popover with keyboard navigation
139
- - `TimePicker` — hour/minute/second with AM/PM toggle
140
-
141
- **Advanced Forms (10)**
142
- - `FileUpload` — drag-and-drop with preview, size limit, MIME type filter
143
- - `OTPInput` — SMS-style one-time-password input
144
- - `ColorPicker` — HEX/RGB/HSL input with swatch palette
145
- - `SearchInput` — debounced search with clear button
146
- - `PasswordInput` — toggle visibility with strength meter
147
- - `Combobox` — searchable dropdown with keyboard navigation
148
- - `MultiSelect` — tag-style multi-value select
149
- - `FormField` — label + input + error wrapper
150
- - `FormLabel` — accessible label
151
- - `FormError` — error message slot
152
-
153
- **Data Display (10)**
154
- - `Card` / `CardHeader` / `CardContent` / `CardFooter`
155
- - `Table` — sortable columns, sticky header
156
- - `DataTable` — full-featured table with pagination and row selection
157
- - `List` / `ListItem`
158
- - `Statistic` — large number with label and trend
159
- - `Timeline` — vertical event list
160
- - `Calendar` — month grid with event dots
161
- - `Chart` — wrapper around Recharts with theme tokens
162
- - `CodeBlock` — syntax-highlighted code with copy button
163
-
164
- **Feedback (10)**
165
- - `Alert` — inline alert with 5 variants and icon slot
166
- - `Toast` — Radix Toast with 5 variants · programmatic via `useToast`
167
- - `Snackbar` — bottom-anchored status message
168
- - `Progress` — linear with animated fill
169
- - `CircularProgress` — SVG ring with percentage label
170
- - `Skeleton` — text, rect, circle variants
171
- - `LoadingSpinner` — 4 sizes · 3 variants
172
- - `EmptyState` — icon + title + description + action slot
173
- - `StatusIndicator` — colored dot with pulse animation
174
- - `Notification` — card-style notification with timestamp
175
-
176
- **Overlay (10)**
177
- - `Modal` — centered dialog with close button
178
- - `Dialog` — full Radix Dialog with all sub-primitives
179
- - `Drawer` — side-sheet with 4 sides
180
- - `Sheet` — lightweight Drawer alias
181
- - `Popover` — Radix Popover
182
- - `HoverCard` — hover-triggered card
183
- - `ContextMenu` — right-click menu via Radix
184
- - `CommandDialog` — ⌘K palette
185
- - `Lightbox` — full-screen image viewer with zoom
186
- - `ImageViewer` — in-place image pan and zoom
187
-
188
- **Media (5)**
189
- - `Image` — next/image wrapper with blur placeholder and fallback
190
- - `VideoPlayer` — custom controls, poster, autoplay, loop, track support
191
- - `AudioPlayer` — custom UI with seek bar, cover art
192
- - `Carousel` — autoplay, dots, arrows, loop, slidesPerView
193
- - `Gallery` — responsive image grid with click handler
194
-
195
- **Utility (5)**
196
- - `ThemeSwitcher` — icon / toggle / select variants
197
- - `CopyButton` — icon or labelled button with success feedback
198
- - `KeyboardShortcut` — styled `<kbd>` shortcut display
199
- - `ResizablePanel` — drag-to-resize with min/max constraints
200
- - `DragDropArea` — accessible file drop zone
201
-
202
- #### Hooks
203
- - `useDisclosure` — open/close state management
204
- - `useMediaQuery` — window media query subscription
205
- - `useBreakpoint` — Tailwind breakpoint helper
206
- - `useClipboard` — clipboard copy with timeout feedback
207
- - `useLocalStorage` — persistent state
208
- - `useTheme` — theme switching (persists to localStorage)
209
- - `useDebounce` — debounced value
210
- - `useOnClickOutside` — outside click detection
211
- - `useKeydown` — keyboard shortcut listener with modifier support
212
- - `useMounted` — SSR-safe mount check
213
- - `useToast` — programmatic toast notifications
214
-
215
- #### Infrastructure
216
- - Tailwind CSS plugin + preset (`veloriaPlugin`, `veloriaPreset`)
217
- - Full CSS design token system — light and dark themes
218
- - `VeloriaProvider` for Next.js App Router
219
- - TypeScript strict throughout — full named type exports
220
- - Tree-shakeable ESM + CJS dual build via tsup
221
- - Turbo monorepo setup
222
-
223
- #### veloria-ui CLI
224
- - `init` — project setup wizard (detects Next.js, writes veloria.config.json)
225
- - `add` — copies components + installs npm deps, resolves Veloria UI peer deps
226
- - `list` — browse all components filtered by category
227
- - `diff` — compare local copy to latest (registry fetch, coming soon)
228
- - Auto-detects npm / pnpm / yarn / bun
package/README.md CHANGED
@@ -122,23 +122,27 @@ After running `add`, a file like `components/ui/button/index.tsx` appears in you
122
122
  ### Basic (10)
123
123
  `Button` `IconButton` `Link` `Badge` `Avatar` `AvatarGroup` `Divider` `Tag` `Chip` `Tooltip`
124
124
 
125
+ > All interactive components now support a `classic` variant — beveled edges that mimic physical plastic or rubber with a tactile press effect.
126
+
125
127
  ### Layout (10)
126
128
  `Container` `Stack` `Grid` `Flex` `Section` `Spacer` `AspectRatio` `Center` `ScrollArea` `Masonry`
127
129
 
128
130
  ### Navigation (10)
129
131
  `Navbar` `Sidebar` `Menu` `DropdownMenu` `Breadcrumb` `Pagination` `Tabs` `CommandPalette` `NavigationMenu` `Stepper`
130
132
 
131
- ### Forms (10)
132
- `Input` `TextArea` `Select` `Checkbox` `RadioGroup` `Switch` `Slider` `RangeSlider` `DatePicker` `TimePicker`
133
+ ### Forms (12)
134
+ `Input` `TextArea` `Select` `Checkbox` `RadioGroup` `Switch` `Slider` `RangeSlider` `DatePicker` `TimePicker` `NumberInput` `AvatarUpload`
135
+
136
+ > `Select` now uses a fully custom animated dropdown — no OS picker. Includes scroll buttons, chevron animation, and directional slide-in/out transitions.
133
137
 
134
- ### Advanced Forms (10)
135
- `FileUpload` `OTPInput` `ColorPicker` `SearchInput` `PasswordInput` `Combobox` `MultiSelect` `FormField` `FormLabel` `FormError`
138
+ ### Advanced Forms (14)
139
+ `FileUpload` `OTPInput` `ColorPicker` `SearchInput` `PasswordInput` `Combobox` `MultiSelect` `FormField` `FormLabel` `FormError` `PhoneInput` `TagInput` `CurrencyInput` `RatingInput`
136
140
 
137
- ### Data Display (10)
138
- `Card` `Table` `DataTable` `List` `ListItem` `Statistic` `Timeline` `Calendar` `Chart` `CodeBlock`
141
+ ### Data Display (19)
142
+ `Card` `Table` `DataTable` `List` `ListItem` `Statistic` `Timeline` `Calendar` `Chart` `CodeBlock` `StatsCard` `TreeView` `JsonViewer` `Heatmap` `KanbanBoard` `SparklineChart` `RadialProgressChart` `GaugeChart` `AuroraCard` `FileCard` `PricingCard`
139
143
 
140
- ### Feedback (10)
141
- `Alert` `Toast` `Snackbar` `Progress` `CircularProgress` `Skeleton` `LoadingSpinner` `EmptyState` `StatusIndicator` `Notification`
144
+ ### Feedback (15)
145
+ `Alert` `Toast` `Snackbar` `Progress` `CircularProgress` `Skeleton` `LoadingSpinner` `EmptyState` `StatusIndicator` `Notification` `BannerAlert` `ConfirmDialog` `FloatingActionButton` `RichTooltip` `Tour` `StepProgress`
142
146
 
143
147
  ### Overlay (10)
144
148
  `Modal` `Dialog` `Drawer` `Popover` `HoverCard` `ContextMenu` `CommandDialog` `Sheet` `Lightbox` `ImageViewer`
@@ -146,8 +150,121 @@ After running `add`, a file like `components/ui/button/index.tsx` appears in you
146
150
  ### Media (5)
147
151
  `Image` `VideoPlayer` `AudioPlayer` `Carousel` `Gallery`
148
152
 
149
- ### Utility (5)
150
- `ThemeSwitcher` `CopyButton` `KeyboardShortcut` `ResizablePanel` `DragDropArea`
153
+ ### Utility (8)
154
+ `ThemeSwitcher` `CopyButton` `KeyboardShortcut` `ResizablePanel` `DragDropArea` `InfiniteScroll` `VirtualList` `TypewriterText`
155
+
156
+ ---
157
+
158
+ ## New in v0.1.4
159
+
160
+ ### Charts
161
+
162
+ ```tsx
163
+ import { SparklineChart, RadialProgressChart, GaugeChart } from "veloria-ui";
164
+
165
+ // Inline trend line — slots into any stat card
166
+ <SparklineChart data={[12, 18, 14, 22, 19, 28, 31]} color="hsl(var(--primary))" />
167
+
168
+ // Animated multi-segment ring
169
+ <RadialProgressChart
170
+ segments={[
171
+ { value: 65, label: "Series A", color: "#7F77DD" },
172
+ { value: 25, label: "Series B", color: "#1D9E75" },
173
+ { value: 10, label: "Series C", color: "#EF9F27" },
174
+ ]}
175
+ size={140}
176
+ centerLabel={<span className="text-lg font-bold">90%</span>}
177
+ />
178
+
179
+ // Gauge with animated needle
180
+ <GaugeChart value={72} label="CPU usage" size={200} />
181
+ ```
182
+
183
+ ### Modern & Unique
184
+
185
+ ```tsx
186
+ import { AuroraCard, TypewriterText } from "veloria-ui";
187
+
188
+ // Dark card with mouse-reactive aurora blobs
189
+ <AuroraCard className="p-8 text-white">
190
+ <h2 className="text-2xl font-bold">Ship faster</h2>
191
+ <p className="mt-2 text-white/70">Aurora reacts to your cursor.</p>
192
+ </AuroraCard>
193
+
194
+ // Typewriter cycling through strings
195
+ <TypewriterText
196
+ strings={["Build anything.", "Ship faster.", "Dark mode ready."]}
197
+ speed={80}
198
+ pause={2000}
199
+ />
200
+ ```
201
+
202
+ ### New Form Components
203
+
204
+ ```tsx
205
+ import { NumberInput, AvatarUpload } from "veloria-ui";
206
+
207
+ <NumberInput value={qty} onChange={setQty} min={1} max={99} step={1} size="md" />
208
+
209
+ <AvatarUpload
210
+ value={avatarUrl}
211
+ onChange={(file, preview) => upload(file)}
212
+ onRemove={() => setAvatarUrl(undefined)}
213
+ maxSize={2 * 1024 * 1024}
214
+ fallback="JD"
215
+ size="lg"
216
+ />
217
+ ```
218
+
219
+ ### StepProgress
220
+
221
+ ```tsx
222
+ import { StepProgress } from "veloria-ui";
223
+
224
+ <StepProgress steps={4} current={2} showLabel size="md" />
225
+ // → Step 2 of 4 · 50%
226
+ ```
227
+
228
+ ### PricingCard & FileCard
229
+
230
+ ```tsx
231
+ import { PricingCard, FileCard } from "veloria-ui";
232
+
233
+ <PricingCard
234
+ name="Pro"
235
+ price={29}
236
+ period="/month"
237
+ description="For teams that ship fast."
238
+ popular
239
+ features={[
240
+ { label: "Unlimited projects", included: true },
241
+ { label: "Priority support", included: true },
242
+ { label: "Custom domain", included: false },
243
+ ]}
244
+ onCtaClick={() => checkout("pro")}
245
+ />
246
+
247
+ <FileCard
248
+ filename="Q4_report_final.pdf"
249
+ size={2.4 * 1024 * 1024}
250
+ progress={100}
251
+ onDownload={() => download()}
252
+ onRemove={() => remove()}
253
+ />
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Classic variant
259
+
260
+ All interactive components now accept `variant="classic"` — a beveled style that mimics physical plastic or rubber:
261
+
262
+ ```tsx
263
+ <Button variant="classic">Classic button</Button>
264
+ <Badge variant="classic" color="success">New</Badge>
265
+ <Card variant="classic" interactive>Classic card</Card>
266
+ <Chip classic>Filter</Chip>
267
+ ```
151
268
 
152
269
  ---
153
270
 
@@ -166,6 +283,12 @@ import {
166
283
  useKeydown, // keyboard shortcut listener with modifier support
167
284
  useMounted, // SSR-safe mount check
168
285
  useToast, // fire toasts programmatically
286
+ useForm, // form state + validation, no dependencies
287
+ usePagination, // pagination logic decoupled from UI
288
+ useIntersection, // IntersectionObserver wrapper
289
+ useWindowSize, // reactive viewport dimensions, SSR-safe
290
+ useStep, // multi-step wizard state
291
+ useCountdown, // countdown timer with start/pause/reset
169
292
  } from "veloria-ui";
170
293
  ```
171
294
 
@@ -214,13 +337,14 @@ veloria-ui/
214
337
  │ │ ├── basic/ Button, IconButton, Badge, Avatar, Tooltip…
215
338
  │ │ ├── layout/ Container, Stack, Grid, ScrollArea, Masonry…
216
339
  │ │ ├── navigation/ Navbar, Tabs, DropdownMenu, Stepper…
217
- │ │ ├── forms/ Input, Select, Checkbox, Slider, Switch
340
+ │ │ ├── forms/ Input, Select, Checkbox, Slider, NumberInput, AvatarUpload
218
341
  │ │ ├── advanced-forms/ OTPInput, ColorPicker, Combobox, MultiSelect…
219
- │ │ ├── data-display/ Card, DataTable, Timeline, Calendar, CodeBlock…
220
- │ │ ├── feedback/ Alert, Toast, Skeleton, EmptyState, Progress
342
+ │ │ ├── data-display/ Card, DataTable, SparklineChart, RadialProgressChart,
343
+ │ │ │ GaugeChart, AuroraCard, PricingCard, FileCard
344
+ │ │ ├── feedback/ Alert, Toast, Skeleton, StepProgress, EmptyState…
221
345
  │ │ ├── overlay/ Modal, Drawer, CommandDialog, Lightbox…
222
346
  │ │ ├── media/ VideoPlayer, AudioPlayer, Carousel, Gallery…
223
- │ │ └── utility/ ThemeSwitcher, CopyButton, ResizablePanel
347
+ │ │ └── utility/ ThemeSwitcher, CopyButton, TypewriterText
224
348
  │ ├── hooks/ utility hooks
225
349
  │ ├── styles/ veloria.css — full design token system
226
350
  │ ├── types/ shared TypeScript types
@@ -250,4 +374,4 @@ MIT © [JohnDev19](https://github.com/JohnDev19)
250
374
 
251
375
  <div align="center">
252
376
  <sub>Built by JohnDev19</sub>
253
- </div>
377
+ </div>