@sunboard/react 1.0.0 → 2.0.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/styles.css CHANGED
@@ -17,6 +17,7 @@
17
17
  --sb-r3: max(calc(var(--sb-card-radius) - 6px), 2px);
18
18
  --sb-ring: color-mix(in srgb, var(--sb-accent) 20%, transparent);
19
19
  --sb-tint: color-mix(in srgb, var(--sb-accent) 10%, transparent);
20
+ --sb-unread: #e5484d;
20
21
 
21
22
  color: var(--sb-text);
22
23
  font-family: var(--sb-font);
@@ -560,74 +561,6 @@
560
561
  color: var(--sb-accent);
561
562
  }
562
563
 
563
- .sb-root .sb-sources {
564
- display: flex;
565
- flex-direction: column;
566
- border: 1px solid var(--sb-border);
567
- border-radius: var(--sb-r2);
568
- overflow: hidden;
569
- }
570
- .sb-root .sb-doc,
571
- .sb-root .sb-sources-toggle {
572
- width: 100%;
573
- min-height: 44px;
574
- display: flex;
575
- align-items: center;
576
- gap: 10px;
577
- padding: 0 12px;
578
- font-size: calc(var(--sb-size-base) - 1px);
579
- }
580
- .sb-root .sb-doc {
581
- color: var(--sb-text);
582
- text-decoration: none;
583
- }
584
- .sb-root .sb-doc + .sb-doc,
585
- .sb-root .sb-sources-toggle + .sb-doc {
586
- border-top: 1px solid var(--sb-border);
587
- }
588
- .sb-root a.sb-doc:hover,
589
- .sb-root .sb-sources-toggle:hover {
590
- background: var(--sb-surface-hover);
591
- }
592
- .sb-root .sb-doc > svg {
593
- flex-shrink: 0;
594
- width: 15px;
595
- height: 15px;
596
- color: var(--sb-text-muted);
597
- }
598
- .sb-root .sb-doc-text + svg {
599
- width: 14px;
600
- height: 14px;
601
- }
602
- .sb-root .sb-doc-text {
603
- flex: 1;
604
- min-width: 0;
605
- overflow: hidden;
606
- text-overflow: ellipsis;
607
- white-space: nowrap;
608
- }
609
- .sb-root .sb-doc-trail {
610
- color: var(--sb-text-muted);
611
- }
612
- .sb-root .sb-sources-toggle {
613
- border: 0;
614
- background: transparent;
615
- color: var(--sb-text-muted);
616
- text-align: left;
617
- cursor: pointer;
618
- }
619
- .sb-root .sb-sources-toggle span {
620
- flex: 1;
621
- }
622
- .sb-root .sb-sources-toggle svg {
623
- flex-shrink: 0;
624
- width: 15px;
625
- height: 15px;
626
- }
627
- .sb-root .sb-sources-toggle[aria-expanded="true"] svg:last-child {
628
- transform: rotate(180deg);
629
- }
630
-
631
564
  .sb-root .sb-support {
632
565
  display: flex;
633
566
  align-items: center;
@@ -967,6 +900,256 @@
967
900
  color: var(--sb-text);
968
901
  }
969
902
 
