uibee 3.1.6 → 3.2.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
  }
@@ -1957,6 +2020,9 @@
1957
2020
  .justify-end {
1958
2021
  justify-content: flex-end;
1959
2022
  }
2023
+ .gap-0 {
2024
+ gap: 0;
2025
+ }
1960
2026
  .gap-0\.5 {
1961
2027
  gap: calc(var(--spacing) * 0.5);
1962
2028
  }
@@ -2035,6 +2101,12 @@
2035
2101
  .overflow-hidden {
2036
2102
  overflow: hidden;
2037
2103
  }
2104
+ .overflow-x-auto {
2105
+ overflow-x: auto;
2106
+ }
2107
+ .overflow-x-hidden {
2108
+ overflow-x: hidden;
2109
+ }
2038
2110
  .overflow-y-auto {
2039
2111
  overflow-y: auto;
2040
2112
  }
@@ -2073,18 +2145,34 @@
2073
2145
  border-style: var(--tw-border-style);
2074
2146
  border-width: 2px;
2075
2147
  }
2148
+ .border-\[3px\] {
2149
+ border-style: var(--tw-border-style);
2150
+ border-width: 3px;
2151
+ }
2076
2152
  .border-t {
2077
2153
  border-top-style: var(--tw-border-style);
2078
2154
  border-top-width: 1px;
2079
2155
  }
2156
+ .border-r {
2157
+ border-right-style: var(--tw-border-style);
2158
+ border-right-width: 1px;
2159
+ }
2080
2160
  .border-b {
2081
2161
  border-bottom-style: var(--tw-border-style);
2082
2162
  border-bottom-width: 1px;
2083
2163
  }
2164
+ .border-l {
2165
+ border-left-style: var(--tw-border-style);
2166
+ border-left-width: 1px;
2167
+ }
2084
2168
  .border-l-2 {
2085
2169
  border-left-style: var(--tw-border-style);
2086
2170
  border-left-width: 2px;
2087
2171
  }
2172
+ .border-dashed {
2173
+ --tw-border-style: dashed;
2174
+ border-style: dashed;
2175
+ }
2088
2176
  .border-none {
2089
2177
  --tw-border-style: none;
2090
2178
  border-style: none;
@@ -2095,6 +2183,12 @@
2095
2183
  .border-login {
2096
2184
  border-color: var(--color-login);
2097
2185
  }
2186
+ .border-login-100\/10 {
2187
+ border-color: color-mix(in srgb, #b0b0b0 10%, transparent);
2188
+ @supports (color: color-mix(in lab, red, red)) {
2189
+ border-color: color-mix(in oklab, var(--color-login-100) 10%, transparent);
2190
+ }
2191
+ }
2098
2192
  .border-login-200 {
2099
2193
  border-color: var(--color-login-200);
2100
2194
  }
@@ -2155,6 +2249,9 @@
2155
2249
  border-color: color-mix(in oklab, var(--color-login-600) 20%, transparent);
2156
2250
  }
2157
2251
  }
