diff --git a/package.json b/package.json
index d5901a78d..6426a014a 100644
--- a/package.json
+++ b/package.json
@@ -110,6 +110,7 @@
"drizzle-orm": "^0.45.2",
"encoding-sniffer": "^0.2.1",
"esbuild-wasm": "0.27.4",
+ "figma-squircle": "^1.1.0",
"gifenc": "^1.0.3",
"gray-matter": "^4.0.3",
"iconv-lite": "^0.7.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 02d2eec6e..1ed76f9c5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -222,6 +222,9 @@ importers:
esbuild-wasm:
specifier: 0.27.4
version: 0.27.4
+ figma-squircle:
+ specifier: ^1.1.0
+ version: 1.1.0
gifenc:
specifier: ^1.0.3
version: 1.0.3
@@ -5045,6 +5048,9 @@ packages:
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+ figma-squircle@1.1.0:
+ resolution: {integrity: sha512-3aa6bOurrsybsuYo1TMRuasBpXgVjgnmOUtZ40il6e1dJF2lhTRq89z7oy1uzKDspbH3630rLZD2UvJqXDiktA==}
+
figures@6.1.0:
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
engines: {node: '>=18'}
@@ -11617,6 +11623,8 @@ snapshots:
fflate@0.8.2: {}
+ figma-squircle@1.1.0: {}
+
figures@6.1.0:
dependencies:
is-unicode-supported: 2.1.0
diff --git a/src/components/ApplicationStarter.tsx b/src/components/ApplicationStarter.tsx
index c4ec2c9b7..99bafd351 100644
--- a/src/components/ApplicationStarter.tsx
+++ b/src/components/ApplicationStarter.tsx
@@ -18,11 +18,7 @@ import type {
ApplicationStarterContext,
ApplicationStarterResult,
} from '~/utils/application-starter'
-import {
- Collapsible,
- CollapsibleContent,
- CollapsibleTrigger,
-} from '~/components/Collapsible'
+import { Panel, PanelContent, PanelTrigger } from '~/components/Panel'
import {
GeneratedPromptPreviewBody,
GeneratedPromptPreviewHeader,
@@ -868,8 +864,8 @@ export function ApplicationStarter({
) : null}
-
- Posts about {library.name}. -
+- {variant.detail} -
-…
-A suite of headless, type-safe libraries for building modern web applications — Query, Router, Table, Form, and more.
-
+ Tune each logo's scale with the workshop sliders above
+ until every logo in a tier reads at a consistent visual size against
+ a reference, then copy the values from the config output into{' '}
+ partners.tsx.
+
+ {text}
+
+ )
+}
diff --git a/src/routes/ds.tabs.tsx b/src/routes/ds.tabs.tsx
new file mode 100644
index 000000000..943be1208
--- /dev/null
+++ b/src/routes/ds.tabs.tsx
@@ -0,0 +1,249 @@
+import * as React from 'react'
+import { createFileRoute } from '@tanstack/react-router'
+import {
+ ListIcon,
+ SquaresFourIcon,
+ ColumnsIcon,
+ CaretDownIcon,
+ CheckIcon,
+} from '@phosphor-icons/react'
+import { seo } from '~/utils/seo'
+import {
+ Tabs,
+ TabsList,
+ TabsTrigger,
+ Dropdown,
+ DropdownContent,
+ DropdownItem,
+ DropdownTrigger,
+ type SegmentSize,
+} from '~/components/ds/ui'
+import { ComponentPreview, DsPage, DsSection } from '~/components/ds/DsKit'
+
+export const Route = createFileRoute('/ds/tabs')({
+ component: TabsPage,
+ head: () => ({
+ meta: seo({
+ title: 'Tabs | TanStack Design System',
+ description:
+ 'Two tab styles — prominent underline (primary) and compact segmented (secondary) — sharing one accessible API.',
+ }),
+ }),
+})
+
+function TabsMode({
+ children,
+ mode,
+}: {
+ children: React.ReactNode
+ mode: 'light' | 'dark'
+}) {
+ return (
+ +
Headless, type-safe, composable tools for building modern web applications that work naturally for developers and reliably for agents
-{a}
-{a}
-