uibee 3.1.6 → 3.3.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/dist/style.css CHANGED
@@ -43,6 +43,7 @@
43
43
  --container-xs: 20rem;
44
44
  --container-sm: 24rem;
45
45
  --container-md: 28rem;
46
+ --container-lg: 32rem;
46
47
  --container-2xl: 42rem;
47
48
  --container-6xl: 72rem;
48
49
  --text-xs: 0.75rem;
@@ -75,6 +76,7 @@
75
76
  --radius-xl: 0.75rem;
76
77
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
77
78
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
79
+ --animate-spin: spin 1s linear infinite;
78
80
  --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
79
81
  --blur-sm: 8px;
80
82
  --blur-xl: 24px;
@@ -387,6 +389,9 @@
387
389
  .top-0 {
388
390
  top: 0;
389
391
  }
392
+ .top-1 {
393
+ top: var(--spacing);
394
+ }
390
395
  .top-1\/2 {
391
396
  top: calc(1 / 2 * 100%);
392
397
  }
@@ -402,6 +407,9 @@
402
407
  .top-7 {
403
408
  top: calc(var(--spacing) * 7);
404
409
  }
410
+ .top-12 {
411
+ top: calc(var(--spacing) * 12);
412
+ }
405
413
  .top-13 {
406
414
  top: calc(var(--spacing) * 13);
407
415
  }
@@ -411,9 +419,15 @@
411
419
  .right-0 {
412
420
  right: 0;
413
421
  }
422
+ .right-1 {
423
+ right: var(--spacing);
424
+ }
414
425
  .right-2 {
415
426
  right: calc(var(--spacing) * 2);
416
427
  }
428
+ .right-3 {
429
+ right: calc(var(--spacing) * 3);
430
+ }
417
431
  .right-4 {
418
432
  right: calc(var(--spacing) * 4);
419
433
  }
@@ -441,6 +455,9 @@
441
455
  .left-3 {
442
456
  left: calc(var(--spacing) * 3);
443
457
  }
458
+ .left-4 {
459
+ left: calc(var(--spacing) * 4);
460
+ }
444
461
  .z-10 {
445
462
  z-index: 10;
446
463
  }
@@ -1577,9 +1594,18 @@
1577
1594
  .-ml-4 {
1578
1595
  margin-left: calc(var(--spacing) * -4);
1579
1596
  }
1597
+ .ml-0 {
1598
+ margin-left: 0;
1599
+ }
1580
1600
  .ml-1 {
1581
1601
  margin-left: var(--spacing);
1582
1602
  }
1603
+ .ml-3 {
1604
+ margin-left: calc(var(--spacing) * 3);
1605
+ }
1606
+ .ml-6 {
1607
+ margin-left: calc(var(--spacing) * 6);
1608
+ }
1583
1609
  .ml-auto {
1584
1610
  margin-left: auto;
1585
1611
  }
@@ -1675,6 +1701,9 @@
1675
1701
  .h-16 {
1676
1702
  height: calc(var(--spacing) * 16);
1677
1703
  }
1704
+ .h-20 {
1705
+ height: calc(var(--spacing) * 20);
1706
+ }
1678
1707
  .h-32 {
1679
1708
  height: calc(var(--spacing) * 32);
1680
1709
  }
@@ -1693,6 +1722,9 @@
1693
1722
  .max-h-60 {
1694
1723
  max-height: calc(var(--spacing) * 60);
1695
1724
  }
1725
+ .max-h-96 {
1726
+ max-height: calc(var(--spacing) * 96);
1727
+ }
1696
1728
  .max-h-\[9999px\] {
1697
1729
  max-height: 9999px;
1698
1730
  }
@@ -1756,6 +1788,9 @@
1756
1788
  .w-16 {
1757
1789
  width: calc(var(--spacing) * 16);
1758
1790
  }
1791
+ .w-20 {
1792
+ width: calc(var(--spacing) * 20);
1793
+ }
1759
1794
  .w-44 {
1760
1795
  width: calc(var(--spacing) * 44);
1761
1796
  }
