@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.
Files changed (129) hide show
  1. package/BRAND.md +543 -0
  2. package/README.md +136 -0
  3. package/dist/components/alert.d.ts +12 -0
  4. package/dist/components/alert.d.ts.map +1 -0
  5. package/dist/components/alert.js +27 -0
  6. package/dist/components/alert.js.map +1 -0
  7. package/dist/components/badge.d.ts +11 -0
  8. package/dist/components/badge.d.ts.map +1 -0
  9. package/dist/components/badge.js +25 -0
  10. package/dist/components/badge.js.map +1 -0
  11. package/dist/components/button.d.ts +13 -0
  12. package/dist/components/button.d.ts.map +1 -0
  13. package/dist/components/button.js +32 -0
  14. package/dist/components/button.js.map +1 -0
  15. package/dist/components/card.d.ts +9 -0
  16. package/dist/components/card.d.ts.map +1 -0
  17. package/dist/components/card.js +22 -0
  18. package/dist/components/card.js.map +1 -0
  19. package/dist/components/common/badge.d.ts +11 -0
  20. package/dist/components/common/badge.d.ts.map +1 -0
  21. package/dist/components/common/badge.js +25 -0
  22. package/dist/components/common/badge.js.map +1 -0
  23. package/dist/components/common/button.d.ts +13 -0
  24. package/dist/components/common/button.d.ts.map +1 -0
  25. package/dist/components/common/button.js +32 -0
  26. package/dist/components/common/button.js.map +1 -0
  27. package/dist/components/common/card.d.ts +9 -0
  28. package/dist/components/common/card.d.ts.map +1 -0
  29. package/dist/components/common/card.js +22 -0
  30. package/dist/components/common/card.js.map +1 -0
  31. package/dist/components/common/checkbox.d.ts +7 -0
  32. package/dist/components/common/checkbox.d.ts.map +1 -0
  33. package/dist/components/common/checkbox.js +9 -0
  34. package/dist/components/common/checkbox.js.map +1 -0
  35. package/dist/components/common/input.d.ts +6 -0
  36. package/dist/components/common/input.d.ts.map +1 -0
  37. package/dist/components/common/input.js +7 -0
  38. package/dist/components/common/input.js.map +1 -0
  39. package/dist/components/common/label.d.ts +9 -0
  40. package/dist/components/common/label.d.ts.map +1 -0
  41. package/dist/components/common/label.js +11 -0
  42. package/dist/components/common/label.js.map +1 -0
  43. package/dist/components/common/textarea.d.ts +6 -0
  44. package/dist/components/common/textarea.d.ts.map +1 -0
  45. package/dist/components/common/textarea.js +7 -0
  46. package/dist/components/common/textarea.js.map +1 -0
  47. package/dist/components/dialog.d.ts +16 -0
  48. package/dist/components/dialog.d.ts.map +1 -0
  49. package/dist/components/dialog.js +36 -0
  50. package/dist/components/dialog.js.map +1 -0
  51. package/dist/components/input.d.ts +6 -0
  52. package/dist/components/input.d.ts.map +1 -0
  53. package/dist/components/input.js +7 -0
  54. package/dist/components/input.js.map +1 -0
  55. package/dist/components/skeleton.d.ts +6 -0
  56. package/dist/components/skeleton.d.ts.map +1 -0
  57. package/dist/components/skeleton.js +7 -0
  58. package/dist/components/skeleton.js.map +1 -0
  59. package/dist/components/ui/alert.d.ts +12 -0
  60. package/dist/components/ui/alert.d.ts.map +1 -0
  61. package/dist/components/ui/alert.js +27 -0
  62. package/dist/components/ui/alert.js.map +1 -0
  63. package/dist/components/ui/animated.d.ts +47 -0
  64. package/dist/components/ui/animated.d.ts.map +1 -0
  65. package/dist/components/ui/animated.js +96 -0
  66. package/dist/components/ui/animated.js.map +1 -0
  67. package/dist/components/ui/dialog.d.ts +16 -0
  68. package/dist/components/ui/dialog.d.ts.map +1 -0
  69. package/dist/components/ui/dialog.js +36 -0
  70. package/dist/components/ui/dialog.js.map +1 -0
  71. package/dist/components/ui/select.d.ts +14 -0
  72. package/dist/components/ui/select.d.ts.map +1 -0
  73. package/dist/components/ui/select.js +38 -0
  74. package/dist/components/ui/select.js.map +1 -0
  75. package/dist/components/ui/skeleton.d.ts +6 -0
  76. package/dist/components/ui/skeleton.d.ts.map +1 -0
  77. package/dist/components/ui/skeleton.js +7 -0
  78. package/dist/components/ui/skeleton.js.map +1 -0
  79. package/dist/components/ui/tabs.d.ts +8 -0
  80. package/dist/components/ui/tabs.d.ts.map +1 -0
  81. package/dist/components/ui/tabs.js +18 -0
  82. package/dist/components/ui/tabs.js.map +1 -0
  83. package/dist/components/ui/toast.d.ts +19 -0
  84. package/dist/components/ui/toast.d.ts.map +1 -0
  85. package/dist/components/ui/toast.js +37 -0
  86. package/dist/components/ui/toast.js.map +1 -0
  87. package/dist/components/ui/toaster.d.ts +2 -0
  88. package/dist/components/ui/toaster.d.ts.map +1 -0
  89. package/dist/components/ui/toaster.js +11 -0
  90. package/dist/components/ui/toaster.js.map +1 -0
  91. package/dist/hooks/index.d.ts +2 -0
  92. package/dist/hooks/index.d.ts.map +1 -0
  93. package/dist/hooks/index.js +2 -0
  94. package/dist/hooks/index.js.map +1 -0
  95. package/dist/hooks/use-toast.d.ts +46 -0
  96. package/dist/hooks/use-toast.d.ts.map +1 -0
  97. package/dist/hooks/use-toast.js +125 -0
  98. package/dist/hooks/use-toast.js.map +1 -0
  99. package/dist/index.d.ts +31 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +21 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/lib/animations.d.ts +33 -0
  104. package/dist/lib/animations.d.ts.map +1 -0
  105. package/dist/lib/animations.example.d.ts +19 -0
  106. package/dist/lib/animations.example.d.ts.map +1 -0
  107. package/dist/lib/animations.example.js +80 -0
  108. package/dist/lib/animations.example.js.map +1 -0
  109. package/dist/lib/animations.js +232 -0
  110. package/dist/lib/animations.js.map +1 -0
  111. package/dist/lib/use-animation.d.ts +39 -0
  112. package/dist/lib/use-animation.d.ts.map +1 -0
  113. package/dist/lib/use-animation.js +148 -0
  114. package/dist/lib/use-animation.js.map +1 -0
  115. package/dist/lib/utils.d.ts +3 -0
  116. package/dist/lib/utils.d.ts.map +1 -0
  117. package/dist/lib/utils.js +6 -0
  118. package/dist/lib/utils.js.map +1 -0
  119. package/dist/tokens/tailwind.preset.d.ts +4 -0
  120. package/dist/tokens/tailwind.preset.d.ts.map +1 -0
  121. package/dist/tokens/tailwind.preset.js +193 -0
  122. package/dist/tokens/tailwind.preset.js.map +1 -0
  123. package/dist/utils/cn.d.ts +3 -0
  124. package/dist/utils/cn.d.ts.map +1 -0
  125. package/dist/utils/cn.js +6 -0
  126. package/dist/utils/cn.js.map +1 -0
  127. package/package.json +112 -0
  128. package/src/styles/globals.css +19 -0
  129. 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"}