@xenide-io/the-old-ui-theme 0.9.18 → 0.10.0
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.
- package/dist/{Chip-BzuNgJIa.d.mts → Chip-DKT-82Lf.d.mts} +5 -3
- package/dist/{Chip-BzuNgJIa.d.ts → Chip-DKT-82Lf.d.ts} +5 -3
- package/dist/{chunk-6SVJAU5K.mjs → chunk-LHE4ROON.mjs} +977 -521
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +138 -99
- package/dist/index.mjs +1 -1
- package/dist/suite.d.mts +23 -1
- package/dist/suite.d.ts +23 -1
- package/dist/suite.js +4248 -4039
- package/dist/suite.mjs +1006 -793
- package/dist/tailwind-preset.js +10 -1
- package/dist/tailwind-preset.mjs +10 -1
- package/dist/ui.d.mts +33 -4
- package/dist/ui.d.ts +33 -4
- package/dist/ui.js +1024 -566
- package/dist/ui.mjs +13 -1
- package/docs/macos-identity-audit.md +279 -0
- package/package.json +1 -1
- package/src/app/globals.css +334 -44
- package/src/components/ui/Accordion.tsx +4 -7
- package/src/components/ui/Avatar.tsx +5 -5
- package/src/components/ui/Calendar.tsx +7 -7
- package/src/components/ui/CodeBlock.tsx +3 -10
- package/src/components/ui/CollapsibleSection.tsx +4 -4
- package/src/components/ui/CommandPalette.tsx +7 -10
- package/src/components/ui/EmptyState.tsx +2 -2
- package/src/components/ui/Input.tsx +1 -1
- package/src/components/ui/Marketing.tsx +128 -0
- package/src/components/ui/MarketingIllustrations.tsx +287 -0
- package/src/components/ui/Panel.tsx +1 -1
- package/src/components/ui/SegmentedControl.tsx +59 -13
- package/src/components/ui/ShowcaseWrapper.tsx +3 -3
- package/src/components/ui/Table.tsx +18 -6
- package/src/components/ui/Typography.tsx +4 -4
- package/src/components/ui/avatar-stat.test.tsx +14 -1
- package/src/components/ui/index.ts +13 -12
- package/src/components/ui/interaction-primitives.test.tsx +12 -6
- package/src/components/ui/marketing.test.tsx +39 -0
- package/src/components/ui/table.test.tsx +20 -0
- package/src/styles/suite-skin.css +405 -40
- package/src/styles/themes.css +45 -45
- package/src/styles/typography.css +25 -1
- package/src/suite/components/ai-panel.tsx +17 -17
- package/src/suite/components/app-switcher.tsx +9 -9
- package/src/suite/components/suite-app-layout.tsx +7 -4
- package/src/suite/components/suite-bottom-nav.tsx +1 -1
- package/src/suite/components/suite-clients-projects-directory.tsx +6 -6
- package/src/suite/components/suite-integration-picker.tsx +7 -7
- package/src/suite/components/suite-integration-rules.tsx +5 -5
- package/src/suite/components/suite-layout.test.tsx +32 -3
- package/src/suite/components/suite-layout.tsx +4 -4
- package/src/suite/components/suite-mobile-drawer.tsx +2 -2
- package/src/suite/components/suite-mobile-header.tsx +1 -1
- package/src/suite/components/suite-notification-bell.tsx +4 -4
- package/src/suite/components/suite-notification-settings.tsx +171 -0
- package/src/suite/components/suite-palette-library.test.tsx +46 -0
- package/src/suite/components/suite-palette-library.tsx +82 -15
- package/src/suite/components/suite-settings-layout.tsx +2 -2
- package/src/suite/components/suite-settings-mobile-nav.tsx +5 -9
- package/src/suite/components/suite-sidebar.test.tsx +39 -0
- package/src/suite/components/suite-sidebar.tsx +41 -19
- package/src/suite/components/suite-skeleton.tsx +6 -6
- package/src/suite/components/suite-user-menu.tsx +2 -2
- package/src/suite/components/today-calibrating.tsx +3 -3
- package/src/suite/components/today-ui.tsx +12 -12
- package/src/suite/components/workspace-switcher.tsx +3 -3
- package/src/suite/index.ts +6 -0
- package/tailwind-preset.ts +9 -0
package/dist/ui.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
Accordion,
|
|
4
|
+
AiWritingIllustration,
|
|
4
5
|
Alert,
|
|
5
6
|
AuthCard,
|
|
6
7
|
AuthDivider,
|
|
@@ -43,12 +44,17 @@ import {
|
|
|
43
44
|
IconBase,
|
|
44
45
|
IconByName,
|
|
45
46
|
Input,
|
|
47
|
+
IntegrationBridgeIllustration,
|
|
46
48
|
Kbd,
|
|
47
49
|
Label,
|
|
48
50
|
Lead,
|
|
49
51
|
Link,
|
|
50
52
|
Loader,
|
|
51
53
|
LoadingState,
|
|
54
|
+
MarketingHeader,
|
|
55
|
+
MarketingLink,
|
|
56
|
+
MarketingMotionControl,
|
|
57
|
+
MarketingReveal,
|
|
52
58
|
Modal,
|
|
53
59
|
Mono,
|
|
54
60
|
Overline,
|
|
@@ -79,10 +85,11 @@ import {
|
|
|
79
85
|
Tooltip,
|
|
80
86
|
TooltipProvider,
|
|
81
87
|
useChartTokens
|
|
82
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-LHE4ROON.mjs";
|
|
83
89
|
import "./chunk-FWCSY2DS.mjs";
|
|
84
90
|
export {
|
|
85
91
|
Accordion,
|
|
92
|
+
AiWritingIllustration,
|
|
86
93
|
Alert,
|
|
87
94
|
AuthCard,
|
|
88
95
|
AuthDivider,
|
|
@@ -125,12 +132,17 @@ export {
|
|
|
125
132
|
IconBase as Icon,
|
|
126
133
|
IconByName,
|
|
127
134
|
Input,
|
|
135
|
+
IntegrationBridgeIllustration,
|
|
128
136
|
Kbd,
|
|
129
137
|
Label,
|
|
130
138
|
Lead,
|
|
131
139
|
Link,
|
|
132
140
|
Loader,
|
|
133
141
|
LoadingState,
|
|
142
|
+
MarketingHeader,
|
|
143
|
+
MarketingLink,
|
|
144
|
+
MarketingMotionControl,
|
|
145
|
+
MarketingReveal,
|
|
134
146
|
Modal,
|
|
135
147
|
Mono,
|
|
136
148
|
Overline,
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# macOS Identity Audit
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Give The Old UI a recognisable macOS sensibility without turning it into an
|
|
6
|
+
Apple replica or losing its PostHog-derived character.
|
|
7
|
+
|
|
8
|
+
The target is **warm tactile precision**:
|
|
9
|
+
|
|
10
|
+
- Keep Open Runde, the warm Hedgehog canvas, orange action colour, dense
|
|
11
|
+
product layouts, bespoke icons, and Lemon button press behaviour.
|
|
12
|
+
- Add macOS-like material hierarchy, crisp selected states, quiet inset
|
|
13
|
+
controls, deliberate overlay depth, compact toolbars, and restrained motion.
|
|
14
|
+
- Do not add fake window traffic lights, copy Apple application layouts,
|
|
15
|
+
replace the typeface with SF Pro, or make every surface translucent.
|
|
16
|
+
|
|
17
|
+
## Audit Baseline
|
|
18
|
+
|
|
19
|
+
This audit supersedes stale baseline statements in
|
|
20
|
+
`component-library-improvement-plan.md`:
|
|
21
|
+
|
|
22
|
+
- The package currently has 16 themes across 8 light/dark pairs, not 28.
|
|
23
|
+
- Vitest now covers primitives and suite workflows: 28 files and 113 tests.
|
|
24
|
+
- Playwright has desktop and mobile snapshots for the first-slice workflow,
|
|
25
|
+
themes, modal, auth, settings, filters, progress, and button states.
|
|
26
|
+
- Modal and dropdown behaviour now use Radix primitives.
|
|
27
|
+
- Semantic surface, status, selection, focus, and foreground tokens exist.
|
|
28
|
+
|
|
29
|
+
Baseline `bun run check` passes. ESLint reports three existing warnings and no
|
|
30
|
+
errors.
|
|
31
|
+
|
|
32
|
+
## Public Surface Inventory
|
|
33
|
+
|
|
34
|
+
### Actions, Feedback, And Status
|
|
35
|
+
|
|
36
|
+
| Elements | Current character | macOS identity treatment |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `Button`, `ButtonChrome`, `DropdownButton`, `MarketingLink` | Strong Lemon ridge and physical press | Preserve the signature ridge for filled actions; make neutral controls quieter and give every face one crisp top highlight and a shorter pressed travel |
|
|
39
|
+
| `Alert`, `Badge`, `Progress`, `Dot` | Semantic colour system is established | Keep semantic colours; reduce border weight and use calm tinted wells rather than stronger shadows |
|
|
40
|
+
| `Loader`, `Spinner`, `LoadingState`, `Skeleton` | Multiple compatible loading patterns | Keep geometry, standardise motion duration and remove redundant decorative elevation |
|
|
41
|
+
| `EmptyState`, `SuiteEmptyState`, `TodayEmptyState` | Three visibly different treatments | Share surface/radius/depth rules while preserving suite artwork and product-specific punctuation |
|
|
42
|
+
|
|
43
|
+
### Forms And Selection
|
|
44
|
+
|
|
45
|
+
| Elements | Current character | macOS identity treatment |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
| `FormField`, `Input`, `Select`, `Textarea`, `SearchInput`, `SearchGroup` | Good semantic field contract; inset lip already exists | Use one control fill, border, inset highlight, and blue focus halo across every field |
|
|
48
|
+
| `Checkbox`, `Radio`, `Toggle`, `Range`, `FileUpload` | Native-derived controls with mixed geometry | Keep native mechanics; tune marks, switch track, thumb shadow, and focus treatment as one family |
|
|
49
|
+
| `SegmentedControl` | Visually close to macOS but uses one-off radii, shadow, and `transition-all` | Make this the clearest macOS reference: inset track, selected face, subtle hairline, arrow-key semantics, no broad transition |
|
|
50
|
+
| `Chip`, `FilterChips`, `FilterBar`, `FilterMenu`, `SortMenu`, `FilterControls` | Functional but pill and surface treatments vary | Keep pills only for filters/tags; use a shared selected state and compact toolbar material |
|
|
51
|
+
| `Calendar` | Accessible date grid with one-off card styling | Move it onto overlay tokens and use compact circular/rounded selection states without changing behaviour |
|
|
52
|
+
|
|
53
|
+
### Overlays And Disclosure
|
|
54
|
+
|
|
55
|
+
| Elements | Current character | macOS identity treatment |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| `Modal` | Radix behaviour and strong floating shadow | Use a cleaner overlay material, title-bar rhythm, hairline separator, and consistent close control |
|
|
58
|
+
| `DropdownMenu`, `Tooltip`, `CommandPalette` | Each has a different overlay implementation and visual formula | Unify overlay radius, border, shadow, blur fallback, row height, selected state, and entrance motion |
|
|
59
|
+
| `Accordion`, `CollapsibleSection` | Correct disclosure semantics but hardcoded large radii and broad transitions | Use shared surface radius and only animate grid/chevron properties |
|
|
60
|
+
| `SuiteMobileDrawer` | Accessible Radix drawer with native-style motion | Retain mobile sheet/drawer behaviour; use the same material and focus contract as desktop overlays |
|
|
61
|
+
|
|
62
|
+
### Surfaces, Data, And Content
|
|
63
|
+
|
|
64
|
+
| Elements | Current character | macOS identity treatment |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| `Card`, `Panel`, `Stat` | Base CSS says static cards are flat, but suite skin gives every card a shadow and 12px radius | Restore semantic depth: static cards flat, interactive cards raised, panels inset, stats aligned with cards |
|
|
67
|
+
| `Table` | Compact and readable | Use a quiet header material, selected/hover row tint, tabular values, and visible scroll-container focus |
|
|
68
|
+
| `DonutChart`, `BarChart`, `StackedBarChart` | Token-driven and lightweight | Keep data colours; make chart wells flat and legends follow table typography |
|
|
69
|
+
| `Avatar`, `AvatarGroup`, `Kbd`, `Link`, typography, icons | Strong owned identity | Preserve Open Runde and bespoke glyphs; use semantic avatar foregrounds and system glyph stacks only where function requires them |
|
|
70
|
+
| `AuthLayout`, `AuthCard`, `SettingsLayout`, `SettingsNav` | Clear compositions with separate surface formulas | Apply the shared material hierarchy; settings navigation should read like a macOS source list without copying System Settings |
|
|
71
|
+
| Marketing components and illustrations | New user-owned work in progress | Audit separately after it settles; do not let application chrome changes overwrite its animation or layout work |
|
|
72
|
+
|
|
73
|
+
### Suite Chrome And Workflows
|
|
74
|
+
|
|
75
|
+
| Elements | Current character | macOS identity treatment |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| `SuiteAppLayout`, `SuiteSidebar`, `SuiteMobileHeader`, `SuiteBottomNav` | Responsive shell, with translucency already present on mobile | Extend quiet material hierarchy to desktop sidebar and chrome; keep mobile behaviour platform-appropriate |
|
|
78
|
+
| `AppSwitcher`, `SuiteWorkspaceSwitcher`, `SuiteUserMenu`, notifications | Good compact interaction patterns, inconsistent one-off radius/focus/shadow values | Use one source-list row, menu selection, icon size, and focus contract |
|
|
79
|
+
| `SuitePage`, headers, breadcrumbs, toolbars, tabs, section headers | Strong layout foundations | Tighten toolbar grouping and selected tabs; do not change page structure |
|
|
80
|
+
| Today components | More expressive and rounded than the rest of the suite | Keep the authored Today personality, but map panels and actions to shared geometry/depth tokens |
|
|
81
|
+
| AI panel and markdown | Purpose-built conversational UI with many local visual decisions | Preserve chat anatomy; standardise composer, action controls, bubbles, and floating panel depth only |
|
|
82
|
+
| Integration picker/rules, client/project directory, palette library | Product workflows, not primitives | Inherit the revised tokens first; replace local visual exceptions only when snapshots show a mismatch |
|
|
83
|
+
|
|
84
|
+
## Ranked Findings
|
|
85
|
+
|
|
86
|
+
### P0: Resolve Before Styling Expansion
|
|
87
|
+
|
|
88
|
+
1. **Two competing geometry systems.** `globals.css` defines 6px controls,
|
|
89
|
+
8px surfaces, and 12px overlays, while `suite-skin.css` overrides every
|
|
90
|
+
`.ph-card` to 12px. Components also add `rounded-lg`, `rounded-xl`, and
|
|
91
|
+
`rounded-2xl`. A macOS identity will look cosmetic until geometry has one
|
|
92
|
+
source of truth.
|
|
93
|
+
2. **Depth semantics conflict.** The base card contract is flat by default,
|
|
94
|
+
but suite skin shadows every card. Panels, stats, filters, tables, and
|
|
95
|
+
interactive controls often share similar elevation. Static, raised, inset,
|
|
96
|
+
and floating surfaces need distinct meanings.
|
|
97
|
+
3. **Hedgehog Dark does not match its contract.** Its registry description
|
|
98
|
+
promises Hedgehog orange, while its tokens explicitly implement a Microsoft
|
|
99
|
+
Copilot-style graphite/blue theme. The reference pair cannot establish a
|
|
100
|
+
coherent identity until dark mode returns to warm graphite and orange.
|
|
101
|
+
4. **Focus styling is fragmented.** Public controls alternate between a 3px
|
|
102
|
+
semantic outline, Tailwind `ring-2`, brand rings, and local border-only
|
|
103
|
+
focus. macOS-like precision depends on one visible focus halo, not a new
|
|
104
|
+
effect per component.
|
|
105
|
+
5. **Global touch CSS disables browser zoom on coarse pointers.** The
|
|
106
|
+
`touch-action: pan-x pan-y` rule intentionally removes pinch zoom. This is an
|
|
107
|
+
accessibility regression and should not be part of a native-feel strategy.
|
|
108
|
+
6. **The intended mobile modal sheet is not fully expressed by the current
|
|
109
|
+
CSS.** `Modal` content remains fixed and centred; changing overlay alignment
|
|
110
|
+
and panel width/radius does not move that fixed panel to the bottom. Verify
|
|
111
|
+
and correct the transform/position contract before polishing sheets.
|
|
112
|
+
|
|
113
|
+
### P1: Establish The Identity
|
|
114
|
+
|
|
115
|
+
1. Preserve the tactile Lemon button, but reserve pronounced depth for actual
|
|
116
|
+
actions. Secondary, toolbar, filter, and navigation controls should use
|
|
117
|
+
quieter faces.
|
|
118
|
+
2. Introduce material through existing semantic surfaces: opaque content,
|
|
119
|
+
subtly translucent sidebar/toolbars, and floating overlays. Do not add a
|
|
120
|
+
second theme system or a glass variant API.
|
|
121
|
+
3. Make `SegmentedControl`, source-list selection, toggles, menus, and command
|
|
122
|
+
palette the strongest macOS cues. These familiar interaction patterns carry
|
|
123
|
+
more identity than decorative window chrome.
|
|
124
|
+
4. Keep Open Runde. The rounded type is core to The Old UI; replacing it with
|
|
125
|
+
an Apple font would divert the design too far.
|
|
126
|
+
5. Standardise control, surface, and overlay radii through
|
|
127
|
+
`--ph-radius-control`, `--ph-radius-surface`, and `--ph-radius-overlay`.
|
|
128
|
+
Pills remain limited to tags, filters, statuses, toggles, and avatars.
|
|
129
|
+
6. Standardise motion at 120ms for control feedback and 180ms for overlays.
|
|
130
|
+
Keep spring motion for drawers and authored Today/AI moments only.
|
|
131
|
+
|
|
132
|
+
### P2: Correct Local Drift
|
|
133
|
+
|
|
134
|
+
1. Replace public-component `transition-all` usage with explicit properties.
|
|
135
|
+
2. Move Command Palette, Calendar, Accordion, Suite Empty State, Today panels,
|
|
136
|
+
and suite switchers from one-off shadows/radii to semantic tokens.
|
|
137
|
+
3. Change Avatar's default `text-white` to `--ph-on-accent` and use
|
|
138
|
+
`React.Children.toArray` for grouping.
|
|
139
|
+
4. Give Table an empty state and visible focus treatment for its scroll region.
|
|
140
|
+
5. Add grouped selection semantics and keyboard movement to Segmented Control.
|
|
141
|
+
6. Keep decorative `Dot` hidden, but require adjacent text whenever it conveys
|
|
142
|
+
status.
|
|
143
|
+
7. Add focus-visible treatment to the new marketing motion control and links
|
|
144
|
+
before publishing those exports.
|
|
145
|
+
|
|
146
|
+
## Proposed Visual Contract
|
|
147
|
+
|
|
148
|
+
### Geometry
|
|
149
|
+
|
|
150
|
+
- Control: keep 6px.
|
|
151
|
+
- Surface: converge on 10px rather than the current 8px/12px split.
|
|
152
|
+
- Overlay: keep 12px desktop; mobile sheets may use 16px top corners.
|
|
153
|
+
- Pill: only semantic pill/capsule controls.
|
|
154
|
+
- Circular: avatar, status dot, icon-only circular action.
|
|
155
|
+
|
|
156
|
+
### Depth
|
|
157
|
+
|
|
158
|
+
- Flat: cards, alerts, charts, tables, settings content.
|
|
159
|
+
- Inset: inputs, segmented tracks, code/query wells, sidebars when visually
|
|
160
|
+
grouped with the canvas.
|
|
161
|
+
- Raised: buttons, selected segments, clickable cards.
|
|
162
|
+
- Floating: dropdowns, tooltips, command palette, modal, drawer.
|
|
163
|
+
|
|
164
|
+
### Material
|
|
165
|
+
|
|
166
|
+
- Content stays opaque for readability.
|
|
167
|
+
- Sidebar, top bar, bottom navigation, and temporary overlays may mix the
|
|
168
|
+
semantic surface with transparency and blur.
|
|
169
|
+
- Every blur gets an opaque fallback.
|
|
170
|
+
- No gradients are added to routine product chrome.
|
|
171
|
+
|
|
172
|
+
### Colour
|
|
173
|
+
|
|
174
|
+
- Keep each product theme's palette.
|
|
175
|
+
- Tune Hedgehog Light/Dark first as the reference pair.
|
|
176
|
+
- Preserve orange as Hedgehog action/brand colour in both modes.
|
|
177
|
+
- Use semantic blue for focus, not for unrelated selection or decoration.
|
|
178
|
+
- Keep vivid categorical chart colours.
|
|
179
|
+
|
|
180
|
+
## Implementation Plan
|
|
181
|
+
|
|
182
|
+
### Rollout Status
|
|
183
|
+
|
|
184
|
+
All four phases are implemented on `feat/macos-identity`:
|
|
185
|
+
|
|
186
|
+
- Foundation tokens, Hedgehog Dark, modal positioning, and the first-slice proof
|
|
187
|
+
are complete.
|
|
188
|
+
- Public primitives now share the geometry, depth, overlay, focus, and motion
|
|
189
|
+
contract, with grouped keyboard selection and explicit empty states.
|
|
190
|
+
- Suite shell, navigation, settings, Today, AI, integration, directory, and
|
|
191
|
+
palette surfaces now inherit the same contract without changing their layout
|
|
192
|
+
or authored interaction models.
|
|
193
|
+
- Marketing header, links, buttons, and motion control use the final contract;
|
|
194
|
+
Open Runde, illustration geometry, and authored motion remain unchanged.
|
|
195
|
+
- Playwright now covers focused controls, command palette, Ask AI, desktop
|
|
196
|
+
sidebar, mobile header, and mobile bottom navigation in addition to the
|
|
197
|
+
original light/dark workflow matrix.
|
|
198
|
+
|
|
199
|
+
### Phase 1: Foundation Proof
|
|
200
|
+
|
|
201
|
+
Files: `src/app/globals.css`, `src/styles/themes.css`,
|
|
202
|
+
`src/styles/suite-skin.css`, and the existing visual fixture only.
|
|
203
|
+
|
|
204
|
+
1. Reconcile the three radius tokens and remove the suite card override.
|
|
205
|
+
2. Reconcile flat, inset, raised, and floating shadows.
|
|
206
|
+
3. Define one focus-visible formula and apply it through shared selectors.
|
|
207
|
+
4. Retune Hedgehog Dark to warm graphite plus orange while preserving contrast.
|
|
208
|
+
5. Remove the zoom restriction and fix the mobile sheet position contract.
|
|
209
|
+
6. Prove the direction on Button, Input, Card, Segmented Control, Dropdown, and
|
|
210
|
+
Modal before touching the broader library.
|
|
211
|
+
|
|
212
|
+
Exit criteria:
|
|
213
|
+
|
|
214
|
+
- Existing first-slice fixture remains recognisably The Old UI.
|
|
215
|
+
- The same fixture reads as macOS-influenced in light and dark without window
|
|
216
|
+
cosplay.
|
|
217
|
+
- Static and interactive surfaces are distinguishable in grayscale.
|
|
218
|
+
- Desktop and mobile snapshots pass after intentional baseline review.
|
|
219
|
+
|
|
220
|
+
### Phase 2: Primitive Rollout
|
|
221
|
+
|
|
222
|
+
1. Apply the contract to all forms, statuses, loading states, filtering,
|
|
223
|
+
calendar, command palette, tooltip, accordion, table, stat, avatar, and
|
|
224
|
+
typography utility elements.
|
|
225
|
+
2. Replace local radii, shadows, focus rings, and broad transitions only where
|
|
226
|
+
the semantic contract covers them.
|
|
227
|
+
3. Keep component APIs stable unless an accessibility fix requires a small
|
|
228
|
+
addition.
|
|
229
|
+
|
|
230
|
+
Exit criteria:
|
|
231
|
+
|
|
232
|
+
- Every public UI element has rest, hover, focus, active/selected, disabled,
|
|
233
|
+
loading, and error treatment where applicable.
|
|
234
|
+
- No public primitive invents a second overlay or control style.
|
|
235
|
+
|
|
236
|
+
### Phase 3: Suite Chrome
|
|
237
|
+
|
|
238
|
+
1. Apply desktop material hierarchy to app layout, sidebar, page headers,
|
|
239
|
+
switchers, menus, settings navigation, and command surfaces.
|
|
240
|
+
2. Keep mobile header, drawer, sheet, and bottom navigation touch-first rather
|
|
241
|
+
than forcing desktop macOS patterns onto phones.
|
|
242
|
+
3. Let Today, AI, integration, and directory workflows inherit tokens first;
|
|
243
|
+
make local edits only for visible outliers.
|
|
244
|
+
|
|
245
|
+
Exit criteria:
|
|
246
|
+
|
|
247
|
+
- All five consuming applications share the identity without losing their
|
|
248
|
+
palette or product workflows.
|
|
249
|
+
- Dense pages remain compact and readable at desktop and mobile widths.
|
|
250
|
+
|
|
251
|
+
### Phase 4: Marketing Integration
|
|
252
|
+
|
|
253
|
+
1. Rebase the new marketing components onto the final shared focus, radius,
|
|
254
|
+
button, and material contract.
|
|
255
|
+
2. Preserve the current user-owned illustration and motion work.
|
|
256
|
+
3. Keep expressive atmosphere on public pages only; do not leak it into dense
|
|
257
|
+
application workspaces.
|
|
258
|
+
|
|
259
|
+
## Verification
|
|
260
|
+
|
|
261
|
+
Use existing infrastructure; do not add Storybook or another visual system.
|
|
262
|
+
|
|
263
|
+
1. `bun run check`
|
|
264
|
+
2. `bun run build`
|
|
265
|
+
3. `bun run build:lib`
|
|
266
|
+
4. `bun run package:smoke`
|
|
267
|
+
5. `bun run test:visual`
|
|
268
|
+
6. Review light/dark screenshots at mobile and desktop widths.
|
|
269
|
+
7. Add focused screenshots for segmented control, input focus/error, dropdown,
|
|
270
|
+
command palette, desktop sidebar, mobile drawer, and mobile modal sheet.
|
|
271
|
+
8. Run contrast checks for all 16 themes and keyboard-only passes for every
|
|
272
|
+
interactive composite.
|
|
273
|
+
|
|
274
|
+
## Recommended First Result
|
|
275
|
+
|
|
276
|
+
Implement only Phase 1 first. It is broad enough to show the identity but
|
|
277
|
+
small enough to reject or refine without rewriting every component. Once the
|
|
278
|
+
light/dark first-slice screenshots are approved, roll the same contract through
|
|
279
|
+
the remaining primitives and suite chrome.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenide-io/the-old-ui-theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Props-driven React components and theme tokens inspired by classic interface design — optimized for Next.js apps and internal tools.",
|
|
5
5
|
"author": "Xenide",
|
|
6
6
|
"license": "MIT",
|