From 27d82253696af886e17a08381df0f0f1cdeac383 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 16 Jul 2026 07:50:47 -0500 Subject: [PATCH] feat: add Spinner, EmptyState, StatCard (v0.4.0) Harvested from delta. StatCard integrates AnimatedNumber + intent colors; EmptyState and Spinner generalize delta's local versions for reuse. --- DESIGN.md | 3 +- package.json | 4 +-- src/components/empty-state.tsx | 31 ++++++++++++++++++++ src/components/spinner.tsx | 21 ++++++++++++++ src/components/stat-card.tsx | 52 ++++++++++++++++++++++++++++++++++ src/index.ts | 3 ++ 6 files changed, 111 insertions(+), 3 deletions(-) create mode 100755 src/components/empty-state.tsx create mode 100755 src/components/spinner.tsx create mode 100755 src/components/stat-card.tsx diff --git a/DESIGN.md b/DESIGN.md index 63c828b..d7f96ac 100755 --- a/DESIGN.md +++ b/DESIGN.md @@ -40,7 +40,8 @@ Never Inter, Arial, or system defaults for headings (Impeccable anti-slop rule). 5. Don't nest cards inside cards. Don't put gray text on colored fills. ## Included -Primitives: Button, Card, Input, Badge, Dialog, DropdownMenu, Table, Toaster. +Primitives: Button, Card, Input, Select (themed Radix popover), Textarea, Label, +Badge, Dialog, DropdownMenu, Table, Toaster, Spinner, EmptyState, StatCard. Motion: FadeIn, Stagger/StaggerItem. Animated: AnimatedNumber, SpotlightCard. Blocks: AppShell, CommandPalette, Hero, FeatureGrid, Pricing. diff --git a/package.json b/package.json index b0c2e97..1a89d00 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@jason/ui-kit", - "version": "0.3.0", - "description": "Shared design foundation — branded tokens, Tailwind preset, shadcn-style components, motion, app shell + marketing blocks. Guarded by Impeccable.", + "version": "0.4.0", + "description": "Shared design foundation \u2014 branded tokens, Tailwind preset, shadcn-style components, motion, app shell + marketing blocks. Guarded by Impeccable.", "type": "module", "license": "MIT", "author": "Jason ", diff --git a/src/components/empty-state.tsx b/src/components/empty-state.tsx new file mode 100755 index 0000000..a572bfb --- /dev/null +++ b/src/components/empty-state.tsx @@ -0,0 +1,31 @@ +import * as React from "react"; +import { Inbox, type LucideIcon } from "lucide-react"; +import { cn } from "../lib/cn"; + +export interface EmptyStateProps { + icon?: LucideIcon; + title: string; + hint?: string; + /** Optional call-to-action (e.g. a