@@ -1780,12 +1815,18 @@
1780
1815
  .w-full {
1781
1816
  width: 100%;
1782
1817
  }
1818
+ .max-w-0 {
1819
+ max-width: 0;
1820
+ }
1783
1821
  .max-w-2xl {
1784
1822
  max-width: var(--container-2xl);
1785
1823
  }
1786
1824
  .max-w-6xl {
1787
1825
  max-width: var(--container-6xl);
1788
1826
  }
1827
+ .max-w-48 {
1828
+ max-width: calc(var(--spacing) * 48);
1829
+ }
1789
1830
  .max-w-60 {
1790
1831
  max-width: calc(var(--spacing) * 60);
1791
1832
  }
@@ -1795,6 +1836,9 @@
1795
1836
  .max-w-200 {
1796
1837
  max-width: calc(var(--spacing) * 200);
1797
1838
  }
1839
+ .max-w-lg {
1840
+ max-width: var(--container-lg);
1841
+ }
1798
1842
  .max-w-md {
1799
1843
  max-width: var(--container-md);
1800
1844
  }
@@ -1810,6 +1854,9 @@
1810
1854
  .min-w-0 {
1811
1855
  min-width: 0;
1812
1856
  }
1857
+ .min-w-6 {
1858
+ min-width: calc(var(--spacing) * 6);
1859
+ }
1813
1860
  .min-w-8 {
1814
1861
  min-width: calc(var(--spacing) * 8);
1815
1862
  }
@@ -1855,6 +1902,10 @@
1855
1902
  --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
1856
1903
  translate: var(--tw-translate-x) var(--tw-translate-y);
1857
1904
  }
1905
+ .translate-x-1 {
1906
+ --tw-translate-x: var(--spacing);
1907
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1908
+ }
1858
1909
  .translate-x-8 {
1859
1910
  --tw-translate-x: calc(var(--spacing) * 8);
1860
1911
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1871,12 +1922,21 @@
1871
1922
  --tw-translate-y: 0;
1872
1923
  translate: var(--tw-translate-x) var(--tw-translate-y);
1873
1924
  }
1925
+ .scale-75 {
1926
+ --tw-scale-x: 75%;
1927
+ --tw-scale-y: 75%;
1928
+ --tw-scale-z: 75%;
1929
+ scale: var(--tw-scale-x) var(--tw-scale-y);
1930
+ }
1874
1931
  .scale-100 {
1875
1932
  --tw-scale-x: 100%;
1876
1933
  --tw-scale-y: 100%;
1877
1934
  --tw-scale-z: 100%;
1878
1935
  scale: var(--tw-scale-x) var(--tw-scale-y);
1879
1936
  }
1937
+ .scale-\[1\.01\] {
1938
+ scale: 1.01;
1939
+ }
1880
1940
  .scale-\[1\.9\] {
1881
1941
  scale: 1.9;
1882
1942
  }
@@ -1903,6 +1963,9 @@
1903
1963
  .animate-ping {
1904
1964
  animation: var(--animate-ping);
1905
1965
  }
1966
+ .animate-spin {
1967
+ animation: var(--animate-spin);
1968
+ }
1906
1969
  .cursor-crosshair {
1907
1970
  cursor: crosshair;
1908
1971
  }
@@ -1915,6 +1978,9 @@
1915
1978
  .resize-y {
1916
1979
  resize: vertical;
1917
1980
  }
1981
+ .\[scrollbar-width\:none\] {
1982
+ scrollbar-width: none;
1983
+ }
1918
1984
  .list-none {
1919
1985
  list-style-type: none;
1920
1986
  }
@@ -1957,6 +2023,9 @@
1957
2023
  .justify-end {
1958
2024
  justify-content: flex-end;
1959
2025
  }
2026
+ .gap-0 {
2027
+ gap: 0;
2028
+ }
1960
2029
  .gap-0\.5 {
1961
2030
  gap: calc(var(--spacing) * 0.5);
1962
2031
  }
