@creativecodeco/ui 0.4.2 → 0.5.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.
@@ -62,7 +62,7 @@ export default function useSafeButtonProps({ onClick, onSubmit, loading, ...prop
62
62
  itemRef?: string | undefined;
63
63
  results?: number | undefined;
64
64
  security?: string | undefined;
65
- unselectable?: "on" | "off" | undefined;
65
+ unselectable?: "off" | "on" | undefined;
66
66
  inputMode?: "search" | "email" | "tel" | "text" | "url" | "none" | "numeric" | "decimal" | undefined;
67
67
  is?: string | undefined;
68
68
  "aria-activedescendant"?: string | undefined;
@@ -0,0 +1,9 @@
1
+ .accordion-type {
2
+ &-arrow {
3
+ @apply collapse-arrow;
4
+ }
5
+
6
+ &-plus {
7
+ @apply collapse-plus;
8
+ }
9
+ }
@@ -2,6 +2,7 @@
2
2
  @import 'tailwindcss/components';
3
3
  @import 'tailwindcss/utilities';
4
4
 
5
+ @import './accordion.css';
5
6
  @import './avatar.css';
6
7
  @import './button.css';
7
8
  @import './checkbox.css';
@@ -678,8 +678,8 @@ html {
678
678
  color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
679
679
  }
680
680
 
681
- .menu li > *:not(ul):not(.menu-title):not(details):active,
682
- .menu li > *:not(ul):not(.menu-title):not(details).active,
681
+ .menu li > *:not(ul, .menu-title, details, .btn):active,
682
+ .menu li > *:not(ul, .menu-title, details, .btn).active,
683
683
  .menu li > details > summary:active {
684
684
  --tw-bg-opacity: 1;
685
685
  background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
@@ -713,6 +713,62 @@ html {
713
713
  border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
714
714
  --tw-border-opacity: 0.2;
715
715
  }
716
+ .collapse:not(td):not(tr):not(colgroup) {
717
+ visibility: visible;
718
+ }
719
+ .collapse {
720
+ position: relative;
721
+ display: grid;
722
+ overflow: hidden;
723
+ grid-template-rows: auto 0fr;
724
+ transition: grid-template-rows 0.2s;
725
+ width: 100%;
726
+ border-radius: var(--rounded-box, 1rem);
727
+ }
728
+ .collapse-title,
729
+ .collapse > input[type="checkbox"],
730
+ .collapse > input[type="radio"],
731
+ .collapse-content {
732
+ grid-column-start: 1;
733
+ grid-row-start: 1;
734
+ }
735
+ .collapse > input[type="checkbox"],
736
+ .collapse > input[type="radio"] {
737
+ -webkit-appearance: none;
738
+ -moz-appearance: none;
739
+ appearance: none;
740
+ opacity: 0;
741
+ }
742
+ .collapse-content {
743
+ visibility: hidden;
744
+ grid-column-start: 1;
745
+ grid-row-start: 2;
746
+ min-height: 0px;
747
+ transition: visibility 0.2s;
748
+ transition: padding 0.2s ease-out,
749
+ background-color 0.2s ease-out;
750
+ padding-left: 1rem;
751
+ padding-right: 1rem;
752
+ cursor: unset;
753
+ }
754
+ .collapse[open],
755
+ .collapse-open,
756
+ .collapse:focus:not(.collapse-close) {
757
+ grid-template-rows: auto 1fr;
758
+ }
759
+ .collapse:not(.collapse-close):has(> input[type="checkbox"]:checked),
760
+ .collapse:not(.collapse-close):has(> input[type="radio"]:checked) {
761
+ grid-template-rows: auto 1fr;
762
+ }
763
+ .collapse[open] > .collapse-content,
764
+ .collapse-open > .collapse-content,
765
+ .collapse:focus:not(.collapse-close) > .collapse-content,
766
+ .collapse:not(.collapse-close) > input[type="checkbox"]:checked ~ .collapse-content,
767
+ .collapse:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-content {
768
+ visibility: visible;
769
+ min-height: -moz-fit-content;
770
+ min-height: fit-content;
771
+ }
716
772
  .dropdown {
717
773
  position: relative;
718
774
  display: inline-block;
@@ -809,7 +865,7 @@ html {
809
865
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
810
866
  }
811
867
 
812
- :where(.menu li:not(.menu-title):not(.disabled) > *:not(ul):not(details):not(.menu-title)):not(.active):hover, :where(.menu li:not(.menu-title):not(.disabled) > details > summary:not(.menu-title)):not(.active):hover {
868
+ :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover {
813
869
  cursor: pointer;
814
870
  outline: 2px solid transparent;
815
871
  outline-offset: 2px;
@@ -817,7 +873,7 @@ html {
817
873
 
818
874
  @supports (color: oklch(0 0 0)) {
819
875
 
820
- :where(.menu li:not(.menu-title):not(.disabled) > *:not(ul):not(details):not(.menu-title)):not(.active):hover, :where(.menu li:not(.menu-title):not(.disabled) > details > summary:not(.menu-title)):not(.active):hover {
876
+ :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(.active, .btn):hover, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(.active, .btn):hover {
821
877
  background-color: var(--fallback-bc,oklch(var(--bc)/0.1));
822
878
  }
823
879
  }
@@ -858,17 +914,41 @@ html {
858
914
  --tw-bg-opacity: 1;
859
915
  background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
860
916
  }
917
+ .input[type="number"]::-webkit-inner-spin-button,
918
+ .input-md[type="number"]::-webkit-inner-spin-button {
919
+ margin-top: -1rem;
920
+ margin-bottom: -1rem;
921
+ margin-inline-end: -1rem;
922
+ }
923
+ .\!join {
924
+ display: inline-flex !important;
925
+ align-items: stretch !important;
926
+ border-radius: var(--rounded-btn, 0.5rem) !important;
927
+ }
861
928
  .join {
862
929
  display: inline-flex;
863
930
  align-items: stretch;
864
931
  border-radius: var(--rounded-btn, 0.5rem);
865
932
  }
933
+ .\!join :where(.join-item) {
934
+ border-start-end-radius: 0 !important;
935
+ border-end-end-radius: 0 !important;
936
+ border-end-start-radius: 0 !important;
937
+ border-start-start-radius: 0 !important;
938
+ }
866
939
  .join :where(.join-item) {
867
940
  border-start-end-radius: 0;
868
941
  border-end-end-radius: 0;
869
942
  border-end-start-radius: 0;
870
943
  border-start-start-radius: 0;
871
944
  }
945
+ .\!join .join-item:not(:first-child):not(:last-child),
946
+ .\!join *:not(:first-child):not(:last-child) .join-item {
947
+ border-start-end-radius: 0 !important;
948
+ border-end-end-radius: 0 !important;
949
+ border-end-start-radius: 0 !important;
950
+ border-start-start-radius: 0 !important;
951
+ }
872
952
  .join .join-item:not(:first-child):not(:last-child),
873
953
  .join *:not(:first-child):not(:last-child) .join-item {
874
954
  border-start-end-radius: 0;
@@ -876,39 +956,104 @@ html {
876
956
  border-end-start-radius: 0;
877
957
  border-start-start-radius: 0;
878
958
  }
959
+ .\!join .join-item:not(:first-child):not(:last-child),
960
+ .\!join *:not(:first-child):not(:last-child) .join-item {
961
+ border-start-end-radius: 0 !important;
962
+ border-end-end-radius: 0 !important;
963
+ border-end-start-radius: 0 !important;
964
+ border-start-start-radius: 0 !important;
965
+ }
966
+ .\!join .join-item:first-child:not(:last-child),
967
+ .\!join *:first-child:not(:last-child) .join-item {
968
+ border-start-end-radius: 0 !important;
969
+ border-end-end-radius: 0 !important;
970
+ }
879
971
  .join .join-item:first-child:not(:last-child),
880
972
  .join *:first-child:not(:last-child) .join-item {
881
973
  border-start-end-radius: 0;
882
974
  border-end-end-radius: 0;
883
975
  }
976
+ .\!join .join-item:first-child:not(:last-child),
977
+ .\!join *:first-child:not(:last-child) .join-item {
978
+ border-start-end-radius: 0 !important;
979
+ border-end-end-radius: 0 !important;
980
+ }
981
+ .\!join .dropdown .join-item:first-child:not(:last-child),
982
+ .\!join *:first-child:not(:last-child) .dropdown .join-item {
983
+ border-start-end-radius: inherit !important;
984
+ border-end-end-radius: inherit !important;
985
+ }
884
986
  .join .dropdown .join-item:first-child:not(:last-child),
885
987
  .join *:first-child:not(:last-child) .dropdown .join-item {
886
988
  border-start-end-radius: inherit;
887
989
  border-end-end-radius: inherit;
888
990
  }
991
+ .\!join .dropdown .join-item:first-child:not(:last-child),
992
+ .\!join *:first-child:not(:last-child) .dropdown .join-item {
993
+ border-start-end-radius: inherit !important;
994
+ border-end-end-radius: inherit !important;
995
+ }
996
+ .\!join :where(.join-item:first-child:not(:last-child)),
997
+ .\!join :where(*:first-child:not(:last-child) .join-item) {
998
+ border-end-start-radius: inherit !important;
999
+ border-start-start-radius: inherit !important;
1000
+ }
889
1001
  .join :where(.join-item:first-child:not(:last-child)),
890
1002
  .join :where(*:first-child:not(:last-child) .join-item) {
891
1003
  border-end-start-radius: inherit;
892
1004
  border-start-start-radius: inherit;
893
1005
  }
1006
+ .\!join :where(.join-item:first-child:not(:last-child)),
1007
+ .\!join :where(*:first-child:not(:last-child) .join-item) {
1008
+ border-end-start-radius: inherit !important;
1009
+ border-start-start-radius: inherit !important;
1010
+ }
1011
+ .\!join .join-item:last-child:not(:first-child),
1012
+ .\!join *:last-child:not(:first-child) .join-item {
1013
+ border-end-start-radius: 0 !important;
1014
+ border-start-start-radius: 0 !important;
1015
+ }
894
1016
  .join .join-item:last-child:not(:first-child),
895
1017
  .join *:last-child:not(:first-child) .join-item {
896
1018
  border-end-start-radius: 0;
897
1019
  border-start-start-radius: 0;
898
1020
  }
1021
+ .\!join .join-item:last-child:not(:first-child),
1022
+ .\!join *:last-child:not(:first-child) .join-item {
1023
+ border-end-start-radius: 0 !important;
1024
+ border-start-start-radius: 0 !important;
1025
+ }
1026
+ .\!join :where(.join-item:last-child:not(:first-child)),
1027
+ .\!join :where(*:last-child:not(:first-child) .join-item) {
1028
+ border-start-end-radius: inherit !important;
1029
+ border-end-end-radius: inherit !important;
1030
+ }
899
1031
  .join :where(.join-item:last-child:not(:first-child)),
900
1032
  .join :where(*:last-child:not(:first-child) .join-item) {
901
1033
  border-start-end-radius: inherit;
902
1034
  border-end-end-radius: inherit;
903
1035
  }
1036
+ .\!join :where(.join-item:last-child:not(:first-child)),
1037
+ .\!join :where(*:last-child:not(:first-child) .join-item) {
1038
+ border-start-end-radius: inherit !important;
1039
+ border-end-end-radius: inherit !important;
1040
+ }
904
1041
  @supports not selector(:has(*)) {
905
1042
 
1043
+ :where(.\!join *) {
1044
+ border-radius: inherit !important;
1045
+ }
1046
+
906
1047
  :where(.join *) {
907
1048
  border-radius: inherit;
908
1049
  }
909
1050
  }
910
1051
  @supports selector(:has(*)) {
911
1052
 
1053
+ :where(.\!join *:has(.join-item)) {
1054
+ border-radius: inherit !important;
1055
+ }
1056
+
912
1057
  :where(.join *:has(.join-item)) {
913
1058
  border-radius: inherit;
914
1059
  }
@@ -927,8 +1072,7 @@ html {
927
1072
  margin-inline-start: 1rem;
928
1073
  padding-inline-start: 0.5rem;
929
1074
  }
930
- .menu :where(li:not(.menu-title) > *:not(ul):not(details):not(.menu-title)),
931
- .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
1075
+ .menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
932
1076
  display: grid;
933
1077
  grid-auto-flow: column;
934
1078
  align-content: flex-start;
@@ -1141,6 +1285,115 @@ html {
1141
1285
  background-position-y: 0;
1142
1286
  }
1143
1287
  }
1288
+ details.collapse {
1289
+ width: 100%;
1290
+ }
1291
+ details.collapse summary {
1292
+ position: relative;
1293
+ display: block;
1294
+ outline: 2px solid transparent;
1295
+ outline-offset: 2px;
1296
+ }
1297
+ details.collapse summary::-webkit-details-marker {
1298
+ display: none;
1299
+ }
1300
+ .collapse:focus-visible {
1301
+ outline-style: solid;
1302
+ outline-width: 2px;
1303
+ outline-offset: 2px;
1304
+ outline-color: var(--fallback-bc,oklch(var(--bc)/1));
1305
+ }
1306
+ .collapse:has(.collapse-title:focus-visible),
1307
+ .collapse:has(> input[type="checkbox"]:focus-visible),
1308
+ .collapse:has(> input[type="radio"]:focus-visible) {
1309
+ outline-style: solid;
1310
+ outline-width: 2px;
1311
+ outline-offset: 2px;
1312
+ outline-color: var(--fallback-bc,oklch(var(--bc)/1));
1313
+ }
1314
+ .collapse-arrow > .collapse-title:after {
1315
+ position: absolute;
1316
+ display: block;
1317
+ height: 0.5rem;
1318
+ width: 0.5rem;
1319
+ --tw-translate-y: -100%;
1320
+ --tw-rotate: 45deg;
1321
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1322
+ transition-property: all;
1323
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1324
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1325
+ transition-duration: 150ms;
1326
+ transition-duration: 0.2s;
1327
+ top: 1.9rem;
1328
+ inset-inline-end: 1.4rem;
1329
+ content: "";
1330
+ transform-origin: 75% 75%;
1331
+ box-shadow: 2px 2px;
1332
+ pointer-events: none;
1333
+ }
1334
+ .collapse-plus > .collapse-title:after {
1335
+ position: absolute;
1336
+ display: block;
1337
+ height: 0.5rem;
1338
+ width: 0.5rem;
1339
+ transition-property: all;
1340
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1341
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1342
+ transition-duration: 300ms;
1343
+ top: 0.9rem;
1344
+ inset-inline-end: 1.4rem;
1345
+ content: "+";
1346
+ pointer-events: none;
1347
+ }
1348
+ .collapse:not(.collapse-open):not(.collapse-close) > input[type="checkbox"],
1349
+ .collapse:not(.collapse-open):not(.collapse-close) > input[type="radio"]:not(:checked),
1350
+ .collapse:not(.collapse-open):not(.collapse-close) > .collapse-title {
1351
+ cursor: pointer;
1352
+ }
1353
+ .collapse:focus:not(.collapse-open):not(.collapse-close):not(.collapse[open]) > .collapse-title {
1354
+ cursor: unset;
1355
+ }
1356
+ .collapse-title {
1357
+ position: relative;
1358
+ }
1359
+ :where(.collapse > input[type="checkbox"]),
1360
+ :where(.collapse > input[type="radio"]) {
1361
+ z-index: 1;
1362
+ }
1363
+ .collapse-title,
1364
+ :where(.collapse > input[type="checkbox"]),
1365
+ :where(.collapse > input[type="radio"]) {
1366
+ width: 100%;
1367
+ padding: 1rem;
1368
+ padding-inline-end: 3rem;
1369
+ min-height: 3.75rem;
1370
+ transition: background-color 0.2s ease-out;
1371
+ }
1372
+ .collapse[open] > :where(.collapse-content),
1373
+ .collapse-open > :where(.collapse-content),
1374
+ .collapse:focus:not(.collapse-close) > :where(.collapse-content),
1375
+ .collapse:not(.collapse-close) > :where(input[type="checkbox"]:checked ~ .collapse-content),
1376
+ .collapse:not(.collapse-close) > :where(input[type="radio"]:checked ~ .collapse-content) {
1377
+ padding-bottom: 1rem;
1378
+ transition: padding 0.2s ease-out,
1379
+ background-color 0.2s ease-out;
1380
+ }
1381
+ .collapse[open].collapse-arrow > .collapse-title:after,
1382
+ .collapse-open.collapse-arrow > .collapse-title:after,
1383
+ .collapse-arrow:focus:not(.collapse-close) > .collapse-title:after,
1384
+ .collapse-arrow:not(.collapse-close) > input[type="checkbox"]:checked ~ .collapse-title:after,
1385
+ .collapse-arrow:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-title:after {
1386
+ --tw-translate-y: -50%;
1387
+ --tw-rotate: 225deg;
1388
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1389
+ }
1390
+ .collapse[open].collapse-plus > .collapse-title:after,
1391
+ .collapse-open.collapse-plus > .collapse-title:after,
1392
+ .collapse-plus:focus:not(.collapse-close) > .collapse-title:after,
1393
+ .collapse-plus:not(.collapse-close) > input[type="checkbox"]:checked ~ .collapse-title:after,
1394
+ .collapse-plus:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-title:after {
1395
+ content: "−";
1396
+ }
1144
1397
  .dropdown.dropdown-open .dropdown-content,
1145
1398
  .dropdown:focus .dropdown-content,
1146
1399
  .dropdown:focus-within .dropdown-content {
@@ -1154,6 +1407,11 @@ html {
1154
1407
  --tw-text-opacity: 1;
1155
1408
  color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
1156
1409
  }
1410
+ .input input {
1411
+ --tw-bg-opacity: 1;
1412
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
1413
+ background-color: transparent;
1414
+ }
1157
1415
  .input input:focus {
1158
1416
  outline: 2px solid transparent;
1159
1417
  outline-offset: 2px;
@@ -1206,11 +1464,19 @@ html {
1206
1464
  .input::-webkit-date-and-time-value {
1207
1465
  text-align: inherit;
1208
1466
  }
1467
+ .\!join > :where(*:not(:first-child)) {
1468
+ margin-top: 0px !important;
1469
+ margin-bottom: 0px !important;
1470
+ margin-inline-start: -1px !important;
1471
+ }
1209
1472
  .join > :where(*:not(:first-child)) {
1210
1473
  margin-top: 0px;
1211
1474
  margin-bottom: 0px;
1212
1475
  margin-inline-start: -1px;
1213
1476
  }
1477
+ .join-item:focus {
1478
+ isolation: isolate;
1479
+ }
1214
1480
  .\!loading {
1215
1481
  pointer-events: none !important;
1216
1482
  display: inline-block !important;
@@ -1259,7 +1525,7 @@ html {
1259
1525
  opacity: 0.1;
1260
1526
  content: "";
1261
1527
  }
1262
- .menu :where(li:not(.menu-title) > *:not(ul):not(details):not(.menu-title)),
1528
+ .menu :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)),
1263
1529
  .menu :where(li:not(.menu-title) > details > summary:not(.menu-title)) {
1264
1530
  border-radius: var(--rounded-btn, 0.5rem);
1265
1531
  padding-left: 1rem;
@@ -1275,12 +1541,7 @@ html {
1275
1541
  transition-duration: 200ms;
1276
1542
  text-wrap: balance;
1277
1543
  }
1278
- :where(.menu li:not(.menu-title):not(.disabled) > *:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,
1279
- :where(.menu li:not(.menu-title):not(.disabled) > *:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,
1280
- :where(.menu li:not(.menu-title):not(.disabled) > *:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,
1281
- :where(.menu li:not(.menu-title):not(.disabled) > details > summary:not(.menu-title)):not(summary):not(.active).focus,
1282
- :where(.menu li:not(.menu-title):not(.disabled) > details > summary:not(.menu-title)):not(summary):not(.active):focus,
1283
- :where(.menu li:not(.menu-title):not(.disabled) > details > summary:not(.menu-title)):is(summary):not(.active):focus-visible {
1544
+ :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title)):is(summary):not(.active, .btn):focus-visible, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn).focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):not(summary, .active, .btn):focus, :where(.menu li:not(.menu-title, .disabled) > details > summary:not(.menu-title)):is(summary):not(.active, .btn):focus-visible {
1284
1545
  cursor: pointer;
1285
1546
  background-color: var(--fallback-bc,oklch(var(--bc)/0.1));
1286
1547
  --tw-text-opacity: 1;
@@ -1288,8 +1549,8 @@ html {
1288
1549
  outline: 2px solid transparent;
1289
1550
  outline-offset: 2px;
1290
1551
  }
1291
- .menu li > *:not(ul):not(.menu-title):not(details):active,
1292
- .menu li > *:not(ul):not(.menu-title):not(details).active,
1552
+ .menu li > *:not(ul, .menu-title, details, .btn):active,
1553
+ .menu li > *:not(ul, .menu-title, details, .btn).active,
1293
1554
  .menu li > details > summary:active {
1294
1555
  --tw-bg-opacity: 1;
1295
1556
  background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
@@ -1535,9 +1796,19 @@ html {
1535
1796
  opacity: 1;
1536
1797
  }
1537
1798
  }
1799
+ .\!join.join-vertical {
1800
+ flex-direction: column !important;
1801
+ }
1538
1802
  .join.join-vertical {
1539
1803
  flex-direction: column;
1540
1804
  }
1805
+ .\!join.join-vertical .join-item:first-child:not(:last-child),
1806
+ .\!join.join-vertical *:first-child:not(:last-child) .join-item {
1807
+ border-end-start-radius: 0 !important;
1808
+ border-end-end-radius: 0 !important;
1809
+ border-start-start-radius: inherit !important;
1810
+ border-start-end-radius: inherit !important;
1811
+ }
1541
1812
  .join.join-vertical .join-item:first-child:not(:last-child),
1542
1813
  .join.join-vertical *:first-child:not(:last-child) .join-item {
1543
1814
  border-end-start-radius: 0;
@@ -1545,6 +1816,20 @@ html {
1545
1816
  border-start-start-radius: inherit;
1546
1817
  border-start-end-radius: inherit;
1547
1818
  }
1819
+ .\!join.join-vertical .join-item:first-child:not(:last-child),
1820
+ .\!join.join-vertical *:first-child:not(:last-child) .join-item {
1821
+ border-end-start-radius: 0 !important;
1822
+ border-end-end-radius: 0 !important;
1823
+ border-start-start-radius: inherit !important;
1824
+ border-start-end-radius: inherit !important;
1825
+ }
1826
+ .\!join.join-vertical .join-item:last-child:not(:first-child),
1827
+ .\!join.join-vertical *:last-child:not(:first-child) .join-item {
1828
+ border-start-start-radius: 0 !important;
1829
+ border-start-end-radius: 0 !important;
1830
+ border-end-start-radius: inherit !important;
1831
+ border-end-end-radius: inherit !important;
1832
+ }
1548
1833
  .join.join-vertical .join-item:last-child:not(:first-child),
1549
1834
  .join.join-vertical *:last-child:not(:first-child) .join-item {
1550
1835
  border-start-start-radius: 0;
@@ -1552,9 +1837,26 @@ html {
1552
1837
  border-end-start-radius: inherit;
1553
1838
  border-end-end-radius: inherit;
1554
1839
  }
1840
+ .\!join.join-vertical .join-item:last-child:not(:first-child),
1841
+ .\!join.join-vertical *:last-child:not(:first-child) .join-item {
1842
+ border-start-start-radius: 0 !important;
1843
+ border-start-end-radius: 0 !important;
1844
+ border-end-start-radius: inherit !important;
1845
+ border-end-end-radius: inherit !important;
1846
+ }
1847
+ .\!join.join-horizontal {
1848
+ flex-direction: row !important;
1849
+ }
1555
1850
  .join.join-horizontal {
1556
1851
  flex-direction: row;
1557
1852
  }
1853
+ .\!join.join-horizontal .join-item:first-child:not(:last-child),
1854
+ .\!join.join-horizontal *:first-child:not(:last-child) .join-item {
1855
+ border-end-end-radius: 0 !important;
1856
+ border-start-end-radius: 0 !important;
1857
+ border-end-start-radius: inherit !important;
1858
+ border-start-start-radius: inherit !important;
1859
+ }
1558
1860
  .join.join-horizontal .join-item:first-child:not(:last-child),
1559
1861
  .join.join-horizontal *:first-child:not(:last-child) .join-item {
1560
1862
  border-end-end-radius: 0;
@@ -1562,6 +1864,20 @@ html {
1562
1864
  border-end-start-radius: inherit;
1563
1865
  border-start-start-radius: inherit;
1564
1866
  }
1867
+ .\!join.join-horizontal .join-item:first-child:not(:last-child),
1868
+ .\!join.join-horizontal *:first-child:not(:last-child) .join-item {
1869
+ border-end-end-radius: 0 !important;
1870
+ border-start-end-radius: 0 !important;
1871
+ border-end-start-radius: inherit !important;
1872
+ border-start-start-radius: inherit !important;
1873
+ }
1874
+ .\!join.join-horizontal .join-item:last-child:not(:first-child),
1875
+ .\!join.join-horizontal *:last-child:not(:first-child) .join-item {
1876
+ border-end-start-radius: 0 !important;
1877
+ border-start-start-radius: 0 !important;
1878
+ border-end-end-radius: inherit !important;
1879
+ border-start-end-radius: inherit !important;
1880
+ }
1565
1881
  .join.join-horizontal .join-item:last-child:not(:first-child),
1566
1882
  .join.join-horizontal *:last-child:not(:first-child) .join-item {
1567
1883
  border-end-start-radius: 0;
@@ -1569,6 +1885,13 @@ html {
1569
1885
  border-end-end-radius: inherit;
1570
1886
  border-start-end-radius: inherit;
1571
1887
  }
1888
+ .\!join.join-horizontal .join-item:last-child:not(:first-child),
1889
+ .\!join.join-horizontal *:last-child:not(:first-child) .join-item {
1890
+ border-end-start-radius: 0 !important;
1891
+ border-start-start-radius: 0 !important;
1892
+ border-end-end-radius: inherit !important;
1893
+ border-start-end-radius: inherit !important;
1894
+ }
1572
1895
  .avatar.online:before {
1573
1896
  content: "";
1574
1897
  position: absolute;
@@ -1601,16 +1924,29 @@ html {
1601
1924
  top: 7%;
1602
1925
  right: 7%;
1603
1926
  }
1927
+ .\!join.join-vertical > :where(*:not(:first-child)) {
1928
+ margin-left: 0px !important;
1929
+ margin-right: 0px !important;
1930
+ margin-top: -1px !important;
1931
+ }
1604
1932
  .join.join-vertical > :where(*:not(:first-child)) {
1605
1933
  margin-left: 0px;
1606
1934
  margin-right: 0px;
1607
1935
  margin-top: -1px;
1608
1936
  }
1937
+ .\!join.join-horizontal > :where(*:not(:first-child)) {
1938
+ margin-top: 0px !important;
1939
+ margin-bottom: 0px !important;
1940
+ margin-inline-start: -1px !important;
1941
+ }
1609
1942
  .join.join-horizontal > :where(*:not(:first-child)) {
1610
1943
  margin-top: 0px;
1611
1944
  margin-bottom: 0px;
1612
1945
  margin-inline-start: -1px;
1613
1946
  }
1947
+ .collapse {
1948
+ visibility: collapse;
1949
+ }
1614
1950
  .relative {
1615
1951
  position: relative;
1616
1952
  }
@@ -1635,9 +1971,15 @@ html {
1635
1971
  .cursor-pointer {
1636
1972
  cursor: pointer;
1637
1973
  }
1974
+ .flex-wrap {
1975
+ flex-wrap: wrap;
1976
+ }
1638
1977
  .justify-start {
1639
1978
  justify-content: flex-start;
1640
1979
  }
1980
+ .gap-2 {
1981
+ gap: 0.5rem;
1982
+ }
1641
1983
  .gap-3 {
1642
1984
  gap: 0.75rem;
1643
1985
  }
@@ -1650,14 +1992,32 @@ html {
1650
1992
  .rounded-full {
1651
1993
  border-radius: 9999px;
1652
1994
  }
1995
+ .border {
1996
+ border-width: 1px;
1997
+ }
1998
+ .border-base-300 {
1999
+ --tw-border-opacity: 1;
2000
+ border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));
2001
+ }
1653
2002
  .bg-base-100 {
1654
2003
  --tw-bg-opacity: 1;
1655
2004
  background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));
1656
2005
  }
2006
+ .bg-base-200 {
2007
+ --tw-bg-opacity: 1;
2008
+ background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));
2009
+ }
1657
2010
  .bg-neutral {
1658
2011
  --tw-bg-opacity: 1;
1659
2012
  background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
1660
2013
  }
2014
+ .text-xl {
2015
+ font-size: 1.25rem;
2016
+ line-height: 1.75rem;
2017
+ }
2018
+ .font-medium {
2019
+ font-weight: 500;
2020
+ }
1661
2021
  .text-neutral-content {
1662
2022
  --tw-text-opacity: 1;
1663
2023
  color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));
@@ -1677,6 +2037,50 @@ html {
1677
2037
  .filter {
1678
2038
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1679
2039
  }
2040
+ .accordion-type-arrow > .collapse-title:after {
2041
+ position: absolute;
2042
+ display: block;
2043
+ height: 0.5rem;
2044
+ width: 0.5rem;
2045
+ --tw-translate-y: -100%;
2046
+ --tw-rotate: 45deg;
2047
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2048
+ transition-property: all;
2049
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2050
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
2051
+ transition-duration: 150ms;
2052
+ transition-duration: 0.2s;
2053
+ top: 1.9rem;
2054
+ inset-inline-end: 1.4rem;
2055
+ content: "";
2056
+ transform-origin: 75% 75%;
2057
+ box-shadow: 2px 2px;
2058
+ pointer-events: none;
2059
+ }
2060
+ .collapse[open].accordion-type-arrow > .collapse-title:after,
2061
+ .collapse-open.accordion-type-arrow > .collapse-title:after,.accordion-type-arrow:focus:not(.collapse-close) > .collapse-title:after,.accordion-type-arrow:not(.collapse-close) > input[type="checkbox"]:checked ~ .collapse-title:after,.accordion-type-arrow:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-title:after {
2062
+ --tw-translate-y: -50%;
2063
+ --tw-rotate: 225deg;
2064
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2065
+ }
2066
+ .accordion-type-plus > .collapse-title:after {
2067
+ position: absolute;
2068
+ display: block;
2069
+ height: 0.5rem;
2070
+ width: 0.5rem;
2071
+ transition-property: all;
2072
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2073
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
2074
+ transition-duration: 300ms;
2075
+ top: 0.9rem;
2076
+ inset-inline-end: 1.4rem;
2077
+ content: "+";
2078
+ pointer-events: none;
2079
+ }
2080
+ .collapse[open].accordion-type-plus > .collapse-title:after,
2081
+ .collapse-open.accordion-type-plus > .collapse-title:after,.accordion-type-plus:focus:not(.collapse-close) > .collapse-title:after,.accordion-type-plus:not(.collapse-close) > input[type="checkbox"]:checked ~ .collapse-title:after,.accordion-type-plus:not(.collapse-close) > input[type="radio"]:checked ~ .collapse-title:after {
2082
+ content: "−";
2083
+ }
1680
2084
  .avatar-size-xs {
1681
2085
  width: 2rem;
1682
2086
  }
@@ -3309,6 +3713,11 @@ html {
3309
3713
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E");
3310
3714
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3E.spinner_V8m1%7Btransform-origin:center;animation:spinner_zKoa 2s linear infinite%7D.spinner_V8m1 circle%7Bstroke-linecap:round;animation:spinner_YpZS 1.5s ease-out infinite%7D%40keyframes spinner_zKoa%7B100%25%7Btransform:rotate(360deg)%7D%7D%40keyframes spinner_YpZS%7B0%25%7Bstroke-dasharray:0 150;stroke-dashoffset:0%7D47.5%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-16%7D95%25%2C100%25%7Bstroke-dasharray:42 150;stroke-dashoffset:-59%7D%7D%3C%2Fstyle%3E%3Cg class='spinner_V8m1'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3E%3C%2Fcircle%3E%3C%2Fg%3E%3C%2Fsvg%3E");
3311
3715
  }
3716
+ .text-box-size-xs[type="number"]::-webkit-inner-spin-button {
3717
+ margin-top: -0.25rem;
3718
+ margin-bottom: -0.25rem;
3719
+ margin-inline-end: -0px;
3720
+ }
3312
3721
  .text-box-size-xs {
3313
3722
  height: 1.5rem;
3314
3723
  padding-left: 0.5rem;
@@ -3323,6 +3732,11 @@ html {
3323
3732
  .text-box-size-xs.text-box-with-right-icon {
3324
3733
  padding-right: 2rem;
3325
3734
  }
3735
+ .text-box-size-sm[type="number"]::-webkit-inner-spin-button {
3736
+ margin-top: 0px;
3737
+ margin-bottom: 0px;
3738
+ margin-inline-end: -0px;
3739
+ }
3326
3740
  .text-box-size-sm {
3327
3741
  height: 2rem;
3328
3742
  padding-left: 0.75rem;
@@ -3336,6 +3750,11 @@ html {
3336
3750
  .text-box-size-sm.text-box-with-right-icon {
3337
3751
  padding-right: 2rem;
3338
3752
  }
3753
+ .text-box-size-md[type="number"]::-webkit-inner-spin-button {
3754
+ margin-top: -1rem;
3755
+ margin-bottom: -1rem;
3756
+ margin-inline-end: -1rem;
3757
+ }
3339
3758
  .text-box-size-md {
3340
3759
  height: 3rem;
3341
3760
  padding-left: 1rem;
@@ -3350,6 +3769,11 @@ html {
3350
3769
  .text-box-size-md.text-box-with-right-icon {
3351
3770
  padding-right: 2.25rem;
3352
3771
  }
3772
+ .text-box-size-lg[type="number"]::-webkit-inner-spin-button {
3773
+ margin-top: -1.5rem;
3774
+ margin-bottom: -1.5rem;
3775
+ margin-inline-end: -1.5rem;
3776
+ }
3353
3777
  .text-box-size-lg {
3354
3778
  height: 4rem;
3355
3779
  padding-left: 1.5rem;
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ export interface AccordionType {
3
+ name: string;
4
+ iconType?: 'arrow' | 'plus';
5
+ join?: boolean;
6
+ multiple?: boolean;
7
+ options: AccordionOption[];
8
+ }
9
+ export interface AccordionOption {
10
+ header: React.ReactElement;
11
+ body: React.ReactElement;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,2 +1,3 @@
1
+ export type * from './accordion.types';
1
2
  export type * from './avatar.types';
2
3
  export type * from './button.types';
@@ -0,0 +1,3 @@
1
+ import type { AccordionType } from '../../../types';
2
+ declare const Accordion: ({ name, join, options, iconType, multiple }: AccordionType) => import("react/jsx-runtime").JSX.Element;
3
+ export default Accordion;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import cls from 'classnames';
3
+ const Accordion = ({ name, join, options, iconType = 'arrow', multiple }) => {
4
+ return (_jsx("div", { className: cls('flex flex-wrap', {
5
+ 'join join-vertical w-full': join,
6
+ 'gap-2': !join
7
+ }), children: options.map(({ header, body }, index) => (_jsxs("div", { className: cls('collapse bg-base-200', {
8
+ [`accordion-type-${iconType}`]: iconType,
9
+ 'join-item border border-base-300': join
10
+ }), children: [_jsx("input", { type: multiple ? 'checkbox' : 'radio', name: name }), _jsx("div", { className: 'collapse-title text-xl font-medium', children: header }), _jsx("div", { className: 'collapse-content', children: body })] }, index))) }));
11
+ };
12
+ export default Accordion;
@@ -0,0 +1,2 @@
1
+ import Accordion from './accordion.component';
2
+ export { Accordion };
@@ -0,0 +1,2 @@
1
+ import Accordion from './accordion.component';
2
+ export { Accordion };
@@ -1,2 +1,3 @@
1
+ export * from './accordion';
1
2
  export * from './avatar';
2
3
  export * from './button';
@@ -1,2 +1,3 @@
1
+ export * from './accordion';
1
2
  export * from './avatar';
2
3
  export * from './button';
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "framework design",
11
11
  "design system"
12
12
  ],
13
- "version": "0.4.2",
13
+ "version": "0.5.0",
14
14
  "homepage": "https://github.com/creativecodeco/ui",
15
15
  "author": {
16
16
  "name": "John Toro",
@@ -20,7 +20,7 @@
20
20
  "main": "lib/index.js",
21
21
  "source": "src/index.ts",
22
22
  "scripts": {
23
- "dev": "npm run storybook",
23
+ "dev": "npm run build; npm run storybook",
24
24
  "dev:css": "postcss src/theme/main.css -o lib/theme/main.css --watch",
25
25
  "build": "rm -rf lib; tsc -p tsconfig.build.json; npm run build:alias; npm run build:css",
26
26
  "build:alias": "tsc-alias -p tsconfig.build.json",
@@ -48,42 +48,42 @@
48
48
  "usehooks-ts": "2.9.1"
49
49
  },
50
50
  "dependencies": {
51
- "postcss": "8.4.34",
52
- "postcss-import": "16.0.0",
51
+ "postcss": "8.4.35",
52
+ "postcss-import": "16.0.1",
53
53
  "react": "18.2.0",
54
54
  "react-hook-form": "7.50.1",
55
55
  "tailwindcss": "3.4.1",
56
- "usehooks-ts": "2.13.0"
56
+ "usehooks-ts": "2.15.1"
57
57
  },
58
58
  "devDependencies": {
59
- "@babel/core": "7.23.9",
60
- "@babel/preset-env": "7.23.9",
59
+ "@babel/core": "7.24.0",
60
+ "@babel/preset-env": "7.24.0",
61
61
  "@babel/preset-react": "7.23.3",
62
62
  "@babel/preset-typescript": "7.23.3",
63
63
  "@jest/globals": "29.7.0",
64
- "@storybook/addon-essentials": "7.6.12",
65
- "@storybook/addon-interactions": "7.6.12",
66
- "@storybook/addon-links": "7.6.12",
67
- "@storybook/addon-mdx-gfm": "7.6.12",
68
- "@storybook/blocks": "7.6.12",
69
- "@storybook/react": "7.6.12",
70
- "@storybook/react-webpack5": "7.6.12",
71
- "@storybook/test": "7.6.12",
64
+ "@storybook/addon-essentials": "7.6.17",
65
+ "@storybook/addon-interactions": "7.6.17",
66
+ "@storybook/addon-links": "7.6.17",
67
+ "@storybook/addon-mdx-gfm": "7.6.17",
68
+ "@storybook/blocks": "7.6.17",
69
+ "@storybook/react": "7.6.17",
70
+ "@storybook/react-webpack5": "7.6.17",
71
+ "@storybook/test": "7.6.17",
72
72
  "@testing-library/dom": "9.3.4",
73
73
  "@testing-library/jest-dom": "6.4.2",
74
74
  "@testing-library/react": "14.2.1",
75
75
  "@testing-library/user-event": "14.5.2",
76
76
  "@types/jest": "29.5.12",
77
- "@types/node": "20.11.16",
78
- "@types/react": "18.2.55",
79
- "@types/react-dom": "18.2.18",
77
+ "@types/node": "20.11.21",
78
+ "@types/react": "18.2.60",
79
+ "@types/react-dom": "18.2.19",
80
80
  "@typescript-eslint/eslint-plugin": "6.21.0",
81
81
  "autoprefixer": "10.4.17",
82
- "chromatic": "10.7.1",
82
+ "chromatic": "11.0.0",
83
83
  "classnames": "2.5.1",
84
84
  "cpx2": "7.0.1",
85
- "daisyui": "4.6.1",
86
- "eslint": "8.56.0",
85
+ "daisyui": "4.7.2",
86
+ "eslint": "8.57.0",
87
87
  "eslint-config-prettier": "9.1.0",
88
88
  "eslint-config-standard": "17.1.0",
89
89
  "eslint-config-standard-react": "13.0.0",
@@ -96,9 +96,9 @@
96
96
  "eslint-plugin-promise": "6.1.1",
97
97
  "eslint-plugin-react": "7.33.2",
98
98
  "eslint-plugin-standard": "5.0.0",
99
- "eslint-plugin-storybook": "0.6.15",
100
- "eslint-plugin-unused-imports": "3.0.0",
101
- "husky": "9.0.10",
99
+ "eslint-plugin-storybook": "0.8.0",
100
+ "eslint-plugin-unused-imports": "3.1.0",
101
+ "husky": "9.0.11",
102
102
  "jest": "29.7.0",
103
103
  "jest-environment-jsdom": "29.7.0",
104
104
  "jest-junit": "16.0.0",
@@ -108,7 +108,7 @@
108
108
  "prop-types": "15.8.1",
109
109
  "react-dom": "18.2.0",
110
110
  "react-icons": "5.0.1",
111
- "storybook": "7.6.12",
111
+ "storybook": "7.6.17",
112
112
  "storybook-addon-themes": "6.1.0",
113
113
  "string-width": "7.1.0",
114
114
  "ts-jest": "29.1.2",