@omnikit-js/ui 0.3.3 → 0.3.5

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 (3) hide show
  1. package/README.md +8 -17
  2. package/package.json +1 -1
  3. package/styles.css +553 -3
package/README.md CHANGED
@@ -19,31 +19,22 @@ A comprehensive SaaS billing component for Next.js applications with Stripe inte
19
19
  npm install @omnikit-js/ui
20
20
  ```
21
21
 
22
- **Important**: The component requires Tailwind CSS to be configured in your project.
22
+ ### Simple Setup - No Tailwind Required!
23
23
 
24
- ### Setup Tailwind CSS
24
+ Just import the component's CSS file in your app:
25
25
 
26
- 1. Install Tailwind CSS if you haven't already:
27
- ```bash
28
- npm install -D tailwindcss postcss autoprefixer
29
- npx tailwindcss init -p
30
- ```
31
-
32
- 2. Import the component's CSS in your main CSS file or `layout.js`:
26
+ **Option 1: In your `app/globals.css` or main CSS file:**
33
27
  ```css
34
28
  @import '@omnikit-js/ui/styles.css';
35
29
  ```
36
30
 
37
- Or in your `app/globals.css`:
38
- ```css
39
- @tailwind base;
40
- @tailwind components;
41
- @tailwind utilities;
42
-
43
- /* Import the component styles */
44
- @import '@omnikit-js/ui/styles.css';
31
+ **Option 2: In your layout file:**
32
+ ```tsx
33
+ import '@omnikit-js/ui/styles.css';
45
34
  ```
46
35
 
36
+ **That's it!** The component includes all necessary styles and works without requiring Tailwind CSS configuration.
37
+
47
38
  ## Prerequisites
48
39
 
49
40
  1. A Stripe account with API keys
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnikit-js/ui",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "A SaaS billing component for Next.js with Stripe integration",
5
5
  "main": "src/index.ts",
6
6
  "module": "src/index.ts",
