@xenide-io/the-old-ui-theme 0.4.3 → 0.4.6

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 (75) 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 +1184 -661
  11. package/dist/suite.mjs +1123 -601
  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.tsx +269 -103
  20. package/src/suite/components/suite-app-layout.tsx +48 -28
  21. package/src/suite/components/suite-layout.tsx +85 -41
  22. package/src/suite/components/suite-mobile-drawer.tsx +35 -22
  23. package/src/suite/components/suite-notification-bell.tsx +9 -3
  24. package/src/suite/components/suite-settings-layout.tsx +82 -0
  25. package/src/suite/components/suite-settings-mobile-nav.tsx +18 -17
  26. package/src/suite/components/suite-skeleton.tsx +3 -3
  27. package/src/suite/components/today-calibrating.tsx +11 -35
  28. package/src/suite/components/today-page-frame.tsx +19 -11
  29. package/src/suite/components/today-ui.tsx +276 -19
  30. package/src/suite/index.ts +41 -25
  31. package/src/suite/lib/apps.ts +32 -2
  32. package/src/suite/lib/use-sidebar-width.ts +114 -0
  33. package/src/components/sections/AccordionShowcase.tsx +0 -45
  34. package/src/components/sections/AlertShowcase.tsx +0 -40
  35. package/src/components/sections/AvatarShowcase.tsx +0 -80
  36. package/src/components/sections/BadgeShowcase.tsx +0 -65
  37. package/src/components/sections/ButtonShowcase.tsx +0 -308
  38. package/src/components/sections/CalendarShowcase.tsx +0 -35
  39. package/src/components/sections/CardShowcase.tsx +0 -159
  40. package/src/components/sections/CodeMockupShowcase.tsx +0 -56
  41. package/src/components/sections/ColorPalette.tsx +0 -117
  42. package/src/components/sections/CommandPaletteShowcase.tsx +0 -48
  43. package/src/components/sections/CountdownShowcase.tsx +0 -43
  44. package/src/components/sections/DiffShowcase.tsx +0 -70
  45. package/src/components/sections/DrawerShowcase.tsx +0 -97
  46. package/src/components/sections/DropdownShowcase.tsx +0 -98
  47. package/src/components/sections/EmptyStateShowcase.tsx +0 -50
  48. package/src/components/sections/FilterChipsShowcase.tsx +0 -98
  49. package/src/components/sections/FormShowcase.tsx +0 -127
  50. package/src/components/sections/HoverCardShowcase.tsx +0 -50
  51. package/src/components/sections/IconShowcase.tsx +0 -121
  52. package/src/components/sections/IndicatorShowcase.tsx +0 -52
  53. package/src/components/sections/KbdShowcase.tsx +0 -57
  54. package/src/components/sections/ModalShowcase.tsx +0 -211
  55. package/src/components/sections/NavigationShowcase.tsx +0 -199
  56. package/src/components/sections/NewComponentsShowcase.tsx +0 -1052
  57. package/src/components/sections/ProductLayoutsShowcase.tsx +0 -78
  58. package/src/components/sections/ProgressShowcase.tsx +0 -82
  59. package/src/components/sections/QuillChartShowcase.tsx +0 -92
  60. package/src/components/sections/QuillDashboardShowcase.tsx +0 -149
  61. package/src/components/sections/SegmentedControlShowcase.tsx +0 -49
  62. package/src/components/sections/SetupThemeShowcase.tsx +0 -262
  63. package/src/components/sections/SidebarShowcase.tsx +0 -152
  64. package/src/components/sections/StackShowcase.tsx +0 -33
  65. package/src/components/sections/StepperShowcase.tsx +0 -37
  66. package/src/components/sections/SuiteShowcase.tsx +0 -669
  67. package/src/components/sections/SwapShowcase.tsx +0 -99
  68. package/src/components/sections/TabShowcase.tsx +0 -84
  69. package/src/components/sections/TableShowcase.tsx +0 -142
  70. package/src/components/sections/TimelineShowcase.tsx +0 -83
  71. package/src/components/sections/ToastShowcase.tsx +0 -108
  72. package/src/components/sections/TooltipShowcase.tsx +0 -38
  73. package/src/components/sections/UtilityShowcase.tsx +0 -81
  74. package/src/styles/excel-themes.css +0 -110
  75. package/src/styles/lemon-primitives.css +0 -550
