@tenerife.music/ui 1.0.13 → 1.0.15
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/README.md +112 -418
- package/dist/{colors-CVA7_16U.d.cts → colors-BZtZJBBm.d.cts} +1 -1
- package/dist/{colors-CVA7_16U.d.ts → colors-BZtZJBBm.d.ts} +1 -1
- package/dist/{index-BgXvioll.d.cts → index-CP_dmFn4.d.cts} +435 -175
- package/dist/{index-Bv4wWj9I.d.ts → index-CP_dmFn4.d.ts} +435 -175
- package/dist/index.cjs +1406 -654
- package/dist/index.d.cts +119 -45
- package/dist/index.d.ts +119 -45
- package/dist/index.mjs +1406 -655
- package/dist/preset.cjs +1 -0
- package/dist/preset.mjs +1 -0
- package/dist/theme/index.d.cts +2 -2
- package/dist/theme/index.d.ts +2 -2
- package/dist/tokens/index.cjs +194 -221
- package/dist/tokens/index.d.cts +89 -2
- package/dist/tokens/index.d.ts +89 -2
- package/dist/tokens/index.mjs +194 -222
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# 🌴
|
|
1
|
+
# 🌴 TUI
|
|
2
2
|
|
|
3
|
-
**
|
|
4
|
-
|
|
3
|
+
**Token-driven UI architecture for long-living React products**
|
|
4
|
+
Strict. Predictable. Built for system-level consistency.
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|

|
|
@@ -10,508 +10,202 @@ Elegant. Token-driven. Fully Typed. Built for Luxury Interfaces.
|
|
|
10
10
|