2252
+ .border-login-800 {
2253
+ border-color: var(--color-login-800);
2254
+ }
2158
2255
  .border-login\/50 {
2159
2256
  border-color: color-mix(in srgb, #fd8738 50%, transparent);
2160
2257
  @supports (color: color-mix(in lab, red, red)) {
@@ -2179,6 +2276,15 @@
2179
2276
  .border-white {
2180
2277
  border-color: var(--color-white);
2181
2278
  }
2279
+ .border-white\/5 {
2280
+ border-color: color-mix(in srgb, #fff 5%, transparent);
2281
+ @supports (color: color-mix(in lab, red, red)) {
2282
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
2283
+ }
2284
+ }
2285
+ .border-t-login {
2286
+ border-top-color: var(--color-login);
2287
+ }
2182
2288
  .border-l-amber-500 {
2183
2289
  border-left-color: var(--color-amber-500);
2184
2290
  }
@@ -2209,6 +2315,12 @@
2209
2315
  background-color: color-mix(in oklab, var(--color-amber-500) 10%, transparent);
2210
2316
  }
2211
2317
  }
2318
+ .bg-amber-500\/15 {
2319
+ background-color: color-mix(in srgb, oklch(76.9% 0.188 70.08) 15%, transparent);
2320
+ @supports (color: color-mix(in lab, red, red)) {
2321
+ background-color: color-mix(in oklab, var(--color-amber-500) 15%, transparent);
2322
+ }
2323
+ }
2212
2324
  .bg-black\/50 {
2213
2325
  background-color: color-mix(in srgb, #000 50%, transparent);
2214
2326
  @supports (color: color-mix(in lab, red, red)) {
@@ -2230,6 +2342,12 @@
2230
2342
  background-color: color-mix(in oklab, var(--color-emerald-500) 10%, transparent);
2231
2343
  }
2232
2344
  }
2345
+ .bg-emerald-500\/15 {
2346
+ background-color: color-mix(in srgb, oklch(69.6% 0.17 162.48) 15%, transparent);
2347
+ @supports (color: color-mix(in lab, red, red)) {
2348
+ background-color: color-mix(in oklab, var(--color-emerald-500) 15%, transparent);
2349
+ }
2350
+ }
2233
2351
  .bg-gray-500\/15 {
2234
2352
  background-color: color-mix(in srgb, oklch(55.1% 0.027 264.364) 15%, transparent);
2235
2353
  @supports (color: color-mix(in lab, red, red)) {
@@ -2272,6 +2390,12 @@
2272
2390
  .bg-login-600 {
2273
2391
  background-color: var(--color-login-600);
2274
2392
  }
2393
+ .bg-login-600\/30 {
2394
+ background-color: color-mix(in srgb, #212121 30%, transparent);
2395
+ @supports (color: color-mix(in lab, red, red)) {
2396
+ background-color: color-mix(in oklab, var(--color-login-600) 30%, transparent);
2397
+ }
2398
+ }
2275
2399
  .bg-login-700 {
2276
2400
  background-color: var(--color-login-700);
2277
2401
  }
@@ -2290,6 +2414,24 @@
2290
2414
  .bg-login-800 {
2291
2415
  background-color: var(--color-login-800);
2292
2416
  }
2417
+ .bg-login-800\/30 {
2418
+ background-color: color-mix(in srgb, #181818 30%, transparent);
2419
+ @supports (color: color-mix(in lab, red, red)) {
2420
+ background-color: color-mix(in oklab, var(--color-login-800) 30%, transparent);
2421
+ }
2422
+ }
2423
+ .bg-login-800\/50 {
2424
+ background-color: color-mix(in srgb, #181818 50%, transparent);
2425
+ @supports (color: color-mix(in lab, red, red)) {
2426
+ background-color: color-mix(in oklab, var(--color-login-800) 50%, transparent);
2427
+ }
2428
+ }
2429
+ .bg-login-800\/60 {
2430
+ background-color: color-mix(in srgb, #181818 60%, transparent);
2431
+ @supports (color: color-mix(in lab, red, red)) {
2432
+ background-color: color-mix(in oklab, var(--color-login-800) 60%, transparent);
2433
+ }
2434
+ }
2293
2435
  .bg-login-900 {
2294
2436
  background-color: var(--color-login-900);
2295
2437
  }
@@ -2356,6 +2498,12 @@
2356
2498
  background-color: color-mix(in oklab, var(--color-sky-500) 10%, transparent);
2357
2499
  }
2358
2500
  }
2501
+ .bg-sky-500\/15 {
2502
+ background-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 15%, transparent);
2503
+ @supports (color: color-mix(in lab, red, red)) {
2504
+ background-color: color-mix(in oklab, var(--color-sky-500) 15%, transparent);
2505
+ }
2506
+ }
2359
2507
  .bg-transparent {
2360
2508
  background-color: transparent;
2361
2509
  }
@@ -2365,6 +2513,12 @@
2365
2513
  background-color: color-mix(in oklab, var(--color-violet-500) 10%, transparent);
2366
2514
  }
2367
2515
  }
2516
+ .bg-violet-500\/15 {
2517
+ background-color: color-mix(in srgb, oklch(60.6% 0.25 292.717) 15%, transparent);
2518
+ @supports (color: color-mix(in lab, red, red)) {
2519
+ background-color: color-mix(in oklab, var(--color-violet-500) 15%, transparent);
2520
+ }
2521
+ }
2368
2522
  .bg-white {
2369
2523
  background-color: var(--color-white);
2370
2524
  }
@@ -2427,6 +2581,9 @@
2427
2581
  .stroke-blue-400 {
2428
2582
  stroke: var(--color-blue-400);
2429
2583
  }
2584
+ .stroke-emerald-400 {
2585
+ stroke: var(--color-emerald-400);
2586
+ }
2430
2587
  .stroke-login {
2431
2588
  stroke: var(--color-login);
2432
2589
  }
@@ -2472,6 +2629,9 @@
2472
2629
  .p-8 {
2473
2630
  padding: calc(var(--spacing) * 8);
2474
2631
  }
2632
+ .px-1\.5 {
2633
+ padding-inline: calc(var(--spacing) * 1.5);
2634
+ }
2475
2635
  .px-2 {
2476
2636
  padding-inline: calc(var(--spacing) * 2);
2477
2637
  }
@@ -2484,6 +2644,9 @@
2484
2644
  .px-4 {
2485
2645
  padding-inline: calc(var(--spacing) * 4);
2486
2646
  }
2647
+ .px-5 {
2648
+ padding-inline: calc(var(--spacing) * 5);
2649
+ }
2487
2650
  .px-6 {
2488
2651
  padding-inline: calc(var(--spacing) * 6);
2489
2652
  }
@@ -2529,6 +2692,9 @@
2529
2692
  .pt-4 {
2530
2693
  padding-top: calc(var(--spacing) * 4);
2531
2694
  }
2695
+ .pt-5 {
2696
+ padding-top: calc(var(--spacing) * 5);
2697
+ }
2532
2698
  .pt-8 {
2533
2699
  padding-top: calc(var(--spacing) * 8);
2534
2700
  }
@@ -2550,9 +2716,15 @@
2550
2716
  .pb-4 {
2551
2717
  padding-bottom: calc(var(--spacing) * 4);
2552
2718
  }
2719
+ .pb-5 {
2720
+ padding-bottom: calc(var(--spacing) * 5);
2721
+ }
2553
2722
  .pb-24 {
2554
2723
  padding-bottom: calc(var(--spacing) * 24);
2555
2724
  }
2725
+ .pl-2 {
2726
+ padding-left: calc(var(--spacing) * 2);
2727
+ }
2556
2728
  .pl-3 {
2557
2729
  padding-left: calc(var(--spacing) * 3);
2558
2730
  }
@@ -3012,6 +3184,13 @@
3012
3184
  line-height: var(--tw-leading, var(--text-xs--line-height)) !important;
3013
3185
  }
3014
3186
  }
3187
+ .group-hover\:text-login {
3188
+ &:is(:where(.group):hover *) {
3189
+ @media (hover: hover) {
3190
+ color: var(--color-login);
3191
+ }
3192
+ }
3193
+ }
3015
3194
  .group-hover\:opacity-0 {
3016
3195
  &:is(:where(.group):hover *) {
3017
3196
  @media (hover: hover) {
@@ -3195,6 +3374,16 @@
3195
3374
  }
3196
3375
  }
3197
3376
  }
3377
+ .hover\:border-login\/50 {
3378
+ &:hover {
3379
+ @media (hover: hover) {
3380
+ border-color: color-mix(in srgb, #fd8738 50%, transparent);
3381
+ @supports (color: color-mix(in lab, red, red)) {
3382
+ border-color: color-mix(in oklab, var(--color-login) 50%, transparent);
3383
+ }
3384
+ }
3385
+ }
3386
+ }
3198
3387
  .hover\:bg-gray-400\/10 {
3199
3388
  &:hover {
3200
3389
  @media (hover: hover) {
@@ -3300,6 +3489,43 @@
3300
3489
  }
3301
3490
  }
3302
3491
  }
3492
+ .hover\:bg-login-800 {
3493
+ &:hover {
3494
+ @media (hover: hover) {
3495
+ background-color: var(--color-login-800);
3496
+ }
3497
+ }
3498
+ }
3499
+ .hover\:bg-login-800\/30 {
3500
+ &:hover {
3501
+ @media (hover: hover) {
3502
+ background-color: color-mix(in srgb, #181818 30%, transparent);
3503
+ @supports (color: color-mix(in lab, red, red)) {
3504
+ background-color: color-mix(in oklab, var(--color-login-800) 30%, transparent);
3505
+ }
3506
+ }
3507
+ }
3508
+ }
3509
+ .hover\:bg-login-800\/50 {
3510
+ &:hover {
3511
+ @media (hover: hover) {
3512
+ background-color: color-mix(in srgb, #181818 50%, transparent);
3513
+ @supports (color: color-mix(in lab, red, red)) {
3514
+ background-color: color-mix(in oklab, var(--color-login-800) 50%, transparent);
3515
+ }
3516
+ }
3517
+ }
3518
+ }
3519
+ .hover\:bg-login\/5 {
3520
+ &:hover {
3521
+ @media (hover: hover) {
3522
+ background-color: color-mix(in srgb, #fd8738 5%, transparent);
3523
+ @supports (color: color-mix(in lab, red, red)) {
3524
+ background-color: color-mix(in oklab, var(--color-login) 5%, transparent);
3525
+ }
3526
+ }
3527
+ }
3528
+ }
3303
3529
  .hover\:bg-login\/80 {
3304
3530
  &:hover {
3305
3531
  @media (hover: hover) {
@@ -3345,6 +3571,13 @@
3345
3571
  }
3346
3572
  }
3347
3573
  }
3574
+ .hover\:text-login-100 {
3575
+ &:hover {
3576
+ @media (hover: hover) {
3577
+ color: var(--color-login-100);
3578
+ }
3579
+ }
3580
+ }
3348
3581
  .hover\:text-login-200 {
3349
3582
  &:hover {
3350
3583
  @media (hover: hover) {
@@ -3745,6 +3978,20 @@
3745
3978
  width: calc(var(--spacing) * 4);
3746
3979
  }
3747
3980
  }
3981
+ .\[\&\>svg\]\:stroke-login {
3982
+ &>svg {
3983
+ stroke: var(--color-login);
3984
+ }
3985
+ }
3986
+ .group-hover\:\[\&\>svg\]\:stroke-login-100 {
3987
+ &:is(:where(.group):hover *) {
3988
+ @media (hover: hover) {
3989
+ &>svg {
3990
+ stroke: var(--color-login-100);
3991
+ }
3992
+ }
3993
+ }
3994
+ }
3748
3995
  }
3749
3996
  :root {
3750
3997
  transition: background 0.4s,
@@ -4143,6 +4390,11 @@ input::-ms-clear {
4143
4390
  syntax: "*";
4144
4391
  inherits: false;
4145
4392
  }
4393
+ @keyframes spin {
4394
+ to {
4395
+ transform: rotate(360deg);
4396
+ }
4397
+ }
4146
4398
  @keyframes ping {
4147
4399
  75%,
4148
4400
  100% {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uibee",
3
- "version": "3.1.6",
3
+ "version": "3.2.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