@xenide-io/the-old-ui-theme 0.4.4 → 0.4.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.
Files changed (76) hide show
  1. package/dist/{chunk-54ZR4VL5.mjs → chunk-RZXHZWUB.mjs} +44 -17
  2. package/dist/{index-B5NOyoKS.d.mts → index-Od4pIP4F.d.mts} +7 -1
  3. package/dist/{index-B5NOyoKS.d.ts → index-Od4pIP4F.d.ts} +7 -1
  4. package/dist/index.d.mts +2 -2
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +37 -10
  7. package/dist/index.mjs +1 -1
  8. package/dist/suite.d.mts +152 -41
  9. package/dist/suite.d.ts +152 -41
  10. package/dist/suite.js +1366 -671
  11. package/dist/suite.mjs +1304 -610
  12. package/dist/ui.d.mts +1 -1
  13. package/dist/ui.d.ts +1 -1
  14. package/dist/ui.js +37 -10
  15. package/dist/ui.mjs +1 -1
  16. package/package.json +7 -3
  17. package/src/components/ui/Modal.tsx +70 -26
  18. package/src/styles/suite-skin.css +284 -24
  19. package/src/suite/components/ai-panel.test.ts +20 -0
  20. package/src/suite/components/ai-panel.tsx +494 -103
  21. package/src/suite/components/suite-app-layout.tsx +48 -28
  22. package/src/suite/components/suite-layout.tsx +84 -40
  23. package/src/suite/components/suite-mobile-drawer.tsx +35 -22
  24. package/src/suite/components/suite-notification-bell.tsx +9 -3
  25. package/src/suite/components/suite-settings-layout.tsx +82 -0
  26. package/src/suite/components/suite-settings-mobile-nav.tsx +18 -17
  27. package/src/suite/components/suite-skeleton.tsx +3 -3
  28. package/src/suite/components/today-calibrating.tsx +11 -35
  29. package/src/suite/components/today-page-frame.tsx +19 -11
  30. package/src/suite/components/today-ui.tsx +276 -19
  31. package/src/suite/index.ts +41 -25
  32. package/src/suite/lib/apps.ts +32 -2
  33. package/src/suite/lib/use-sidebar-width.ts +114 -0
  34. package/src/components/sections/AccordionShowcase.tsx +0 -45
  35. package/src/components/sections/AlertShowcase.tsx +0 -40
  36. package/src/components/sections/AvatarShowcase.tsx +0 -80
  37. package/src/components/sections/BadgeShowcase.tsx +0 -65
  38. package/src/components/sections/ButtonShowcase.tsx +0 -308
  39. package/src/components/sections/CalendarShowcase.tsx +0 -35
  40. package/src/components/sections/CardShowcase.tsx +0 -159
  41. package/src/components/sections/CodeMockupShowcase.tsx +0 -56
  42. package/src/components/sections/ColorPalette.tsx +0 -117
  43. package/src/components/sections/CommandPaletteShowcase.tsx +0 -48
  44. package/src/components/sections/CountdownShowcase.tsx +0 -43
  45. package/src/components/sections/DiffShowcase.tsx +0 -70
  46. package/src/components/sections/DrawerShowcase.tsx +0 -97
  47. package/src/components/sections/DropdownShowcase.tsx +0 -98
  48. package/src/components/sections/EmptyStateShowcase.tsx +0 -50
  49. package/src/components/sections/FilterChipsShowcase.tsx +0 -98
  50. package/src/components/sections/FormShowcase.tsx +0 -127
  51. package/src/components/sections/HoverCardShowcase.tsx +0 -50
  52. package/src/components/sections/IconShowcase.tsx +0 -121
  53. package/src/components/sections/IndicatorShowcase.tsx +0 -52
  54. package/src/components/sections/KbdShowcase.tsx +0 -57
  55. package/src/components/sections/ModalShowcase.tsx +0 -211
  56. package/src/components/sections/NavigationShowcase.tsx +0 -199
  57. package/src/components/sections/NewComponentsShowcase.tsx +0 -1052
  58. package/src/components/sections/ProductLayoutsShowcase.tsx +0 -78
  59. package/src/components/sections/ProgressShowcase.tsx +0 -82
  60. package/src/components/sections/QuillChartShowcase.tsx +0 -92
  61. package/src/components/sections/QuillDashboardShowcase.tsx +0 -149
  62. package/src/components/sections/SegmentedControlShowcase.tsx +0 -49
  63. package/src/components/sections/SetupThemeShowcase.tsx +0 -262
  64. package/src/components/sections/SidebarShowcase.tsx +0 -152
  65. package/src/components/sections/StackShowcase.tsx +0 -33
  66. package/src/components/sections/StepperShowcase.tsx +0 -37
  67. package/src/components/sections/SuiteShowcase.tsx +0 -669
  68. package/src/components/sections/SwapShowcase.tsx +0 -99
  69. package/src/components/sections/TabShowcase.tsx +0 -84
  70. package/src/components/sections/TableShowcase.tsx +0 -142
  71. package/src/components/sections/TimelineShowcase.tsx +0 -83
  72. package/src/components/sections/ToastShowcase.tsx +0 -108
  73. package/src/components/sections/TooltipShowcase.tsx +0 -38
  74. package/src/components/sections/UtilityShowcase.tsx +0 -81
  75. package/src/styles/excel-themes.css +0 -110
  76. package/src/styles/lemon-primitives.css +0 -550