@@ -1,45 +0,0 @@
1
- import { Accordion, ComponentDocs, ShowcaseWrapper } from "@/components/ui";
2
-
3
- export default function AccordionShowcase() {
4
- const items = [
5
- {
6
- id: "1",
7
- title: "What is The Old UI?",
8
- content: "The Old UI is a comprehensive component library with swappable themes, bespoke icons, and dashboard-ready components built with Tailwind CSS.",
9
- },
10
- {
11
- id: "2",
12
- title: "How do I install it?",
13
- content: "Simply copy the component files into your project. Each component is self-contained and uses Tailwind CSS utility classes.",
14
- },
15
- {
16
- id: "3",
17
- title: "Can I customize themes?",
18
- content: "Yes! The Old UI supports multiple themes including TurtleTime, HedgeHog Light, Sheets, and more. Themes are CSS-variable based.",
19
- },
20
- ];
21
-
22
- const code = `import { Accordion } from "the-old-ui";
23
-
24
- <Accordion items={items} allowMultiple defaultOpen={["1"]} />`;
25
-
26
- return (
27
- <ShowcaseWrapper
28
- title="Accordion"
29
- description="Disclosure list with controlled defaults for single or multiple open items."
30
- code={code}
31
- filename="AccordionExample.tsx"
32
- docs={
33
- <ComponentDocs
34
- rows={[
35
- { name: "items", type: "{ id; title; content }[]", description: "Accordion panels to render." },
36
- { name: "allowMultiple", type: "boolean", defaultValue: "false", description: "Allows more than one panel open." },
37
- { name: "defaultOpen", type: "string[]", description: "Initial open item ids." },
38
- ]}
39
- />
40
- }
41
- >
42
- <Accordion items={items} allowMultiple defaultOpen={["1"]} />
43
- </ShowcaseWrapper>
44
- );
45
- }
@@ -1,40 +0,0 @@
1
- import { Alert, ComponentDocs, ShowcaseWrapper } from "@/components/ui";
2
-
3
- export default function AlertShowcase() {
4
- const code = `import { Alert } from "@xenide-io/the-old-ui-theme";
5
-
6
- <div className="space-y-4">
7
- <Alert status="info" title="Pipeline delay" description="Events are flowing; warehouse sync may lag by ~2 minutes." />
8
- <Alert status="success" title="Flag shipped" description="The multivariate rollout finished for all environments." />
9
- <Alert status="warning" title="Sample rate adjusted" description="Replay capture dropped to 20% until billing resets." />
10
- <Alert status="danger" title="Exporter error" description="Snowflake credential rotation failed — check IAM role ARN." />
11
- </div>`;
12
-
13
- return (
14
- <ShowcaseWrapper
15
- title="Alerts"
16
- description="Status messages with built-in icon, title, description, and optional dismiss action."
17
- code={code}
18
- filename="AlertExample.tsx"
19
- docs={
20
- <ComponentDocs
21
- rows={[
22
- { name: "status", type: "info | success | warning | danger", defaultValue: "info", description: "Controls icon, border, and semantic colour." },
23
- { name: "title", type: "string", description: "Short message title." },
24
- { name: "description", type: "string", description: "Supporting message copy." },
25
- { name: "onDismiss", type: "() => void", description: "Shows a close button when provided." },
26
- { name: "icon", type: "ReactNode", description: "Optional custom icon override." },
27
- { name: "live", type: "off | polite | assertive", description: "Opt into live-region announcements for content that appears dynamically." },
28
- ]}
29
- />
30
- }
31
- >
32
- <div className="space-y-4">
33
- <Alert status="info" title="Pipeline delay" description="Events are flowing; warehouse sync may lag by ~2 minutes." />
34
- <Alert status="success" title="Flag shipped" description="The multivariate rollout finished for all environments." />
35
- <Alert status="warning" title="Sample rate adjusted" description="Replay capture dropped to 20% until billing resets." />
36
- <Alert status="danger" title="Exporter error" description="Snowflake credential rotation failed — check IAM role ARN." />
37
- </div>
38
- </ShowcaseWrapper>
39
- );
40
- }
@@ -1,80 +0,0 @@
1
- import { Avatar, AvatarGroup, ComponentDocs, ShowcaseWrapper } from "@/components/ui";
2
-
3
- export default function AvatarShowcase() {
4
- const code = `import { Avatar, AvatarGroup } from "the-old-ui";
5
-
6
- <div className="grid gap-8 lg:grid-cols-2">
7
- <div className="ph-panel space-y-4">
8
- <h3>Sizes</h3>
9
- <Avatar label="XL" size="xl" color="bg-ph-brand text-white" />
10
- <Avatar label="LG" size="lg" color="bg-ph-blue text-white" />
11
- <Avatar label="MD" size="md" color="bg-ph-purple text-white" />
12
- <Avatar label="SM" size="sm" color="bg-ph-toolbar text-ph-ink" />
13
- </div>
14
-
15
- <div className="ph-panel space-y-5">
16
- <h3>Stacked collaborators</h3>
17
- <AvatarGroup>
18
- <Avatar label="MJ" color="bg-orange-400 text-orange-950" />
19
- <Avatar label="AR" color="bg-sky-500 text-white" />
20
- <Avatar label="CK" color="bg-violet-600 text-white" />
21
- </AvatarGroup>
22
-
23
- <div className="flex gap-4">
24
- <Avatar label="ON" color="bg-emerald-200 text-emerald-950" status="online" />
25
- <Avatar label="JD" color="bg-ph-muted text-ph-ink" status="offline" />
26
- <Avatar label="CP" color="bg-amber-200 text-amber-950" badge="12" />
27
- </div>
28
- </div>
29
- </div>`;
30
-
31
- return (
32
- <ShowcaseWrapper
33
- title="Avatars"
34
- description="Reusable avatar component with sizes, status indicators, badges, and group stacking."
35
- code={code}
36
- filename="AvatarExample.tsx"
37
- docs={
38
- <ComponentDocs
39
- rows={[
40
- { name: "label", type: "string", description: "Text initials or label." },
41
- { name: "size", type: "xs | sm | md | lg | xl", defaultValue: "md", description: "Avatar size." },
42
- { name: "color", type: "string", defaultValue: "bg-ph-brand text-white", description: "Tailwind colour classes." },
43
- { name: "status", type: "online | offline | away | busy", description: "Status indicator dot." },
44
- { name: "badge", type: "string", description: "Badge count/text." },
45
- { name: "icon", type: "ReactNode", description: "Optional icon or image." },
46
- ]}
47
- />
48
- }
49
- >
50
- <div className="grid gap-8 lg:grid-cols-2">
51
- <div className="ph-panel space-y-4">
52
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Sizes</h3>
53
- <div className="flex flex-wrap items-end gap-5">
54
- <Avatar label="XL" size="xl" color="bg-ph-brand text-white" />
55
- <Avatar label="LG" size="lg" color="bg-ph-blue text-white" />
56
- <Avatar label="MD" size="md" color="bg-ph-purple text-white" />
57
- <Avatar label="SM" size="sm" color="bg-ph-toolbar text-ph-ink" />
58
- <Avatar label="XS" size="xs" color="bg-ph-muted text-ph-ink" />
59
- </div>
60
- </div>
61
-
62
- <div className="ph-panel space-y-5">
63
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Stacked collaborators</h3>
64
- <AvatarGroup max={3}>
65
- <Avatar label="MJ" color="bg-orange-400 text-orange-950" />
66
- <Avatar label="AR" color="bg-sky-500 text-white" />
67
- <Avatar label="CK" color="bg-violet-600 text-white" />
68
- <Avatar label="+9" color="bg-ph-toolbar text-ph-subtle" />
69
- </AvatarGroup>
70
-
71
- <div className="flex gap-4">
72
- <Avatar label="ON" color="bg-emerald-200 text-emerald-950" status="online" />
73
- <Avatar label="JD" color="bg-ph-muted text-ph-ink" status="offline" />
74
- <Avatar label="CP" color="bg-amber-200 text-amber-950" badge="12" />
75
- </div>
76
- </div>
77
- </div>
78
- </ShowcaseWrapper>
79
- );
80
- }
@@ -1,65 +0,0 @@
1
- import { Badge, ComponentDocs, ShowcaseWrapper } from "@/components/ui";
2
-
3
- export default function BadgeShowcase() {
4
- const code = `import { Badge } from "@xenide-io/the-old-ui-theme";
5
-
6
- <div className="ph-panel space-y-6">
7
- <div>
8
- <h3 className="mb-3 text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Semantic</h3>
9
- <div className="flex flex-wrap gap-2">
10
- <Badge variant="brand">Beta</Badge>
11
- <Badge variant="neutral">Archived</Badge>
12
- <Badge variant="success">Live</Badge>
13
- <Badge variant="warning">Queued</Badge>
14
- <Badge variant="danger">Failed</Badge>
15
- <Badge variant="info">Docs</Badge>
16
- </div>
17
- </div>
18
- <div>
19
- <h3 className="mb-3 text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Outline</h3>
20
- <div className="flex flex-wrap gap-2">
21
- <Badge variant="outline">Feature flag</Badge>
22
- <Badge variant="outline">Experiment</Badge>
23
- </div>
24
- </div>
25
- </div>`;
26
-
27
- return (
28
- <ShowcaseWrapper
29
- title="Badges"
30
- description="Use badges for compact status, category, and product metadata. Defaults work without classes; use props for variants."
31
- code={code}
32
- filename="BadgeExample.tsx"
33
- docs={
34
- <ComponentDocs
35
- rows={[
36
- { name: "variant", type: "brand | neutral | success | warning | danger | info | outline", defaultValue: "neutral", description: "Controls semantic colour and border treatment." },
37
- { name: "size", type: "sm | md", defaultValue: "md", description: "Use sm for dense tables or compact nav." },
38
- { name: "className", type: "string", description: "Optional escape hatch for layout-only overrides." },
39
- ]}
40
- />
41
- }
42
- >
43
- <div className="ph-panel space-y-6">
44
- <div>
45
- <h3 className="mb-3 text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Semantic</h3>
46
- <div className="flex flex-wrap gap-2">
47
- <Badge variant="brand">Beta</Badge>
48
- <Badge variant="neutral">Archived</Badge>
49
- <Badge variant="success">Live</Badge>
50
- <Badge variant="warning">Queued</Badge>
51
- <Badge variant="danger">Failed</Badge>
52
- <Badge variant="info">Docs</Badge>
53
- </div>
54
- </div>
55
- <div>
56
- <h3 className="mb-3 text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Outline</h3>
57
- <div className="flex flex-wrap gap-2">
58
- <Badge variant="outline">Feature flag</Badge>
59
- <Badge variant="outline">Experiment</Badge>
60
- </div>
61
- </div>
62
- </div>
63
- </ShowcaseWrapper>
64
- );
65
- }
@@ -1,308 +0,0 @@
1
- import {
2
- IconDownload,
3
- IconPlayCircle,
4
- IconPlus,
5
- IconSave,
6
- IconSubArrowRight,
7
- IconTrash,
8
- IconUpload,
9
- } from "@/components/icons";
10
- import { Button, ComponentDocs, DropdownButton, DropdownItem, Panel, ShowcaseWrapper } from "@/components/ui";
11
-
12
- export default function ButtonShowcase() {
13
- const code = `import { Button, DropdownButton, DropdownItem, IconDownload, IconPlayCircle, IconPlus, IconSave, IconSubArrowRight, IconTrash, IconUpload, Panel } from "@xenide-io/the-old-ui-theme";
14
-
15
- <div className="space-y-8">
16
- <Panel className="space-y-4">
17
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Toolbar (like HogQL / insights)</h3>
18
- <div className="flex flex-wrap items-center gap-2 rounded-lemon border border-ph-border bg-ph-surface p-3 shadow-elevation-3000">
19
- <DropdownButton
20
- label="Run"
21
- variant="primary"
22
- split
23
- icon={<IconPlayCircle className="h-4 w-4" aria-hidden />}
24
- >
25
- <DropdownItem>Run now</DropdownItem>
26
- <DropdownItem>Run as new insight…</DropdownItem>
27
- </DropdownButton>
28
- <DropdownButton
29
- label="Variables"
30
- variant="secondary"
31
- icon={
32
- <span className="font-mono text-sm leading-none" aria-hidden>
33
- {"{}"}
34
- </span>
35
- }
36
- >
37
- <DropdownItem>Manage variables…</DropdownItem>
38
- <DropdownItem>Insert column…</DropdownItem>
39
- </DropdownButton>
40
- <DropdownButton label="Filters" variant="secondary" panelClassName="min-w-[13rem]">
41
- <DropdownItem>Add filter group</DropdownItem>
42
- <DropdownItem>Clear all filters</DropdownItem>
43
- <DropdownItem className="text-ph-mutedtext">Save as cohort…</DropdownItem>
44
- </DropdownButton>
45
- <Button variant="secondary" size="sm" shape="square" aria-label="Layout">
46
- <span className="flex gap-0.5" aria-hidden>
47
- <span className="h-4 w-1.5 rounded-sm bg-current" />
48
- <span className="h-4 w-1.5 rounded-sm bg-current opacity-40" />
49
- </span>
50
- </Button>
51
- </div>
52
- </Panel>
53
-
54
- <Panel className="space-y-4">
55
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Lemon 3000 primary & secondary</h3>
56
- <div className="flex flex-wrap gap-3">
57
- <Button variant="primary">Primary</Button>
58
- <Button variant="secondary">Secondary</Button>
59
- <Button variant="primary" outline>
60
- Primary outline
61
- </Button>
62
- <Button variant="secondary" outline>
63
- Secondary outline
64
- </Button>
65
- </div>
66
- </Panel>
67
-
68
- <Panel className="space-y-4">
69
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Marketing signal vs in-app</h3>
70
- <div className="flex flex-wrap gap-3">
71
- <Button variant="primary">App primary (3000)</Button>
72
- <Button variant="signal">Marketing signal</Button>
73
- </div>
74
- </Panel>
75
-
76
- <Panel className="space-y-4">
77
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Semantic solids</h3>
78
- <div className="flex flex-wrap gap-3">
79
- <Button variant="accent">Accent</Button>
80
- <Button variant="neutral">Neutral</Button>
81
- <Button variant="info">Info</Button>
82
- <Button variant="success">Success</Button>
83
- <Button variant="warning">Warning</Button>
84
- <Button variant="danger">Danger</Button>
85
- </div>
86
- </Panel>
87
-
88
- <Panel className="space-y-4">
89
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">With icons</h3>
90
- <div className="flex flex-wrap gap-3">
91
- <Button variant="primary" icon={<IconPlus className="h-4 w-4" aria-hidden />}>
92
- New project
93
- </Button>
94
- <Button variant="primary" sideIcon={<IconSubArrowRight className="h-4 w-4" aria-hidden />}>
95
- Continue
96
- </Button>
97
- <Button variant="secondary" icon={<IconDownload className="h-4 w-4" aria-hidden />}>
98
- Export
99
- </Button>
100
- <Button variant="success" icon={<IconSave className="h-4 w-4" aria-hidden />}>
101
- Save
102
- </Button>
103
- <Button variant="danger" icon={<IconTrash className="h-4 w-4" aria-hidden />}>
104
- Delete
105
- </Button>
106
- <Button variant="ghost" icon={<IconUpload className="h-4 w-4" aria-hidden />}>
107
- Upload
108
- </Button>
109
- </div>
110
- </Panel>
111
-
112
- <Panel className="space-y-4">
113
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Sizes & shapes</h3>
114
- <div className="flex flex-wrap items-end gap-3">
115
- <Button variant="primary" size="xs">
116
- XS
117
- </Button>
118
- <Button variant="primary" size="sm">
119
- SM
120
- </Button>
121
- <Button variant="primary">MD</Button>
122
- <Button variant="primary" size="lg">
123
- LG
124
- </Button>
125
- <Button variant="primary" shape="circle" aria-label="Add">
126
- <IconPlus className="h-5 w-5" />
127
- </Button>
128
- <Button variant="primary" shape="square" aria-label="Add">
129
- <IconPlus className="h-5 w-5" />
130
- </Button>
131
- <Button variant="secondary" shape="wide">
132
- Wide
133
- </Button>
134
- </div>
135
- </Panel>
136
-
137
- <Panel className="space-y-4">
138
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Ghost, link & states</h3>
139
- <div className="flex flex-wrap items-center gap-4">
140
- <Button variant="ghost">Tertiary</Button>
141
- <Button variant="link">Text link button</Button>
142
- <Button variant="primary" disabled>
143
- Disabled
144
- </Button>
145
- <Button variant="primary" loading>Loading</Button>
146
- </div>
147
- </Panel>
148
- </div>`;
149
-
150
- return (
151
- <ShowcaseWrapper
152
- title="Buttons"
153
- description="Every filled variant shares the same bordered face, lower frame, hover lift, and pressed depth. Ghost and link actions stay flat."
154
- code={code}
155
- filename="ButtonExample.tsx"
156
- docs={
157
- <ComponentDocs
158
- rows={[
159
- { name: "variant", type: "primary | secondary | tertiary | signal | accent | neutral | info | success | warning | danger | ghost | link", defaultValue: "secondary", description: "Controls semantic colour and Lemon chrome treatment." },
160
- { name: "size", type: "xs | sm | md | lg", defaultValue: "md", description: "Controls density without extra classes." },
161
- { name: "shape", type: "default | circle | square | wide", defaultValue: "default", description: "Applies common button shapes without className." },
162
- { name: "outline", type: "boolean", defaultValue: "false", description: "Converts solid variants to outline treatment." },
163
- { name: "icon", type: "ReactNode", description: "Leading icon slot." },
164
- { name: "sideIcon", type: "ReactNode", description: "Trailing icon slot." },
165
- { name: "split", type: "boolean", defaultValue: "false", description: "Adds split divider before the trailing slot." },
166
- { name: "loading", type: "boolean", defaultValue: "false", description: "Disables the action, exposes aria-busy, and replaces the leading icon with a spinner." },
167
- { name: "loadingLabel", type: "ReactNode", description: "Optional label shown while loading; the normal label stays in place by default." },
168
- ]}
169
- />
170
- }
171
- >
172
- <div className="space-y-8">
173
- <Panel className="space-y-4">
174
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Toolbar (like HogQL / insights)</h3>
175
- <div className="flex flex-wrap items-center gap-2 rounded-lemon border border-ph-border bg-ph-surface p-3 shadow-elevation-3000">
176
- <DropdownButton
177
- label="Run"
178
- variant="primary"
179
- split
180
- icon={<IconPlayCircle className="h-4 w-4" aria-hidden />}
181
- >
182
- <DropdownItem>Run now</DropdownItem>
183
- <DropdownItem>Run as new insight…</DropdownItem>
184
- </DropdownButton>
185
- <DropdownButton
186
- label="Variables"
187
- variant="secondary"
188
- icon={
189
- <span className="font-mono text-sm leading-none" aria-hidden>
190
- {"{}"}
191
- </span>
192
- }
193
- >
194
- <DropdownItem>Manage variables…</DropdownItem>
195
- <DropdownItem>Insert column…</DropdownItem>
196
- </DropdownButton>
197
- <DropdownButton label="Filters" variant="secondary" panelClassName="min-w-[13rem]">
198
- <DropdownItem>Add filter group</DropdownItem>
199
- <DropdownItem>Clear all filters</DropdownItem>
200
- <DropdownItem className="text-ph-mutedtext">Save as cohort…</DropdownItem>
201
- </DropdownButton>
202
- <Button variant="secondary" size="sm" shape="square" aria-label="Layout">
203
- <span className="flex gap-0.5" aria-hidden>
204
- <span className="h-4 w-1.5 rounded-sm bg-current" />
205
- <span className="h-4 w-1.5 rounded-sm bg-current opacity-40" />
206
- </span>
207
- </Button>
208
- </div>
209
- </Panel>
210
-
211
- <Panel className="space-y-4">
212
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Lemon 3000 primary & secondary</h3>
213
- <div className="flex flex-wrap gap-3">
214
- <Button variant="primary">Primary</Button>
215
- <Button variant="secondary">Secondary</Button>
216
- <Button variant="primary" outline>
217
- Primary outline
218
- </Button>
219
- <Button variant="secondary" outline>
220
- Secondary outline
221
- </Button>
222
- </div>
223
- </Panel>
224
-
225
- <Panel className="space-y-4">
226
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Marketing signal vs in-app</h3>
227
- <div className="flex flex-wrap gap-3">
228
- <Button variant="primary">App primary (3000)</Button>
229
- <Button variant="signal">Marketing signal</Button>
230
- </div>
231
- </Panel>
232
-
233
- <Panel className="space-y-4">
234
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Semantic solids</h3>
235
- <div className="flex flex-wrap gap-3">
236
- <Button variant="accent">Accent</Button>
237
- <Button variant="neutral">Neutral</Button>
238
- <Button variant="info">Info</Button>
239
- <Button variant="success">Success</Button>
240
- <Button variant="warning">Warning</Button>
241
- <Button variant="danger">Danger</Button>
242
- </div>
243
- </Panel>
244
-
245
- <Panel className="space-y-4">
246
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">With icons</h3>
247
- <div className="flex flex-wrap gap-3">
248
- <Button variant="primary" icon={<IconPlus className="h-4 w-4" aria-hidden />}>
249
- New project
250
- </Button>
251
- <Button variant="primary" sideIcon={<IconSubArrowRight className="h-4 w-4" aria-hidden />}>
252
- Continue
253
- </Button>
254
- <Button variant="secondary" icon={<IconDownload className="h-4 w-4" aria-hidden />}>
255
- Export
256
- </Button>
257
- <Button variant="success" icon={<IconSave className="h-4 w-4" aria-hidden />}>
258
- Save
259
- </Button>
260
- <Button variant="danger" icon={<IconTrash className="h-4 w-4" aria-hidden />}>
261
- Delete
262
- </Button>
263
- <Button variant="ghost" icon={<IconUpload className="h-4 w-4" aria-hidden />}>
264
- Upload
265
- </Button>
266
- </div>
267
- </Panel>
268
-
269
- <Panel className="space-y-4">
270
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Sizes & shapes</h3>
271
- <div className="flex flex-wrap items-end gap-3">
272
- <Button variant="primary" size="xs">
273
- XS
274
- </Button>
275
- <Button variant="primary" size="sm">
276
- SM
277
- </Button>
278
- <Button variant="primary">MD</Button>
279
- <Button variant="primary" size="lg">
280
- LG
281
- </Button>
282
- <Button variant="primary" shape="circle" aria-label="Add">
283
- <IconPlus className="h-5 w-5" />
284
- </Button>
285
- <Button variant="primary" shape="square" aria-label="Add">
286
- <IconPlus className="h-5 w-5" />
287
- </Button>
288
- <Button variant="secondary" shape="wide">
289
- Wide
290
- </Button>
291
- </div>
292
- </Panel>
293
-
294
- <Panel className="space-y-4">
295
- <h3 className="text-sm font-semibold uppercase tracking-wider text-ph-mutedtext">Ghost, link & states</h3>
296
- <div className="flex flex-wrap items-center gap-4">
297
- <Button variant="ghost">Tertiary</Button>
298
- <Button variant="link">Text link button</Button>
299
- <Button variant="primary" disabled>
300
- Disabled
301
- </Button>
302
- <Button variant="primary" loading>Loading</Button>
303
- </div>
304
- </Panel>
305
- </div>
306
- </ShowcaseWrapper>
307
- );
308
- }
@@ -1,35 +0,0 @@
1
- "use client";
2
-
3
- import { useState } from "react";
4
- import { Calendar, ComponentDocs, ShowcaseWrapper } from "@/components/ui";
5
-
6
- export default function CalendarShowcase() {
7
- const [date, setDate] = useState<Date | undefined>(new Date());
8
-
9
- const code = `import { Calendar } from "the-old-ui";
10
-
11
- const [date, setDate] = useState(new Date());
12
-
13
- <Calendar value={date} onChange={setDate} />`;
14
-
15
- return (
16
- <ShowcaseWrapper
17
- title="Calendar"
18
- description="Controlled date picker with theme-aware styling and navigation."
19
- code={code}
20
- filename="CalendarExample.tsx"
21
- docs={
22
- <ComponentDocs
23
- rows={[
24
- { name: "value", type: "Date | undefined", description: "Selected date." },
25
- { name: "onChange", type: "(date?: Date) => void", description: "Called when a date is selected." },
26
- ]}
27
- />
28
- }
29
- >
30
- <div className="ph-panel flex justify-center">
31
- <Calendar value={date} onChange={setDate} />
32
- </div>
33
- </ShowcaseWrapper>
34
- );
35
- }