package/styles.css CHANGED
@@ -1,3 +1,553 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
1
+ /* @omnikit-js/ui Component Styles */
2
+ /* This file includes all Tailwind CSS classes used by the billing component */
3
+
4
+ /* Reset and base styles */
5
+ *, ::before, ::after {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ /* Color utilities */
10
+ .text-red-600 { color: #dc2626; }
11
+ .text-red-400 { color: #f87171; }
12
+ .text-orange-600 { color: #ea580c; }
13
+ .text-orange-400 { color: #fb923c; }
14
+ .text-yellow-600 { color: #d97706; }
15
+ .text-yellow-400 { color: #facc15; }
16
+ .text-green-600 { color: #16a34a; }
17
+ .text-green-400 { color: #4ade80; }
18
+ .text-gray-500 { color: #6b7280; }
19
+ .text-muted-foreground { color: #6b7280; }
20
+ .text-foreground { color: #111827; }
21
+ .text-primary { color: #3b82f6; }
22
+ .text-primary-foreground { color: #ffffff; }
23
+
24
+ /* Background colors */
25
+ .bg-red-100 { background-color: #fee2e2; }
26
+ .bg-red-950 { background-color: #450a0a; }
27
+ .bg-orange-100 { background-color: #ffedd5; }
28
+ .bg-orange-950 { background-color: #431407; }
29
+ .bg-yellow-100 { background-color: #fef3c7; }
30
+ .bg-yellow-950 { background-color: #451a03; }
31
+ .bg-green-100 { background-color: #dcfce7; }
32
+ .bg-green-950 { background-color: #14532d; }
33
+ .bg-primary { background-color: #3b82f6; }
34
+ .bg-popover { background-color: #ffffff; }
35
+ .bg-muted { background-color: #f9fafb; }
36
+ .bg-secondary { background-color: #f3f4f6; }
37
+ .bg-destructive { background-color: #ef4444; }
38
+
39
+ /* Border colors */
40
+ .border-primary { border-color: #3b82f6; }
41
+ .border-primary\/50 { border-color: rgba(59, 130, 246, 0.5); }
42
+ .border-muted { border-color: #e5e7eb; }
43
+ .border { border-width: 1px; }
44
+ .border-t { border-top-width: 1px; }
45
+
46
+ /* Text sizes */
47
+ .text-xs { font-size: 0.75rem; line-height: 1rem; }
48
+ .text-sm { font-size: 0.875rem; line-height: 1.25rem; }
49
+ .text-base { font-size: 1rem; line-height: 1.5rem; }
50
+ .text-lg { font-size: 1.125rem; line-height: 1.75rem; }
51
+ .text-xl { font-size: 1.25rem; line-height: 1.75rem; }
52
+ .text-2xl { font-size: 1.5rem; line-height: 2rem; }
53
+ .text-3xl { font-size: 1.875rem; line-height: 2.25rem; }
54
+ .text-5xl { font-size: 3rem; line-height: 1; }
55
+
56
+ /* Font weights */
57
+ .font-normal { font-weight: 400; }
58
+ .font-medium { font-weight: 500; }
59
+ .font-semibold { font-weight: 600; }
60
+ .font-bold { font-weight: 700; }
61
+
62
+ /* Spacing */
63
+ .p-1 { padding: 0.25rem; }
64
+ .p-3 { padding: 0.75rem; }
65
+ .p-4 { padding: 1rem; }
66
+ .p-6 { padding: 1.5rem; }
67
+ .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
68
+ .py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
69
+ .pt-2 { padding-top: 0.5rem; }
70
+ .pt-3 { padding-top: 0.75rem; }
71
+ .pt-4 { padding-top: 1rem; }
72
+ .pb-4 { padding-bottom: 1rem; }
73
+ .pb-8 { padding-bottom: 2rem; }
74
+ .ml-1 { margin-left: 0.25rem; }
75
+ .ml-2 { margin-left: 0.5rem; }
76
+ .mr-2 { margin-right: 0.5rem; }
77
+ .mt-1 { margin-top: 0.25rem; }
78
+ .mt-2 { margin-top: 0.5rem; }
79
+ .mb-4 { margin-bottom: 1rem; }
80
+ .mb-8 { margin-bottom: 2rem; }
81
+
82
+ /* Layout */
83
+ .flex { display: flex; }
84
+ .inline-flex { display: inline-flex; }
85
+ .grid { display: grid; }
86
+ .hidden { display: none; }
87
+ .flex-col { flex-direction: column; }
88
+ .flex-1 { flex: 1 1 0%; }
89
+ .flex-shrink-0 { flex-shrink: 0; }
90
+ .items-start { align-items: flex-start; }
91
+ .items-center { align-items: center; }
92
+ .items-baseline { align-items: baseline; }
93
+ .justify-center { justify-content: center; }
94
+ .justify-between { justify-content: space-between; }
95
+ .justify-end { justify-content: flex-end; }
96
+
97
+ /* Grid */
98
+ .gap-4 { gap: 1rem; }
99
+ .gap-6 { gap: 1.5rem; }
100
+
101
+ /* Width and height */
102
+ .w-full { width: 100%; }
103
+ .h-4 { height: 1rem; }
104
+ .h-6 { height: 1.5rem; }
105
+ .h-full { height: 100%; }
106
+ .min-h-\[300px\] { min-height: 300px; }
107
+
108
+ /* Positioning */
109
+ .relative { position: relative; }
110
+ .absolute { position: absolute; }
111
+ .fixed { position: fixed; }
112
+ .top-0 { top: 0px; }
113
+ .right-0 { right: 0px; }
114
+ .left-1\/2 { left: 50%; }
115
+ .top-1\/2 { top: 50%; }
116
+ .inset { inset: 0px; }
117
+ .z-50 { z-index: 50; }
118
+ .z-51 { z-index: 51; }
119
+
120
+ /* Transforms */
121
+ .-translate-x-1\/2 { transform: translateX(-50%); }
122
+ .-translate-y-1\/2 { transform: translateY(-50%); }
123
+
124
+ /* Overflow */
125
+ .overflow-hidden { overflow: hidden; }
126
+
127
+ /* Border radius */
128
+ .rounded { border-radius: 0.25rem; }
129
+ .rounded-md { border-radius: 0.375rem; }
130
+ .rounded-lg { border-radius: 0.5rem; }
131
+ .rounded-bl-lg { border-bottom-left-radius: 0.5rem; }
132
+ .rounded-full { border-radius: 9999px; }
133
+
134
+ /* Box shadow */
135
+ .shadow-md { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); }
136
+ .shadow { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); }
137
+
138
+ /* Cursor */
139
+ .cursor-pointer { cursor: pointer; }
140
+ .cursor-help { cursor: help; }
141
+
142
+ /* Transitions */
143
+ .transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
144
+ .animate-in { animation: enter 150ms ease-out; }
145
+ .animate-out { animation: exit 150ms ease-in; }
146
+ .animate-spin { animation: spin 1s linear infinite; }
147
+
148
+ /* Space between children */
149
+ .space-y-1 > :not([hidden]) ~ :not([hidden]) { margin-top: 0.25rem; }
150
+ .space-y-2 > :not([hidden]) ~ :not([hidden]) { margin-top: 0.5rem; }
151
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) { margin-top: 0.75rem; }
152
+ .space-y-4 > :not([hidden]) ~ :not([hidden]) { margin-top: 1rem; }
153
+ .space-y-6 > :not([hidden]) ~ :not([hidden]) { margin-top: 1.5rem; }
154
+ .space-x-2 > :not([hidden]) ~ :not([hidden]) { margin-left: 0.5rem; }
155
+
156
+ /* Responsive grid columns */
157
+ @media (min-width: 768px) {
158
+ .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
159
+ .md\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
160
+ }
161
+
162
+ @media (min-width: 1024px) {
163
+ .lg\:grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
164
+ }
165
+
166
+ @media (min-width: 1280px) {
167
+ .xl\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
168
+ }
169
+
170
+ /* Pseudo-class utilities */
171
+ .first\:border-t-0:first-child { border-top-width: 0px; }
172
+ .first\:pt-0:first-child { padding-top: 0px; }
173
+
174
+ /* Dark mode styles */
175
+ @media (prefers-color-scheme: dark) {
176
+ .dark\:text-red-400 { color: #f87171; }
177
+ .dark\:text-orange-400 { color: #fb923c; }
178
+ .dark\:text-yellow-400 { color: #facc15; }
179
+ .dark\:text-green-400 { color: #4ade80; }
180
+ .dark\:bg-red-950 { background-color: #450a0a; }
181
+ .dark\:bg-orange-950 { background-color: #431407; }
182
+ .dark\:bg-yellow-950 { background-color: #451a03; }
183
+ .dark\:bg-green-950 { background-color: #14532d; }
184
+ }
185
+
186
+ /* Custom keyframes */
187
+ @keyframes enter {
188
+ from { opacity: 0; transform: scale(0.95); }
189
+ to { opacity: 1; transform: scale(1); }
190
+ }
191
+
192
+ @keyframes exit {
193
+ from { opacity: 1; transform: scale(1); }
194
+ to { opacity: 0; transform: scale(0.95); }
195
+ }
196
+
197
+ @keyframes spin {
198
+ to { transform: rotate(360deg); }
199
+ }
200
+
201
+ /* Card styles */
202
+ .omnikit-card {
203
+ background: white;
204
+ border: 1px solid #e5e7eb;
205
+ border-radius: 0.5rem;
206
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
207
+ }
208
+
209
+ .omnikit-card-header {
210
+ padding: 1.5rem 1.5rem 0 1.5rem;
211
+ }
212
+
213
+ .omnikit-card-content {
214
+ padding: 1.5rem;
215
+ }
216
+
217
+ .omnikit-card-footer {
218
+ padding: 0 1.5rem 1.5rem 1.5rem;
219
+ }
220
+
221
+ /* Button styles */
222
+ .omnikit-button {
223
+ display: inline-flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ border-radius: 0.375rem;
227
+ font-size: 0.875rem;
228
+ font-weight: 500;
229
+ padding: 0.5rem 1rem;
230
+ border: 1px solid transparent;
231
+ cursor: pointer;
232
+ transition: all 0.2s;
233
+ }
234
+
235
+ .omnikit-button-primary {
236
+ background: #3b82f6;
237
+ color: white;
238
+ }
239
+
240
+ .omnikit-button-primary:hover {
241
+ background: #2563eb;
242
+ }
243
+
244
+ .omnikit-button-secondary {
245
+ background: #f3f4f6;
246
+ color: #374151;
247
+ }
248
+
249
+ .omnikit-button-secondary:hover {
250
+ background: #e5e7eb;
251
+ }
252
+
253
+ .omnikit-button-outline {
254
+ background: transparent;
255
+ border-color: #d1d5db;
256
+ color: #374151;
257
+ }
258
+
259
+ .omnikit-button-outline:hover {
260
+ background: #f9fafb;
261
+ }
262
+
263
+ .omnikit-button-destructive {
264
+ background: #ef4444;
265
+ color: white;
266
+ }
267
+
268
+ .omnikit-button-destructive:hover {
269
+ background: #dc2626;
270
+ }
271
+
272
+ /* Pricing card styles */
273
+ .omnikit-pricing-grid {
274
+ display: grid;
275
+ gap: 1rem;
276
+ grid-template-columns: 1fr;
277
+ }
278
+
279
+ @media (min-width: 768px) {
280
+ .omnikit-pricing-grid {
281
+ grid-template-columns: repeat(2, 1fr);
282
+ }
283
+ }
284
+
285
+ @media (min-width: 1024px) {
286
+ .omnikit-pricing-grid {
287
+ grid-template-columns: repeat(3, 1fr);
288
+ }
289
+ }
290
+
291
+ @media (min-width: 1280px) {
292
+ .omnikit-pricing-grid-4 {
293
+ grid-template-columns: repeat(4, 1fr);
294
+ }
295
+ }
296
+
297
+ .omnikit-pricing-card {
298
+ position: relative;
299
+ display: flex;
300
+ flex-direction: column;
301
+ height: 100%;
302
+ overflow: hidden;
303
+ }
304
+
305
+ .omnikit-pricing-card.current {
306
+ border-color: #3b82f6;
307
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
308
+ }
309
+
310
+ .omnikit-pricing-card.popular {
311
+ border-color: rgba(59, 130, 246, 0.5);
312
+ }
313
+
314
+ /* Feature styles */
315
+ .omnikit-feature-value {
316
+ font-size: 1.125rem;
317
+ font-weight: 600;
318
+ color: #111827;
319
+ }
320
+
321
+ .omnikit-feature-units {
322
+ font-size: 0.875rem;
323
+ color: #6b7280;
324
+ font-weight: 400;
325
+ }
326
+
327
+ .omnikit-feature-name {
328
+ font-size: 0.75rem;
329
+ color: #6b7280;
330
+ margin-top: 0.25rem;
331
+ cursor: help;
332
+ }
333
+
334
+ /* Badge styles */
335
+ .omnikit-badge {
336
+ display: inline-flex;
337
+ align-items: center;
338
+ border-radius: 9999px;
339
+ padding: 0.25rem 0.75rem;
340
+ font-size: 0.75rem;
341
+ font-weight: 500;
342
+ background: #f3f4f6;
343
+ color: #374151;
344
+ }
345
+
346
+ .omnikit-badge-secondary {
347
+ background: #f3f4f6;
348
+ color: #374151;
349
+ }
350
+
351
+ /* Progress bar styles */
352
+ .omnikit-progress {
353
+ width: 100%;
354
+ height: 0.5rem;
355
+ background: #f3f4f6;
356
+ border-radius: 9999px;
357
+ overflow: hidden;
358
+ }
359
+
360
+ .omnikit-progress-fill {
361
+ height: 100%;
362
+ background: #3b82f6;
363
+ transition: width 0.3s ease;
364
+ }
365
+
366
+ /* Modal/Dialog styles */
367
+ .omnikit-dialog-overlay {
368
+ position: fixed;
369
+ inset: 0;
370
+ background: rgba(0, 0, 0, 0.5);
371
+ z-index: 50;
372
+ }
373
+
374
+ .omnikit-dialog-content {
375
+ position: fixed;
376
+ left: 50%;
377
+ top: 50%;
378
+ transform: translate(-50%, -50%);
379
+ background: white;
380
+ border-radius: 0.5rem;
381
+ padding: 1.5rem;
382
+ max-width: 28rem;
383
+ width: 90vw;
384
+ z-index: 51;
385
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
386
+ }
387
+
388
+ /* Tabs styles */
389
+ .omnikit-tabs-list {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ justify-content: center;
393
+ border-radius: 0.375rem;
394
+ background: #f3f4f6;
395
+ padding: 0.25rem;
396
+ }
397
+
398
+ .omnikit-tabs-trigger {
399
+ display: inline-flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ padding: 0.375rem 0.75rem;
403
+ font-size: 0.875rem;
404
+ font-weight: 500;
405
+ border-radius: 0.25rem;
406
+ cursor: pointer;
407
+ color: #6b7280;
408
+ transition: all 0.2s;
409
+ }
410
+
411
+ .omnikit-tabs-trigger[data-state="active"] {
412
+ background: white;
413
+ color: #111827;
414
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
415
+ }
416
+
417
+ /* Utility classes */
418
+ .omnikit-text-muted {
419
+ color: #6b7280;
420
+ }
421
+
422
+ .omnikit-text-foreground {
423
+ color: #111827;
424
+ }
425
+
426
+ .omnikit-text-primary {
427
+ color: #3b82f6;
428
+ }
429
+
430
+ .omnikit-flex {
431
+ display: flex;
432
+ }
433
+
434
+ .omnikit-flex-col {
435
+ flex-direction: column;
436
+ }
437
+
438
+ .omnikit-flex-1 {
439
+ flex: 1 1 0%;
440
+ }
441
+
442
+ .omnikit-items-center {
443
+ align-items: center;
444
+ }
445
+
446
+ .omnikit-justify-center {
447
+ justify-content: center;
448
+ }
449
+
450
+ .omnikit-justify-between {
451
+ justify-content: space-between;
452
+ }
453
+
454
+ .omnikit-space-y-2 > * + * {
455
+ margin-top: 0.5rem;
456
+ }
457
+
458
+ .omnikit-space-y-3 > * + * {
459
+ margin-top: 0.75rem;
460
+ }
461
+
462
+ .omnikit-space-y-4 > * + * {
463
+ margin-top: 1rem;
464
+ }
465
+
466
+ .omnikit-mt-1 {
467
+ margin-top: 0.25rem;
468
+ }
469
+
470
+ .omnikit-mt-2 {
471
+ margin-top: 0.5rem;
472
+ }
473
+
474
+ .omnikit-mb-4 {
475
+ margin-bottom: 1rem;
476
+ }
477
+
478
+ .omnikit-p-4 {
479
+ padding: 1rem;
480
+ }
481
+
482
+ .omnikit-pt-2 {
483
+ padding-top: 0.5rem;
484
+ }
485
+
486
+ .omnikit-pt-3 {
487
+ padding-top: 0.75rem;
488
+ }
489
+
490
+ .omnikit-w-full {
491
+ width: 100%;
492
+ }
493
+
494
+ .omnikit-h-6 {
495
+ height: 1.5rem;
496
+ }
497
+
498
+ .omnikit-min-h-300 {
499
+ min-height: 300px;
500
+ }
501
+
502
+ /* Dark mode support */
503
+ @media (prefers-color-scheme: dark) {
504
+ .omnikit-card {
505
+ background: #1f2937;
506
+ border-color: #374151;
507
+ color: white;
508
+ }
509
+
510
+ .omnikit-feature-value {
511
+ color: white;
512
+ }
513
+
514
+ .omnikit-text-foreground {
515
+ color: white;
516
+ }
517
+
518
+ .omnikit-button-secondary {
519
+ background: #374151;
520
+ color: #d1d5db;
521
+ }
522
+
523
+ .omnikit-button-secondary:hover {
524
+ background: #4b5563;
525
+ }
526
+
527
+ .omnikit-button-outline {
528
+ border-color: #4b5563;
529
+ color: #d1d5db;
530
+ }
531
+
532
+ .omnikit-button-outline:hover {
533
+ background: #374151;
534
+ }
535
+
536
+ .omnikit-dialog-content {
537
+ background: #1f2937;
538
+ color: white;
539
+ }
540
+
541
+ .omnikit-tabs-list {
542
+ background: #374151;
543
+ }
544
+
545
+ .omnikit-tabs-trigger {
546
+ color: #9ca3af;
547
+ }
548
+
549
+ .omnikit-tabs-trigger[data-state="active"] {
550
+ background: #1f2937;
551
+ color: white;
552
+ }
553
+ }