@@ -1,262 +0,0 @@
1
- "use client";
2
-
3
- import { useEffect, useMemo, useState } from "react";
4
- import { CodeBlock, H3, P, Panel, ThemeSwitcher } from "@/components/ui";
5
- import { THEMES } from "@/themes";
6
-
7
- const themePairs = [
8
- { name: "HedgeHog", light: "hedgehog-light", dark: "hedgehog-dark" },
9
- { name: "Sheets", light: "sheets", dark: "sheets-dark" },
10
- { name: "Note", light: "note", dark: "note-dark" },
11
- { name: "Presentation", light: "presentation", dark: "presentation-dark" },
12
- { name: "Socials", light: "socials", dark: "socials-dark" },
13
- { name: "Chats", light: "chats-light", dark: "chats-dark" },
14
- { name: "Catppuccin", light: "catppuccin-light", dark: "catppuccin-dark" },
15
- { name: "Xenide", light: "xenide-light", dark: "xenide-dark" },
16
- { name: "GitHub", light: "github-light", dark: "github-dark" },
17
- { name: "Rose Pine", light: "rosepine-light", dark: "rosepine-dark" },
18
- { name: "TurtleTime", light: "turtletime", dark: "turtletime-dark" },
19
- { name: "Bikini Bottom", light: "bikini-bottom", dark: "bikini-bottom-dark" },
20
- { name: "Notion", light: "notion", dark: "notion-dark" },
21
- ] as const;
22
-
23
- const guideTokens = [
24
- { label: "canvas", token: "--ph-canvas", text: "text-ph-ink" },
25
- { label: "surface", token: "--ph-surface", text: "text-ph-ink" },
26
- { label: "muted", token: "--ph-muted", text: "text-ph-ink" },
27
- { label: "toolbar", token: "--ph-toolbar", text: "text-ph-ink" },
28
- { label: "border", token: "--ph-border", text: "text-ph-ink" },
29
- { label: "accent", token: "--ph-accent", text: "text-white" },
30
- { label: "blue", token: "--ph-blue", text: "text-white" },
31
- { label: "purple", token: "--ph-purple", text: "text-white" },
32
- { label: "success", token: "--ph-success", text: "text-white" },
33
- { label: "warning", token: "--ph-warning", text: "text-white" },
34
- { label: "danger", token: "--ph-danger", text: "text-white" },
35
- { label: "info", token: "--ph-info", text: "text-white" },
36
- ] as const;
37
-
38
- const dataTokens = [1, 2, 3, 4, 5, 6, 7].map((item) => ({
39
- label: `data ${item}`,
40
- token: `--ph-data-${item}`,
41
- text: "text-white",
42
- }));
43
-
44
- const installCode = `bun add the-old-ui
45
- # or
46
- npm install the-old-ui`;
47
-
48
- const layoutCode = `// app/layout.tsx
49
- import "the-old-ui/styles.css";
50
- import { THEME_INIT_SCRIPT, ThemeManager } from "the-old-ui";
51
-
52
- export default function RootLayout({ children }: { children: React.ReactNode }) {
53
- return (
54
- <html lang="en" data-theme="hedgehog-light" suppressHydrationWarning>
55
- <head>
56
- <script dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }} />
57
- </head>
58
- <body>
59
- <ThemeManager>{children}</ThemeManager>
60
- </body>
61
- </html>
62
- );
63
- }`;
64
-
65
- const tailwindCode = `// tailwind.config.ts
66
- import theOldUiPreset from "the-old-ui/tailwind-preset";
67
-
68
- export default {
69
- presets: [theOldUiPreset],
70
- content: [
71
- "./src/**/*.{ts,tsx}",
72
- "./app/**/*.{ts,tsx}",
73
- "./node_modules/the-old-ui/dist/**/*.{js,mjs}",
74
- ],
75
- };`;
76
-
77
- const switchCode = `import { ThemeSwitcher, persistTheme } from "the-old-ui";
78
-
79
- <ThemeSwitcher />
80
-
81
- // Or switch manually
82
- persistTheme("sheets-dark");`;
83
-
84
- const customThemeCode = `/* app/globals.css */
85
- @import "the-old-ui/styles.css";
86
-
87
- [data-theme="my-theme-light"] {
88
- color-scheme: light;
89
-
90
- --ph-canvas: #f8f5ef;
91
- --ph-surface: #ffffff;
92
- --ph-muted: #eee8dd;
93
- --ph-toolbar: #e5dccd;
94
- --ph-border: #d7cbb8;
95
- --ph-border-strong: #a99b87;
96
-
97
- --ph-text-primary: #15110c;
98
- --ph-text-secondary: #4d4337;
99
- --ph-text-tertiary: #796f63;
100
-
101
- --ph-accent: #f97316;
102
- --ph-accent-hover: #ea580c;
103
- --ph-blue: #2563eb;
104
- --ph-purple: #7c3aed;
105
- --ph-success: #15803d;
106
- --ph-warning: #b45309;
107
- --ph-danger: #dc2626;
108
- --ph-info: #2563eb;
109
- }
110
-
111
- [data-theme="my-theme-dark"] {
112
- color-scheme: dark;
113
-
114
- --ph-canvas: #11100e;
115
- --ph-surface: #191713;
116
- --ph-muted: #242018;
117
- --ph-toolbar: #2e281f;
118
- --ph-border: #443a2b;
119
- --ph-border-strong: #7a6a54;
120
-
121
- --ph-text-primary: #fff7ed;
122
- --ph-text-secondary: #d8c8b6;
123
- --ph-text-tertiary: #a89985;
124
-
125
- --ph-accent: #fb923c;
126
- --ph-accent-hover: #fdba74;
127
- --ph-blue: #60a5fa;
128
- --ph-purple: #a78bfa;
129
- --ph-success: #4ade80;
130
- --ph-warning: #facc15;
131
- --ph-danger: #f87171;
132
- --ph-info: #60a5fa;
133
- }`;
134
-
135
- const registryCode = `// Add to src/themes/registry.ts if this repo should show it in ThemeSwitcher
136
- {
137
- id: "my-theme-light",
138
- name: "My Theme Light",
139
- description: "Custom light palette.",
140
- colorScheme: "light",
141
- group: "Custom",
142
- },
143
- {
144
- id: "my-theme-dark",
145
- name: "My Theme Dark",
146
- description: "Custom dark palette.",
147
- colorScheme: "dark",
148
- group: "Custom",
149
- }`;
150
-
151
- export default function SetupThemeShowcase() {
152
- const [activeTheme, setActiveTheme] = useState("hedgehog-light");
153
-
154
- useEffect(() => {
155
- const root = document.documentElement;
156
- const update = () => setActiveTheme(root.getAttribute("data-theme") || "hedgehog-light");
157
- update();
158
-
159
- const observer = new MutationObserver(update);
160
- observer.observe(root, { attributes: true, attributeFilter: ["data-theme"] });
161
- return () => observer.disconnect();
162
- }, []);
163
-
164
- const activeThemeCode = useMemo(() => {
165
- const theme = THEMES.find((item) => item.id === activeTheme);
166
- return `// Current selected theme in this demo\n${JSON.stringify({
167
- id: activeTheme,
168
- name: theme?.name ?? activeTheme,
169
- colorScheme: theme?.colorScheme ?? "light",
170
- group: theme?.group ?? "Custom",
171
- }, null, 2)}`;
172
- }, [activeTheme]);
173
-
174
- const themeListCode = useMemo(() => {
175
- return `export const themePairs = ${JSON.stringify(themePairs, null, 2)} as const;`;
176
- }, []);
177
-
178
- return (
179
- <div className="space-y-8">
180
- <Panel className="space-y-4">
181
- <H3>Setup</H3>
182
- <P tone="subtle">
183
- This demo is also the docs. A consuming app imports the package CSS once, adds the Tailwind preset, then switches palettes through <code className="ph-kbd">html[data-theme]</code>.
184
- </P>
185
- <div className="grid gap-4 lg:grid-cols-2">
186
- <CodeBlock code={installCode} filename="install.sh" language="bash" />
187
- <CodeBlock code={tailwindCode} filename="tailwind.config.ts" />
188
- </div>
189
- <CodeBlock code={layoutCode} filename="app/layout.tsx" />
190
- </Panel>
191
-
192
- <Panel className="space-y-4">
193
- <div className="flex flex-wrap items-center justify-between gap-4">
194
- <div>
195
- <H3>Theme Switching</H3>
196
- <P tone="subtle">Each default palette is a light/dark pair. Pick one below and copy the active theme ID.</P>
197
- </div>
198
- <ThemeSwitcher />
199
- </div>
200
- <div className="grid gap-4 lg:grid-cols-2">
201
- <CodeBlock code={activeThemeCode} filename="current-theme.ts" />
202
- <CodeBlock code={switchCode} filename="ThemeSwitch.tsx" />
203
- </div>
204
- </Panel>
205
-
206
- <Panel className="space-y-4">
207
- <H3>Default Theme Pairs</H3>
208
- <P tone="subtle">Use these IDs with <code className="ph-kbd">data-theme</code> or <code className="ph-kbd">persistTheme()</code>.</P>
209
- <CodeBlock code={themeListCode} filename="theme-pairs.ts" />
210
- </Panel>
211
-
212
- <Panel className="space-y-5">
213
- <div>
214
- <H3>Theme Color Guide</H3>
215
- <P tone="subtle">
216
- Every built-in theme is rendered below with its own <code className="ph-kbd">data-theme</code> attribute. These swatches are the guide for what each token becomes in that theme.
217
- </P>
218
- </div>
219
- <div className="grid gap-4 lg:grid-cols-2">
220
- {THEMES.map((theme) => (
221
- <div
222
- key={theme.id}
223
- data-theme={theme.id}
224
- className="rounded-xl border border-ph-border bg-ph-canvas p-4 shadow-ph"
225
- >
226
- <div className="mb-3 flex items-baseline justify-between gap-3">
227
- <div>
228
- <h4 className="font-semibold text-ph-ink">{theme.name}</h4>
229
- <p className="text-xs text-ph-mutedtext">{theme.id}</p>
230
- </div>
231
- <span className="rounded-full border border-ph-border bg-ph-surface px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-ph-mutedtext">
232
- {theme.colorScheme}
233
- </span>
234
- </div>
235
- <div className="grid grid-cols-3 gap-2 sm:grid-cols-4">
236
- {[...guideTokens, ...dataTokens].map((item) => (
237
- <div
238
- key={item.token}
239
- className={`rounded-lg border border-ph-border p-2 ${item.text}`}
240
- style={{ background: `var(${item.token})` }}
241
- >
242
- <div className="text-[10px] font-bold uppercase tracking-wide">{item.label}</div>
243
- <div className="mt-1 truncate font-mono text-[9px] opacity-80">{item.token}</div>
244
- </div>
245
- ))}
246
- </div>
247
- </div>
248
- ))}
249
- </div>
250
- </Panel>
251
-
252
- <Panel className="space-y-4">
253
- <H3>Custom Light & Dark Theme</H3>
254
- <P tone="subtle">Custom themes are DaisyUI-style: define one light token block and one dark token block. Components read semantic tokens, not hardcoded colours.</P>
255
- <div className="grid gap-4 lg:grid-cols-2">
256
- <CodeBlock code={customThemeCode} filename="custom-theme.css" language="css" />
257
- <CodeBlock code={registryCode} filename="registry.ts" />
258
- </div>
259
- </Panel>
260
- </div>
261
- );
262
- }
@@ -1,152 +0,0 @@
1
- "use client";
2
-
3
- import { useState } from "react";
4
- import { AppLayout, Sidebar, ShowcaseWrapper, Badge, Button } from "@/components/ui";
5
- import { Home, Bell, TriangleFlag, User, Search, Flash } from "iconoir-react";
6
-
7
- const sampleGroups = [
8
- {
9
- label: "Main",
10
- items: [
11
- { label: "Home", icon: <Home className="h-4 w-4" />, active: true },
12
- { label: "Activity", icon: <Bell className="h-4 w-4" />, badge: <Badge variant="danger" size="sm">3</Badge> },
13
- { label: "Explore", icon: <Search className="h-4 w-4" /> },
14
- ],
15
- },
16
- {
17
- label: "Workspace",
18
- items: [
19
- { label: "Projects", icon: <TriangleFlag className="h-4 w-4" /> },
20
- { label: "People", icon: <User className="h-4 w-4" /> },
21
- { label: "Automations", icon: <Flash className="h-4 w-4" /> },
22
- ],
23
- },
24
- ];
25
-
26
- export default function SidebarShowcase() {
27
- const [collapsed, setCollapsed] = useState(false);
28
-
29
- return (
30
- <>
31
- <ShowcaseWrapper
32
- id="sidebar-demo"
33
- title="Sidebar + AppLayout"
34
- description="Full sidebar and content layout with grouped navigation, icons, badges, and collapse support."
35
- code={`import { AppLayout, Sidebar } from "@xenide-io/the-old-ui-theme";
36
-
37
- <AppLayout
38
- sidebar={
39
- <Sidebar
40
- groups={[
41
- { label: "Main", items: [
42
- { label: "Home", icon: <Home className="h-4 w-4" />, active: true },
43
- { label: "Activity", icon: <Bell className="h-4 w-4" />, badge: <Badge>3</Badge> },
44
- ]},
45
- ]}
46
- header={<div className="font-bold">My App</div>}
47
- footer={<span className="text-xs text-ph-mutedtext">v1.0</span>}
48
- />
49
- }
50
- >
51
- <div className="p-6">
52
- <h1>Main content area</h1>
53
- </div>
54
- </AppLayout>`}
55
- >
56
- <div className="space-y-4">
57
- <Button
58
- variant="secondary"
59
- size="sm"
60
- onClick={() => setCollapsed(!collapsed)}
61
- >
62
- {collapsed ? "Expand sidebar" : "Collapse sidebar"}
63
- </Button>
64
- <div className="overflow-hidden rounded-lg border border-ph-border" style={{ height: 360 }}>
65
- <AppLayout
66
- sidebarWidth={collapsed ? 56 : 220}
67
- sidebar={
68
- <Sidebar
69
- groups={sampleGroups}
70
- collapsed={collapsed}
71
- header={
72
- <div className="flex items-center gap-2">
73
- <div className="h-6 w-6 rounded bg-ph-brand flex items-center justify-center text-xs font-bold text-[var(--ph-on-accent)]">T</div>
74
- {!collapsed && <span className="text-sm font-bold text-ph-ink">The Old UI</span>}
75
- </div>
76
- }
77
- footer={
78
- !collapsed ? <span className="text-xs text-ph-mutedtext px-2">v0.3.2</span> : null
79
- }
80
- />
81
- }
82
- >
83
- <div className="flex h-full items-center justify-center bg-ph-canvas">
84
- <p className="text-sm text-ph-mutedtext">Content area — click sidebar items</p>
85
- </div>
86
- </AppLayout>
87
- </div>
88
- </div>
89
- </ShowcaseWrapper>
90
-
91
- <ShowcaseWrapper
92
- id="sidebar-props"
93
- title="Sidebar Props"
94
- description="Sidebar component API reference."
95
- code={`// SidebarGroup
96
- interface SidebarGroup {
97
- label: string;
98
- items: SidebarItemDef[];
99
- }
100
-
101
- // SidebarItemDef
102
- interface SidebarItemDef {
103
- label: string;
104
- icon?: ReactNode;
105
- href?: string;
106
- badge?: ReactNode;
107
- active?: boolean;
108
- onClick?: () => void;
109
- }
110
-
111
- // SidebarProps
112
- interface SidebarProps {
113
- groups: SidebarGroup[];
114
- className?: string;
115
- header?: ReactNode;
116
- footer?: ReactNode;
117
- collapsed?: boolean;
118
- onCollapse?: (collapsed: boolean) => void;
119
- }
120
-
121
- // AppLayoutProps
122
- interface AppLayoutProps {
123
- sidebar: ReactNode;
124
- children: ReactNode;
125
- sidebarWidth?: number;
126
- className?: string;
127
- }`}
128
- >
129
- <div className="grid gap-4 sm:grid-cols-2">
130
- <div className="ph-panel space-y-2">
131
- <h3 className="text-sm font-semibold text-ph-ink">AppLayout</h3>
132
- <p className="text-xs text-ph-subtle">CSS grid wrapper with fixed sidebar + fluid content.</p>
133
- <ul className="space-y-1 text-xs text-ph-subtle">
134
- <li><span className="font-medium text-ph-ink">sidebar</span> — ReactNode for left column</li>
135
- <li><span className="font-medium text-ph-ink">sidebarWidth</span> — px width (default 240)</li>
136
- <li><span className="font-medium text-ph-ink">children</span> — main content area</li>
137
- </ul>
138
- </div>
139
- <div className="ph-panel space-y-2">
140
- <h3 className="text-sm font-semibold text-ph-ink">Sidebar</h3>
141
- <p className="text-xs text-ph-subtle">Grouped navigation with icons, badges, collapse.</p>
142
- <ul className="space-y-1 text-xs text-ph-subtle">
143
- <li><span className="font-medium text-ph-ink">groups</span> — labeled sections with items</li>
144
- <li><span className="font-medium text-ph-ink">collapsed</span> — icon-only mode</li>
145
- <li><span className="font-medium text-ph-ink">header/footer</span> — top/bottom slots</li>
146
- </ul>
147
- </div>
148
- </div>
149
- </ShowcaseWrapper>
150
- </>
151
- );
152
- }
@@ -1,33 +0,0 @@
1
- import { ShowcaseWrapper } from "@/components/ui";
2
-
3
- export default function StackShowcase() {
4
- const code = `
5
-
6
- <div className="rounded-xl border border-ph-border bg-ph-muted p-10">
7
- <div className="relative mx-auto h-44 w-48">
8
- <div className="absolute inset-3 translate-x-4 translate-y-4 rounded-xl border border-ph-border bg-ph-toolbar shadow-ph ring-8 ring-ph-muted" />
9
- <div className="absolute inset-y-7 left-8 right-[-1rem] translate-x-1 rounded-xl border border-ph-border bg-ph-blue text-center text-xs font-semibold uppercase leading-[4.75rem] text-white shadow-ph ring-8 ring-ph-muted">
10
- Replay
11
- </div>
12
- <div className="absolute inset-x-5 top-0 flex h-[5.75rem] items-center justify-center rounded-xl border border-ph-border bg-ph-surface shadow-ph-md ring-8 ring-ph-muted">
13
- <span className="text-sm font-bold text-ph-brand">Trends insight</span>
14
- </div>
15
- </div>
16
- </div>`;
17
-
18
- return (
19
- <ShowcaseWrapper title="Stacked surfaces" code={code} filename="StackExample.tsx">
20
- <div className="rounded-xl border border-ph-border bg-ph-muted p-10">
21
- <div className="relative mx-auto h-44 w-48">
22
- <div className="absolute inset-3 translate-x-4 translate-y-4 rounded-xl border border-ph-border bg-ph-toolbar shadow-ph ring-8 ring-ph-muted" />
23
- <div className="absolute inset-y-7 left-8 right-[-1rem] translate-x-1 rounded-xl border border-ph-border bg-ph-blue text-center text-xs font-semibold uppercase leading-[4.75rem] text-white shadow-ph ring-8 ring-ph-muted">
24
- Replay
25
- </div>
26
- <div className="absolute inset-x-5 top-0 flex h-[5.75rem] items-center justify-center rounded-xl border border-ph-border bg-ph-surface shadow-ph-md ring-8 ring-ph-muted">
27
- <span className="text-sm font-bold text-ph-brand">Trends insight</span>
28
- </div>
29
- </div>
30
- </div>
31
- </ShowcaseWrapper>
32
- );
33
- }
@@ -1,37 +0,0 @@
1
- import { ComponentDocs, ShowcaseWrapper, Stepper } from "@/components/ui";
2
-
3
- export default function StepperShowcase() {
4
- const steps = [
5
- { id: "1", label: "Account", description: "Login details" },
6
- { id: "2", label: "Profile", description: "Personal info" },
7
- { id: "3", label: "Settings", description: "Preferences" },
8
- { id: "4", label: "Review", description: "Confirm" },
9
- ];
10
-
11
- const code = `import { Stepper } from "the-old-ui";
12
-
13
- <div className="ph-panel">
14
- <Stepper steps={steps} currentStep={1} />
15
- </div>`;
16
-
17
- return (
18
- <ShowcaseWrapper
19
- title="Stepper"
20
- description="Step progress indicator for setup, onboarding, and multi-stage forms."
21
- code={code}
22
- filename="StepperExample.tsx"
23
- docs={
24
- <ComponentDocs
25
- rows={[
26
- { name: "steps", type: "{ id; label; description? }[]", description: "Steps shown in order." },
27
- { name: "currentStep", type: "number", description: "Zero-based active step index." },
28
- ]}
29
- />
30
- }
31
- >
32
- <div className="ph-panel">
33
- <Stepper steps={steps} currentStep={1} />
34
- </div>
35
- </ShowcaseWrapper>
36
- );
37
- }