omnira-ui 0.1.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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/cli/omnira-init.mjs +260 -0
  4. package/cli/presets.mjs +386 -0
  5. package/components/ui/AppStoreButton/AppStoreButton.module.css +87 -0
  6. package/components/ui/AppStoreButton/AppStoreButton.tsx +114 -0
  7. package/components/ui/AppStoreButton/index.ts +2 -0
  8. package/components/ui/Avatar/Avatar.module.css +76 -0
  9. package/components/ui/Avatar/Avatar.tsx +102 -0
  10. package/components/ui/Avatar/index.ts +2 -0
  11. package/components/ui/Badge/Badge.module.css +120 -0
  12. package/components/ui/Badge/Badge.tsx +25 -0
  13. package/components/ui/Badge/index.ts +2 -0
  14. package/components/ui/BadgeGroup/BadgeGroup.module.css +214 -0
  15. package/components/ui/BadgeGroup/BadgeGroup.tsx +88 -0
  16. package/components/ui/BadgeGroup/index.ts +2 -0
  17. package/components/ui/Browser/Browser.module.css +105 -0
  18. package/components/ui/Browser/Browser.tsx +54 -0
  19. package/components/ui/Browser/index.ts +2 -0
  20. package/components/ui/Button/Button.module.css +188 -0
  21. package/components/ui/Button/Button.tsx +74 -0
  22. package/components/ui/Button/index.ts +2 -0
  23. package/components/ui/ButtonUtility/ButtonUtility.module.css +154 -0
  24. package/components/ui/ButtonUtility/ButtonUtility.tsx +65 -0
  25. package/components/ui/ButtonUtility/index.ts +2 -0
  26. package/components/ui/Card/Card.module.css +80 -0
  27. package/components/ui/Card/Card.tsx +39 -0
  28. package/components/ui/Card/index.ts +2 -0
  29. package/components/ui/Checkbox/Checkbox.module.css +92 -0
  30. package/components/ui/Checkbox/Checkbox.tsx +95 -0
  31. package/components/ui/Checkbox/index.ts +2 -0
  32. package/components/ui/Collapse/Collapse.module.css +60 -0
  33. package/components/ui/Collapse/Collapse.tsx +100 -0
  34. package/components/ui/Collapse/index.ts +2 -0
  35. package/components/ui/CreditCard/CreditCard.module.css +117 -0
  36. package/components/ui/CreditCard/CreditCard.tsx +86 -0
  37. package/components/ui/CreditCard/index.ts +2 -0
  38. package/components/ui/Dropdown/Dropdown.module.css +269 -0
  39. package/components/ui/Dropdown/Dropdown.tsx +419 -0
  40. package/components/ui/Dropdown/index.ts +31 -0
  41. package/components/ui/GridLines/GridLines.module.css +95 -0
  42. package/components/ui/GridLines/GridLines.tsx +10 -0
  43. package/components/ui/GridLines/index.ts +1 -0
  44. package/components/ui/Illustration/Illustration.module.css +10 -0
  45. package/components/ui/Illustration/Illustration.tsx +96 -0
  46. package/components/ui/Illustration/index.ts +2 -0
  47. package/components/ui/Input/Input.module.css +217 -0
  48. package/components/ui/Input/Input.tsx +93 -0
  49. package/components/ui/Input/index.ts +2 -0
  50. package/components/ui/Phone/Phone.module.css +104 -0
  51. package/components/ui/Phone/Phone.tsx +54 -0
  52. package/components/ui/Phone/index.ts +2 -0
  53. package/components/ui/PinInput/PinInput.module.css +104 -0
  54. package/components/ui/PinInput/PinInput.tsx +210 -0
  55. package/components/ui/PinInput/index.ts +1 -0
  56. package/components/ui/ProgressBar/ProgressBar.module.css +180 -0
  57. package/components/ui/ProgressBar/ProgressBar.tsx +206 -0
  58. package/components/ui/ProgressBar/index.ts +2 -0
  59. package/components/ui/QRCode/QRCode.module.css +13 -0
  60. package/components/ui/QRCode/QRCode.tsx +128 -0
  61. package/components/ui/QRCode/index.ts +2 -0
  62. package/components/ui/RadioButton/RadioButton.module.css +92 -0
  63. package/components/ui/RadioButton/RadioButton.tsx +134 -0
  64. package/components/ui/RadioButton/index.ts +2 -0
  65. package/components/ui/RadioGroup/RadioGroup.module.css +382 -0
  66. package/components/ui/RadioGroup/RadioGroup.tsx +292 -0
  67. package/components/ui/RadioGroup/index.ts +1 -0
  68. package/components/ui/Rating/Rating.module.css +99 -0
  69. package/components/ui/Rating/Rating.tsx +123 -0
  70. package/components/ui/Rating/index.ts +2 -0
  71. package/components/ui/Select/Select.module.css +371 -0
  72. package/components/ui/Select/Select.tsx +507 -0
  73. package/components/ui/Select/index.ts +2 -0
  74. package/components/ui/SidebarNavigation/SidebarDual.tsx +71 -0
  75. package/components/ui/SidebarNavigation/SidebarFeatureCard.module.css +351 -0
  76. package/components/ui/SidebarNavigation/SidebarFeatureCard.tsx +388 -0
  77. package/components/ui/SidebarNavigation/SidebarNavigation.module.css +610 -0
  78. package/components/ui/SidebarNavigation/SidebarParts.tsx +215 -0
  79. package/components/ui/SidebarNavigation/SidebarSectionDividers.tsx +46 -0
  80. package/components/ui/SidebarNavigation/SidebarSectionHeadings.tsx +52 -0
  81. package/components/ui/SidebarNavigation/SidebarSimple.tsx +46 -0
  82. package/components/ui/SidebarNavigation/SidebarSlim.tsx +48 -0
  83. package/components/ui/SidebarNavigation/index.ts +29 -0
  84. package/components/ui/SidebarNavigation/types.ts +27 -0
  85. package/components/ui/Slider/Slider.module.css +93 -0
  86. package/components/ui/Slider/Slider.tsx +118 -0
  87. package/components/ui/Slider/index.ts +2 -0
  88. package/components/ui/SocialButton/SocialButton.module.css +223 -0
  89. package/components/ui/SocialButton/SocialButton.tsx +185 -0
  90. package/components/ui/SocialButton/index.ts +2 -0
  91. package/components/ui/Tag/Tag.module.css +203 -0
  92. package/components/ui/Tag/Tag.tsx +161 -0
  93. package/components/ui/Tag/index.ts +2 -0
  94. package/components/ui/TextEditor/TextEditor.module.css +182 -0
  95. package/components/ui/TextEditor/TextEditor.tsx +323 -0
  96. package/components/ui/TextEditor/index.ts +1 -0
  97. package/components/ui/Textarea/Textarea.module.css +75 -0
  98. package/components/ui/Textarea/Textarea.tsx +59 -0
  99. package/components/ui/Textarea/index.ts +2 -0
  100. package/components/ui/Toggle/Toggle.module.css +118 -0
  101. package/components/ui/Toggle/Toggle.tsx +77 -0
  102. package/components/ui/Toggle/index.ts +2 -0
  103. package/components/ui/Tooltip/Tooltip.module.css +95 -0
  104. package/components/ui/Tooltip/Tooltip.tsx +55 -0
  105. package/components/ui/Tooltip/index.ts +2 -0
  106. package/components/ui/VideoPlayer/VideoPlayer.module.css +120 -0
  107. package/components/ui/VideoPlayer/VideoPlayer.tsx +229 -0
  108. package/components/ui/VideoPlayer/index.ts +2 -0
  109. package/lib/cn.ts +3 -0
  110. package/lib/copy-to-clipboard.ts +21 -0
  111. package/package.json +61 -0