903
+ /* ---------- talk to a person ---------- */
904
+ .sb-root .sb-dot {
905
+ flex-shrink: 0;
906
+ width: 8px;
907
+ height: 8px;
908
+ border-radius: 999px;
909
+ background: var(--sb-unread);
910
+ }
911
+ .sb-root .sb-launcher-dot {
912
+ position: absolute;
913
+ top: -2px;
914
+ right: -2px;
915
+ width: 12px;
916
+ height: 12px;
917
+ border: 2px solid var(--sb-surface);
918
+ }
919
+
920
+ .sb-root .sb-head-back {
921
+ padding-left: 6px;
922
+ }
923
+
924
+ .sb-root .sb-talk {
925
+ align-self: flex-start;
926
+ min-height: 44px;
927
+ display: inline-flex;
928
+ align-items: center;
929
+ gap: 6px;
930
+ padding: 0;
931
+ border: 0;
932
+ background: none;
933
+ color: var(--sb-text-muted);
934
+ cursor: pointer;
935
+ font-size: calc(var(--sb-size-base) - 0.5px);
936
+ font-weight: var(--sb-weight-medium);
937
+ }
938
+ .sb-root .sb-talk:hover {
939
+ color: var(--sb-text);
940
+ }
941
+ .sb-root .sb-talk svg,
942
+ .sb-root .sb-talk-button svg {
943
+ width: 16px;
944
+ height: 16px;
945
+ }
946
+
947
+ .sb-root .sb-convbar {
948
+ flex-shrink: 0;
949
+ min-height: 44px;
950
+ display: flex;
951
+ align-items: center;
952
+ gap: 10px;
953
+ margin: 0 12px;
954
+ padding: 0 8px 0 12px;
955
+ border: 1px solid var(--sb-border);
956
+ border-radius: var(--sb-r2);
957
+ background: var(--sb-surface);
958
+ color: var(--sb-text);
959
+ cursor: pointer;
960
+ text-align: left;
961
+ font-size: calc(var(--sb-size-base) - 0.5px);
962
+ }
963
+ .sb-root .sb-convbar:hover,
964
+ .sb-root .sb-conv:hover {
965
+ background: var(--sb-surface-hover);
966
+ }
967
+ .sb-root .sb-convbar-text {
968
+ flex: 1;
969
+ min-width: 0;
970
+ overflow: hidden;
971
+ text-overflow: ellipsis;
972
+ white-space: nowrap;
973
+ }
974
+ .sb-root .sb-convbar-status {
975
+ color: var(--sb-text-muted);
976
+ }
977
+ .sb-root .sb-convbar > svg,
978
+ .sb-root .sb-conv > svg {
979
+ flex-shrink: 0;
980
+ width: 16px;
981
+ height: 16px;
982
+ color: var(--sb-text-muted);
983
+ }
984
+
985
+ .sb-root .sb-conv {
986
+ width: 100%;
987
+ display: flex;
988
+ align-items: center;
989
+ gap: 12px;
990
+ padding: 12px 10px 12px 14px;
991
+ border: 1px solid var(--sb-border);
992
+ border-radius: var(--sb-r2);
993
+ background: var(--sb-surface);
994
+ color: var(--sb-text);
995
+ cursor: pointer;
996
+ text-align: left;
997
+ }
998
+ .sb-root .sb-conv .sb-dot {
999
+ align-self: flex-start;
1000
+ margin-top: 7px;
1001
+ }
1002
+ .sb-root .sb-conv-text {
1003
+ flex: 1;
1004
+ min-width: 0;
1005
+ display: flex;
1006
+ flex-direction: column;
1007
+ gap: 2px;
1008
+ }
1009
+ .sb-root .sb-conv-title {
1010
+ font-size: calc(var(--sb-size-base) + 0.5px);
1011
+ font-weight: var(--sb-weight-medium);
1012
+ }
1013
+ .sb-root .sb-conv-line {
1014
+ overflow: hidden;
1015
+ text-overflow: ellipsis;
1016
+ white-space: nowrap;
1017
+ font-size: calc(var(--sb-size-base) - 0.5px);
1018
+ color: var(--sb-text-muted);
1019
+ }
1020
+
1021
+ .sb-root .sb-thread-list.sb-conversation {
1022
+ gap: 16px;
1023
+ }
1024
+ /* The conversation sits on the composer, as a chat does, where the assistant's thread starts at the top. */
1025
+ .sb-root .sb-anchored > .sb-thread-list.sb-conversation {
1026
+ margin-bottom: 0;
1027
+ }
1028
+ .sb-root .sb-dim {
1029
+ display: flex;
1030
+ flex-direction: column;
1031
+ gap: 16px;
1032
+ color: var(--sb-text-muted);
1033
+ }
1034
+ .sb-root .sb-dim .sb-asked p {
1035
+ color: var(--sb-text-muted);
1036
+ }
1037
+ .sb-root .sb-sent {
1038
+ flex-direction: column;
1039
+ align-items: flex-end;
1040
+ gap: 6px;
1041
+ }
1042
+ .sb-root .sb-reply-time {
1043
+ font-size: calc(var(--sb-size-base) - 1.5px);
1044
+ color: var(--sb-text-muted);
1045
+ }
1046
+ .sb-root .sb-team {
1047
+ align-self: flex-start;
1048
+ max-width: 88%;
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ gap: 6px;
1052
+ }
1053
+ .sb-root .sb-team-who {
1054
+ font-size: calc(var(--sb-size-base) - 1.5px);
1055
+ color: var(--sb-text-muted);
1056
+ }
1057
+ .sb-root .sb-team-text {
1058
+ padding: 10px 14px;
1059
+ border: 1px solid var(--sb-border);
1060
+ border-radius: var(--sb-card-radius) var(--sb-card-radius) var(--sb-card-radius) var(--sb-r3);
1061
+ background: var(--sb-surface);
1062
+ font-size: calc(var(--sb-size-base) + 0.5px);
1063
+ line-height: 1.45;
1064
+ white-space: pre-wrap;
1065
+ overflow-wrap: anywhere;
1066
+ }
1067
+ .sb-root .sb-fold {
1068
+ width: 100%;
1069
+ min-height: 44px;
1070
+ display: flex;
1071
+ align-items: center;
1072
+ gap: 8px;
1073
+ padding: 10px 12px;
1074
+ border: 1px solid var(--sb-border);
1075
+ border-radius: var(--sb-r2);
1076
+ background: var(--sb-surface);
1077
+ color: var(--sb-text-muted);
1078
+ cursor: pointer;
1079
+ text-align: left;
1080
+ font-size: calc(var(--sb-size-base) - 0.5px);
1081
+ }
1082
+ .sb-root .sb-fold svg {
1083
+ flex-shrink: 0;
1084
+ width: 14px;
1085
+ height: 14px;
1086
+ transition: transform 150ms ease-out;
1087
+ }
1088
+ .sb-root .sb-fold-open svg {
1089
+ transform: rotate(90deg);
1090
+ }
1091
+ .sb-root .sb-fold-text {
1092
+ flex: 1;
1093
+ min-width: 0;
1094
+ overflow: hidden;
1095
+ text-overflow: ellipsis;
1096
+ white-space: nowrap;
1097
+ }
1098
+ .sb-root .sb-fold-open .sb-fold-text {
1099
+ white-space: normal;
1100
+ overflow-wrap: anywhere;
1101
+ }
1102
+ .sb-root .sb-closed {
1103
+ display: flex;
1104
+ flex-direction: column;
1105
+ gap: 8px;
1106
+ }
1107
+ .sb-root .sb-reopen {
1108
+ text-align: center;
1109
+ font-size: calc(var(--sb-size-base) - 1.5px);
1110
+ color: var(--sb-text-muted);
1111
+ }
1112
+
1113
+ .sb-root .sb-past-list {
1114
+ display: flex;
1115
+ flex-direction: column;
1116
+ padding: 12px 18px 16px;
1117
+ }
1118
+ .sb-root .sb-past {
1119
+ min-height: 44px;
1120
+ display: flex;
1121
+ flex-direction: column;
1122
+ gap: 2px;
1123
+ margin: 0 -10px;
1124
+ padding: 12px 10px;
1125
+ border: 0;
1126
+ border-top: 1px solid var(--sb-border);
1127
+ border-radius: 0;
1128
+ background: transparent;
1129
+ color: var(--sb-text);
1130
+ cursor: pointer;
1131
+ text-align: left;
1132
+ }
1133
+ .sb-root .sb-past:first-child {
1134
+ border-top: 0;
1135
+ }
1136
+ .sb-root .sb-past:hover {
1137
+ background: var(--sb-surface-hover);
1138
+ }
1139
+ .sb-root .sb-past-title {
1140
+ font-size: calc(var(--sb-size-base) + 0.5px);
1141
+ }
1142
+ .sb-root .sb-past-meta {
1143
+ font-size: calc(var(--sb-size-base) - 1px);
1144
+ color: var(--sb-text-muted);
1145
+ }
1146
+ .sb-root .sb-foot {
1147
+ flex-shrink: 0;
1148
+ display: flex;
1149
+ justify-content: center;
1150
+ padding: 8px 12px 10px;
1151
+ }
1152
+
970
1153
  @keyframes sb-slide-in {
971
1154
  from {
972
1155
  opacity: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunboard/react",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Product tours, tooltips and a Help launcher with an assistant, for your React app. Sunboard creates the guides from your docs and keeps them working as your app changes.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://sunboardhq.com",
@@ -46,6 +46,7 @@
46
46
  "@types/react": "^19.2.0",
47
47
  "@types/react-dom": "^19.2.0",
48
48
  "eslint": "^9.39.1",
49
+ "jose": "6.2.8",
49
50
  "jsdom": "^30.0.1",
50
51
  "react": "19.2.4",
51
52
  "react-dom": "19.2.4",