|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
|
-
<img src="https://raw.githubusercontent.com/Tureckiy-zart/tenerife-ui/main/.github/banner.png" width="100%" alt="
|
|
13
|
+
<img src="https://raw.githubusercontent.com/Tureckiy-zart/tenerife-ui/main/.github/banner.png" width="100%" alt="TUI Banner" />
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
|
-
<strong>
|
|
18
|
-
|
|
17
|
+
<strong>
|
|
18
|
+
A production-grade, token-driven design infrastructure for React applications.<br/>
|
|
19
|
+
Built on a locked Foundation layer, Radix UI behavioral primitives, and strict TypeScript contracts.
|
|
20
|
+
</strong>
|
|
19
21
|
</p>
|
|
20
22
|
|
|
21
|
-
> ⚠️ **Important:** The library is under active development. The API may change between versions. Use at your own risk. Thorough testing is recommended before using in production.
|
|
22
|
-
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
##
|
|
26
|
-
|
|
27
|
-
### Installation
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
# npm
|
|
31
|
-
npm install @tenerife.music/ui
|
|
32
|
-
|
|
33
|
-
# pnpm
|
|
34
|
-
pnpm add @tenerife.music/ui
|
|
25
|
+
## 🧭 Architectural Manifest
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
yarn add @tenerife.music/ui
|
|
38
|
-
```
|
|
27
|
+
TUI is **not a beginner-friendly UI library**.
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
This system is intentionally built for developers and teams who value
|
|
30
|
+
**architectural consistency, long-term scalability, and system-level thinking**
|
|
31
|
+
over quick experimentation or visual convenience.
|
|
41
32
|
|
|
42
|
-
|
|
43
|
-
import { ThemeProvider, Button } from "@tenerife.music/ui";
|
|
33
|
+
### This library is for you if:
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
```
|
|
35
|
+
- You build **long-living products**, not throwaway interfaces
|
|
36
|
+
- You want to **prevent design entropy**, not fight it later
|
|
37
|
+
- You prefer **strict rules over flexible chaos**
|
|
38
|
+
- You see constraints as a **feature**, not a limitation
|
|
39
|
+
- You are comfortable trading short-term DX for long-term maintainability
|
|
53
40
|
|
|
54
|
-
|
|
41
|
+
### This library is NOT for you if:
|
|
55
42
|
|
|
56
|
-
|
|
43
|
+
- You want to freely tweak styles with strings, numbers, or ad-hoc classes
|
|
44
|
+
- You expect “easy overrides” or escape hatches
|
|
45
|
+
- You are looking for a quick UI kit or experimentation playground
|
|
46
|
+
- You prefer visual freedom over architectural discipline
|
|
57
47
|
|
|
58
|
-
|
|
48
|
+
### Core philosophy
|
|
59
49
|
|
|
60
|
-
|
|
50
|
+
- **Tokens are the single source of truth**
|
|
51
|
+
- **The Foundation layer is locked and immutable**
|
|
52
|
+
- **Design decisions must be explicit and centralized**
|
|
53
|
+
- **Constraints exist to protect the system — even from its author**
|
|
61
54
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- 🎯 **TypeScript-first** — full typing for all components and API
|
|
65
|
-
- ♿ **Accessibility** — WCAG AA compliance out of the box, full keyboard and screen reader support
|
|
66
|
-
- 📦 **Tree-shakeable** — bundle size optimization through named imports
|
|
67
|
-
- 🎭 **CVA variants** — unified Variant API for all components
|
|
68
|
-
- 🎨 **Tailwind CSS** — full integration with Tailwind preset
|
|
69
|
-
- 🚀 **Production-ready** — tested and ready for production use
|
|
55
|
+
If the system feels strict, uncomfortable, or limiting at first —
|
|
56
|
+
that means it is working as intended.
|
|
70
57
|
|
|
71
58
|
---
|
|
72
59
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
| Document | Description |
|
|
76
|
-
| ------------------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
77
|
-
| **[Complete Guide](./docs/GETTING_STARTED.md)** | Comprehensive guide for installation, setup, and usage |
|
|
78
|
-
| [Quick Start](./docs/QUICK_START.md) | Get started in 30 seconds |
|
|
79
|
-
| [API Reference](./docs/public-api.md) | Complete API documentation for all components |
|
|
80
|
-
| [Tokens Guide](./docs/TOKENS_GUIDE.md) | Working with design tokens |
|
|
81
|
-
| [Theme Guide](./docs/THEME_GUIDE.md) | Theme setup and customization |
|
|
82
|
-
| **[Architecture Lock](./docs/architecture/TUI_ARCHITECTURE_LOCK.md)** | 🔒 Foundation architecture lock and rules |
|
|
83
|
-
| **[Final Foundation Lock](./docs/architecture/FINAL_FOUNDATION_LOCK.md)** | 🔒 **Authoritative Foundation lock** (single source of truth) |
|
|
84
|
-
| [Storybook](https://Tureckiy-zart.github.io/tenerife-ui/) | Interactive examples of all components |
|
|
85
|
-
|
|
86
|
-
> 🔒 **Architecture Lock:** The UI foundation architecture is **locked** and **immutable**. See [Final Foundation Lock](./docs/architecture/FINAL_FOUNDATION_LOCK.md) for the authoritative Foundation lock document (single source of truth), or [Architecture Lock](./docs/architecture/TUI_ARCHITECTURE_LOCK.md) for detailed architecture rules and guidelines.
|
|
60
|
+
> ⚠️ **Status:** The Foundation layer is locked and stable. Extension components may evolve.
|
|
61
|
+
> This system is actively developed for real production usage.
|
|
87
62
|
|
|
88
63
|
---
|
|
89
64
|
|
|
90
|
-
##
|
|
65
|
+
## 🚀 Initial Setup
|
|
91
66
|
|
|
92
|
-
|
|
67
|
+
Minimum setup required to evaluate and work with the system.
|
|
93
68
|
|
|
94
|
-
|
|
95
|
-
- **React DOM**: `^18 || ^19`
|
|
96
|
-
- **Node.js**: `>=22` (recommended)
|
|
97
|
-
- **TypeScript**: `>=5.0` (optional, but recommended)
|
|
98
|
-
|
|
99
|
-
### Step 1: Install Package
|
|
69
|
+
### Installation
|
|
100
70
|
|
|
101
71
|
```bash
|
|
72
|
+
# npm
|
|
102
73
|
npm install @tenerife.music/ui
|
|
103
|
-
npm install -D tailwindcss postcss autoprefixer
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Step 2: Configure Tailwind CSS
|
|
107
|
-
|
|
108
|
-
Create `tailwind.config.ts`:
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
import type { Config } from "tailwindcss";
|
|
112
|
-
import preset from "@tenerife.music/ui/preset";
|
|
113
|
-
|
|
114
|
-
const config: Config = {
|
|
115
|
-
content: [
|
|
116
|
-
"./src/**/*.{js,ts,jsx,tsx}",
|
|
117
|
-
"./node_modules/@tenerife.music/ui/dist/**/*.{js,ts,jsx,tsx}",
|
|
118
|
-
],
|
|
119
|
-
presets: [preset],
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export default config;
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Step 3: Import Styles
|
|
126
|
-
|
|
127
|
-
In your application's root file:
|
|
128
74
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### Step 4: Setup ThemeProvider
|
|
134
|
-
|
|
135
|
-
```tsx
|
|
136
|
-
import { ThemeProvider } from "@tenerife.music/ui";
|
|
75
|
+
# pnpm
|
|
76
|
+
pnpm add @tenerife.music/ui
|
|
137
77
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
<ThemeProvider defaultMode="night" enableSystem={true}>
|
|
141
|
-
<YourApp />
|
|
142
|
-
</ThemeProvider>
|
|
143
|
-
);
|
|
144
|
-
}
|
|
78
|
+
# yarn
|
|
79
|
+
yarn add @tenerife.music/ui
|
|
145
80
|
```
|
|
146
81
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## 💡 Usage Examples
|
|
152
|
-
|
|
153
|
-
### Basic Example
|
|
82
|
+
### Minimal Example
|
|
154
83
|
|
|
155
84
|
```tsx
|
|
156
|
-
import {
|
|
157
|
-
ThemeProvider,
|
|
158
|
-
Button,
|
|
159
|
-
Card,
|
|
160
|
-
CardHeader,
|
|
161
|
-
CardTitle,
|
|
162
|
-
CardContent,
|
|
163
|
-
} from "@tenerife.music/ui";
|
|
85
|
+
import { ThemeProvider, Button } from "@tenerife.music/ui";
|
|
164
86
|
|
|
165
87
|
export default function App() {
|
|
166
88
|
return (
|
|
167
89
|
<ThemeProvider defaultMode="night">
|
|
168
|
-
<
|
|
169
|
-
<CardHeader>
|
|
170
|
-
<CardTitle>Welcome</CardTitle>
|
|
171
|
-
</CardHeader>
|
|
172
|
-
<CardContent>
|
|
173
|
-
<Button variant="default">Get Started</Button>
|
|
174
|
-
</CardContent>
|
|
175
|
-
</Card>
|
|
176
|
-
</ThemeProvider>
|
|
177
|
-
);
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Theme Toggle
|
|
182
|
-
|
|
183
|
-
```tsx
|
|
184
|
-
import { ThemeProvider, useTheme, Button } from "@tenerife.music/ui";
|
|
185
|
-
|
|
186
|
-
function ThemeToggle() {
|
|
187
|
-
const { mode, toggleMode } = useTheme();
|
|
188
|
-
|
|
189
|
-
return (
|
|
190
|
-
<Button onClick={toggleMode} variant="outline">
|
|
191
|
-
{mode === "night" ? "☀️ Day" : "🌙 Night"}
|
|
192
|
-
</Button>
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export default function App() {
|
|
197
|
-
return (
|
|
198
|
-
<ThemeProvider defaultMode="night" enableSystem={true}>
|
|
199
|
-
<ThemeToggle />
|
|
90
|
+
<Button variant="default">Click me</Button>
|
|
200
91
|
</ThemeProvider>
|
|
201
92
|
);
|
|
202
93
|
}
|
|
203
94
|
```
|
|
204
95
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
```tsx
|
|
208
|
-
import {
|
|
209
|
-
Field,
|
|
210
|
-
FieldLabel,
|
|
211
|
-
FieldControl,
|
|
212
|
-
FieldError,
|
|
213
|
-
Input,
|
|
214
|
-
Button,
|
|
215
|
-
Card,
|
|
216
|
-
CardHeader,
|
|
217
|
-
CardTitle,
|
|
218
|
-
CardContent,
|
|
219
|
-
} from "@tenerife.music/ui";
|
|
220
|
-
|
|
221
|
-
function ContactForm() {
|
|
222
|
-
return (
|
|
223
|
-
<Card>
|
|
224
|
-
<CardHeader>
|
|
225
|
-
<CardTitle>Contact Us</CardTitle>
|
|
226
|
-
</CardHeader>
|
|
227
|
-
<CardContent>
|
|
228
|
-
<form className="space-y-4">
|
|
229
|
-
<Field>
|
|
230
|
-
<FieldLabel>Email</FieldLabel>
|
|
231
|
-
<FieldControl asChild>
|
|
232
|
-
<Input type="email" placeholder="example@email.com" />
|
|
233
|
-
</FieldControl>
|
|
234
|
-
<FieldError>Email is required</FieldError>
|
|
235
|
-
</Field>
|
|
236
|
-
<Button type="submit" variant="default">
|
|
237
|
-
Submit
|
|
238
|
-
</Button>
|
|
239
|
-
</form>
|
|
240
|
-
</CardContent>
|
|
241
|
-
</Card>
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
> 📖 **More examples:** See the [Complete Guide](./docs/GETTING_STARTED.md) for additional usage examples.
|
|
96
|
+
> 📖 **Note:** This example demonstrates API shape only. Understanding the system
|
|
97
|
+
> requires familiarity with tokens, variants, and architectural constraints.
|
|
247
98
|
|
|
248
99
|
---
|
|
249
100
|
|
|
250
|
-
##
|
|
251
|
-
|
|
252
|
-
### Primitives
|
|
253
|
-
|
|
254
|
-
Basic UI components for building interfaces:
|
|
255
|
-
|
|
256
|
-
- **Button** — buttons with various variants (default, outline, destructive, ghost, link)
|
|
257
|
-
- **Input** — text input fields with state support (success, error, warning)
|
|
258
|
-
- **Textarea** — multi-line text input
|
|
259
|
-
- **Label** — form field labels
|
|
260
|
-
- **Card** — cards with variants (default, elevated, glass, outline)
|
|
261
|
-
- **Badge** — badges for labels and statuses
|
|
262
|
-
- **Text / Heading** — typography components
|
|
263
|
-
|
|
264
|
-
### Forms
|
|
265
|
-
|
|
266
|
-
Components for creating forms:
|
|
267
|
-
|
|
268
|
-
- **Checkbox** — checkboxes with state support
|
|
269
|
-
- **Radio / RadioGroup** — radio buttons and groups
|
|
270
|
-
- **Select** — dropdown lists with search
|
|
271
|
-
- **Field** — form field wrapper with validation
|
|
272
|
-
- **FormInput / FormSelect / FormTextarea** — specialized form components
|
|
273
|
-
|
|
274
|
-
### Layout
|
|
275
|
-
|
|
276
|
-
Components for structuring layouts:
|
|
277
|
-
|
|
278
|
-
- **Flex** — flexbox container with direction, alignment, and gap settings
|
|
279
|
-
- **Grid** — responsive grid with breakpoint support
|
|
280
|
-
- **Stack** — vertical/horizontal element placement
|
|
281
|
-
- **Section** — sections with responsive padding
|
|
282
|
-
- **Container** — containers with width constraints
|
|
283
|
-
|
|
284
|
-
### Overlays
|
|
285
|
-
|
|
286
|
-
Components for modal windows and popup elements:
|
|
287
|
-
|
|
288
|
-
- **Modal** — modal windows with variants
|
|
289
|
-
- **Dialog** — dialog windows (DialogRoot, DialogTrigger, DialogContent)
|
|
290
|
-
- **Toast** — notifications with ToastProvider system
|
|
291
|
-
- **Popover** — popup tooltips
|
|
292
|
-
- **Tooltip** — tooltips for elements
|
|
293
|
-
|
|
294
|
-
### Navigation
|
|
295
|
-
|
|
296
|
-
Components for interface navigation:
|
|
297
|
-
|
|
298
|
-
- **Tabs** — tabs with keyboard support
|
|
299
|
-
- **Breadcrumbs** — breadcrumb navigation
|
|
300
|
-
- **Pagination** — pagination with settings
|
|
301
|
-
- **Stepper** — step-by-step forms
|
|
302
|
-
- **SegmentedControl** — segmented control
|
|
303
|
-
|
|
304
|
-
### Data
|
|
305
|
-
|
|
306
|
-
Components for displaying data:
|
|
307
|
-
|
|
308
|
-
- **Table** — tables with sorting and filtering
|
|
309
|
-
- **DataList** — data lists (DataListRoot, DataListItem, DataListLabel, DataListValue)
|
|
310
|
-
- **Skeleton** — loading state skeletons
|
|
311
|
-
- **EmptyState** — empty states with actions
|
|
101
|
+
## ✨ Key Characteristics
|
|
312
102
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
- **
|
|
318
|
-
- **
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
Specialized components for specific domains:
|
|
323
|
-
|
|
324
|
-
- **EventCard** — event cards with variants and sizes
|
|
325
|
-
- **VenueCard** — venue cards
|
|
326
|
-
- **ArtistCard** — artist cards
|
|
327
|
-
- **TicketCard** — ticket cards
|
|
328
|
-
- **PromoCard** — promo cards
|
|
329
|
-
|
|
330
|
-
> 📖 **Full list:** See [API Reference](./docs/public-api.md) for a complete list of all components and their props.
|
|
103
|
+
- 🎨 **Token-driven architecture** — no raw values, no ad-hoc styles
|
|
104
|
+
- 🏛️ **Radix UI behavioral foundation** — accessibility and interactions are delegated
|
|
105
|
+
- 🔒 **Locked Foundation layer** — one canonical component per category
|
|
106
|
+
- 🧩 **Extension-based composition** — no Foundation duplication
|
|
107
|
+
- 🌓 **Theme-aware tokens** — day/night modes via semantic tokens
|
|
108
|
+
- 🎯 **TypeScript-first API** — strict, expressive, autocomplete-driven
|
|
109
|
+
- ♿ **Accessibility-first** — WCAG-compliant by design
|
|
110
|
+
- 🚫 **No escape hatches** — consistency over convenience
|
|
331
111
|
|
|
332
112
|
---
|
|
333
113
|
|
|
334
|
-
##
|
|
335
|
-
|
|
336
|
-
Tenerife UI uses a fully tokenized design system:
|
|
337
|
-
|
|
338
|
-
### Colors
|
|
339
|
-
|
|
340
|
-
- 100+ color tokens
|
|
341
|
-
- Full color scales (primary, accent, secondary)
|
|
342
|
-
- Surface tokens (base, elevated1-3, overlay, glass)
|
|
343
|
-
- Semantic colors (success, error, warning, info)
|
|
344
|
-
- Text colors (primary, secondary, tertiary, muted)
|
|
345
|
-
- Day/night mode support
|
|
346
|
-
|
|
347
|
-
### Typography
|
|
348
|
-
|
|
349
|
-
- Fluid clamp scale for responsive sizes
|
|
350
|
-
- 13 text styles
|
|
351
|
-
- 9 font weights (thin - black)
|
|
352
|
-
- 6 line-height variants
|
|
353
|
-
- 6 letter-spacing variants
|
|
354
|
-
|
|
355
|
-
### Spacing
|
|
356
|
-
|
|
357
|
-
- 8px-based system (scale 0–96)
|
|
358
|
-
- Semantic tokens (xs, sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl)
|
|
359
|
-
- Layout tokens (section padding, container widths, grid gaps)
|
|
360
|
-
|
|
361
|
-
### Shadows
|
|
362
|
-
|
|
363
|
-
- Elevation levels (none, xs, sm, md, lg, xl, 2xl)
|
|
364
|
-
- Colored shadows (primary-_, accent-_)
|
|
365
|
-
- Glow effects (primary-glow-subtle, primary-glow-medium)
|
|
366
|
-
- Focus rings (focus-ring-default, focus-ring-primary)
|
|
367
|
-
|
|
368
|
-
### Radius
|
|
369
|
-
|
|
370
|
-
- Radius system (none, xs, sm, md, lg, xl, 2xl, 3xl, full)
|
|
371
|
-
- Component standards (button, card, input, badge)
|
|
372
|
-
|
|
373
|
-
### Motion
|
|
374
|
-
|
|
375
|
-
- Durations (instant, fast, normal, slow, slower, slowest)
|
|
376
|
-
- Easing functions (linear, ease-in, ease-out, ease-in-out, bounce, elastic)
|
|
377
|
-
- Pre-configured transitions
|
|
378
|
-
- Keyframes (fade, slide, scale, spin, pulse, bounce)
|
|
114
|
+
## 📚 Documentation
|
|
379
115
|
|
|
380
|
-
|
|
116
|
+
| Document | Description |
|
|
117
|
+
| ------------------------- | ------------------------------------- |
|
|
118
|
+
| **Complete Guide** | System overview and usage principles |
|
|
119
|
+
| Tokens Guide | Design token structure and philosophy |
|
|
120
|
+
| Theme Guide | Theme configuration and modes |
|
|
121
|
+
| **Architecture Lock** | Canonical architectural constraints |
|
|
122
|
+
| **Final Foundation Lock** | Authoritative source of truth |
|
|
123
|
+
| Storybook | Component examples and contracts |
|
|
381
124
|
|
|
382
125
|
---
|
|
383
126
|
|
|
384
|
-
##
|
|
385
|
-
|
|
386
|
-
### Token-first Architecture
|
|
387
|
-
|
|
388
|
-
No raw styles. Everything through tokens. This ensures consistency and easy customization.
|
|
127
|
+
## 🏗 Architecture Overview
|
|
389
128
|
|
|
390
|
-
###
|
|
129
|
+
### Foundation Layer (Locked)
|
|
391
130
|
|
|
392
|
-
|
|
131
|
+
The Foundation layer defines **canonical behavior** and is **immutable**.
|
|
132
|
+
There is exactly **one Foundation component per category**.
|
|
393
133
|
|
|
394
|
-
|
|
134
|
+
- Modal (Dialog)
|
|
135
|
+
- Tabs
|
|
136
|
+
- Select
|
|
137
|
+
- ContextMenu
|
|
138
|
+
- Toast
|
|
395
139
|
|
|
396
|
-
All components
|
|
140
|
+
All Foundation components:
|
|
397
141
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
```
|
|
142
|
+
- delegate behavior to Radix UI
|
|
143
|
+
- expose token-driven visual APIs
|
|
144
|
+
- are backward-compatible and locked
|
|
402
145
|
|
|
403
|
-
###
|
|
146
|
+
### Extension Layer
|
|
404
147
|
|
|
405
|
-
|
|
148
|
+
Extensions compose Foundation components or implement primitives
|
|
149
|
+
that rely strictly on tokens and shared semantics.
|
|
406
150
|
|
|
407
|
-
|
|
151
|
+
Examples:
|
|
408
152
|
|
|
409
|
-
|
|
153
|
+
- Button
|
|
154
|
+
- Input / Textarea
|
|
155
|
+
- Card / Badge
|
|
156
|
+
- Layout primitives (Stack, Grid, Container)
|
|
157
|
+
- Data and feedback components
|
|
410
158
|
|
|
411
159
|
---
|
|
412
160
|
|
|
413
|
-
##
|
|
414
|
-
|
|
415
|
-
### Install Dependencies
|
|
416
|
-
|
|
417
|
-
```bash
|
|
418
|
-
pnpm install
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
### Run in Development Mode
|
|
422
|
-
|
|
423
|
-
```bash
|
|
424
|
-
pnpm dev
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
### Run Storybook
|
|
428
|
-
|
|
429
|
-
```bash
|
|
430
|
-
pnpm storybook
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
Storybook is available at `http://localhost:6006`
|
|
434
|
-
|
|
435
|
-
### Testing
|
|
436
|
-
|
|
437
|
-
```bash
|
|
438
|
-
# Run tests
|
|
439
|
-
pnpm test
|
|
161
|
+
## 🎨 Design Tokens
|
|
440
162
|
|
|
441
|
-
|
|
442
|
-
pnpm test:coverage
|
|
163
|
+
TUI uses a fully tokenized design system:
|
|
443
164
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
165
|
+
- **Colors** — semantic, theme-aware
|
|
166
|
+
- **Typography** — fluid, scalable
|
|
167
|
+
- **Spacing** — semantic and layout-based
|
|
168
|
+
- **Radius & Shadows** — consistent elevation model
|
|
169
|
+
- **Motion** — durations and easing as tokens
|
|
447
170
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
```bash
|
|
451
|
-
pnpm build
|
|
452
|
-
```
|
|
171
|
+
Tokens are **immutable contracts**, not convenience variables.
|
|
453
172
|
|
|
454
|
-
|
|
173
|
+
---
|
|
455
174
|
|
|
456
|
-
|
|
457
|
-
# Check linting
|
|
458
|
-
pnpm lint:check
|
|
175
|
+
## 🧩 Domain-Specific Components
|
|
459
176
|
|
|
460
|
-
|
|
461
|
-
|
|
177
|
+
The following components are **used internally** in Tenerife Music projects
|
|
178
|
+
and are **not generic UI primitives**:
|
|
462
179
|
|
|
463
|
-
|
|
464
|
-
|
|
180
|
+
- EventCard
|
|
181
|
+
- VenueCard
|
|
182
|
+
- ArtistCard
|
|
183
|
+
- TicketCard
|
|
184
|
+
- PromoCard
|
|
465
185
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
```
|
|
186
|
+
> These components are tightly coupled to specific product domains
|
|
187
|
+
> and are documented for reference, not as reusable primitives.
|
|
469
188
|
|
|
470
189
|
---
|
|
471
190
|
|
|
472
191
|
## 🛠 Contributing
|
|
473
192
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
- [TYPING_STANDARD.md](./docs/structure/TYPING_STANDARD.md) — typing standards
|
|
477
|
-
- [STRUCTURE_OF_WORK.md](./docs/structure/STRUCTURE_OF_WORK.md) — work structure
|
|
478
|
-
- [COMPONENT_GUIDELINES.md](./docs/structure/COMPONENT_GUIDELINES.md) — component guidelines
|
|
193
|
+
Contributions are welcome **within the boundaries of the system**.
|
|
479
194
|
|
|
480
|
-
|
|
195
|
+
> ⚠️ TUI follows a strict, opinionated architecture.
|
|
196
|
+
> All contributions are expected to respect locked layers,
|
|
197
|
+
> token ownership rules, and canonical constraints.
|
|
481
198
|
|
|
482
|
-
|
|
483
|
-
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
484
|
-
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
485
|
-
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
486
|
-
5. Open a Pull Request
|
|
199
|
+
Architectural discussions take precedence over visual changes.
|
|
487
200
|
|
|
488
201
|
---
|
|
489
202
|
|
|
490
203
|
## 📜 License
|
|
491
204
|
|
|
492
|
-
MIT License —
|
|
493
|
-
|
|
494
|
-
Use in commercial projects is permitted without restrictions.
|
|
495
|
-
|
|
496
|
-
---
|
|
497
|
-
|
|
498
|
-
## 🔗 Links
|
|
499
|
-
|
|
500
|
-
- **Repository**: [https://github.com/Tureckiy-zart/tenerife-ui](https://github.com/Tureckiy-zart/tenerife-ui)
|
|
501
|
-
- **Issues**: [https://github.com/Tureckiy-zart/tenerife-ui/issues](https://github.com/Tureckiy-zart/tenerife-ui/issues)
|
|
502
|
-
- **Storybook**: [https://Tureckiy-zart.github.io/tenerife-ui/](https://Tureckiy-zart.github.io/tenerife-ui/)
|
|
503
|
-
- **npm**: [https://www.npmjs.com/package/@tenerife.music/ui](https://www.npmjs.com/package/@tenerife.music/ui)
|
|
504
|
-
|
|
505
|
-
---
|
|
506
|
-
|
|
507
|
-
## 🎤 From the Author
|
|
508
|
-
|
|
509
|
-
Tenerife UI is my personal approach to creating a commercial, beautiful, and premium UI system.
|
|
510
|
-
|
|
511
|
-
If you're building interfaces with a "luxury, stylish, and technological" aesthetic — you're home. 🏠
|
|
205
|
+
MIT License — commercial use permitted.
|
|
512
206
|
|
|
513
207
|
---
|
|
514
208
|
|
|
515
209
|
<p align="center">
|
|
516
|
-
<strong>
|
|
210
|
+
<strong>Built for long-term systems, not short-term convenience.</strong>
|
|
517
211
|
</p>
|
|
@@ -286,4 +286,4 @@ declare const tailwindThemeColors: {
|
|
|
286
286
|
};
|
|
287
287
|
};
|
|
288
288
|
|
|
289
|
-
export { type BaseColorTokens as B, type
|
|
289
|
+
export { type BaseColorTokens as B, type ChartColors as C, type Mode as M, type SemanticColors as S, type TextColors as T, type ColorScale as a, type ColorTokens as b, type SurfaceColors as c, accentColors as d, baseColors as e, chartColors as f, colorCSSVariables as g, cssVariableColorTokens as h, semanticColors as i, surfaceColors as j, textColors as k, primaryColors as p, secondaryColors as s, tailwindThemeColors as t };
|
|
@@ -286,4 +286,4 @@ declare const tailwindThemeColors: {
|
|
|
286
286
|
};
|
|
287
287
|
};
|
|
288
288
|
|
|
289
|
-
export { type BaseColorTokens as B, type
|
|
289
|
+
export { type BaseColorTokens as B, type ChartColors as C, type Mode as M, type SemanticColors as S, type TextColors as T, type ColorScale as a, type ColorTokens as b, type SurfaceColors as c, accentColors as d, baseColors as e, chartColors as f, colorCSSVariables as g, cssVariableColorTokens as h, semanticColors as i, surfaceColors as j, textColors as k, primaryColors as p, secondaryColors as s, tailwindThemeColors as t };
|