@dailyautomations/ui 1.0.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/BRAND.md +543 -0
- package/README.md +136 -0
- package/dist/components/alert.d.ts +12 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +27 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/badge.d.ts +11 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +25 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +13 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +32 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/card.d.ts +9 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +22 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/common/badge.d.ts +11 -0
- package/dist/components/common/badge.d.ts.map +1 -0
- package/dist/components/common/badge.js +25 -0
- package/dist/components/common/badge.js.map +1 -0
- package/dist/components/common/button.d.ts +13 -0
- package/dist/components/common/button.d.ts.map +1 -0
- package/dist/components/common/button.js +32 -0
- package/dist/components/common/button.js.map +1 -0
- package/dist/components/common/card.d.ts +9 -0
- package/dist/components/common/card.d.ts.map +1 -0
- package/dist/components/common/card.js +22 -0
- package/dist/components/common/card.js.map +1 -0
- package/dist/components/common/checkbox.d.ts +7 -0
- package/dist/components/common/checkbox.d.ts.map +1 -0
- package/dist/components/common/checkbox.js +9 -0
- package/dist/components/common/checkbox.js.map +1 -0
- package/dist/components/common/input.d.ts +6 -0
- package/dist/components/common/input.d.ts.map +1 -0
- package/dist/components/common/input.js +7 -0
- package/dist/components/common/input.js.map +1 -0
- package/dist/components/common/label.d.ts +9 -0
- package/dist/components/common/label.d.ts.map +1 -0
- package/dist/components/common/label.js +11 -0
- package/dist/components/common/label.js.map +1 -0
- package/dist/components/common/textarea.d.ts +6 -0
- package/dist/components/common/textarea.d.ts.map +1 -0
- package/dist/components/common/textarea.js +7 -0
- package/dist/components/common/textarea.js.map +1 -0
- package/dist/components/dialog.d.ts +16 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +36 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/input.d.ts +6 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +7 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/skeleton.d.ts +6 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +7 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/ui/alert.d.ts +12 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +27 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/animated.d.ts +47 -0
- package/dist/components/ui/animated.d.ts.map +1 -0
- package/dist/components/ui/animated.js +96 -0
- package/dist/components/ui/animated.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +16 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +36 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +38 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +6 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +7 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +18 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/toast.d.ts +19 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +37 -0
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toaster.d.ts +2 -0
- package/dist/components/ui/toaster.d.ts.map +1 -0
- package/dist/components/ui/toaster.js +11 -0
- package/dist/components/ui/toaster.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/use-toast.d.ts +46 -0
- package/dist/hooks/use-toast.d.ts.map +1 -0
- package/dist/hooks/use-toast.js +125 -0
- package/dist/hooks/use-toast.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/animations.d.ts +33 -0
- package/dist/lib/animations.d.ts.map +1 -0
- package/dist/lib/animations.example.d.ts +19 -0
- package/dist/lib/animations.example.d.ts.map +1 -0
- package/dist/lib/animations.example.js +80 -0
- package/dist/lib/animations.example.js.map +1 -0
- package/dist/lib/animations.js +232 -0
- package/dist/lib/animations.js.map +1 -0
- package/dist/lib/use-animation.d.ts +39 -0
- package/dist/lib/use-animation.d.ts.map +1 -0
- package/dist/lib/use-animation.js +148 -0
- package/dist/lib/use-animation.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/tokens/tailwind.preset.d.ts +4 -0
- package/dist/tokens/tailwind.preset.d.ts.map +1 -0
- package/dist/tokens/tailwind.preset.js +193 -0
- package/dist/tokens/tailwind.preset.js.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +6 -0
- package/dist/utils/cn.js.map +1 -0
- package/package.json +112 -0
- package/src/styles/globals.css +19 -0
- package/src/styles/variables.css +117 -0
package/BRAND.md
ADDED
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
# Daily X Brand Guidelines
|
|
2
|
+
|
|
3
|
+
**Version:** 2.0.0 | **Last Updated:** 2026-01-29
|
|
4
|
+
|
|
5
|
+
_Comprehensive guide to maintaining brand consistency across all Daily X products_
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
- [Brand Identity](#brand-identity)
|
|
12
|
+
- [Color Palette](#color-palette)
|
|
13
|
+
- [Typography](#typography)
|
|
14
|
+
- [Logo Usage](#logo-usage)
|
|
15
|
+
- [Voice & Tone](#voice-tone)
|
|
16
|
+
- [Component Patterns](#component-patterns)
|
|
17
|
+
- [Spacing & Layout](#spacing-layout)
|
|
18
|
+
- [Accessibility](#accessibility)
|
|
19
|
+
- [Motion & Animation](#motion-animation)
|
|
20
|
+
- [Icon System](#icon-system)
|
|
21
|
+
- [Product Applications](#product-applications)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Brand Identity
|
|
26
|
+
|
|
27
|
+
### Brand Essence
|
|
28
|
+
|
|
29
|
+
Daily X represents intelligent automation that simplifies complex workflows. Our brand is built on innovation, reliability, and user empowerment. We transform tedious daily tasks into streamlined, AI-powered experiences that save time and deliver results.
|
|
30
|
+
|
|
31
|
+
### Brand Promise
|
|
32
|
+
|
|
33
|
+
Daily automates knowledge work, transforming how teams capture, organize, and leverage information across all their projects and applications.
|
|
34
|
+
|
|
35
|
+
### Brand Values
|
|
36
|
+
|
|
37
|
+
| Value | Description |
|
|
38
|
+
|-------|-------------|
|
|
39
|
+
| **Innovation** 💡 | We push boundaries with AI technology to solve real-world problems in creative ways. |
|
|
40
|
+
| **Reliability** ✔️ | Our tools consistently deliver accurate results with enterprise-grade security. |
|
|
41
|
+
| **Efficiency** ⚡ | We automate repetitive tasks to save users time and boost productivity. |
|
|
42
|
+
| **Intelligence** 🧠 | Our AI learns and adapts to provide increasingly personalized experiences. |
|
|
43
|
+
|
|
44
|
+
### Brand Pillars
|
|
45
|
+
|
|
46
|
+
**Intelligent & Adaptive**
|
|
47
|
+
We understand context. Our tools learn from patterns, adapt to workflows, and anticipate needs—making intelligence feel intuitive, not overwhelming.
|
|
48
|
+
|
|
49
|
+
**Transparent & Trustworthy**
|
|
50
|
+
We're clear about what we do with data. No dark patterns. No confusion. Users control their information and understand how it's used.
|
|
51
|
+
|
|
52
|
+
**Practical & Fast**
|
|
53
|
+
We solve real problems today, not imagined ones tomorrow. Speed matters. Friction kills adoption. Every feature earns its place.
|
|
54
|
+
|
|
55
|
+
### Visual Philosophy
|
|
56
|
+
|
|
57
|
+
Daily's design is **bold, distinctive, and data-focused**. We use a dark foundation with vibrant purple and orange accents to stand apart from generic SaaS aesthetics. When we add visual weight, it signals importance. Color is semantic—it conveys meaning and energy.
|
|
58
|
+
|
|
59
|
+
Our interfaces should feel powerful yet approachable: dark backgrounds that reduce eye strain, with purple for brand identity and orange for action. No safe blues. No generic gradients.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Color Palette
|
|
64
|
+
|
|
65
|
+
### Primary Colors
|
|
66
|
+
|
|
67
|
+
| Color Name | Hex | Usage |
|
|
68
|
+
|------------|-----|-------|
|
|
69
|
+
| **Primary Purple** | `#8B5CF6` | Brand identity, primary elements, headings |
|
|
70
|
+
| **Accent Orange** | `#F97316` | CTAs, highlights, interactive elements |
|
|
71
|
+
| **Dark Background** | `#0F0F14` | Page backgrounds, cards, surfaces |
|
|
72
|
+
| **Text Primary** | `#FFFFFF` | Main text on dark backgrounds |
|
|
73
|
+
|
|
74
|
+
### Extended Palette
|
|
75
|
+
|
|
76
|
+
| Color Name | Hex | Usage |
|
|
77
|
+
|------------|-----|-------|
|
|
78
|
+
| Light Purple | `#A78BFA` | Hover states, secondary text |
|
|
79
|
+
| Dark Purple | `#7C3AED` | Active states, pressed buttons |
|
|
80
|
+
| Light Orange | `#FB923C` | Hover states for CTAs |
|
|
81
|
+
| Dark Orange | `#EA580C` | Active states for CTAs |
|
|
82
|
+
|
|
83
|
+
### CSS Variables
|
|
84
|
+
|
|
85
|
+
```css
|
|
86
|
+
:root {
|
|
87
|
+
/* Primary */
|
|
88
|
+
--primary: #8B5CF6;
|
|
89
|
+
--primary-hover: #A78BFA;
|
|
90
|
+
--primary-active: #7C3AED;
|
|
91
|
+
|
|
92
|
+
/* Accent */
|
|
93
|
+
--accent: #F97316;
|
|
94
|
+
--accent-hover: #FB923C;
|
|
95
|
+
--accent-active: #EA580C;
|
|
96
|
+
|
|
97
|
+
/* Backgrounds */
|
|
98
|
+
--background: #0F0F14;
|
|
99
|
+
--surface: #1a1a24;
|
|
100
|
+
--surface-elevated: #252532;
|
|
101
|
+
|
|
102
|
+
/* Text */
|
|
103
|
+
--text-primary: #FFFFFF;
|
|
104
|
+
--text-secondary: #A1A1AA;
|
|
105
|
+
--text-muted: #71717A;
|
|
106
|
+
|
|
107
|
+
/* Borders */
|
|
108
|
+
--border: #27272A;
|
|
109
|
+
--border-focus: #8B5CF6;
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Semantic Colors
|
|
114
|
+
|
|
115
|
+
**Success** — Positive feedback, confirmations, completed operations
|
|
116
|
+
```
|
|
117
|
+
Background: #052e16
|
|
118
|
+
Text: #4ade80
|
|
119
|
+
Border: #166534
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Error** — Problems that need resolution, destructive actions
|
|
123
|
+
```
|
|
124
|
+
Background: #7f1d1d
|
|
125
|
+
Text: #f87171
|
|
126
|
+
Border: #991b1b
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Warning** — Caution, review required, not yet an error
|
|
130
|
+
```
|
|
131
|
+
Background: #78350f
|
|
132
|
+
Text: #fbbf24
|
|
133
|
+
Border: #92400e
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Info** — Contextual help, tips, new features
|
|
137
|
+
```
|
|
138
|
+
Background: #1e1b4b
|
|
139
|
+
Text: #a78bfa
|
|
140
|
+
Border: #3730a3
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Color Usage Guidelines
|
|
144
|
+
|
|
145
|
+
#### Do's
|
|
146
|
+
- ✅ Use purple as the primary brand color
|
|
147
|
+
- ✅ Use orange for CTAs and highlights
|
|
148
|
+
- ✅ Maintain dark backgrounds for digital products
|
|
149
|
+
- ✅ Use gradients to connect purple and orange
|
|
150
|
+
|
|
151
|
+
#### Don'ts
|
|
152
|
+
- ❌ Don't use blue as a primary color
|
|
153
|
+
- ❌ Don't alter the hex values of brand colors
|
|
154
|
+
- ❌ Don't use light backgrounds for digital products
|
|
155
|
+
- ❌ Don't use more than 3 colors in a single design
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Typography
|
|
160
|
+
|
|
161
|
+
### Primary Font Family
|
|
162
|
+
|
|
163
|
+
**Inter** is our primary typeface for all Daily X products. Its clean, modern aesthetic pairs perfectly with our brand values of innovation and efficiency.
|
|
164
|
+
|
|
165
|
+
```css
|
|
166
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
167
|
+
--font-mono: 'JetBrains Mono', Monaco, 'Courier New', monospace;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Type Scale
|
|
171
|
+
|
|
172
|
+
| Level | Size | Weight | Usage |
|
|
173
|
+
|-------|------|--------|-------|
|
|
174
|
+
| **Display** | 48px (3rem) | 800 (ExtraBold) | Hero headlines, landing pages |
|
|
175
|
+
| **H1** | 32px (2rem) | 700 (Bold) | Page titles |
|
|
176
|
+
| **H2** | 24px (1.5rem) | 600 (SemiBold) | Section headers |
|
|
177
|
+
| **H3** | 20px (1.25rem) | 600 (SemiBold) | Subsections |
|
|
178
|
+
| **H4** | 16px (1rem) | 600 (SemiBold) | Card titles |
|
|
179
|
+
| **Body** | 16px (1rem) | 400 (Regular) | Main content |
|
|
180
|
+
| **Small** | 14px (0.875rem) | 400 (Regular) | Secondary text |
|
|
181
|
+
| **Tiny** | 12px (0.75rem) | 400 (Regular) | Timestamps, captions |
|
|
182
|
+
|
|
183
|
+
### Typography Hierarchy
|
|
184
|
+
|
|
185
|
+
- **Headlines:** Use bold, oversized headlines to establish hierarchy and confidence. Headlines should be concise and impactful.
|
|
186
|
+
- **Body Text:** Keep body text clean and readable with adequate line height. Use shorter paragraphs to improve scannability.
|
|
187
|
+
- **UI Elements:** Use consistent font weights for buttons, labels, and navigation elements. Maintain clear visual hierarchy.
|
|
188
|
+
- **Code/Technical:** Use JetBrains Mono for code snippets, technical documentation, and data displays.
|
|
189
|
+
|
|
190
|
+
### Line Height
|
|
191
|
+
|
|
192
|
+
- **Headings:** 1.2 (tight, confident)
|
|
193
|
+
- **Body paragraphs:** 1.5 (readable, comfortable)
|
|
194
|
+
- **Dense tables/lists:** 1.4 (slightly tighter than body)
|
|
195
|
+
|
|
196
|
+
### Usage Rules
|
|
197
|
+
|
|
198
|
+
**DO:**
|
|
199
|
+
- Use H1 sparingly—usually once per page
|
|
200
|
+
- Never skip heading levels (H1 → H2 → H3)
|
|
201
|
+
- For long-form content, use 65-75 characters per line
|
|
202
|
+
- Increase line height (1.6–1.8) for accessibility
|
|
203
|
+
|
|
204
|
+
**DON'T:**
|
|
205
|
+
- Use H5/H6 (use bold body text instead)
|
|
206
|
+
- Mix font families per page
|
|
207
|
+
- Set text smaller than 12px
|
|
208
|
+
- Justify text
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Logo Usage
|
|
213
|
+
|
|
214
|
+
### Logo Variations
|
|
215
|
+
|
|
216
|
+
- **Primary Logo:** daily x wordmark
|
|
217
|
+
- **Icon Only:** Stylized "d" mark
|
|
218
|
+
- **Product Logos:** dailyreach.ai, dailyseo.ai, etc.
|
|
219
|
+
|
|
220
|
+
### Logo Usage Guidelines
|
|
221
|
+
|
|
222
|
+
#### Do's
|
|
223
|
+
- ✅ Maintain clear space around the logo
|
|
224
|
+
- ✅ Use the full-color logo on dark backgrounds
|
|
225
|
+
- ✅ Scale proportionally
|
|
226
|
+
- ✅ Use product-specific logos for individual products
|
|
227
|
+
|
|
228
|
+
#### Don'ts
|
|
229
|
+
- ❌ Don't alter the logo proportions
|
|
230
|
+
- ❌ Don't change the logo colors
|
|
231
|
+
- ❌ Don't add effects or shadows
|
|
232
|
+
- ❌ Don't place the logo on busy backgrounds
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Voice & Tone
|
|
237
|
+
|
|
238
|
+
### Brand Voice Characteristics
|
|
239
|
+
|
|
240
|
+
| Quality | Description |
|
|
241
|
+
|---------|-------------|
|
|
242
|
+
| **Intelligent** 🧠 | We communicate with confidence and expertise, using precise language that demonstrates our AI knowledge without being overly technical. |
|
|
243
|
+
| **Efficient** ⚡ | Our communication is direct and to the point. We respect our users' time by delivering clear, concise messages. |
|
|
244
|
+
| **Supportive** 🛎️ | We're approachable and helpful, guiding users through complex processes with clear instructions and encouragement. |
|
|
245
|
+
| **Forward-thinking** 🔮 | We communicate with optimism about the future of AI and how our tools will transform workflows for the better. |
|
|
246
|
+
|
|
247
|
+
### Tone Varies by Context
|
|
248
|
+
|
|
249
|
+
| Context | Tone | Example |
|
|
250
|
+
|---------|------|---------|
|
|
251
|
+
| Error message | Helpful, empathetic | "We couldn't save your work. Try refreshing the page—if it persists, contact support@daily.com" |
|
|
252
|
+
| Success feedback | Clear, brief | "4 documents synced" |
|
|
253
|
+
| Onboarding | Welcoming, confident | "You're set up. Now connect your first data source." |
|
|
254
|
+
| Feature announcement | Excited, clear | "Real-time collaboration is live. Invite teammates to work together instantly." |
|
|
255
|
+
| Documentation | Technical, precise | "Pass `workspaceId` as a string. Format: UUID v4." |
|
|
256
|
+
| Warning/Confirmation | Direct, respectful | "This will sync 500 documents. This takes ~2 minutes. Ready?" |
|
|
257
|
+
|
|
258
|
+
### Writing Guidelines
|
|
259
|
+
|
|
260
|
+
#### Do's
|
|
261
|
+
- ✅ Use active voice
|
|
262
|
+
- ✅ Focus on benefits, not just features
|
|
263
|
+
- ✅ Use simple, direct language
|
|
264
|
+
- ✅ Break up long paragraphs
|
|
265
|
+
- ✅ Address users as "you"
|
|
266
|
+
- ✅ Use contractions ("we're", "don't", "it's")
|
|
267
|
+
- ✅ Be specific: "Reduced sync time from 5 minutes to 30 seconds"
|
|
268
|
+
|
|
269
|
+
#### Don'ts
|
|
270
|
+
- ❌ Don't use overly technical jargon
|
|
271
|
+
- ❌ Don't make exaggerated claims
|
|
272
|
+
- ❌ Don't use passive voice
|
|
273
|
+
- ❌ Don't be overly casual
|
|
274
|
+
- ❌ Don't use multiple exclamation marks
|
|
275
|
+
- ❌ Don't assume technical knowledge
|
|
276
|
+
|
|
277
|
+
### Example Copy Patterns
|
|
278
|
+
|
|
279
|
+
**Feature Introduction:**
|
|
280
|
+
- DO: "Real-time collaboration is here. Invite teammates and watch changes appear instantly."
|
|
281
|
+
- DON'T: "Collaboration functionality has been enabled for users to interact synchronously."
|
|
282
|
+
|
|
283
|
+
**Error Message:**
|
|
284
|
+
- DO: "Email already registered. Try logging in instead →"
|
|
285
|
+
- DON'T: "Error 409: Conflict"
|
|
286
|
+
|
|
287
|
+
**Button Label:**
|
|
288
|
+
- DO: "Create workspace", "Sync now", "Invite teammates"
|
|
289
|
+
- DON'T: "OK", "Submit", "Confirm action"
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Component Patterns
|
|
294
|
+
|
|
295
|
+
### Buttons
|
|
296
|
+
|
|
297
|
+
**Primary Button** — Main call-to-action
|
|
298
|
+
```
|
|
299
|
+
Appearance: Orange background, white text, rounded corners
|
|
300
|
+
States:
|
|
301
|
+
Default: #F97316 bg, white text
|
|
302
|
+
Hover: #FB923C bg (lighter)
|
|
303
|
+
Active: #EA580C bg (darker)
|
|
304
|
+
Disabled: 40% opacity
|
|
305
|
+
Loading: Show spinner, disable click
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
**Secondary Button** — Alternative actions
|
|
309
|
+
```
|
|
310
|
+
Appearance: Purple background or outline
|
|
311
|
+
States:
|
|
312
|
+
Default: #8B5CF6 bg or transparent with purple border
|
|
313
|
+
Hover: #A78BFA bg
|
|
314
|
+
Active: #7C3AED bg
|
|
315
|
+
Disabled: 40% opacity
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Ghost Button** — Low-emphasis actions
|
|
319
|
+
```
|
|
320
|
+
Appearance: Transparent background, purple text
|
|
321
|
+
States:
|
|
322
|
+
Default: No background, purple text
|
|
323
|
+
Hover: Subtle purple/10 background
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Button Sizing & Spacing**
|
|
327
|
+
- **Minimum height:** 44px (touch-friendly)
|
|
328
|
+
- **Padding:** 12px horizontal, 8px vertical
|
|
329
|
+
- **Icon + text:** 8px gap
|
|
330
|
+
- **Icon-only button:** 40x40px minimum
|
|
331
|
+
- **Multiple buttons:** 8px gap between
|
|
332
|
+
|
|
333
|
+
### Forms
|
|
334
|
+
|
|
335
|
+
**Input Fields**
|
|
336
|
+
```
|
|
337
|
+
Height: 40px
|
|
338
|
+
Background: var(--surface)
|
|
339
|
+
Border: 1px solid var(--border)
|
|
340
|
+
Border Radius: 6px
|
|
341
|
+
Focus: Purple focus ring (2px)
|
|
342
|
+
Error State: Red border, error message below
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Form Best Practices:**
|
|
346
|
+
- Stack inputs vertically
|
|
347
|
+
- Label always above input
|
|
348
|
+
- Show required fields with `*`
|
|
349
|
+
- Validate on blur, not keystroke
|
|
350
|
+
- Show all errors at once
|
|
351
|
+
|
|
352
|
+
### Modals / Dialogs
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
Overlay: 80% black opacity
|
|
356
|
+
Modal: var(--surface) background, rounded corners
|
|
357
|
+
Content: Padding 24px
|
|
358
|
+
Footer: Border top, buttons aligned right
|
|
359
|
+
Width: 90vw (max 640px)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Loading States
|
|
363
|
+
|
|
364
|
+
| Use Case | Pattern |
|
|
365
|
+
|----------|---------|
|
|
366
|
+
| Form submission | Spinner on button, disable form |
|
|
367
|
+
| Page load | Skeleton screen matching layout |
|
|
368
|
+
| File upload | Progress bar with % and time |
|
|
369
|
+
| Background sync | Subtle indicator |
|
|
370
|
+
|
|
371
|
+
### Empty States
|
|
372
|
+
|
|
373
|
+
Structure:
|
|
374
|
+
1. Icon (reinforces concept)
|
|
375
|
+
2. Heading (what should be here?)
|
|
376
|
+
3. Description (context)
|
|
377
|
+
4. CTA button (how to create first item)
|
|
378
|
+
|
|
379
|
+
### Toast / Notifications
|
|
380
|
+
|
|
381
|
+
| Type | Color | Duration |
|
|
382
|
+
|------|-------|----------|
|
|
383
|
+
| Success | Green | 3 seconds |
|
|
384
|
+
| Error | Red | 5 seconds |
|
|
385
|
+
| Info | Purple | 4 seconds |
|
|
386
|
+
| Warning | Amber | 5 seconds |
|
|
387
|
+
|
|
388
|
+
Position: Top-right corner, 16px from edges
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Spacing & Layout
|
|
393
|
+
|
|
394
|
+
### Spacing Scale
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
xs = 4px (icons, tight spacing)
|
|
398
|
+
sm = 8px (labels, small gaps)
|
|
399
|
+
md = 16px (default, between sections)
|
|
400
|
+
lg = 24px (major sections)
|
|
401
|
+
xl = 32px (page margin on desktop)
|
|
402
|
+
2xl = 48px (page sections)
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Grid System
|
|
406
|
+
|
|
407
|
+
- **Columns:** 12-column grid
|
|
408
|
+
- **Breakpoints:** 640px (sm), 768px (md), 1024px (lg), 1280px (xl)
|
|
409
|
+
- **Gutter:** 16px on desktop, 12px tablet, 8px mobile
|
|
410
|
+
- **Page margin:** 24px desktop, 16px tablet, 12px mobile
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## Accessibility
|
|
415
|
+
|
|
416
|
+
All Daily products must meet **WCAG 2.1 AA** standards.
|
|
417
|
+
|
|
418
|
+
### Color Contrast
|
|
419
|
+
|
|
420
|
+
- **Text vs background:** 4.5:1 minimum
|
|
421
|
+
- **Large text (18pt+):** 3:1 minimum
|
|
422
|
+
- **Never rely on color alone:** Always pair with icon or text
|
|
423
|
+
|
|
424
|
+
### Interactive Elements
|
|
425
|
+
|
|
426
|
+
- **Focus state:** Must be visible (purple outline)
|
|
427
|
+
- **Focus order:** Logical reading order
|
|
428
|
+
- **Keyboard accessible:** All interactive elements via Tab
|
|
429
|
+
- **Touch targets:** Minimum 44x44px
|
|
430
|
+
|
|
431
|
+
### Motion & Animation
|
|
432
|
+
|
|
433
|
+
```css
|
|
434
|
+
@media (prefers-reduced-motion: reduce) {
|
|
435
|
+
* {
|
|
436
|
+
animation-duration: 0.01ms !important;
|
|
437
|
+
transition-duration: 0.01ms !important;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Testing Checklist
|
|
443
|
+
|
|
444
|
+
- [ ] Keyboard only — can you navigate without mouse?
|
|
445
|
+
- [ ] Screen reader — does it read logically?
|
|
446
|
+
- [ ] Color contrast — all text readable?
|
|
447
|
+
- [ ] Lighthouse audit — accessibility score?
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## Motion & Animation
|
|
452
|
+
|
|
453
|
+
### Transition Speeds
|
|
454
|
+
|
|
455
|
+
- **Fast (150ms):** Hover states, small toggles
|
|
456
|
+
- **Normal (300ms):** Modal open, page fade
|
|
457
|
+
- **Slow (500ms):** Complex transitions (max recommended)
|
|
458
|
+
|
|
459
|
+
### Easing Functions
|
|
460
|
+
|
|
461
|
+
```css
|
|
462
|
+
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
463
|
+
--ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
464
|
+
--ease-in: cubic-bezier(0.2, 0, 0.8, 0.2);
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Common Patterns
|
|
468
|
+
|
|
469
|
+
| Animation | Duration | Easing |
|
|
470
|
+
|-----------|----------|--------|
|
|
471
|
+
| Button hover | 150ms | in-out |
|
|
472
|
+
| Modal open | 300ms | in-out |
|
|
473
|
+
| Sidebar slide | 300ms | in-out |
|
|
474
|
+
| Toast appear | 200ms | in-out |
|
|
475
|
+
| Toast disappear | 150ms | in |
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
## Icon System
|
|
480
|
+
|
|
481
|
+
### Icon Sizing
|
|
482
|
+
|
|
483
|
+
- Small (16px): Inline in text, breadcrumbs
|
|
484
|
+
- Normal (24px): Buttons, form fields
|
|
485
|
+
- Large (32px): Hero icons, empty states
|
|
486
|
+
|
|
487
|
+
### Icon Accessibility
|
|
488
|
+
|
|
489
|
+
**Standalone icon:**
|
|
490
|
+
```html
|
|
491
|
+
<button aria-label="Delete this item">
|
|
492
|
+
<Icon name="trash" aria-hidden="true" />
|
|
493
|
+
</button>
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Icon + text:**
|
|
497
|
+
```html
|
|
498
|
+
<button>
|
|
499
|
+
<Icon name="download" aria-hidden="true" />
|
|
500
|
+
Download
|
|
501
|
+
</button>
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Product Applications
|
|
507
|
+
|
|
508
|
+
Each Daily X product has its unique focus while maintaining consistent visual elements.
|
|
509
|
+
|
|
510
|
+
### dailyreach.ai
|
|
511
|
+
Focus on collaboration, team coordination, and LinkedIn strategy optimization. Use imagery that shows teams working together.
|
|
512
|
+
|
|
513
|
+
### dailyseo.ai
|
|
514
|
+
Emphasize automation, results, and SEO expertise. Use data visualizations and growth metrics in imagery.
|
|
515
|
+
|
|
516
|
+
### dailydashboards.ai
|
|
517
|
+
Highlight data insights, business intelligence, and decision-making. Use clean dashboard interfaces and data charts.
|
|
518
|
+
|
|
519
|
+
### dailyscrape.ai
|
|
520
|
+
Focus on data extraction, automation, and efficiency. Use imagery that shows data collection and transformation.
|
|
521
|
+
|
|
522
|
+
### dailycoverage.ai
|
|
523
|
+
Emphasize content creation, AI-generated media, and information consumption. Use podcast and audio visualizations.
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
> **Brand Consistency Note**
|
|
528
|
+
> While each product has its unique focus and messaging, maintain consistent visual elements, color usage, and tone across all Daily X products to strengthen the overall brand identity.
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Changelog
|
|
533
|
+
|
|
534
|
+
| Version | Date | Changes |
|
|
535
|
+
|---------|------|---------|
|
|
536
|
+
| 2.0.0 | 2026-01-29 | Major rebrand: purple/orange palette, dark theme, Inter typography, product applications |
|
|
537
|
+
| 1.0.0 | 2026-01-28 | Initial brand guidelines |
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
## Questions?
|
|
542
|
+
|
|
543
|
+
Have questions about voice, tone, or visual brand application? Contact the design team at design@daily.com.
|
package/README.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# @daily/ui
|
|
2
|
+
|
|
3
|
+
Daily Platform UI component library with trust-blue theme system.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @daily/ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Peer Dependencies
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install react tailwindcss @radix-ui/react-slot
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
### 1. Import the colors CSS
|
|
20
|
+
|
|
21
|
+
In your root layout or global CSS:
|
|
22
|
+
|
|
23
|
+
```css
|
|
24
|
+
@import "@daily/ui/tokens/colors.css";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. Configure Tailwind
|
|
28
|
+
|
|
29
|
+
In your `tailwind.config.ts`:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { Config } from "tailwindcss"
|
|
33
|
+
import dailyPreset from "@daily/ui/tokens/tailwind-preset"
|
|
34
|
+
|
|
35
|
+
const config: Config = {
|
|
36
|
+
presets: [dailyPreset],
|
|
37
|
+
content: [
|
|
38
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
39
|
+
"./node_modules/@daily/ui/dist/**/*.{js,ts,jsx,tsx}",
|
|
40
|
+
],
|
|
41
|
+
// Your custom config...
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default config
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 3. Use the utilities
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { cn } from "@daily/ui/lib/utils"
|
|
51
|
+
|
|
52
|
+
function MyComponent({ className }: { className?: string }) {
|
|
53
|
+
return (
|
|
54
|
+
<div className={cn("bg-primary text-primary-foreground p-4", className)}>
|
|
55
|
+
Trust Blue Theme
|
|
56
|
+
</div>
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Theme Colors
|
|
62
|
+
|
|
63
|
+
### Primary (Trust Blue)
|
|
64
|
+
- `bg-primary` - #3b82f6 (light) / #60a5fa (dark)
|
|
65
|
+
- `bg-primary-hover` - #2563eb (light) / #3b82f6 (dark)
|
|
66
|
+
- `bg-primary-active` - #1d4ed8 (light) / #2563eb (dark)
|
|
67
|
+
|
|
68
|
+
### Semantic
|
|
69
|
+
- `bg-success` - Green
|
|
70
|
+
- `bg-error` - Red
|
|
71
|
+
- `bg-warning` - Amber
|
|
72
|
+
- `bg-info` - Blue
|
|
73
|
+
|
|
74
|
+
### Neutrals
|
|
75
|
+
- `bg-background` / `text-foreground`
|
|
76
|
+
- `bg-card` / `text-card-foreground`
|
|
77
|
+
- `bg-muted` / `text-muted-foreground`
|
|
78
|
+
- `bg-accent` / `text-accent-foreground`
|
|
79
|
+
|
|
80
|
+
### Interactive
|
|
81
|
+
- `border-border` - Default border color
|
|
82
|
+
- `ring-ring` - Focus ring color
|
|
83
|
+
- `bg-input` - Input background
|
|
84
|
+
|
|
85
|
+
## Dark Mode
|
|
86
|
+
|
|
87
|
+
The theme automatically supports dark mode via the `.dark` class:
|
|
88
|
+
|
|
89
|
+
```tsx
|
|
90
|
+
<html className="dark">
|
|
91
|
+
{/* Dark mode active */}
|
|
92
|
+
</html>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Spacing
|
|
96
|
+
|
|
97
|
+
4px base scale: `p-1` = 4px, `p-2` = 8px, `p-4` = 16px, etc.
|
|
98
|
+
|
|
99
|
+
## Border Radius
|
|
100
|
+
|
|
101
|
+
Based on `--radius` CSS variable (default: 0.625rem):
|
|
102
|
+
- `rounded-sm` - `--radius - 4px`
|
|
103
|
+
- `rounded-md` - `--radius - 2px`
|
|
104
|
+
- `rounded-lg` - `--radius`
|
|
105
|
+
- `rounded-xl` - `--radius + 4px`
|
|
106
|
+
- `rounded-2xl` - `--radius + 8px`
|
|
107
|
+
|
|
108
|
+
## Animations
|
|
109
|
+
|
|
110
|
+
Dialog/modal animations included:
|
|
111
|
+
- `animate-dialog-in` / `animate-dialog-out`
|
|
112
|
+
- `animate-fade-in` / `animate-fade-out`
|
|
113
|
+
- `animate-slide-in-from-top/bottom/left/right`
|
|
114
|
+
|
|
115
|
+
## Development
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Build
|
|
119
|
+
npm run build
|
|
120
|
+
|
|
121
|
+
# Watch mode
|
|
122
|
+
npm run watch
|
|
123
|
+
|
|
124
|
+
# Type check
|
|
125
|
+
npm run typecheck
|
|
126
|
+
|
|
127
|
+
# Lint
|
|
128
|
+
npm run lint
|
|
129
|
+
|
|
130
|
+
# Test
|
|
131
|
+
npm run test
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const alertVariants: (props?: ({
|
|
4
|
+
variant?: "destructive" | "success" | "warning" | "default" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface AlertProps extends React.ComponentProps<"div">, VariantProps<typeof alertVariants> {
|
|
7
|
+
}
|
|
8
|
+
declare function Alert({ className, variant, ...props }: AlertProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export { Alert, AlertTitle, AlertDescription };
|
|
12
|
+
//# sourceMappingURL=alert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;8EAkBlB,CAAA;AAED,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EACjC,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAS1D;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAW7B;AAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA"}
|