sk-clib 1.7.0 → 1.8.1

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/index.d.ts CHANGED
@@ -1 +1,2 @@
1
+ export * from "./theme";
1
2
  export * from "./ui";
package/dist/index.js CHANGED
@@ -1 +1,2 @@
1
+ export * from "./theme";
1
2
  export * from "./ui";
package/dist/styles.css CHANGED
@@ -321,6 +321,707 @@
321
321
  }
322
322
  }
323
323
  }
324
+ @layer theme, base, components, utilities;
325
+ @layer theme;
326
+ @layer base {
327
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
328
+ box-sizing: border-box;
329
+ margin: 0;
330
+ padding: 0;
331
+ border: 0 solid;
332
+ }
333
+ html, :host {
334
+ line-height: 1.5;
335
+ -webkit-text-size-adjust: 100%;
336
+ tab-size: 4;
337
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
338
+ font-feature-settings: var(--default-font-feature-settings, normal);
339
+ font-variation-settings: var(--default-font-variation-settings, normal);
340
+ -webkit-tap-highlight-color: transparent;
341
+ }
342
+ hr {
343
+ height: 0;
344
+ color: inherit;
345
+ border-top-width: 1px;
346
+ }
347
+ abbr:where([title]) {
348
+ -webkit-text-decoration: underline dotted;
349
+ text-decoration: underline dotted;
350
+ }
351
+ h1, h2, h3, h4, h5, h6 {
352
+ font-size: inherit;
353
+ font-weight: inherit;
354
+ }
355
+ a {
356
+ color: inherit;
357
+ -webkit-text-decoration: inherit;
358
+ text-decoration: inherit;
359
+ }
360
+ b, strong {
361
+ font-weight: bolder;
362
+ }
363
+ code, kbd, samp, pre {
364
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
365
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
366
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
367
+ font-size: 1em;
368
+ }
369
+ small {
370
+ font-size: 80%;
371
+ }
372
+ sub, sup {
373
+ font-size: 75%;
374
+ line-height: 0;
375
+ position: relative;
376
+ vertical-align: baseline;
377
+ }
378
+ sub {
379
+ bottom: -0.25em;
380
+ }
381
+ sup {
382
+ top: -0.5em;
383
+ }
384
+ table {
385
+ text-indent: 0;
386
+ border-color: inherit;
387
+ border-collapse: collapse;
388
+ }
389
+ :-moz-focusring {
390
+ outline: auto;
391
+ }
392
+ progress {
393
+ vertical-align: baseline;
394
+ }
395
+ summary {
396
+ display: list-item;
397
+ }
398
+ ol, ul, menu {
399
+ list-style: none;
400
+ }
401
+ img, svg, video, canvas, audio, iframe, embed, object {
402
+ display: block;
403
+ vertical-align: middle;
404
+ }
405
+ img, video {
406
+ max-width: 100%;
407
+ height: auto;
408
+ }
409
+ button, input, select, optgroup, textarea, ::file-selector-button {
410
+ font: inherit;
411
+ font-feature-settings: inherit;
412
+ font-variation-settings: inherit;
413
+ letter-spacing: inherit;
414
+ color: inherit;
415
+ border-radius: 0;
416
+ background-color: transparent;
417
+ opacity: 1;
418
+ }
419
+ :where(select:is([multiple], [size])) optgroup {
420
+ font-weight: bolder;
421
+ }
422
+ :where(select:is([multiple], [size])) optgroup option {
423
+ padding-inline-start: 20px;
424
+ }
425
+ ::file-selector-button {
426
+ margin-inline-end: 4px;
427
+ }
428
+ ::placeholder {
429
+ opacity: 1;
430
+ }
431
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
432
+ ::placeholder {
433
+ color: currentcolor;
434
+ @supports (color: color-mix(in lab, red, red)) {
435
+ color: color-mix(in oklab, currentcolor 50%, transparent);
436
+ }
437
+ }
438
+ }
439
+ textarea {
440
+ resize: vertical;
441
+ }
442
+ ::-webkit-search-decoration {
443
+ -webkit-appearance: none;
444
+ }
445
+ ::-webkit-date-and-time-value {
446
+ min-height: 1lh;
447
+ text-align: inherit;
448
+ }
449
+ ::-webkit-datetime-edit {
450
+ display: inline-flex;
451
+ }
452
+ ::-webkit-datetime-edit-fields-wrapper {
453
+ padding: 0;
454
+ }
455
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
456
+ padding-block: 0;
457
+ }
458
+ :-moz-ui-invalid {
459
+ box-shadow: none;
460
+ }
461
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
462
+ appearance: button;
463
+ }
464
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
465
+ height: auto;
466
+ }
467
+ [hidden]:where(:not([hidden="until-found"])) {
468
+ display: none !important;
469
+ }
470
+ }
471
+ @layer utilities;
472
+ @layer utilities {
473
+ .bg-background > * {
474
+ color: var(--color-on-background);
475
+ }
476
+ .bg-primary-container > * {
477
+ color: var(--color-on-primary-container);
478
+ }
479
+ .bg-secondary > * {
480
+ color: var(--color-on-secondary);
481
+ }
482
+ .bg-secondary-container > * {
483
+ color: var(--color-on-secondary-container);
484
+ }
485
+ .bg-tertiary > * {
486
+ color: var(--color-on-tertiary);
487
+ }
488
+ .bg-tertiary-container > * {
489
+ color: var(--color-on-tertiary-container);
490
+ }
491
+ .bg-error > * {
492
+ color: var(--color-on-error);
493
+ }
494
+ .bg-surface > * {
495
+ color: var(--color-on-surface);
496
+ }
497
+ .bg-surface-variant > * {
498
+ color: var(--color-on-surface-variant);
499
+ }
500
+ .bg-outline > * {
501
+ color: var(--color-on-outline);
502
+ }
503
+ .bg-outline-variant > * {
504
+ color: var(--color-on-outline-variant);
505
+ }
506
+ .bg-shadow > * {
507
+ color: var(--color-on-shadow);
508
+ }
509
+ .bg-scrim > * {
510
+ color: var(--color-on-scrim);
511
+ }
512
+ .bg-inverse-surface > * {
513
+ color: var(--color-on-inverse-surface);
514
+ }
515
+ .bg-inverse-primary > * {
516
+ color: var(--color-on-inverse-primary);
517
+ }
518
+ }
519
+ @layer utilities {
520
+ .bg-primary {
521
+ background: var(--color-primary);
522
+ }
523
+ .text-primary {
524
+ color: var(--color-primary);
525
+ }
526
+ .border-primary {
527
+ border-color: var(--color-primary);
528
+ }
529
+ .ring-primary {
530
+ --tw-ring-color: var(--color-primary);
531
+ }
532
+ .bg-on-primary {
533
+ background: var(--color-on-primary);
534
+ }
535
+ .text-on-primary {
536
+ color: var(--color-on-primary);
537
+ }
538
+ .border-on-primary {
539
+ border-color: var(--color-on-primary);
540
+ }
541
+ .ring-on-primary {
542
+ --tw-ring-color: var(--color-on-primary);
543
+ }
544
+ .bg-primary-container {
545
+ background: var(--color-primary-container);
546
+ }
547
+ .text-primary-container {
548
+ color: var(--color-primary-container);
549
+ }
550
+ .border-primary-container {
551
+ border-color: var(--color-primary-container);
552
+ }
553
+ .ring-primary-container {
554
+ --tw-ring-color: var(--color-primary-container);
555
+ }
556
+ .bg-on-primary-container {
557
+ background: var(--color-on-primary-container);
558
+ }
559
+ .text-on-primary-container {
560
+ color: var(--color-on-primary-container);
561
+ }
562
+ .border-on-primary-container {
563
+ border-color: var(--color-on-primary-container);
564
+ }
565
+ .ring-on-primary-container {
566
+ --tw-ring-color: var(--color-on-primary-container);
567
+ }
568
+ .bg-secondary {
569
+ background: var(--color-secondary);
570
+ }
571
+ .text-secondary {
572
+ color: var(--color-secondary);
573
+ }
574
+ .border-secondary {
575
+ border-color: var(--color-secondary);
576
+ }
577
+ .ring-secondary {
578
+ --tw-ring-color: var(--color-secondary);
579
+ }
580
+ .bg-on-secondary {
581
+ background: var(--color-on-secondary);
582
+ }
583
+ .text-on-secondary {
584
+ color: var(--color-on-secondary);
585
+ }
586
+ .border-on-secondary {
587
+ border-color: var(--color-on-secondary);
588
+ }
589
+ .ring-on-secondary {
590
+ --tw-ring-color: var(--color-on-secondary);
591
+ }
592
+ .bg-secondary-container {
593
+ background: var(--color-secondary-container);
594
+ }
595
+ .text-secondary-container {
596
+ color: var(--color-secondary-container);
597
+ }
598
+ .border-secondary-container {
599
+ border-color: var(--color-secondary-container);
600
+ }
601
+ .ring-secondary-container {
602
+ --tw-ring-color: var(--color-secondary-container);
603
+ }
604
+ .bg-on-secondary-container {
605
+ background: var(--color-on-secondary-container);
606
+ }
607
+ .text-on-secondary-container {
608
+ color: var(--color-on-secondary-container);
609
+ }
610
+ .border-on-secondary-container {
611
+ border-color: var(--color-on-secondary-container);
612
+ }
613
+ .ring-on-secondary-container {
614
+ --tw-ring-color: var(--color-on-secondary-container);
615
+ }
616
+ .bg-tertiary {
617
+ background: var(--color-tertiary);
618
+ }
619
+ .text-tertiary {
620
+ color: var(--color-tertiary);
621
+ }
622
+ .border-tertiary {
623
+ border-color: var(--color-tertiary);
624
+ }
625
+ .ring-tertiary {
626
+ --tw-ring-color: var(--color-tertiary);
627
+ }
628
+ .bg-on-tertiary {
629
+ background: var(--color-on-tertiary);
630
+ }
631
+ .text-on-tertiary {
632
+ color: var(--color-on-tertiary);
633
+ }
634
+ .border-on-tertiary {
635
+ border-color: var(--color-on-tertiary);
636
+ }
637
+ .ring-on-tertiary {
638
+ --tw-ring-color: var(--color-on-tertiary);
639
+ }
640
+ .bg-tertiary-container {
641
+ background: var(--color-tertiary-container);
642
+ }
643
+ .text-tertiary-container {
644
+ color: var(--color-tertiary-container);
645
+ }
646
+ .border-tertiary-container {
647
+ border-color: var(--color-tertiary-container);
648
+ }
649
+ .ring-tertiary-container {
650
+ --tw-ring-color: var(--color-tertiary-container);
651
+ }
652
+ .bg-on-tertiary-container {
653
+ background: var(--color-on-tertiary-container);
654
+ }
655
+ .text-on-tertiary-container {
656
+ color: var(--color-on-tertiary-container);
657
+ }
658
+ .border-on-tertiary-container {
659
+ border-color: var(--color-on-tertiary-container);
660
+ }
661
+ .ring-on-tertiary-container {
662
+ --tw-ring-color: var(--color-on-tertiary-container);
663
+ }
664
+ .bg-error {
665
+ background: var(--color-error);
666
+ }
667
+ .text-error {
668
+ color: var(--color-error);
669
+ }
670
+ .border-error {
671
+ border-color: var(--color-error);
672
+ }
673
+ .ring-error {
674
+ --tw-ring-color: var(--color-error);
675
+ }
676
+ .bg-on-error {
677
+ background: var(--color-on-error);
678
+ }
679
+ .text-on-error {
680
+ color: var(--color-on-error);
681
+ }
682
+ .border-on-error {
683
+ border-color: var(--color-on-error);
684
+ }
685
+ .ring-on-error {
686
+ --tw-ring-color: var(--color-on-error);
687
+ }
688
+ .bg-error-container {
689
+ background: var(--color-error-container);
690
+ }
691
+ .text-error-container {
692
+ color: var(--color-error-container);
693
+ }
694
+ .border-error-container {
695
+ border-color: var(--color-error-container);
696
+ }
697
+ .ring-error-container {
698
+ --tw-ring-color: var(--color-error-container);
699
+ }
700
+ .bg-on-error-container {
701
+ background: var(--color-on-error-container);
702
+ }
703
+ .text-on-error-container {
704
+ color: var(--color-on-error-container);
705
+ }
706
+ .border-on-error-container {
707
+ border-color: var(--color-on-error-container);
708
+ }
709
+ .ring-on-error-container {
710
+ --tw-ring-color: var(--color-on-error-container);
711
+ }
712
+ .bg-background {
713
+ background: var(--color-background);
714
+ }
715
+ .text-background {
716
+ color: var(--color-background);
717
+ }
718
+ .border-background {
719
+ border-color: var(--color-background);
720
+ }
721
+ .ring-background {
722
+ --tw-ring-color: var(--color-background);
723
+ }
724
+ .bg-on-background {
725
+ background: var(--color-on-background);
726
+ }
727
+ .text-on-background {
728
+ color: var(--color-on-background);
729
+ }
730
+ .border-on-background {
731
+ border-color: var(--color-on-background);
732
+ }
733
+ .ring-on-background {
734
+ --tw-ring-color: var(--color-on-background);
735
+ }
736
+ .bg-surface {
737
+ background: var(--color-surface);
738
+ }
739
+ .text-surface {
740
+ color: var(--color-surface);
741
+ }
742
+ .border-surface {
743
+ border-color: var(--color-surface);
744
+ }
745
+ .ring-surface {
746
+ --tw-ring-color: var(--color-surface);
747
+ }
748
+ .bg-on-surface {
749
+ background: var(--color-on-surface);
750
+ }
751
+ .text-on-surface {
752
+ color: var(--color-on-surface);
753
+ }
754
+ .border-on-surface {
755
+ border-color: var(--color-on-surface);
756
+ }
757
+ .ring-on-surface {
758
+ --tw-ring-color: var(--color-on-surface);
759
+ }
760
+ .bg-surface-variant {
761
+ background: var(--color-surface-variant);
762
+ }
763
+ .text-surface-variant {
764
+ color: var(--color-surface-variant);
765
+ }
766
+ .border-surface-variant {
767
+ border-color: var(--color-surface-variant);
768
+ }
769
+ .ring-surface-variant {
770
+ --tw-ring-color: var(--color-surface-variant);
771
+ }
772
+ .bg-on-surface-variant {
773
+ background: var(--color-on-surface-variant);
774
+ }
775
+ .text-on-surface-variant {
776
+ color: var(--color-on-surface-variant);
777
+ }
778
+ .border-on-surface-variant {
779
+ border-color: var(--color-on-surface-variant);
780
+ }
781
+ .ring-on-surface-variant {
782
+ --tw-ring-color: var(--color-on-surface-variant);
783
+ }
784
+ .bg-outline {
785
+ background: var(--color-outline);
786
+ }
787
+ .text-outline {
788
+ color: var(--color-outline);
789
+ }
790
+ .border-outline {
791
+ border-color: var(--color-outline);
792
+ }
793
+ .ring-outline {
794
+ --tw-ring-color: var(--color-outline);
795
+ }
796
+ .bg-outline-variant {
797
+ background: var(--color-outline-variant);
798
+ }
799
+ .text-outline-variant {
800
+ color: var(--color-outline-variant);
801
+ }
802
+ .border-outline-variant {
803
+ border-color: var(--color-outline-variant);
804
+ }
805
+ .ring-outline-variant {
806
+ --tw-ring-color: var(--color-outline-variant);
807
+ }
808
+ .bg-shadow {
809
+ background: var(--color-shadow);
810
+ }
811
+ .text-shadow {
812
+ color: var(--color-shadow);
813
+ }
814
+ .border-shadow {
815
+ border-color: var(--color-shadow);
816
+ }
817
+ .ring-shadow {
818
+ --tw-ring-color: var(--color-shadow);
819
+ }
820
+ .bg-scrim {
821
+ background: var(--color-scrim);
822
+ }
823
+ .text-scrim {
824
+ color: var(--color-scrim);
825
+ }
826
+ .border-scrim {
827
+ border-color: var(--color-scrim);
828
+ }
829
+ .ring-scrim {
830
+ --tw-ring-color: var(--color-scrim);
831
+ }
832
+ .bg-inverse-surface {
833
+ background: var(--color-inverse-surface);
834
+ }
835
+ .text-inverse-surface {
836
+ color: var(--color-inverse-surface);
837
+ }
838
+ .border-inverse-surface {
839
+ border-color: var(--color-inverse-surface);
840
+ }
841
+ .ring-inverse-surface {
842
+ --tw-ring-color: var(--color-inverse-surface);
843
+ }
844
+ .bg-inverse-on-surface {
845
+ background: var(--color-inverse-on-surface);
846
+ }
847
+ .text-inverse-on-surface {
848
+ color: var(--color-inverse-on-surface);
849
+ }
850
+ .border-inverse-on-surface {
851
+ border-color: var(--color-inverse-on-surface);
852
+ }
853
+ .ring-inverse-on-surface {
854
+ --tw-ring-color: var(--color-inverse-on-surface);
855
+ }
856
+ .bg-inverse-primary {
857
+ background: var(--color-inverse-primary);
858
+ }
859
+ .text-inverse-primary {
860
+ color: var(--color-inverse-primary);
861
+ }
862
+ .border-inverse-primary {
863
+ border-color: var(--color-inverse-primary);
864
+ }
865
+ .ring-inverse-primary {
866
+ --tw-ring-color: var(--color-inverse-primary);
867
+ }
868
+ }
869
+ @layer theme, base, components, utilities;
870
+ @layer theme;
871
+ @layer base {
872
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
873
+ box-sizing: border-box;
874
+ margin: 0;
875
+ padding: 0;
876
+ border: 0 solid;
877
+ }
878
+ html, :host {
879
+ line-height: 1.5;
880
+ -webkit-text-size-adjust: 100%;
881
+ tab-size: 4;
882
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
883
+ font-feature-settings: var(--default-font-feature-settings, normal);
884
+ font-variation-settings: var(--default-font-variation-settings, normal);
885
+ -webkit-tap-highlight-color: transparent;
886
+ }
887
+ hr {
888
+ height: 0;
889
+ color: inherit;
890
+ border-top-width: 1px;
891
+ }
892
+ abbr:where([title]) {
893
+ -webkit-text-decoration: underline dotted;
894
+ text-decoration: underline dotted;
895
+ }
896
+ h1, h2, h3, h4, h5, h6 {
897
+ font-size: inherit;
898
+ font-weight: inherit;
899
+ }
900
+ a {
901
+ color: inherit;
902
+ -webkit-text-decoration: inherit;
903
+ text-decoration: inherit;
904
+ }
905
+ b, strong {
906
+ font-weight: bolder;
907
+ }
908
+ code, kbd, samp, pre {
909
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
910
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
911
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
912
+ font-size: 1em;
913
+ }
914
+ small {
915
+ font-size: 80%;
916
+ }
917
+ sub, sup {
918
+ font-size: 75%;
919
+ line-height: 0;
920
+ position: relative;
921
+ vertical-align: baseline;
922
+ }
923
+ sub {
924
+ bottom: -0.25em;
925
+ }
926
+ sup {
927
+ top: -0.5em;
928
+ }
929
+ table {
930
+ text-indent: 0;
931
+ border-color: inherit;
932
+ border-collapse: collapse;
933
+ }
934
+ :-moz-focusring {
935
+ outline: auto;
936
+ }
937
+ progress {
938
+ vertical-align: baseline;
939
+ }
940
+ summary {
941
+ display: list-item;
942
+ }
943
+ ol, ul, menu {
944
+ list-style: none;
945
+ }
946
+ img, svg, video, canvas, audio, iframe, embed, object {
947
+ display: block;
948
+ vertical-align: middle;
949
+ }
950
+ img, video {
951
+ max-width: 100%;
952
+ height: auto;
953
+ }
954
+ button, input, select, optgroup, textarea, ::file-selector-button {
955
+ font: inherit;
956
+ font-feature-settings: inherit;
957
+ font-variation-settings: inherit;
958
+ letter-spacing: inherit;
959
+ color: inherit;
960
+ border-radius: 0;
961
+ background-color: transparent;
962
+ opacity: 1;
963
+ }
964
+ :where(select:is([multiple], [size])) optgroup {
965
+ font-weight: bolder;
966
+ }
967
+ :where(select:is([multiple], [size])) optgroup option {
968
+ padding-inline-start: 20px;
969
+ }
970
+ ::file-selector-button {
971
+ margin-inline-end: 4px;
972
+ }
973
+ ::placeholder {
974
+ opacity: 1;
975
+ }
976
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
977
+ ::placeholder {
978
+ color: currentcolor;
979
+ @supports (color: color-mix(in lab, red, red)) {
980
+ color: color-mix(in oklab, currentcolor 50%, transparent);
981
+ }
982
+ }
983
+ }
984
+ textarea {
985
+ resize: vertical;
986
+ }
987
+ ::-webkit-search-decoration {
988
+ -webkit-appearance: none;
989
+ }
990
+ ::-webkit-date-and-time-value {
991
+ min-height: 1lh;
992
+ text-align: inherit;
993
+ }
994
+ ::-webkit-datetime-edit {
995
+ display: inline-flex;
996
+ }
997
+ ::-webkit-datetime-edit-fields-wrapper {
998
+ padding: 0;
999
+ }
1000
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
1001
+ padding-block: 0;
1002
+ }
1003
+ :-moz-ui-invalid {
1004
+ box-shadow: none;
1005
+ }
1006
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
1007
+ appearance: button;
1008
+ }
1009
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
1010
+ height: auto;
1011
+ }
1012
+ [hidden]:where(:not([hidden="until-found"])) {
1013
+ display: none !important;
1014
+ }
1015
+ }
1016
+ @layer utilities;
1017
+ @layer base {
1018
+ html, body {
1019
+ width: 100%;
1020
+ height: 100%;
1021
+ margin: 0;
1022
+ padding: 0;
1023
+ }
1024
+ }
324
1025
  @property --tw-font-weight {
325
1026
  syntax: "*";
326
1027
  inherits: false;
@@ -0,0 +1,4 @@
1
+ export { theme_state as theme } from './stores.svelte';
2
+ export { default as ThemeInit } from './theme-init/components/theme-init.svelte';
3
+ export type { tThemeInitProps } from './theme-init/types';
4
+ export * from "./logic";
@@ -0,0 +1,6 @@
1
+ // Stores
2
+ export { theme_state as theme } from './stores.svelte';
3
+ // Component
4
+ export { default as ThemeInit } from './theme-init/components/theme-init.svelte';
5
+ // Logic
6
+ export * from "./logic";
@@ -0,0 +1,4 @@
1
+ import { Mode, Variant } from "./types";
2
+ export declare function saveTheme(theme: object): void;
3
+ export declare function build(seedHex: string, mode?: Mode, variant?: Variant, contrast?: number): any;
4
+ export declare function applyScheme(scheme: any): any;
@@ -0,0 +1,71 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { argbFromHex, SchemeTonalSpot, Hct, hexFromArgb, SchemeContent, SchemeExpressive, SchemeFidelity, SchemeFruitSalad, SchemeMonochrome, SchemeNeutral, SchemeRainbow, SchemeVibrant } from '@material/material-color-utilities';
3
+ export function saveTheme(theme) {
4
+ var expires = new Date();
5
+ expires.setFullYear(expires.getFullYear() + 10);
6
+ document.cookie = "md-theme=".concat(JSON.stringify(theme), "; expires=").concat(expires.toUTCString(), "; path=/");
7
+ }
8
+ export function build(seedHex, mode, variant, contrast) {
9
+ if (mode === void 0) { mode = "dark"; }
10
+ if (variant === void 0) { variant = "vibrant"; }
11
+ if (contrast === void 0) { contrast = 0; }
12
+ var variant_map = {
13
+ "content": SchemeContent,
14
+ "expressive": SchemeExpressive,
15
+ "fidelity": SchemeFidelity,
16
+ "fruit-salad": SchemeFruitSalad,
17
+ "monochrome": SchemeMonochrome,
18
+ "neutral": SchemeNeutral,
19
+ "rainbow": SchemeRainbow,
20
+ "tonal-spot": SchemeTonalSpot,
21
+ "vibrant": SchemeVibrant
22
+ };
23
+ if (!(variant in variant_map)) {
24
+ variant = "content";
25
+ }
26
+ var source = Hct.fromInt(argbFromHex(seedHex));
27
+ var isDark = mode === "dark";
28
+ var scheme = new variant_map[variant](source, isDark, contrast);
29
+ return scheme;
30
+ }
31
+ export function applyScheme(scheme) {
32
+ var map = {
33
+ "--color-primary": scheme.primary,
34
+ "--color-on-primary": scheme.onPrimary,
35
+ "--color-primary-container": scheme.primaryContainer,
36
+ "--color-on-primary-container": scheme.onPrimaryContainer,
37
+ "--color-secondary": scheme.secondary,
38
+ "--color-on-secondary": scheme.onSecondary,
39
+ "--color-secondary-container": scheme.secondaryContainer,
40
+ "--color-on-secondary-container": scheme.onSecondaryContainer,
41
+ "--color-tertiary": scheme.tertiary,
42
+ "--color-on-tertiary": scheme.onTertiary,
43
+ "--color-tertiary-container": scheme.tertiaryContainer,
44
+ "--color-on-tertiary-container": scheme.onTertiaryContainer,
45
+ "--color-error": scheme.error,
46
+ "--color-on-error": scheme.onError,
47
+ "--color-error-container": scheme.errorContainer,
48
+ "--color-on-error-container": scheme.onErrorContainer,
49
+ "--color-background": scheme.background,
50
+ "--color-on-background": scheme.onBackground,
51
+ "--color-surface": scheme.surface,
52
+ "--color-on-surface": scheme.onSurface,
53
+ "--color-surface-variant": scheme.surfaceVariant,
54
+ "--color-on-surface-variant": scheme.onSurfaceVariant,
55
+ "--color-outline": scheme.outline,
56
+ "--color-outline-variant": scheme.outlineVariant,
57
+ "--color-shadow": scheme.shadow,
58
+ "--color-scrim": scheme.scrim,
59
+ "--color-inverse-surface": scheme.inverseSurface,
60
+ "--color-inverse-on-surface": scheme.inverseOnSurface,
61
+ "--color-inverse-primary": scheme.inversePrimary
62
+ };
63
+ var out = {};
64
+ var root = document.documentElement;
65
+ for (var _i = 0, _a = Object.entries(map); _i < _a.length; _i++) {
66
+ var _b = _a[_i], name = _b[0], argb = _b[1];
67
+ out[name] = hexFromArgb(argb);
68
+ root.style.setProperty(name, hexFromArgb(argb));
69
+ }
70
+ return out;
71
+ }
@@ -0,0 +1,24 @@
1
+ export const theme_state: ThemeState;
2
+ /**
3
+ * Class representing the current state of the theme
4
+ *
5
+ * If either `mode`, `variant` or `seedColor` are updated, the whole theme will refresh
6
+ */
7
+ declare class ThemeState {
8
+ /**
9
+ * Current mode of the theme, either light or dark
10
+ * @type {"dark"|"light"|undefined}
11
+ */
12
+ mode: "dark" | "light" | undefined;
13
+ /**
14
+ * Variant of the theme, Changes the look and feel of the used colors
15
+ * @type {"content"|"expressive"|"fidelity"|"fruit-salad"|"monochrome"|"neutral"|"rainbow"|"tonal-spot"|"vibrant"|undefined}
16
+ */
17
+ variant: "content" | "expressive" | "fidelity" | "fruit-salad" | "monochrome" | "neutral" | "rainbow" | "tonal-spot" | "vibrant" | undefined;
18
+ /**
19
+ * Main color used to generate the theme.
20
+ * @type {string|undefined}
21
+ */
22
+ seedColor: string | undefined;
23
+ }
24
+ export {};
@@ -0,0 +1,33 @@
1
+
2
+
3
+
4
+ /**
5
+ * Class representing the current state of the theme
6
+ *
7
+ * If either `mode`, `variant` or `seedColor` are updated, the whole theme will refresh
8
+ */
9
+ class ThemeState {
10
+
11
+ /**
12
+ * Current mode of the theme, either light or dark
13
+ * @type {"dark"|"light"|undefined}
14
+ */
15
+ mode = $state(undefined)
16
+
17
+ /**
18
+ * Variant of the theme, Changes the look and feel of the used colors
19
+ * @type {"content"|"expressive"|"fidelity"|"fruit-salad"|"monochrome"|"neutral"|"rainbow"|"tonal-spot"|"vibrant"|undefined}
20
+ */
21
+ variant = $state(undefined)
22
+
23
+ /**
24
+ * Main color used to generate the theme.
25
+ * @type {string|undefined}
26
+ */
27
+ seedColor = $state(undefined)
28
+ }
29
+
30
+ const theme_state = new ThemeState();
31
+
32
+ export { theme_state }
33
+
@@ -0,0 +1,93 @@
1
+ <script lang="ts">
2
+ // --- Logic ---
3
+ import { cn } from '../../../utils';
4
+ import type { Props } from '..';
5
+ import { onMount } from 'svelte';
6
+
7
+ // === State ===
8
+ import { theme, build, applyScheme, saveTheme } from '../..';
9
+
10
+ const {
11
+ defaults = {
12
+ defaultMode: 'dark',
13
+ defaultVariant: 'vibrant',
14
+ defaultSeedColor: '#f8b518'
15
+ }
16
+ }: Props = $props();
17
+
18
+ /**
19
+ * Checks if the user already has a set md-theme
20
+ */
21
+ function hasTheme() {
22
+ const match = document.cookie.match(/(?:^|;\s*)md-theme=([^;]*)/);
23
+ return match ? true : false;
24
+ }
25
+
26
+ /**
27
+ * Returns a fallback value if designated value is undefined
28
+ * @param value Value to return normally
29
+ * @param _default default if value is undefined
30
+ */
31
+ function fallback(value: any, _default: any) {
32
+ return value === undefined ? _default : value;
33
+ }
34
+
35
+ // Whenever any state changes, refresh theme
36
+ $effect(() => {
37
+ // Get fallback values
38
+ theme.mode = fallback(theme.mode, defaults.defaultMode);
39
+ theme.variant = fallback(theme.variant, defaults.defaultVariant);
40
+ theme.seedColor = fallback(theme.seedColor, defaults.defaultSeedColor);
41
+
42
+ // Build the theme with material utilities
43
+ const built = build(theme.seedColor, theme.mode, theme.variant);
44
+
45
+ // Create css variables object and save to body
46
+ const applied = applyScheme(built);
47
+
48
+ // Save the theme to the user's cookies
49
+ saveTheme(applied);
50
+ });
51
+ </script>
52
+
53
+ <svelte:head>
54
+ <!-- ============== Theme Script ============== -->
55
+ <script>
56
+ /**
57
+ * Attempts to get the current theme stored in the user's cookies, returns it, otherwise undefined
58
+ * @return {Object|undefined} The theme or undefined
59
+ */
60
+ function getTheme() {
61
+ const match = document.cookie.match(/(?:^|;\s*)md-theme=([^;]*)/);
62
+ return match ? JSON.parse(decodeURIComponent(match[1])) : undefined;
63
+ }
64
+
65
+ /**
66
+ * Attempts to apply a given theme
67
+ * @param {Object|undefined} theme - The theme to be applied, if undefined, this method does nothing
68
+ */
69
+ function applyTheme(theme) {
70
+ if (theme === undefined) {
71
+ console.warn('No theme specified, defaulting to doing nothing');
72
+ return;
73
+ }
74
+
75
+ for (const [name, hex] of Object.entries(theme)) {
76
+ console.info(`Setting ${name} to ${hex}`);
77
+ document.documentElement.style.setProperty(name, hex);
78
+ }
79
+ }
80
+
81
+ applyTheme(getTheme());
82
+ </script>
83
+ </svelte:head>
84
+
85
+ <!--@component
86
+ ---
87
+ name: ThemeInit
88
+ props:
89
+ defaultSeed (undefined|string) = undefine Default color seed for the theme.
90
+ ---
91
+
92
+ Used to initialize the theme within your projects
93
+ -->
@@ -0,0 +1,13 @@
1
+ import type { Props } from '..';
2
+ /**
3
+ * ---
4
+ * name: ThemeInit
5
+ * props:
6
+ * defaultSeed (undefined|string) = undefine Default color seed for the theme.
7
+ * ---
8
+ *
9
+ * Used to initialize the theme within your projects
10
+ */
11
+ declare const ThemeInit: import("svelte").Component<Props, {}, "">;
12
+ type ThemeInit = ReturnType<typeof ThemeInit>;
13
+ export default ThemeInit;
@@ -0,0 +1,2 @@
1
+ export { default as _, default as Root } from "./components/theme-init.svelte";
2
+ export type { tThemeInitProps as Props, } from "./types";
@@ -0,0 +1 @@
1
+ export { default as _, default as Root } from "./components/theme-init.svelte";
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ /**
3
+ * Possible default types, object contains
4
+ * `defaultMode`,
5
+ * `defaultVariant`,
6
+ * `defaultSeedColor`
7
+ */
8
+ export type tDefaults = {
9
+ defaultMode: 'dark' | 'light' | undefined;
10
+ defaultVariant: 'content' | 'expressive' | 'fidelity' | 'fruit-salad' | 'monochrome' | 'neutral' | 'rainbow' | 'tonal-spot' | 'vibrant' | undefined;
11
+ defaultSeedColor: string | undefined;
12
+ };
13
+ export type tThemeInitProps = HTMLAttributes<HTMLDivElement> & {
14
+ defaults?: tDefaults;
15
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export type Mode = string | "light" | "dark";
2
+ export type Variant = string | "content" | "expressive" | "fidelity" | "fruit-salad" | "monochrome" | "neutral" | "rainbow" | "tonal-spot" | "vibrant";
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sk-clib",
3
- "version": "1.7.0",
3
+ "version": "1.8.1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -19,6 +19,11 @@
19
19
  },
20
20
  "./style": {
21
21
  "default": "./dist/styles.css"
22
+ },
23
+ "./theme": {
24
+ "types": "./dist/theme/index.d.ts",
25
+ "svelte": "./dist/theme/index.js",
26
+ "default": "./dist/theme/index.js"
22
27
  }
23
28
  },
24
29
  "svelte": "./dist/index.js",
@@ -38,7 +43,8 @@
38
43
  },
39
44
  "peerDependencies": {
40
45
  "@sveltejs/kit": "^2.0.0",
41
- "svelte": "^5.0.0"
46
+ "svelte": "^5.0.0",
47
+ "@material/material-color-utilities": "^0.3.0"
42
48
  },
43
49
  "devDependencies": {
44
50
  "@iconify-json/mdi": "^1.2.3",
@@ -73,6 +79,7 @@
73
79
  "@tailwindcss/vite": "^4.1.7",
74
80
  "mdsvex": "^0.12.6",
75
81
  "semantic-release": "^24.2.4",
76
- "tailwind-merge": "^3.2.0"
82
+ "tailwind-merge": "^3.2.0",
83
+ "@material/material-color-utilities": "^0.3.0"
77
84
  }
78
85
  }