@@ -2035,6 +2104,12 @@
2035
2104
  .overflow-hidden {
2036
2105
  overflow: hidden;
2037
2106
  }
2107
+ .overflow-x-auto {
2108
+ overflow-x: auto;
2109
+ }
2110
+ .overflow-x-hidden {
2111
+ overflow-x: hidden;
2112
+ }
2038
2113
  .overflow-y-auto {
2039
2114
  overflow-y: auto;
2040
2115
  }
@@ -2073,18 +2148,34 @@
2073
2148
  border-style: var(--tw-border-style);
2074
2149
  border-width: 2px;
2075
2150
  }
2151
+ .border-\[3px\] {
2152
+ border-style: var(--tw-border-style);
2153
+ border-width: 3px;
2154
+ }
2076
2155
  .border-t {
2077
2156
  border-top-style: var(--tw-border-style);
2078
2157
  border-top-width: 1px;
2079
2158
  }
2159
+ .border-r {
2160
+ border-right-style: var(--tw-border-style);
2161
+ border-right-width: 1px;
2162
+ }
2080
2163
  .border-b {
2081
2164
  border-bottom-style: var(--tw-border-style);
2082
2165
  border-bottom-width: 1px;
2083
2166
  }
2167
+ .border-l {
2168
+ border-left-style: var(--tw-border-style);
2169
+ border-left-width: 1px;
2170
+ }
2084
2171
  .border-l-2 {
2085
2172
  border-left-style: var(--tw-border-style);
2086
2173
  border-left-width: 2px;
2087
2174
  }
2175
+ .border-dashed {
2176
+ --tw-border-style: dashed;
2177
+ border-style: dashed;
2178
+ }
2088
2179
  .border-none {
2089
2180
  --tw-border-style: none;
2090
2181
  border-style: none;
@@ -2095,6 +2186,12 @@
2095
2186
  .border-login {
2096
2187
  border-color: var(--color-login);
2097
2188
  }
2189
+ .border-login-100\/10 {
2190
+ border-color: color-mix(in srgb, #b0b0b0 10%, transparent);
2191
+ @supports (color: color-mix(in lab, red, red)) {
2192
+ border-color: color-mix(in oklab, var(--color-login-100) 10%, transparent);
2193
+ }
2194
+ }
2098
2195
  .border-login-200 {
2099
2196
  border-color: var(--color-login-200);
2100
2197
  }
@@ -2155,6 +2252,9 @@
2155
2252
  border-color: color-mix(in oklab, var(--color-login-600) 20%, transparent);
2156
2253
  }
2157
2254
  }
2255
+ .border-login-800 {
2256
+ border-color: var(--color-login-800);
2257
+ }
2158
2258
  .border-login\/50 {
2159
2259
  border-color: color-mix(in srgb, #fd8738 50%, transparent);
2160
2260
  @supports (color: color-mix(in lab, red, red)) {
@@ -2179,6 +2279,15 @@
2179
2279
  .border-white {
2180
2280
  border-color: var(--color-white);
2181
2281
  }
2282
+ .border-white\/5 {
2283
+ border-color: color-mix(in srgb, #fff 5%, transparent);
2284
+ @supports (color: color-mix(in lab, red, red)) {
2285
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
2286
+ }
2287
+ }
2288
+ .border-t-login {
2289
+ border-top-color: var(--color-login);
2290
+ }
2182
2291
  .border-l-amber-500 {
2183
2292
  border-left-color: var(--color-amber-500);
2184
2293
  }
@@ -2209,6 +2318,12 @@
2209
2318
  background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent);
2210
2319
  }
2211
2320
  }
2321
+ .bg-amber-500\/15 {
2322
+ background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);
2323
+ @supports (color: color-mix(in lab, red, red)) {
2324
+ background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);
2325
+ }
2326
+ }
2212
2327
  .bg-black\/50 {
2213
2328
  background-color: color-mix(in srgb, #000 50%, transparent);
2214
2329
  @supports (color: color-mix(in lab, red, red)) {
@@ -2230,6 +2345,12 @@
2230
2345
  background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);
2231
2346
  }
2232
2347
  }