@@ -0,0 +1,351 @@
1
+ /* ── Feature Card Base ── */
2
+ .card {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 12px;
6
+ padding: 16px;
7
+ border-radius: var(--radius-lg);
8
+ background: var(--color-bg-elevated);
9
+ border: 1px solid var(--color-border-standard);
10
+ transition: all 0.2s ease;
11
+ }
12
+
13
+ .cardAccent {
14
+ background: var(--color-bg-lime-subtle);
15
+ border-color: var(--color-border-lime-subtle);
16
+ }
17
+
18
+ /* ── Header row ── */
19
+ .header {
20
+ display: flex;
21
+ align-items: flex-start;
22
+ justify-content: space-between;
23
+ gap: 8px;
24
+ }
25
+
26
+ .headerLeft {
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: 4px;
30
+ flex: 1;
31
+ min-width: 0;
32
+ }
33
+
34
+ /* ── Icon container ── */
35
+ .iconWrap {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ width: 36px;
40
+ height: 36px;
41
+ border-radius: var(--radius-md);
42
+ background: var(--color-bg-card);
43
+ border: 1px solid var(--color-border-standard);
44
+ flex-shrink: 0;
45
+ }
46
+
47
+ .iconWrapAccent {
48
+ background: var(--color-bg-lime-subtle);
49
+ border-color: var(--color-border-lime-subtle);
50
+ }
51
+
52
+ /* ── Close / dismiss ── */
53
+ .dismiss {
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ width: 24px;
58
+ height: 24px;
59
+ border-radius: var(--radius-sm);
60
+ background: transparent;
61
+ border: none;
62
+ color: var(--color-text-tertiary);
63
+ cursor: pointer;
64
+ transition: all 0.15s ease;
65
+ flex-shrink: 0;
66
+ padding: 0;
67
+ }
68
+
69
+ .dismiss:hover {
70
+ background: var(--color-bg-hover);
71
+ color: var(--color-text-secondary);
72
+ }
73
+
74
+ /* ── Typography ── */
75
+ .title {
76
+ font-family: var(--font-display);
77
+ font-size: 13px;
78
+ font-weight: 700;
79
+ color: var(--color-text-primary);
80
+ letter-spacing: -0.01em;
81
+ line-height: 1.3;
82
+ }
83
+
84
+ .description {
85
+ font-size: 12px;
86
+ line-height: 1.5;
87
+ color: var(--color-text-tertiary);
88
+ }
89
+
90
+ .label {
91
+ font-size: 11px;
92
+ font-weight: 600;
93
+ text-transform: uppercase;
94
+ letter-spacing: 0.04em;
95
+ color: var(--color-text-tertiary);
96
+ }
97
+
98
+ /* ── Progress bar ── */
99
+ .progressWrap {
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: 6px;
103
+ }
104
+
105
+ .progressTrack {
106
+ width: 100%;
107
+ height: 6px;
108
+ border-radius: var(--radius-full);
109
+ background: var(--color-bg-card);
110
+ overflow: hidden;
111
+ }
112
+
113
+ .progressFill {
114
+ height: 100%;
115
+ border-radius: var(--radius-full);
116
+ background: var(--color-lime);
117
+ transition: width 0.4s ease;
118
+ }
119
+
120
+ .progressMeta {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: space-between;
124
+ }
125
+
126
+ .progressPercent {
127
+ font-size: 12px;
128
+ font-weight: 700;
129
+ color: var(--color-lime);
130
+ }
131
+
132
+ .progressLabel {
133
+ font-size: 11px;
134
+ color: var(--color-text-tertiary);
135
+ }
136
+
137
+ /* ── Image / banner ── */
138
+ .imageBanner {
139
+ width: 100%;
140
+ height: 80px;
141
+ border-radius: var(--radius-md);
142
+ object-fit: cover;
143
+ background: linear-gradient(135deg, var(--color-bg-card) 0%, var(--color-bg-lime-subtle) 100%);
144
+ border: 1px solid var(--color-border-standard);
145
+ }
146
+
147
+ /* ── Actions row ── */
148
+ .actions {
149
+ display: flex;
150
+ gap: 8px;
151
+ }
152
+
153
+ .actionsFull {
154
+ flex-direction: column;
155
+ }
156
+
157
+ /* ── Code / referral link ── */
158
+ .codeBox {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 8px;
162
+ padding: 8px 12px;
163
+ border-radius: var(--radius-md);
164
+ background: var(--color-bg-card);
165
+ border: 1px solid var(--color-border-standard);
166
+ font-family: "SF Mono", "Fira Code", Menlo, Consolas, monospace;
167
+ font-size: 12px;
168
+ color: var(--color-text-secondary);
169
+ overflow: hidden;
170
+ }
171
+
172
+ .codeText {
173
+ flex: 1;
174
+ white-space: nowrap;
175
+ overflow: hidden;
176
+ text-overflow: ellipsis;
177
+ }
178
+
179
+ .codeCopy {
180
+ display: flex;
181
+ align-items: center;
182
+ justify-content: center;
183
+ background: transparent;
184
+ border: none;
185
+ color: var(--color-text-tertiary);
186
+ cursor: pointer;
187
+ padding: 0;
188
+ flex-shrink: 0;
189
+ transition: color 0.15s ease;
190
+ }
191
+
192
+ .codeCopy:hover {
193
+ color: var(--color-lime);
194
+ }
195
+
196
+ /* ── Avatar row ── */
197
+ .avatarRow {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 10px;
201
+ }
202
+
203
+ .avatarCircle {
204
+ width: 32px;
205
+ height: 32px;
206
+ border-radius: 50%;
207
+ background: var(--color-bg-card);
208
+ border: 1px solid var(--color-border-standard);
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ flex-shrink: 0;
213
+ font-size: 12px;
214
+ font-weight: 700;
215
+ color: var(--color-lime);
216
+ }
217
+
218
+ .avatarInfo {
219
+ display: flex;
220
+ flex-direction: column;
221
+ gap: 1px;
222
+ min-width: 0;
223
+ }
224
+
225
+ .avatarName {
226
+ font-size: 13px;
227
+ font-weight: 600;
228
+ color: var(--color-text-primary);
229
+ white-space: nowrap;
230
+ overflow: hidden;
231
+ text-overflow: ellipsis;
232
+ }
233
+
234
+ .avatarMeta {
235
+ font-size: 11px;
236
+ color: var(--color-text-tertiary);
237
+ }
238
+
239
+ /* ── Steps / onboarding ── */
240
+ .steps {
241
+ display: flex;
242
+ flex-direction: column;
243
+ gap: 8px;
244
+ }
245
+
246
+ .step {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 8px;
250
+ font-size: 12px;
251
+ color: var(--color-text-tertiary);
252
+ }
253
+
254
+ .stepDone {
255
+ color: var(--color-lime);
256
+ text-decoration: line-through;
257
+ text-decoration-color: var(--color-text-tertiary);
258
+ }
259
+
260
+ .stepCheck {
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: center;
264
+ width: 18px;
265
+ height: 18px;
266
+ border-radius: var(--radius-full);
267
+ border: 1.5px solid var(--color-border-standard);
268
+ flex-shrink: 0;
269
+ font-size: 10px;
270
+ }
271
+
272
+ .stepCheckDone {
273
+ background: var(--color-lime);
274
+ border-color: var(--color-lime);
275
+ color: #121212;
276
+ }
277
+
278
+ /* ── QR Code placeholder ── */
279
+ .qrPlaceholder {
280
+ width: 100%;
281
+ aspect-ratio: 1;
282
+ max-width: 120px;
283
+ margin: 0 auto;
284
+ border-radius: var(--radius-md);
285
+ background: var(--color-bg-card);
286
+ border: 1px solid var(--color-border-standard);
287
+ display: flex;
288
+ align-items: center;
289
+ justify-content: center;
290
+ }
291
+
292
+ /* ── Cookie banner ── */
293
+ .cookieText {
294
+ font-size: 12px;
295
+ line-height: 1.5;
296
+ color: var(--color-text-tertiary);
297
+ }
298
+
299
+ .cookieLink {
300
+ color: var(--color-lime);
301
+ text-decoration: underline;
302
+ cursor: pointer;
303
+ }
304
+
305
+ /* ── Event date ── */
306
+ .eventDate {
307
+ display: flex;
308
+ align-items: center;
309
+ gap: 6px;
310
+ font-size: 12px;
311
+ color: var(--color-text-tertiary);
312
+ }
313
+
314
+ /* ── Message preview ── */
315
+ .messagePreview {
316
+ font-size: 12px;
317
+ line-height: 1.5;
318
+ color: var(--color-text-tertiary);
319
+ display: -webkit-box;
320
+ -webkit-line-clamp: 2;
321
+ line-clamp: 2;
322
+ -webkit-box-orient: vertical;
323
+ overflow: hidden;
324
+ }
325
+
326
+ /* ── Tag / badge row ── */
327
+ .tagRow {
328
+ display: flex;
329
+ flex-wrap: wrap;
330
+ gap: 6px;
331
+ }
332
+
333
+ /* ── Trial countdown ── */
334
+ .trialCountdown {
335
+ display: flex;
336
+ align-items: baseline;
337
+ gap: 4px;
338
+ }
339
+
340
+ .trialNumber {
341
+ font-family: var(--font-display);
342
+ font-size: 24px;
343
+ font-weight: 800;
344
+ color: var(--color-lime);
345
+ letter-spacing: -0.02em;
346
+ }
347
+
348
+ .trialUnit {
349
+ font-size: 12px;
350
+ color: var(--color-text-tertiary);
351
+ }