2348
+ .bg-emerald-500\/15 {
2349
+ background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 15%, transparent);
2350
+ @supports (color: color-mix(in lab, red, red)) {
2351
+ background-color: color-mix(in oklab, var(--color-emerald-500) 15%, transparent);
2352
+ }
2353
+ }
2233
2354
  .bg-gray-500\/15 {
2234
2355
  background-color: color-mix(in srgb, oklch(55.1% 0.027 264.364) 15%, transparent);
2235
2356
  @supports (color: color-mix(in lab, red, red)) {
@@ -2272,6 +2393,12 @@
2272
2393
  .bg-login-600 {
2273
2394
  background-color: var(--color-login-600);
2274
2395
  }
2396
+ .bg-login-600\/30 {
2397
+ background-color: color-mix(in srgb, #212121 30%, transparent);
2398
+ @supports (color: color-mix(in lab, red, red)) {
2399
+ background-color: color-mix(in oklab, var(--color-login-600) 30%, transparent);
2400
+ }
2401
+ }
2275
2402
  .bg-login-700 {
2276
2403
  background-color: var(--color-login-700);
2277
2404
  }
@@ -2290,6 +2417,24 @@
2290
2417
  .bg-login-800 {
2291
2418
  background-color: var(--color-login-800);
2292
2419
  }
2420
+ .bg-login-800\/30 {
2421
+ background-color: color-mix(in srgb, #181818 30%, transparent);
2422
+ @supports (color: color-mix(in lab, red, red)) {
2423
+ background-color: color-mix(in oklab, var(--color-login-800) 30%, transparent);
2424
+ }
2425
+ }
2426
+ .bg-login-800\/50 {
2427
+ background-color: color-mix(in srgb, #181818 50%, transparent);
2428
+ @supports (color: color-mix(in lab, red, red)) {
2429
+ background-color: color-mix(in oklab, var(--color-login-800) 50%, transparent);
2430
+ }
2431
+ }
2432
+ .bg-login-800\/60 {
2433
+ background-color: color-mix(in srgb, #181818 60%, transparent);
2434
+ @supports (color: color-mix(in lab, red, red)) {
2435
+ background-color: color-mix(in oklab, var(--color-login-800) 60%, transparent);
2436
+ }
2437
+ }
2293
2438
  .bg-login-900 {
2294
2439
  background-color: var(--color-login-900);
2295
2440
  }
@@ -2356,6 +2501,12 @@
2356
2501
  background-color: color-mix(in oklab, var(--color-sky-500) 10%, transparent);
2357
2502
  }
2358
2503
  }
2504
+ .bg-sky-500\/15 {
2505
+ background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 15%, transparent);
2506
+ @supports (color: color-mix(in lab, red, red)) {
2507
+ background-color: color-mix(in oklab, var(--color-sky-500) 15%, transparent);
2508
+ }
2509
+ }
2359
2510
  .bg-transparent {
2360
2511
  background-color: transparent;
2361
2512
  }
@@ -2365,6 +2516,12 @@
2365
2516
  background-color: color-mix(in oklab, var(--color-violet-500) 10%, transparent);
2366
2517
  }
2367
2518
  }
2519
+ .bg-violet-500\/15 {
2520
+ background-color: color-mix(in srgb, oklch(60.6% 0.25 292.717) 15%, transparent);
2521
+ @supports (color: color-mix(in lab, red, red)) {
2522
+ background-color: color-mix(in oklab, var(--color-violet-500) 15%, transparent);
2523
+ }
2524
+ }
2368
2525
  .bg-white {
2369
2526
  background-color: var(--color-white);
2370
2527
  }
@@ -2427,6 +2584,9 @@
2427
2584
  .stroke-blue-400 {
2428
2585
  stroke: var(--color-blue-400);
2429
2586
  }
2587
+ .stroke-emerald-400 {
2588
+ stroke: var(--color-emerald-400);
2589
+ }
2430
2590
  .stroke-login {
2431
2591
  stroke: var(--color-login);
2432
2592
  }
@@ -2472,6 +2632,9 @@
2472
2632
  .p-8 {
2473
2633
  padding: calc(var(--spacing) * 8);
2474
2634
  }
2635
+ .px-1\.5 {
2636
+ padding-inline: calc(var(--spacing) * 1.5);
2637
+ }
2475
2638
  .px-2 {
2476
2639
  padding-inline: calc(var(--spacing) * 2);
2477
2640
  }
@@ -2484,6 +2647,9 @@
2484
2647
  .px-4 {
2485
2648
  padding-inline: calc(var(--spacing) * 4);
2486
2649
  }
2650
+ .px-5 {
2651
+ padding-inline: calc(var(--spacing) * 5);
2652
+ }
2487
2653
  .px-6 {
2488
2654
  padding-inline: calc(var(--spacing) * 6);
2489
2655
  }
@@ -2529,6 +2695,9 @@
2529
2695
  .pt-4 {
2530
2696
  padding-top: calc(var(--spacing) * 4);
2531
2697
  }
2698
+ .pt-5 {
2699
+ padding-top: calc(var(--spacing) * 5);
2700
+ }
2532
2701
  .pt-8 {
2533
2702
  padding-top: calc(var(--spacing) * 8);
2534
2703
  }
@@ -2550,9 +2719,15 @@
2550
2719
  .pb-4 {
2551
2720
  padding-bottom: calc(var(--spacing) * 4);
2552
2721
  }
2722
+ .pb-5 {
2723
+ padding-bottom: calc(var(--spacing) * 5);
2724
+ }
2553
2725
  .pb-24 {
2554
2726
  padding-bottom: calc(var(--spacing) * 24);
2555
2727
  }
2728
+ .pl-2 {
2729
+ padding-left: calc(var(--spacing) * 2);
2730
+ }
2556
2731
  .pl-3 {
2557
2732
  padding-left: calc(var(--spacing) * 3);
2558
2733
  }
@@ -3012,6 +3187,13 @@
3012
3187
  line-height: var(--tw-leading, var(--text-xs--line-height)) !important;
3013
3188
  }
3014
3189
  }
3190
+ .group-hover\:text-login {
3191
+ &:is(:where(.group):hover *) {
3192
+ @media (hover: hover) {
3193
+ color: var(--color-login);
3194
+ }
3195
+ }
3196
+ }
3015
3197
  .group-hover\:opacity-0 {
3016
3198
  &:is(:where(.group):hover *) {
3017
3199
  @media (hover: hover) {
@@ -3195,6 +3377,16 @@
3195
3377
  }
3196
3378
  }
3197
3379
  }
3380
+ .hover\:border-login\/50 {
3381
+ &:hover {
3382
+ @media (hover: hover) {
3383
+ border-color: color-mix(in srgb, #fd8738 50%, transparent);
3384
+ @supports (color: color-mix(in lab, red, red)) {
3385
+ border-color: color-mix(in oklab, var(--color-login) 50%, transparent);
3386
+ }
3387
+ }
3388
+ }
3389
+ }
3198
3390
  .hover\:bg-gray-400\/10 {
3199
3391
  &:hover {
3200
3392
  @media (hover: hover) {
@@ -3300,6 +3492,43 @@
3300
3492
  }
3301
3493
  }
3302
3494
  }
3495
+ .hover\:bg-login-800 {
3496
+ &:hover {
3497
+ @media (hover: hover) {
3498
+ background-color: var(--color-login-800);
3499
+ }
3500
+ }
3501
+ }
3502
+ .hover\:bg-login-800\/30 {
3503
+ &:hover {
3504
+ @media (hover: hover) {
3505
+ background-color: color-mix(in srgb, #181818 30%, transparent);
3506
+ @supports (color: color-mix(in lab, red, red)) {
3507
+ background-color: color-mix(in oklab, var(--color-login-800) 30%, transparent);
3508
+ }
3509
+ }
3510
+ }
3511
+ }
3512
+ .hover\:bg-login-800\/50 {
3513
+ &:hover {
3514
+ @media (hover: hover) {
3515
+ background-color: color-mix(in srgb, #181818 50%, transparent);
3516
+ @supports (color: color-mix(in lab, red, red)) {
3517
+ background-color: color-mix(in oklab, var(--color-login-800) 50%, transparent);
3518
+ }
3519
+ }
3520
+ }
3521
+ }
3522
+ .hover\:bg-login\/5 {
3523
+ &:hover {
3524
+ @media (hover: hover) {
3525
+ background-color: color-mix(in srgb, #fd8738 5%, transparent);
3526
+ @supports (color: color-mix(in lab, red, red)) {
3527
+ background-color: color-mix(in oklab, var(--color-login) 5%, transparent);
3528
+ }
3529
+ }
3530
+ }
3531
+ }
3303
3532
  .hover\:bg-login\/80 {
3304
3533
  &:hover {
3305
3534
  @media (hover: hover) {
@@ -3345,6 +3574,13 @@
3345
3574
  }
3346
3575
  }
3347
3576
  }
3577
+ .hover\:text-login-100 {
3578
+ &:hover {
3579
+ @media (hover: hover) {
3580
+ color: var(--color-login-100);
3581
+ }
3582
+ }
3583
+ }
3348
3584
  .hover\:text-login-200 {
3349
3585
  &:hover {
3350
3586
  @media (hover: hover) {
@@ -3745,6 +3981,20 @@
3745
3981
  width: calc(var(--spacing) * 4);
3746
3982
  }
3747
3983
  }
3984
+ .\[\&\>svg\]\:stroke-login {
3985
+ &>svg {
3986
+ stroke: var(--color-login);
3987
+ }
3988
+ }
3989
+ .group-hover\:\[\&\>svg\]\:stroke-login-100 {
3990
+ &:is(:where(.group):hover *) {
3991
+ @media (hover: hover) {
3992
+ &>svg {
3993
+ stroke: var(--color-login-100);
3994
+ }
3995
+ }
3996
+ }
3997
+ }
3748
3998
  }
3749
3999
  :root {
3750
4000
  transition: background 0.4s,
@@ -4143,6 +4393,11 @@ input::-ms-clear {
4143
4393
  syntax: "*";
4144
4394
  inherits: false;
4145
4395
  }
4396
+ @keyframes spin {
4397
+ to {
4398
+ transform: rotate(360deg);
4399
+ }
4400
+ }
4146
4401
  @keyframes ping {
4147
4402
  75%,
4148
4403
  100% {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uibee",
3
- "version": "3.1.6",
3
+ "version": "3.3.0",
4
4
  "description": "Shared components, functions and hooks for reuse across Login projects",
5
5
  "homepage": "https://github.com/Login-Linjeforening-for-IT/uibee#readme",
6
6
  "bugs": {
@@ -0,0 +1,44 @@
1
+ type BadgeVariant =
2
+ | 'default'
3
+ | 'success'
4
+ | 'warning'
5
+ | 'danger'
6
+ | 'info'
7
+ | 'amber'
8
+ | 'violet'
9
+ | 'blue'
10
+ | 'emerald'
11
+ | 'orange'
12
+
13
+ type BadgeProps = {
14
+ text: string
15
+ variant?: BadgeVariant
16
+ size?: 'sm' | 'md'
17
+ className?: string
18
+ }
19
+
20
+ const variants: Record<BadgeVariant, string> = {
21
+ default: 'bg-login-600 text-login-100',
22
+ success: 'bg-emerald-500/15 text-emerald-400',
23
+ warning: 'bg-yellow-500/15 text-yellow-400',
24
+ danger: 'bg-red-500/15 text-red-400',
25
+ info: 'bg-sky-500/15 text-sky-400',
26
+ amber: 'bg-amber-500/15 text-amber-400',
27
+ violet: 'bg-violet-500/15 text-violet-400',
28
+ blue: 'bg-blue-500/15 text-blue-400',
29
+ emerald: 'bg-emerald-500/15 text-emerald-400',
30
+ orange: 'bg-login/15 text-login',
31
+ }
32
+
33
+ const sizes = {
34
+ sm: 'px-2 py-0.5 text-xs',
35
+ md: 'px-2.5 py-1 text-sm',
36
+ }
37
+
38
+ export default function Badge({ text, variant = 'default', size = 'sm', className = '' }: BadgeProps) {
39
+ return (
40
+ <span className={`inline-flex items-center rounded-full font-medium ${variants[variant]} ${sizes[size]} ${className}`}>
41
+ {text}
42
+ </span>
43
+ )
44
+ }
@@ -21,7 +21,8 @@ const variants = {
21
21
  info: 'bg-blue-600 text-white hover:brightness-110',
22
22
  }
23
23
 
24
- const base = 'cursor-pointer rounded-md h-9 flex items-center justify-center gap-2 select-none text-sm font-medium transition-all duration-150'
24
+ const base = 'cursor-pointer rounded-md h-9 flex items-center justify-center gap-2' +
25
+ ' select-none text-sm font-medium transition-all duration-150'
25
26
  const withText = 'px-4 w-fit'
26
27
  const iconOnly = 'w-9'
27
28
  const disabledCls = 'opacity-40 cursor-not-allowed pointer-events-none'
@@ -0,0 +1,55 @@
1
+ 'use client'
2
+
3
+ import { useState, type ReactNode } from 'react'
4
+ import { Copy, Check } from 'lucide-react'
5
+
6
+ type CodeProps = {
7
+ children: ReactNode
8
+ className?: string
9
+ }
10
+
11
+ export function Code({ children, className = '' }: CodeProps) {
12
+ return (
13
+ <code className={`font-mono text-xs bg-login-700 text-login px-1.5 py-0.5 rounded ${className}`}>
14
+ {children}
15
+ </code>
16
+ )
17
+ }
18
+
19
+ type CodeBlockProps = {
20
+ code: string
21
+ language?: string
22
+ className?: string
23
+ }
24
+
25
+ export function CodeBlock({ code, language, className = '' }: CodeBlockProps) {
26
+ const [copied, setCopied] = useState(false)
27
+
28
+ function copy() {
29
+ navigator.clipboard.writeText(code)
30
+ setCopied(true)
31
+ setTimeout(() => setCopied(false), 2000)
32
+ }
33
+
34
+ return (
35
+ <div className={`relative group rounded-xl border border-login-500/30 bg-login-900 overflow-hidden ${className}`}>
36
+ <div className='flex items-center justify-between px-4 py-2 border-b border-login-500/20 bg-login-800'>
37
+ <span className='text-xs font-mono text-login-400'>{language ?? ''}</span>
38
+ <button
39
+ type='button'
40
+ onClick={copy}
41
+ className='flex cursor-pointer items-center gap-1.5 text-xs text-login-400 hover:text-login-100 transition-colors'
42
+ >
43
+ {copied
44
+ ? <Check className='w-3.5 h-3.5 stroke-emerald-400' />
45
+ : <Copy className='w-3.5 h-3.5' />
46
+ }
47
+ {copied ? 'Copied' : 'Copy'}
48
+ </button>
49
+ </div>
50
+ <pre className='overflow-x-auto p-4 text-xs font-mono leading-relaxed text-login-100'>
51
+ <code>{code}</code>
52
+ </pre>
53
+ </div>
54
+ )
55
+ }
@@ -36,7 +36,11 @@ export default function Accordion({ title, children, defaultOpen = false, classN
36
36
  <button
37
37
  type='button'
38
38
  onClick={() => setOpen((o) => !o)}
39
- className='flex w-full cursor-pointer items-center justify-between bg-login-800 px-4 py-3 text-left transition-colors duration-150 hover:bg-login-700 select-none'
39
+ className='
40
+ flex w-full cursor-pointer items-center justify-between
41
+ bg-login-800 px-4 py-3 text-left select-none
42
+ transition-colors duration-150 hover:bg-login-700
43
+ '
40
44
  >
41
45
  <div className='text-sm font-medium text-login-50'>{title}</div>
42
46
  <ChevronDown