@tanstack/devtools 0.6.20 → 0.6.22
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/chunk/{XFQ6P775.js → XF4JFOLU.js} +15 -0
- package/dist/dev.js +13 -3
- package/dist/devtools/{YM72BEIK.js → MBQPV7BO.js} +1907 -70
- package/dist/devtools/{6XAY2RKM.js → YRFZDV5N.js} +2260 -169
- package/dist/index.js +13 -3
- package/dist/server.js +9 -2
- package/package.json +6 -3
- package/src/components/source-inspector.tsx +158 -0
- package/src/context/devtools-context.tsx +24 -1
- package/src/core.tsx +15 -1
- package/src/devtools.tsx +3 -28
- package/src/styles/use-styles.ts +829 -0
- package/src/tabs/marketplace/card-utils.test.ts +219 -0
- package/src/tabs/marketplace/card-utils.ts +85 -0
- package/src/tabs/marketplace/marketplace-header.tsx +54 -0
- package/src/tabs/marketplace/plugin-card.tsx +165 -0
- package/src/tabs/marketplace/plugin-section.tsx +51 -0
- package/src/tabs/marketplace/plugin-utils.test.ts +518 -0
- package/src/tabs/marketplace/plugin-utils.ts +248 -0
- package/src/tabs/marketplace/settings-panel.tsx +41 -0
- package/src/tabs/marketplace/tag-filters.tsx +35 -0
- package/src/tabs/marketplace/types.ts +47 -0
- package/src/tabs/plugin-marketplace.tsx +346 -0
- package/src/tabs/plugin-registry.ts +222 -0
- package/src/tabs/plugins-tab.tsx +112 -65
- package/src/tabs/semver-utils.test.ts +218 -0
- package/src/tabs/semver-utils.ts +114 -0
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { usePiPWindow, keyboardModifiers, getAllPermutations, TANSTACK_DEVTOOLS, DevtoolsContext, PLUGIN_TITLE_CONTAINER_ID, PLUGIN_CONTAINER_ID, uppercaseFirstLetter } from '../chunk/
|
|
2
|
-
import { createComponent, Portal, ssr, ssrAttribute, escape } from 'solid-js/web';
|
|
3
|
-
import { createContext, createSignal, createEffect,
|
|
4
|
-
import { createShortcut } from '@solid-primitives/keyboard';
|
|
5
|
-
import { ThemeContextProvider, MainPanel as MainPanel$1, Section, SectionTitle, SectionIcon, SectionDescription, Checkbox, Input, Select, Button } from '@tanstack/devtools-ui';
|
|
1
|
+
import { usePiPWindow, keyboardModifiers, getAllPermutations, TANSTACK_DEVTOOLS, DevtoolsContext, PLUGIN_TITLE_CONTAINER_ID, PLUGIN_CONTAINER_ID, uppercaseFirstLetter } from '../chunk/XF4JFOLU.js';
|
|
2
|
+
import { createComponent, Portal, ssr, ssrAttribute, escape, ssrStyle } from 'solid-js/web';
|
|
3
|
+
import { createContext, createSignal, createEffect, Show, createMemo, For, useContext, onCleanup, onMount } from 'solid-js';
|
|
4
|
+
import { createShortcut, useKeyDownList } from '@solid-primitives/keyboard';
|
|
5
|
+
import { ThemeContextProvider, MainPanel as MainPanel$1, Section, SectionTitle, SectionIcon, SectionDescription, Checkbox, Input, Select, Button, ChevronDownIcon, CloseIcon, SearchIcon, SettingsIcon, PackageIcon, ExternalLinkIcon, CheckCircleIcon, XCircleIcon } from '@tanstack/devtools-ui';
|
|
6
6
|
import clsx3 from 'clsx';
|
|
7
7
|
import * as goober from 'goober';
|
|
8
8
|
import { PiP, X, List, PageSearch, Cogs, SettingsCog, Link, Keyboard, GeoTag, SocialBubble } from '@tanstack/devtools-ui/icons';
|
|
9
|
+
import { devtoolsEventClient } from '@tanstack/devtools-client';
|
|
10
|
+
import { createStore } from 'solid-js/store';
|
|
11
|
+
import { createElementSize } from '@solid-primitives/resize-observer';
|
|
12
|
+
import { createEventListener } from '@solid-primitives/event-listener';
|
|
9
13
|
|
|
10
14
|
var useDraw = (props) => {
|
|
11
15
|
const [activeHover, setActiveHover] = createSignal(false);
|
|
@@ -822,12 +826,18 @@ var stylesFactory = (theme) => {
|
|
|
822
826
|
width: ${size[48]};
|
|
823
827
|
overflow-y: auto;
|
|
824
828
|
transform: ${isExpanded ? "translateX(0)" : "translateX(-100%)"};
|
|
829
|
+
display: flex;
|
|
830
|
+
flex-direction: column;
|
|
825
831
|
`,
|
|
826
832
|
pluginsTabSidebarTransition: (mSeconds) => {
|
|
827
833
|
return css2`
|
|
828
834
|
transition: transform ${mSecondsToCssSeconds(mSeconds)} ease;
|
|
829
835
|
`;
|
|
830
836
|
},
|
|
837
|
+
pluginsList: css2`
|
|
838
|
+
flex: 1;
|
|
839
|
+
overflow-y: auto;
|
|
840
|
+
`,
|
|
831
841
|
pluginName: css2`
|
|
832
842
|
font-size: ${fontSize.xs};
|
|
833
843
|
font-family: ${fontFamily.sans};
|
|
@@ -887,6 +897,822 @@ var stylesFactory = (theme) => {
|
|
|
887
897
|
settingsModifiers: css2`
|
|
888
898
|
display: flex;
|
|
889
899
|
gap: 0.5rem;
|
|
900
|
+
`,
|
|
901
|
+
// No Plugins Fallback Styles
|
|
902
|
+
noPluginsFallback: css2`
|
|
903
|
+
display: flex;
|
|
904
|
+
align-items: center;
|
|
905
|
+
justify-content: center;
|
|
906
|
+
min-height: 400px;
|
|
907
|
+
padding: 2rem;
|
|
908
|
+
background: ${t(colors.gray[50], colors.darkGray[700])};
|
|
909
|
+
width: 100%;
|
|
910
|
+
height: 100%;
|
|
911
|
+
`,
|
|
912
|
+
noPluginsFallbackContent: css2`
|
|
913
|
+
max-width: 600px;
|
|
914
|
+
text-align: center;
|
|
915
|
+
display: flex;
|
|
916
|
+
flex-direction: column;
|
|
917
|
+
align-items: center;
|
|
918
|
+
gap: 1rem;
|
|
919
|
+
`,
|
|
920
|
+
noPluginsFallbackIcon: css2`
|
|
921
|
+
width: 64px;
|
|
922
|
+
height: 64px;
|
|
923
|
+
color: ${t(colors.gray[400], colors.gray[600])};
|
|
924
|
+
margin-bottom: 0.5rem;
|
|
925
|
+
|
|
926
|
+
svg {
|
|
927
|
+
width: 100%;
|
|
928
|
+
height: 100%;
|
|
929
|
+
}
|
|
930
|
+
`,
|
|
931
|
+
noPluginsFallbackTitle: css2`
|
|
932
|
+
font-size: 1.5rem;
|
|
933
|
+
font-weight: 600;
|
|
934
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
935
|
+
margin: 0;
|
|
936
|
+
`,
|
|
937
|
+
noPluginsFallbackDescription: css2`
|
|
938
|
+
font-size: 0.95rem;
|
|
939
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
940
|
+
line-height: 1.5;
|
|
941
|
+
margin: 0;
|
|
942
|
+
`,
|
|
943
|
+
noPluginsSuggestions: css2`
|
|
944
|
+
width: 100%;
|
|
945
|
+
margin-top: 1.5rem;
|
|
946
|
+
padding: 1.5rem;
|
|
947
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
948
|
+
border: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
949
|
+
border-radius: 0.5rem;
|
|
950
|
+
`,
|
|
951
|
+
noPluginsSuggestionsTitle: css2`
|
|
952
|
+
font-size: 1.125rem;
|
|
953
|
+
font-weight: 600;
|
|
954
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
955
|
+
margin: 0 0 0.5rem 0;
|
|
956
|
+
`,
|
|
957
|
+
noPluginsSuggestionsDesc: css2`
|
|
958
|
+
font-size: 0.875rem;
|
|
959
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
960
|
+
margin: 0 0 1rem 0;
|
|
961
|
+
`,
|
|
962
|
+
noPluginsSuggestionsList: css2`
|
|
963
|
+
display: flex;
|
|
964
|
+
flex-direction: column;
|
|
965
|
+
gap: 0.75rem;
|
|
966
|
+
`,
|
|
967
|
+
noPluginsSuggestionCard: css2`
|
|
968
|
+
display: flex;
|
|
969
|
+
align-items: center;
|
|
970
|
+
justify-content: space-between;
|
|
971
|
+
padding: 1rem;
|
|
972
|
+
background: ${t(colors.gray[50], colors.darkGray[900])};
|
|
973
|
+
border: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
974
|
+
border-radius: 0.375rem;
|
|
975
|
+
transition: all 0.15s ease;
|
|
976
|
+
|
|
977
|
+
&:hover {
|
|
978
|
+
border-color: ${t(colors.gray[300], colors.gray[600])};
|
|
979
|
+
background: ${t(colors.gray[100], colors.darkGray[800])};
|
|
980
|
+
}
|
|
981
|
+
`,
|
|
982
|
+
noPluginsSuggestionInfo: css2`
|
|
983
|
+
display: flex;
|
|
984
|
+
flex-direction: column;
|
|
985
|
+
align-items: flex-start;
|
|
986
|
+
gap: 0.25rem;
|
|
987
|
+
flex: 1;
|
|
988
|
+
`,
|
|
989
|
+
noPluginsSuggestionPackage: css2`
|
|
990
|
+
font-size: 0.95rem;
|
|
991
|
+
font-weight: 600;
|
|
992
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
993
|
+
margin: 0;
|
|
994
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
995
|
+
`,
|
|
996
|
+
noPluginsSuggestionSource: css2`
|
|
997
|
+
font-size: 0.8rem;
|
|
998
|
+
color: ${t(colors.gray[500], colors.gray[500])};
|
|
999
|
+
margin: 0;
|
|
1000
|
+
`,
|
|
1001
|
+
noPluginsSuggestionStatus: css2`
|
|
1002
|
+
display: flex;
|
|
1003
|
+
align-items: center;
|
|
1004
|
+
gap: 0.5rem;
|
|
1005
|
+
color: ${t(colors.green[600], colors.green[400])};
|
|
1006
|
+
|
|
1007
|
+
svg {
|
|
1008
|
+
width: 18px;
|
|
1009
|
+
height: 18px;
|
|
1010
|
+
}
|
|
1011
|
+
`,
|
|
1012
|
+
noPluginsSuggestionStatusText: css2`
|
|
1013
|
+
font-size: 0.875rem;
|
|
1014
|
+
font-weight: 500;
|
|
1015
|
+
`,
|
|
1016
|
+
noPluginsSuggestionStatusTextError: css2`
|
|
1017
|
+
font-size: 0.875rem;
|
|
1018
|
+
font-weight: 500;
|
|
1019
|
+
color: ${t(colors.red[600], colors.red[400])};
|
|
1020
|
+
`,
|
|
1021
|
+
noPluginsEmptyState: css2`
|
|
1022
|
+
margin-top: 1.5rem;
|
|
1023
|
+
padding: 1.5rem;
|
|
1024
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
1025
|
+
border: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1026
|
+
border-radius: 0.5rem;
|
|
1027
|
+
`,
|
|
1028
|
+
noPluginsEmptyStateText: css2`
|
|
1029
|
+
font-size: 0.875rem;
|
|
1030
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1031
|
+
margin: 0;
|
|
1032
|
+
line-height: 1.5;
|
|
1033
|
+
`,
|
|
1034
|
+
noPluginsFallbackLinks: css2`
|
|
1035
|
+
display: flex;
|
|
1036
|
+
align-items: center;
|
|
1037
|
+
gap: 0.75rem;
|
|
1038
|
+
margin-top: 1.5rem;
|
|
1039
|
+
`,
|
|
1040
|
+
noPluginsFallbackLink: css2`
|
|
1041
|
+
font-size: 0.875rem;
|
|
1042
|
+
color: ${t(colors.gray[700], colors.gray[300])};
|
|
1043
|
+
text-decoration: none;
|
|
1044
|
+
transition: color 0.15s ease;
|
|
1045
|
+
|
|
1046
|
+
&:hover {
|
|
1047
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1048
|
+
text-decoration: underline;
|
|
1049
|
+
}
|
|
1050
|
+
`,
|
|
1051
|
+
noPluginsFallbackLinkSeparator: css2`
|
|
1052
|
+
color: ${t(colors.gray[400], colors.gray[600])};
|
|
1053
|
+
`,
|
|
1054
|
+
// Plugin Marketplace Styles (for "Add More" tab)
|
|
1055
|
+
pluginMarketplace: css2`
|
|
1056
|
+
width: 100%;
|
|
1057
|
+
overflow-y: auto;
|
|
1058
|
+
padding: 2rem;
|
|
1059
|
+
background: ${t(
|
|
1060
|
+
"linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)",
|
|
1061
|
+
"linear-gradient(135deg, #1a1d23 0%, #13161a 100%)"
|
|
1062
|
+
)};
|
|
1063
|
+
animation: fadeIn 0.3s ease;
|
|
1064
|
+
|
|
1065
|
+
@keyframes fadeIn {
|
|
1066
|
+
from {
|
|
1067
|
+
opacity: 0;
|
|
1068
|
+
transform: translateY(10px);
|
|
1069
|
+
}
|
|
1070
|
+
to {
|
|
1071
|
+
opacity: 1;
|
|
1072
|
+
transform: translateY(0);
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
`,
|
|
1076
|
+
pluginMarketplaceHeader: css2`
|
|
1077
|
+
margin-bottom: 2rem;
|
|
1078
|
+
padding-bottom: 1rem;
|
|
1079
|
+
border-bottom: 2px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1080
|
+
`,
|
|
1081
|
+
pluginMarketplaceTitleRow: css2`
|
|
1082
|
+
display: flex;
|
|
1083
|
+
align-items: center;
|
|
1084
|
+
justify-content: space-between;
|
|
1085
|
+
gap: 2rem;
|
|
1086
|
+
margin-bottom: 0.5rem;
|
|
1087
|
+
`,
|
|
1088
|
+
pluginMarketplaceTitle: css2`
|
|
1089
|
+
font-size: 1.5rem;
|
|
1090
|
+
font-weight: 700;
|
|
1091
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1092
|
+
margin: 0;
|
|
1093
|
+
letter-spacing: -0.02em;
|
|
1094
|
+
`,
|
|
1095
|
+
pluginMarketplaceDescription: css2`
|
|
1096
|
+
font-size: 0.95rem;
|
|
1097
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1098
|
+
margin: 0 0 1rem 0;
|
|
1099
|
+
line-height: 1.5;
|
|
1100
|
+
`,
|
|
1101
|
+
pluginMarketplaceSearchWrapper: css2`
|
|
1102
|
+
position: relative;
|
|
1103
|
+
display: flex;
|
|
1104
|
+
align-items: center;
|
|
1105
|
+
max-width: 400px;
|
|
1106
|
+
flex-shrink: 0;
|
|
1107
|
+
|
|
1108
|
+
svg {
|
|
1109
|
+
position: absolute;
|
|
1110
|
+
left: 1rem;
|
|
1111
|
+
color: ${t(colors.gray[400], colors.gray[500])};
|
|
1112
|
+
pointer-events: none;
|
|
1113
|
+
}
|
|
1114
|
+
`,
|
|
1115
|
+
pluginMarketplaceSearch: css2`
|
|
1116
|
+
width: 100%;
|
|
1117
|
+
padding: 0.75rem 1rem 0.75rem 2.75rem;
|
|
1118
|
+
background: ${t(colors.gray[50], colors.darkGray[900])};
|
|
1119
|
+
border: 2px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1120
|
+
border-radius: 0.5rem;
|
|
1121
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1122
|
+
font-size: 0.875rem;
|
|
1123
|
+
font-family: ${fontFamily.sans};
|
|
1124
|
+
transition: all 0.2s ease;
|
|
1125
|
+
|
|
1126
|
+
&::placeholder {
|
|
1127
|
+
color: ${t(colors.gray[400], colors.gray[500])};
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
&:focus {
|
|
1131
|
+
outline: none;
|
|
1132
|
+
border-color: ${t(colors.blue[500], colors.blue[400])};
|
|
1133
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
1134
|
+
box-shadow: 0 0 0 3px
|
|
1135
|
+
${t("rgba(59, 130, 246, 0.1)", "rgba(96, 165, 250, 0.1)")};
|
|
1136
|
+
}
|
|
1137
|
+
`,
|
|
1138
|
+
pluginMarketplaceFilters: css2`
|
|
1139
|
+
margin-top: 1.5rem;
|
|
1140
|
+
padding-top: 1rem;
|
|
1141
|
+
`,
|
|
1142
|
+
pluginMarketplaceTagsContainer: css2`
|
|
1143
|
+
display: flex;
|
|
1144
|
+
flex-wrap: wrap;
|
|
1145
|
+
gap: 0.5rem;
|
|
1146
|
+
margin-top: 1.5rem;
|
|
1147
|
+
padding: 1rem;
|
|
1148
|
+
background: ${t(colors.gray[50], colors.darkGray[800])};
|
|
1149
|
+
border: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1150
|
+
border-radius: 0.5rem;
|
|
1151
|
+
`,
|
|
1152
|
+
pluginMarketplaceTagButton: css2`
|
|
1153
|
+
padding: 0.5rem 1rem;
|
|
1154
|
+
font-size: 0.875rem;
|
|
1155
|
+
font-weight: 500;
|
|
1156
|
+
background: ${t(colors.white, colors.darkGray[700])};
|
|
1157
|
+
border: 2px solid ${t(colors.gray[300], colors.gray[600])};
|
|
1158
|
+
border-radius: 0.375rem;
|
|
1159
|
+
color: ${t(colors.gray[700], colors.gray[300])};
|
|
1160
|
+
cursor: pointer;
|
|
1161
|
+
transition: all 0.15s ease;
|
|
1162
|
+
|
|
1163
|
+
&:hover {
|
|
1164
|
+
background: ${t(colors.gray[100], colors.darkGray[600])};
|
|
1165
|
+
border-color: ${t(colors.gray[400], colors.gray[500])};
|
|
1166
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1167
|
+
}
|
|
1168
|
+
`,
|
|
1169
|
+
pluginMarketplaceTagButtonActive: css2`
|
|
1170
|
+
background: ${t(
|
|
1171
|
+
"linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)",
|
|
1172
|
+
"linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%)"
|
|
1173
|
+
)} !important;
|
|
1174
|
+
border-color: ${t("#2563eb", "#3b82f6")} !important;
|
|
1175
|
+
color: white !important;
|
|
1176
|
+
|
|
1177
|
+
&:hover {
|
|
1178
|
+
background: ${t(
|
|
1179
|
+
"linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%)",
|
|
1180
|
+
"linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)"
|
|
1181
|
+
)} !important;
|
|
1182
|
+
border-color: ${t("#1d4ed8", "#2563eb")} !important;
|
|
1183
|
+
}
|
|
1184
|
+
`,
|
|
1185
|
+
pluginMarketplaceSettingsButton: css2`
|
|
1186
|
+
display: flex;
|
|
1187
|
+
align-items: center;
|
|
1188
|
+
justify-content: center;
|
|
1189
|
+
padding: 0.75rem;
|
|
1190
|
+
background: ${t(colors.gray[100], colors.darkGray[800])};
|
|
1191
|
+
border: 2px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1192
|
+
border-radius: 0.5rem;
|
|
1193
|
+
color: ${t(colors.gray[700], colors.gray[300])};
|
|
1194
|
+
cursor: pointer;
|
|
1195
|
+
transition: all 0.2s ease;
|
|
1196
|
+
margin-left: 0.5rem;
|
|
1197
|
+
|
|
1198
|
+
&:hover {
|
|
1199
|
+
background: ${t(colors.gray[200], colors.darkGray[700])};
|
|
1200
|
+
border-color: ${t(colors.gray[300], colors.gray[600])};
|
|
1201
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
&:active {
|
|
1205
|
+
transform: scale(0.95);
|
|
1206
|
+
}
|
|
1207
|
+
`,
|
|
1208
|
+
pluginMarketplaceSettingsPanel: css2`
|
|
1209
|
+
position: fixed;
|
|
1210
|
+
top: 0;
|
|
1211
|
+
right: 0;
|
|
1212
|
+
bottom: 0;
|
|
1213
|
+
width: 350px;
|
|
1214
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
1215
|
+
border-left: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1216
|
+
box-shadow: -4px 0 12px ${t("rgba(0, 0, 0, 0.1)", "rgba(0, 0, 0, 0.4)")};
|
|
1217
|
+
z-index: 1000;
|
|
1218
|
+
display: flex;
|
|
1219
|
+
flex-direction: column;
|
|
1220
|
+
animation: slideInRight 0.3s ease;
|
|
1221
|
+
|
|
1222
|
+
@keyframes slideInRight {
|
|
1223
|
+
from {
|
|
1224
|
+
transform: translateX(100%);
|
|
1225
|
+
}
|
|
1226
|
+
to {
|
|
1227
|
+
transform: translateX(0);
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
`,
|
|
1231
|
+
pluginMarketplaceSettingsPanelHeader: css2`
|
|
1232
|
+
display: flex;
|
|
1233
|
+
align-items: center;
|
|
1234
|
+
justify-content: space-between;
|
|
1235
|
+
padding: 1.5rem;
|
|
1236
|
+
border-bottom: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1237
|
+
`,
|
|
1238
|
+
pluginMarketplaceSettingsPanelTitle: css2`
|
|
1239
|
+
font-size: 1.125rem;
|
|
1240
|
+
font-weight: 600;
|
|
1241
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1242
|
+
margin: 0;
|
|
1243
|
+
`,
|
|
1244
|
+
pluginMarketplaceSettingsPanelClose: css2`
|
|
1245
|
+
display: flex;
|
|
1246
|
+
align-items: center;
|
|
1247
|
+
justify-content: center;
|
|
1248
|
+
padding: 0.5rem;
|
|
1249
|
+
background: transparent;
|
|
1250
|
+
border: none;
|
|
1251
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1252
|
+
cursor: pointer;
|
|
1253
|
+
border-radius: 0.375rem;
|
|
1254
|
+
transition: all 0.15s ease;
|
|
1255
|
+
|
|
1256
|
+
&:hover {
|
|
1257
|
+
background: ${t(colors.gray[100], colors.darkGray[700])};
|
|
1258
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1259
|
+
}
|
|
1260
|
+
`,
|
|
1261
|
+
pluginMarketplaceSettingsPanelContent: css2`
|
|
1262
|
+
flex: 1;
|
|
1263
|
+
padding: 1.5rem;
|
|
1264
|
+
overflow-y: auto;
|
|
1265
|
+
`,
|
|
1266
|
+
pluginMarketplaceGrid: css2`
|
|
1267
|
+
display: grid;
|
|
1268
|
+
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
1269
|
+
gap: 1.25rem;
|
|
1270
|
+
animation: slideUp 0.4s ease;
|
|
1271
|
+
|
|
1272
|
+
@keyframes slideUp {
|
|
1273
|
+
from {
|
|
1274
|
+
opacity: 0;
|
|
1275
|
+
transform: translateY(20px);
|
|
1276
|
+
}
|
|
1277
|
+
to {
|
|
1278
|
+
opacity: 1;
|
|
1279
|
+
transform: translateY(0);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
`,
|
|
1283
|
+
pluginMarketplaceCard: css2`
|
|
1284
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
1285
|
+
border: 2px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1286
|
+
border-radius: 0.75rem;
|
|
1287
|
+
padding: 1.5rem;
|
|
1288
|
+
display: flex;
|
|
1289
|
+
flex-direction: column;
|
|
1290
|
+
gap: 1rem;
|
|
1291
|
+
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
|
|
1292
|
+
position: relative;
|
|
1293
|
+
overflow: hidden;
|
|
1294
|
+
|
|
1295
|
+
&::before {
|
|
1296
|
+
content: '';
|
|
1297
|
+
position: absolute;
|
|
1298
|
+
top: 0;
|
|
1299
|
+
left: 0;
|
|
1300
|
+
right: 0;
|
|
1301
|
+
height: 3px;
|
|
1302
|
+
background: ${t(
|
|
1303
|
+
"linear-gradient(90deg, #3b82f6 0%, #8b5cf6 100%)",
|
|
1304
|
+
"linear-gradient(90deg, #60a5fa 0%, #a78bfa 100%)"
|
|
1305
|
+
)};
|
|
1306
|
+
transform: scaleX(0);
|
|
1307
|
+
transform-origin: left;
|
|
1308
|
+
transition: transform 0.25s ease;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
&:hover {
|
|
1312
|
+
border-color: ${t(colors.gray[400], colors.gray[500])};
|
|
1313
|
+
box-shadow: 0 8px 24px ${t("rgba(0,0,0,0.1)", "rgba(0,0,0,0.4)")};
|
|
1314
|
+
transform: translateY(-4px);
|
|
1315
|
+
|
|
1316
|
+
&::before {
|
|
1317
|
+
transform: scaleX(1);
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
`,
|
|
1321
|
+
pluginMarketplaceCardIcon: css2`
|
|
1322
|
+
width: 40px;
|
|
1323
|
+
height: 40px;
|
|
1324
|
+
display: flex;
|
|
1325
|
+
align-items: center;
|
|
1326
|
+
justify-content: center;
|
|
1327
|
+
background: ${t(
|
|
1328
|
+
"linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%)",
|
|
1329
|
+
"linear-gradient(135deg, #60a5fa 0%, #a78bfa 100%)"
|
|
1330
|
+
)};
|
|
1331
|
+
border-radius: 0.5rem;
|
|
1332
|
+
color: white;
|
|
1333
|
+
transition: transform 0.25s ease;
|
|
1334
|
+
|
|
1335
|
+
svg {
|
|
1336
|
+
width: 20px;
|
|
1337
|
+
height: 20px;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
&.custom-logo {
|
|
1341
|
+
}
|
|
1342
|
+
`,
|
|
1343
|
+
pluginMarketplaceCardHeader: css2`
|
|
1344
|
+
flex: 1;
|
|
1345
|
+
`,
|
|
1346
|
+
pluginMarketplaceCardTitle: css2`
|
|
1347
|
+
font-size: 0.95rem;
|
|
1348
|
+
font-weight: 600;
|
|
1349
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1350
|
+
margin: 0 0 0.5rem 0;
|
|
1351
|
+
line-height: 1.4;
|
|
1352
|
+
`,
|
|
1353
|
+
pluginMarketplaceCardDescription: css2`
|
|
1354
|
+
font-size: 0.8rem;
|
|
1355
|
+
color: ${t(colors.gray[500], colors.gray[500])};
|
|
1356
|
+
margin: 0;
|
|
1357
|
+
padding: 0;
|
|
1358
|
+
background: transparent;
|
|
1359
|
+
border-radius: 0.375rem;
|
|
1360
|
+
display: block;
|
|
1361
|
+
font-weight: 500;
|
|
1362
|
+
`,
|
|
1363
|
+
pluginMarketplaceCardPackageBadge: css2`
|
|
1364
|
+
margin-top: 4px;
|
|
1365
|
+
margin-bottom: 8px;
|
|
1366
|
+
font-size: 0.6875rem;
|
|
1367
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
1368
|
+
opacity: 0.6;
|
|
1369
|
+
padding: 4px 8px;
|
|
1370
|
+
padding-left: 0;
|
|
1371
|
+
background-color: var(--bg-tertiary);
|
|
1372
|
+
border-radius: 4px;
|
|
1373
|
+
word-break: break-all;
|
|
1374
|
+
display: inline-block;
|
|
1375
|
+
`,
|
|
1376
|
+
pluginMarketplaceCardDescriptionText: css2`
|
|
1377
|
+
line-height: 1.5;
|
|
1378
|
+
margin-top: 0;
|
|
1379
|
+
`,
|
|
1380
|
+
pluginMarketplaceCardVersionInfo: css2`
|
|
1381
|
+
margin-top: 8px;
|
|
1382
|
+
font-size: 0.6875rem;
|
|
1383
|
+
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
|
1384
|
+
`,
|
|
1385
|
+
pluginMarketplaceCardVersionSatisfied: css2`
|
|
1386
|
+
color: ${t(colors.green[600], colors.green[400])};
|
|
1387
|
+
`,
|
|
1388
|
+
pluginMarketplaceCardVersionUnsatisfied: css2`
|
|
1389
|
+
color: ${t(colors.red[600], colors.red[400])};
|
|
1390
|
+
`,
|
|
1391
|
+
pluginMarketplaceCardDocsLink: css2`
|
|
1392
|
+
display: inline-flex;
|
|
1393
|
+
align-items: center;
|
|
1394
|
+
gap: 0.25rem;
|
|
1395
|
+
font-size: 0.75rem;
|
|
1396
|
+
color: ${t(colors.blue[600], colors.blue[400])};
|
|
1397
|
+
text-decoration: none;
|
|
1398
|
+
margin-top: 0.5rem;
|
|
1399
|
+
transition: color 0.15s ease;
|
|
1400
|
+
|
|
1401
|
+
&:hover {
|
|
1402
|
+
color: ${t(colors.blue[700], colors.blue[300])};
|
|
1403
|
+
text-decoration: underline;
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
svg {
|
|
1407
|
+
width: 12px;
|
|
1408
|
+
height: 12px;
|
|
1409
|
+
}
|
|
1410
|
+
`,
|
|
1411
|
+
pluginMarketplaceCardTags: css2`
|
|
1412
|
+
display: flex;
|
|
1413
|
+
flex-wrap: wrap;
|
|
1414
|
+
gap: 0.375rem;
|
|
1415
|
+
margin-top: 0.75rem;
|
|
1416
|
+
`,
|
|
1417
|
+
pluginMarketplaceCardTag: css2`
|
|
1418
|
+
font-size: 0.6875rem;
|
|
1419
|
+
font-weight: 500;
|
|
1420
|
+
padding: 0.25rem 0.5rem;
|
|
1421
|
+
background: ${t(colors.gray[100], colors.darkGray[700])};
|
|
1422
|
+
border: 1px solid ${t(colors.gray[300], colors.gray[600])};
|
|
1423
|
+
border-radius: 0.25rem;
|
|
1424
|
+
color: ${t(colors.gray[700], colors.gray[300])};
|
|
1425
|
+
`,
|
|
1426
|
+
pluginMarketplaceCardImage: css2`
|
|
1427
|
+
width: 28px;
|
|
1428
|
+
height: 28px;
|
|
1429
|
+
object-fit: contain;
|
|
1430
|
+
`,
|
|
1431
|
+
pluginMarketplaceNewBanner: css2`
|
|
1432
|
+
position: absolute;
|
|
1433
|
+
top: 12px;
|
|
1434
|
+
right: -35px;
|
|
1435
|
+
background-color: ${t(colors.green[500], colors.green[500])};
|
|
1436
|
+
color: white;
|
|
1437
|
+
padding: 4px 40px;
|
|
1438
|
+
font-size: 0.6875rem;
|
|
1439
|
+
font-weight: bold;
|
|
1440
|
+
text-transform: uppercase;
|
|
1441
|
+
transform: rotate(45deg);
|
|
1442
|
+
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.5);
|
|
1443
|
+
z-index: 10;
|
|
1444
|
+
letter-spacing: 0.5px;
|
|
1445
|
+
`,
|
|
1446
|
+
pluginMarketplaceCardFeatured: css2`
|
|
1447
|
+
border-color: ${t(colors.blue[500], colors.blue[400])};
|
|
1448
|
+
border-width: 2px;
|
|
1449
|
+
`,
|
|
1450
|
+
pluginMarketplaceCardActive: css2`
|
|
1451
|
+
border-color: ${t(colors.green[500], colors.green[600])};
|
|
1452
|
+
border-width: 2px;
|
|
1453
|
+
|
|
1454
|
+
&:hover {
|
|
1455
|
+
border-color: ${t(colors.green[500], colors.green[600])};
|
|
1456
|
+
box-shadow: none;
|
|
1457
|
+
transform: none;
|
|
1458
|
+
|
|
1459
|
+
&::before {
|
|
1460
|
+
transform: scaleX(0);
|
|
1461
|
+
}
|
|
1462
|
+
}
|
|
1463
|
+
`,
|
|
1464
|
+
pluginMarketplaceCardStatus: css2`
|
|
1465
|
+
display: flex;
|
|
1466
|
+
align-items: center;
|
|
1467
|
+
gap: 0.5rem;
|
|
1468
|
+
color: ${t(colors.green[600], colors.green[400])};
|
|
1469
|
+
animation: statusFadeIn 0.3s ease;
|
|
1470
|
+
|
|
1471
|
+
@keyframes statusFadeIn {
|
|
1472
|
+
from {
|
|
1473
|
+
opacity: 0;
|
|
1474
|
+
}
|
|
1475
|
+
to {
|
|
1476
|
+
opacity: 1;
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
svg {
|
|
1481
|
+
width: 18px;
|
|
1482
|
+
height: 18px;
|
|
1483
|
+
animation: iconPop 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
@keyframes iconPop {
|
|
1487
|
+
0% {
|
|
1488
|
+
transform: scale(0);
|
|
1489
|
+
}
|
|
1490
|
+
50% {
|
|
1491
|
+
transform: scale(1.2);
|
|
1492
|
+
}
|
|
1493
|
+
100% {
|
|
1494
|
+
transform: scale(1);
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
`,
|
|
1498
|
+
pluginMarketplaceCardSpinner: css2`
|
|
1499
|
+
width: 18px;
|
|
1500
|
+
height: 18px;
|
|
1501
|
+
border: 2px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1502
|
+
border-top-color: ${t(colors.blue[600], colors.blue[400])};
|
|
1503
|
+
border-radius: 50%;
|
|
1504
|
+
animation: spin 0.8s linear infinite;
|
|
1505
|
+
|
|
1506
|
+
@keyframes spin {
|
|
1507
|
+
to {
|
|
1508
|
+
transform: rotate(360deg);
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
`,
|
|
1512
|
+
pluginMarketplaceCardStatusText: css2`
|
|
1513
|
+
font-size: 0.875rem;
|
|
1514
|
+
font-weight: 600;
|
|
1515
|
+
`,
|
|
1516
|
+
pluginMarketplaceCardStatusTextError: css2`
|
|
1517
|
+
font-size: 0.875rem;
|
|
1518
|
+
font-weight: 600;
|
|
1519
|
+
color: ${t(colors.red[600], colors.red[400])};
|
|
1520
|
+
`,
|
|
1521
|
+
pluginMarketplaceEmpty: css2`
|
|
1522
|
+
padding: 3rem 2rem;
|
|
1523
|
+
text-align: center;
|
|
1524
|
+
background: ${t(colors.white, colors.darkGray[800])};
|
|
1525
|
+
border: 2px dashed ${t(colors.gray[300], colors.gray[700])};
|
|
1526
|
+
border-radius: 0.75rem;
|
|
1527
|
+
animation: fadeIn 0.3s ease;
|
|
1528
|
+
`,
|
|
1529
|
+
pluginMarketplaceEmptyText: css2`
|
|
1530
|
+
font-size: 0.95rem;
|
|
1531
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1532
|
+
margin: 0;
|
|
1533
|
+
line-height: 1.6;
|
|
1534
|
+
`,
|
|
1535
|
+
// Framework sections
|
|
1536
|
+
pluginMarketplaceSection: css2`
|
|
1537
|
+
margin-bottom: 2.5rem;
|
|
1538
|
+
|
|
1539
|
+
&:last-child {
|
|
1540
|
+
margin-bottom: 0;
|
|
1541
|
+
}
|
|
1542
|
+
`,
|
|
1543
|
+
pluginMarketplaceSectionHeader: css2`
|
|
1544
|
+
margin-bottom: 1rem;
|
|
1545
|
+
padding: 1rem 1.25rem;
|
|
1546
|
+
display: flex;
|
|
1547
|
+
align-items: center;
|
|
1548
|
+
gap: 0.75rem;
|
|
1549
|
+
cursor: pointer;
|
|
1550
|
+
user-select: none;
|
|
1551
|
+
background: ${t(colors.gray[50], colors.darkGray[800])};
|
|
1552
|
+
border: 1px solid ${t(colors.gray[200], colors.gray[700])};
|
|
1553
|
+
border-radius: 0.5rem;
|
|
1554
|
+
transition: all 0.15s ease;
|
|
1555
|
+
|
|
1556
|
+
&:hover {
|
|
1557
|
+
background: ${t(colors.gray[100], colors.darkGray[700])};
|
|
1558
|
+
border-color: ${t(colors.gray[300], colors.gray[600])};
|
|
1559
|
+
}
|
|
1560
|
+
`,
|
|
1561
|
+
pluginMarketplaceSectionHeaderLeft: css2`
|
|
1562
|
+
display: flex;
|
|
1563
|
+
align-items: center;
|
|
1564
|
+
gap: 0.5rem;
|
|
1565
|
+
`,
|
|
1566
|
+
pluginMarketplaceSectionChevron: css2`
|
|
1567
|
+
width: 24px;
|
|
1568
|
+
height: 24px;
|
|
1569
|
+
display: flex;
|
|
1570
|
+
align-items: center;
|
|
1571
|
+
justify-content: center;
|
|
1572
|
+
color: ${t(colors.gray[700], colors.gray[300])};
|
|
1573
|
+
transition: transform 0.2s ease;
|
|
1574
|
+
`,
|
|
1575
|
+
pluginMarketplaceSectionChevronCollapsed: css2`
|
|
1576
|
+
transform: rotate(-90deg);
|
|
1577
|
+
`,
|
|
1578
|
+
pluginMarketplaceSectionTitle: css2`
|
|
1579
|
+
font-size: 1.25rem;
|
|
1580
|
+
font-weight: 700;
|
|
1581
|
+
color: ${t(colors.gray[900], colors.gray[50])};
|
|
1582
|
+
margin: 0;
|
|
1583
|
+
display: flex;
|
|
1584
|
+
align-items: center;
|
|
1585
|
+
gap: 0.5rem;
|
|
1586
|
+
`,
|
|
1587
|
+
pluginMarketplaceSectionBadge: css2`
|
|
1588
|
+
font-size: 0.75rem;
|
|
1589
|
+
font-weight: 600;
|
|
1590
|
+
padding: 0.25rem 0.5rem;
|
|
1591
|
+
background: ${t(
|
|
1592
|
+
"linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)",
|
|
1593
|
+
"linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%)"
|
|
1594
|
+
)};
|
|
1595
|
+
color: white;
|
|
1596
|
+
border-radius: 0.25rem;
|
|
1597
|
+
text-transform: uppercase;
|
|
1598
|
+
letter-spacing: 0.05em;
|
|
1599
|
+
`,
|
|
1600
|
+
pluginMarketplaceCardDisabled: css2`
|
|
1601
|
+
opacity: 0.6;
|
|
1602
|
+
filter: grayscale(0.3);
|
|
1603
|
+
cursor: not-allowed;
|
|
1604
|
+
|
|
1605
|
+
&:hover {
|
|
1606
|
+
transform: none;
|
|
1607
|
+
box-shadow: none;
|
|
1608
|
+
}
|
|
1609
|
+
`,
|
|
1610
|
+
// Card state badges
|
|
1611
|
+
pluginMarketplaceCardBadge: css2`
|
|
1612
|
+
position: absolute;
|
|
1613
|
+
top: 1rem;
|
|
1614
|
+
right: 1rem;
|
|
1615
|
+
padding: 0.25rem 0.5rem;
|
|
1616
|
+
font-size: 0.65rem;
|
|
1617
|
+
font-weight: 600;
|
|
1618
|
+
text-transform: uppercase;
|
|
1619
|
+
border-radius: 0.25rem;
|
|
1620
|
+
letter-spacing: 0.05em;
|
|
1621
|
+
`,
|
|
1622
|
+
pluginMarketplaceCardBadgeInstall: css2`
|
|
1623
|
+
background: ${t(colors.green[100], colors.green[900])};
|
|
1624
|
+
color: ${t(colors.green[700], colors.green[300])};
|
|
1625
|
+
`,
|
|
1626
|
+
pluginMarketplaceCardBadgeAdd: css2`
|
|
1627
|
+
background: ${t(colors.blue[100], colors.blue[900])};
|
|
1628
|
+
color: ${t(colors.blue[700], colors.blue[300])};
|
|
1629
|
+
`,
|
|
1630
|
+
pluginMarketplaceCardBadgeRequires: css2`
|
|
1631
|
+
background: ${t(colors.gray[100], colors.gray[800])};
|
|
1632
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1633
|
+
`,
|
|
1634
|
+
// Button style for already installed plugins
|
|
1635
|
+
pluginMarketplaceButtonInstalled: css2`
|
|
1636
|
+
opacity: 0.5;
|
|
1637
|
+
`,
|
|
1638
|
+
// Add More Tab Style (visually distinct from regular plugins)
|
|
1639
|
+
pluginNameAddMore: css2`
|
|
1640
|
+
font-size: ${fontSize.xs};
|
|
1641
|
+
font-family: ${fontFamily.sans};
|
|
1642
|
+
color: ${t(colors.gray[600], colors.gray[400])};
|
|
1643
|
+
padding: ${size[3]} ${size[2]};
|
|
1644
|
+
cursor: pointer;
|
|
1645
|
+
text-align: center;
|
|
1646
|
+
transition: all 0.15s ease;
|
|
1647
|
+
border-left: 2px solid transparent;
|
|
1648
|
+
background: ${t(
|
|
1649
|
+
"linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)",
|
|
1650
|
+
"linear-gradient(135deg, #1f2937 0%, #111827 100%)"
|
|
1651
|
+
)};
|
|
1652
|
+
font-weight: 600;
|
|
1653
|
+
position: relative;
|
|
1654
|
+
margin-top: auto;
|
|
1655
|
+
|
|
1656
|
+
h3 {
|
|
1657
|
+
margin: 0;
|
|
1658
|
+
display: flex;
|
|
1659
|
+
align-items: center;
|
|
1660
|
+
justify-content: center;
|
|
1661
|
+
gap: 0.25rem;
|
|
1662
|
+
|
|
1663
|
+
&::before {
|
|
1664
|
+
content: '✨';
|
|
1665
|
+
font-size: 0.875rem;
|
|
1666
|
+
animation: sparkle 2s ease-in-out infinite;
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
@keyframes sparkle {
|
|
1671
|
+
0%,
|
|
1672
|
+
100% {
|
|
1673
|
+
opacity: 1;
|
|
1674
|
+
transform: scale(1) rotate(0deg);
|
|
1675
|
+
}
|
|
1676
|
+
50% {
|
|
1677
|
+
opacity: 0.6;
|
|
1678
|
+
transform: scale(1.1) rotate(10deg);
|
|
1679
|
+
}
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
&:hover {
|
|
1683
|
+
background: ${t(
|
|
1684
|
+
"linear-gradient(135deg, #e9ecef 0%, #dee2e6 100%)",
|
|
1685
|
+
"linear-gradient(135deg, #374151 0%, #1f2937 100%)"
|
|
1686
|
+
)};
|
|
1687
|
+
color: ${t(colors.gray[900], colors.gray[100])};
|
|
1688
|
+
border-left-color: ${t(colors.blue[500], colors.blue[400])};
|
|
1689
|
+
|
|
1690
|
+
h3::before {
|
|
1691
|
+
animation: sparkle 0.5s ease-in-out infinite;
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
&.active {
|
|
1696
|
+
background: ${t(
|
|
1697
|
+
"linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)",
|
|
1698
|
+
"linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%)"
|
|
1699
|
+
)};
|
|
1700
|
+
color: ${t(colors.white, colors.white)};
|
|
1701
|
+
border-left: 2px solid ${t(colors.blue[600], colors.blue[300])};
|
|
1702
|
+
box-shadow: 0 4px 12px
|
|
1703
|
+
${t("rgba(59, 130, 246, 0.3)", "rgba(96, 165, 250, 0.3)")};
|
|
1704
|
+
|
|
1705
|
+
h3::before {
|
|
1706
|
+
filter: brightness(0) invert(1);
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
&.active:hover {
|
|
1711
|
+
background: ${t(
|
|
1712
|
+
"linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%)",
|
|
1713
|
+
"linear-gradient(135deg, #3b82f6 0%, #2563eb 100%)"
|
|
1714
|
+
)};
|
|
1715
|
+
}
|
|
890
1716
|
`
|
|
891
1717
|
};
|
|
892
1718
|
};
|
|
@@ -1222,13 +2048,881 @@ var SettingsTab = () => {
|
|
|
1222
2048
|
})
|
|
1223
2049
|
})))];
|
|
1224
2050
|
}
|
|
1225
|
-
})];
|
|
2051
|
+
})];
|
|
2052
|
+
}
|
|
2053
|
+
});
|
|
2054
|
+
};
|
|
2055
|
+
|
|
2056
|
+
// src/tabs/marketplace/card-utils.ts
|
|
2057
|
+
var getButtonText = (card) => {
|
|
2058
|
+
if (card.status === "installing") return "Installing...";
|
|
2059
|
+
if (card.status === "success") return "Installed!";
|
|
2060
|
+
if (card.status === "error") return "Error";
|
|
2061
|
+
switch (card.actionType) {
|
|
2062
|
+
case "install":
|
|
2063
|
+
return "Install";
|
|
2064
|
+
case "install-devtools":
|
|
2065
|
+
return "Install Devtools";
|
|
2066
|
+
case "add-to-devtools":
|
|
2067
|
+
return "Add to Devtools";
|
|
2068
|
+
case "requires-package":
|
|
2069
|
+
return `Requires ${card.requiredPackageName}`;
|
|
2070
|
+
case "wrong-framework":
|
|
2071
|
+
return "Different Framework";
|
|
2072
|
+
case "already-installed":
|
|
2073
|
+
return "Already Installed";
|
|
2074
|
+
case "bump-version":
|
|
2075
|
+
return "Bump Version";
|
|
2076
|
+
case "version-mismatch":
|
|
2077
|
+
return "Version Mismatch";
|
|
2078
|
+
default:
|
|
2079
|
+
return "Install";
|
|
2080
|
+
}
|
|
2081
|
+
};
|
|
2082
|
+
var getButtonVariant = (card) => {
|
|
2083
|
+
if (card.actionType === "requires-package" || card.actionType === "wrong-framework" || card.actionType === "version-mismatch")
|
|
2084
|
+
return "danger";
|
|
2085
|
+
if (card.actionType === "bump-version") return "warning";
|
|
2086
|
+
if (card.actionType === "already-installed") return "secondary";
|
|
2087
|
+
return "primary";
|
|
2088
|
+
};
|
|
2089
|
+
var getBadgeClass = (card, styles) => {
|
|
2090
|
+
const s = styles();
|
|
2091
|
+
const base = s.pluginMarketplaceCardBadge;
|
|
2092
|
+
switch (card.actionType) {
|
|
2093
|
+
case "install":
|
|
2094
|
+
case "install-devtools":
|
|
2095
|
+
return `${base} ${s.pluginMarketplaceCardBadgeInstall}`;
|
|
2096
|
+
case "add-to-devtools":
|
|
2097
|
+
return `${base} ${s.pluginMarketplaceCardBadgeAdd}`;
|
|
2098
|
+
case "already-installed":
|
|
2099
|
+
return `${base} ${s.pluginMarketplaceCardBadgeAdd}`;
|
|
2100
|
+
case "bump-version":
|
|
2101
|
+
return `${base} ${s.pluginMarketplaceCardBadgeRequires}`;
|
|
2102
|
+
case "version-mismatch":
|
|
2103
|
+
return `${base} ${s.pluginMarketplaceCardBadgeRequires}`;
|
|
2104
|
+
case "requires-package":
|
|
2105
|
+
case "wrong-framework":
|
|
2106
|
+
return `${base} ${s.pluginMarketplaceCardBadgeRequires}`;
|
|
2107
|
+
default:
|
|
2108
|
+
return base;
|
|
2109
|
+
}
|
|
2110
|
+
};
|
|
2111
|
+
var getBadgeText = (card) => {
|
|
2112
|
+
switch (card.actionType) {
|
|
2113
|
+
case "install":
|
|
2114
|
+
case "install-devtools":
|
|
2115
|
+
return "Available";
|
|
2116
|
+
case "add-to-devtools":
|
|
2117
|
+
return "Installed";
|
|
2118
|
+
case "already-installed":
|
|
2119
|
+
return "Active";
|
|
2120
|
+
case "version-mismatch":
|
|
2121
|
+
return "Incompatible";
|
|
2122
|
+
case "requires-package":
|
|
2123
|
+
return "Unavailable";
|
|
2124
|
+
case "wrong-framework":
|
|
2125
|
+
return "Other Framework";
|
|
2126
|
+
default:
|
|
2127
|
+
return "";
|
|
2128
|
+
}
|
|
2129
|
+
};
|
|
2130
|
+
|
|
2131
|
+
// src/tabs/marketplace/plugin-card.tsx
|
|
2132
|
+
var _tmpl$6 = ["<div", ">New</div>"];
|
|
2133
|
+
var _tmpl$24 = ["<img", ">"];
|
|
2134
|
+
var _tmpl$33 = ["<span", ">\u2713 v", " \u2022 Min v", "</span>"];
|
|
2135
|
+
var _tmpl$43 = ["<p", ">", "</p>"];
|
|
2136
|
+
var _tmpl$52 = ["<a", ' target="_blank" rel="noopener noreferrer"', ">Documentation ", "</a>"];
|
|
2137
|
+
var _tmpl$62 = ["<div", ">", "</div>"];
|
|
2138
|
+
var _tmpl$7 = ['<div class="', '" style="', '">', "<span", ">", '</span><div class="', '">', "</div><div", "><h3", ">", "</h3><p", ">", "</p><p", ">", "</p>", "", "", "</div>", "</div>"];
|
|
2139
|
+
var _tmpl$8 = ["<span", ">\u26A0\uFE0F v", " \u2022 Requires v", "+</span>"];
|
|
2140
|
+
var _tmpl$9 = ["<span", ">", "</span>"];
|
|
2141
|
+
var _tmpl$0 = ["<div", "></div>"];
|
|
2142
|
+
var _tmpl$1 = ["<span", ">Installing...</span>"];
|
|
2143
|
+
var _tmpl$10 = ["<span", ">Installed!</span>"];
|
|
2144
|
+
var _tmpl$11 = ["<div", ">", "", "", "</div>"];
|
|
2145
|
+
var PluginCardComponent = (props) => {
|
|
2146
|
+
const styles = useStyles();
|
|
2147
|
+
const {
|
|
2148
|
+
card
|
|
2149
|
+
} = props;
|
|
2150
|
+
return ssr(_tmpl$7, `${escape(styles().pluginMarketplaceCard, true) || ""} ${!card.isCurrentFramework && card.actionType !== "already-installed" ? escape(escape(styles().pluginMarketplaceCardDisabled, true), true) : ""} ${!!card.metadata?.featured && card.actionType !== "already-installed" ? escape(escape(styles().pluginMarketplaceCardFeatured, true), true) : ""} ${card.actionType === "already-installed" ? escape(escape(styles().pluginMarketplaceCardActive, true), true) : ""}`, "position:relative", escape(createComponent(Show, {
|
|
2151
|
+
get when() {
|
|
2152
|
+
return card.metadata?.isNew;
|
|
2153
|
+
},
|
|
2154
|
+
get children() {
|
|
2155
|
+
return ssr(_tmpl$6, ssrAttribute("class", escape(styles().pluginMarketplaceNewBanner, true), false));
|
|
2156
|
+
}
|
|
2157
|
+
})), ssrAttribute("class", escape(getBadgeClass(card, styles), true), false), escape(getBadgeText(card)), `${escape(styles().pluginMarketplaceCardIcon, true) || ""} ${!!card.metadata?.logoUrl ? "custom-logo" : ""}`, escape(createComponent(Show, {
|
|
2158
|
+
get when() {
|
|
2159
|
+
return card.metadata?.logoUrl;
|
|
2160
|
+
},
|
|
2161
|
+
get fallback() {
|
|
2162
|
+
return createComponent(PackageIcon, {});
|
|
2163
|
+
},
|
|
2164
|
+
get children() {
|
|
2165
|
+
return ssr(_tmpl$24, ssrAttribute("src", escape(card.metadata?.logoUrl, true), false) + ssrAttribute("alt", escape(card.metadata?.title, true) || escape(card.devtoolsPackage, true), false) + ssrAttribute("class", escape(styles().pluginMarketplaceCardImage, true), false));
|
|
2166
|
+
}
|
|
2167
|
+
})), ssrAttribute("class", escape(styles().pluginMarketplaceCardHeader, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceCardTitle, true), false), escape(card.metadata?.title) || escape(card.devtoolsPackage), ssrAttribute("class", escape(styles().pluginMarketplaceCardPackageBadge, true), false), escape(card.devtoolsPackage), ssrAttribute("class", escape(styles().pluginMarketplaceCardDescriptionText, true), false), card.actionType === "requires-package" ? `Requires ${escape(card.requiredPackageName)}` : card.actionType === "wrong-framework" ? `For different framework projects` : card.actionType === "already-installed" ? `Active in your devtools` : card.actionType === "version-mismatch" ? escape(card.versionInfo?.reason) || "Version incompatible" : escape(card.metadata?.description) || `For ${escape(card.requiredPackageName)}`, escape(createComponent(Show, {
|
|
2168
|
+
get when() {
|
|
2169
|
+
return card.versionInfo;
|
|
2170
|
+
},
|
|
2171
|
+
get children() {
|
|
2172
|
+
return ssr(_tmpl$43, ssrAttribute("class", escape(styles().pluginMarketplaceCardVersionInfo, true), false), escape(createComponent(Show, {
|
|
2173
|
+
get when() {
|
|
2174
|
+
return card.versionInfo?.satisfied;
|
|
2175
|
+
},
|
|
2176
|
+
get fallback() {
|
|
2177
|
+
return ssr(_tmpl$8, ssrAttribute("class", escape(styles().pluginMarketplaceCardVersionUnsatisfied, true), false), escape(card.versionInfo?.current), escape(card.versionInfo?.required));
|
|
2178
|
+
},
|
|
2179
|
+
get children() {
|
|
2180
|
+
return ssr(_tmpl$33, ssrAttribute("class", escape(styles().pluginMarketplaceCardVersionSatisfied, true), false), escape(card.versionInfo?.current), escape(card.versionInfo?.required));
|
|
2181
|
+
}
|
|
2182
|
+
})));
|
|
2183
|
+
}
|
|
2184
|
+
})), escape(createComponent(Show, {
|
|
2185
|
+
get when() {
|
|
2186
|
+
return card.metadata?.docsUrl;
|
|
2187
|
+
},
|
|
2188
|
+
get children() {
|
|
2189
|
+
return ssr(_tmpl$52, ssrAttribute("href", escape(card.metadata?.docsUrl, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceCardDocsLink, true), false), escape(createComponent(ExternalLinkIcon, {})));
|
|
2190
|
+
}
|
|
2191
|
+
})), escape(createComponent(Show, {
|
|
2192
|
+
get when() {
|
|
2193
|
+
return card.metadata?.tags && card.metadata.tags.length > 0;
|
|
2194
|
+
},
|
|
2195
|
+
get children() {
|
|
2196
|
+
return ssr(_tmpl$62, ssrAttribute("class", escape(styles().pluginMarketplaceCardTags, true), false), escape(createComponent(For, {
|
|
2197
|
+
get each() {
|
|
2198
|
+
return card.metadata?.tags;
|
|
2199
|
+
},
|
|
2200
|
+
children: (tag) => ssr(_tmpl$9, ssrAttribute("class", escape(styles().pluginMarketplaceCardTag, true), false), escape(tag))
|
|
2201
|
+
})));
|
|
2202
|
+
}
|
|
2203
|
+
})), escape(createComponent(Show, {
|
|
2204
|
+
get when() {
|
|
2205
|
+
return card.status === "idle";
|
|
2206
|
+
},
|
|
2207
|
+
get fallback() {
|
|
2208
|
+
return ssr(_tmpl$11, ssrAttribute("class", escape(styles().pluginMarketplaceCardStatus, true), false), escape(createComponent(Show, {
|
|
2209
|
+
get when() {
|
|
2210
|
+
return card.status === "installing";
|
|
2211
|
+
},
|
|
2212
|
+
get children() {
|
|
2213
|
+
return [ssr(_tmpl$0, ssrAttribute("class", escape(styles().pluginMarketplaceCardSpinner, true), false)), ssr(_tmpl$1, ssrAttribute("class", escape(styles().pluginMarketplaceCardStatusText, true), false))];
|
|
2214
|
+
}
|
|
2215
|
+
})), escape(createComponent(Show, {
|
|
2216
|
+
get when() {
|
|
2217
|
+
return card.status === "success";
|
|
2218
|
+
},
|
|
2219
|
+
get children() {
|
|
2220
|
+
return [createComponent(CheckCircleIcon, {}), ssr(_tmpl$10, ssrAttribute("class", escape(styles().pluginMarketplaceCardStatusText, true), false))];
|
|
2221
|
+
}
|
|
2222
|
+
})), escape(createComponent(Show, {
|
|
2223
|
+
get when() {
|
|
2224
|
+
return card.status === "error";
|
|
2225
|
+
},
|
|
2226
|
+
get children() {
|
|
2227
|
+
return [createComponent(XCircleIcon, {}), ssr(_tmpl$9, ssrAttribute("class", escape(styles().pluginMarketplaceCardStatusTextError, true), false), escape(card.error) || "Failed to install")];
|
|
2228
|
+
}
|
|
2229
|
+
})));
|
|
2230
|
+
},
|
|
2231
|
+
get children() {
|
|
2232
|
+
return createComponent(Button, {
|
|
2233
|
+
get variant() {
|
|
2234
|
+
return getButtonVariant(card);
|
|
2235
|
+
},
|
|
2236
|
+
onClick: () => props.onAction(card),
|
|
2237
|
+
get disabled() {
|
|
2238
|
+
return card.status !== "idle" || card.actionType === "requires-package" || card.actionType === "wrong-framework" || card.actionType === "already-installed" || card.actionType === "version-mismatch";
|
|
2239
|
+
},
|
|
2240
|
+
get ["class"]() {
|
|
2241
|
+
return card.actionType === "already-installed" ? styles().pluginMarketplaceButtonInstalled : "";
|
|
2242
|
+
},
|
|
2243
|
+
get children() {
|
|
2244
|
+
return getButtonText(card);
|
|
2245
|
+
}
|
|
2246
|
+
});
|
|
2247
|
+
}
|
|
2248
|
+
})));
|
|
2249
|
+
};
|
|
2250
|
+
|
|
2251
|
+
// src/tabs/marketplace/plugin-section.tsx
|
|
2252
|
+
var _tmpl$12 = ["<div", ">", "</div>"];
|
|
2253
|
+
var _tmpl$25 = ["<div", "><div", "><div", '><div class="', '">', "</div><h3", ">", "</h3></div></div>", "</div>"];
|
|
2254
|
+
var PluginSectionComponent = (props) => {
|
|
2255
|
+
const styles = useStyles();
|
|
2256
|
+
return ssr(_tmpl$25, ssrAttribute("class", escape(styles().pluginMarketplaceSection, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSectionHeader, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSectionHeaderLeft, true), false), `${escape(styles().pluginMarketplaceSectionChevron, true) || ""} ${props.isCollapsed() ? escape(escape(styles().pluginMarketplaceSectionChevronCollapsed, true), true) : ""}`, escape(createComponent(ChevronDownIcon, {})), ssrAttribute("class", escape(styles().pluginMarketplaceSectionTitle, true), false), escape(props.section.displayName), escape(createComponent(Show, {
|
|
2257
|
+
get when() {
|
|
2258
|
+
return !props.isCollapsed();
|
|
2259
|
+
},
|
|
2260
|
+
get children() {
|
|
2261
|
+
return ssr(_tmpl$12, ssrAttribute("class", escape(styles().pluginMarketplaceGrid, true), false), escape(createComponent(For, {
|
|
2262
|
+
get each() {
|
|
2263
|
+
return props.section.cards;
|
|
2264
|
+
},
|
|
2265
|
+
children: (card) => createComponent(PluginCardComponent, {
|
|
2266
|
+
card,
|
|
2267
|
+
get onAction() {
|
|
2268
|
+
return props.onCardAction;
|
|
2269
|
+
}
|
|
2270
|
+
})
|
|
2271
|
+
})));
|
|
2272
|
+
}
|
|
2273
|
+
})));
|
|
2274
|
+
};
|
|
2275
|
+
var _tmpl$13 = ["<div", "><div", "><h3", ">Marketplace Settings</h3><button", ">", "</button></div><div", ">", "</div></div>"];
|
|
2276
|
+
var SettingsPanel = (props) => {
|
|
2277
|
+
const styles = useStyles();
|
|
2278
|
+
return createComponent(Show, {
|
|
2279
|
+
get when() {
|
|
2280
|
+
return props.isOpen();
|
|
2281
|
+
},
|
|
2282
|
+
get children() {
|
|
2283
|
+
return ssr(_tmpl$13, ssrAttribute("class", escape(styles().pluginMarketplaceSettingsPanel, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSettingsPanelHeader, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSettingsPanelTitle, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSettingsPanelClose, true), false), escape(createComponent(CloseIcon, {})), ssrAttribute("class", escape(styles().pluginMarketplaceSettingsPanelContent, true), false), escape(createComponent(Checkbox, {
|
|
2284
|
+
label: "Show active plugins",
|
|
2285
|
+
description: "Display installed plugins in a separate section",
|
|
2286
|
+
get checked() {
|
|
2287
|
+
return props.showActivePlugins();
|
|
2288
|
+
},
|
|
2289
|
+
onChange: (checked) => props.setShowActivePlugins(checked)
|
|
2290
|
+
})));
|
|
2291
|
+
}
|
|
2292
|
+
});
|
|
2293
|
+
};
|
|
2294
|
+
var _tmpl$14 = ["<div", ">", "</div>"];
|
|
2295
|
+
var _tmpl$26 = ['<button class="', '">', "</button>"];
|
|
2296
|
+
var TagFilters = (props) => {
|
|
2297
|
+
const styles = useStyles();
|
|
2298
|
+
return createComponent(Show, {
|
|
2299
|
+
get when() {
|
|
2300
|
+
return props.tags().length > 0;
|
|
2301
|
+
},
|
|
2302
|
+
get children() {
|
|
2303
|
+
return ssr(_tmpl$14, ssrAttribute("class", escape(styles().pluginMarketplaceTagsContainer, true), false), escape(createComponent(For, {
|
|
2304
|
+
get each() {
|
|
2305
|
+
return props.tags();
|
|
2306
|
+
},
|
|
2307
|
+
children: (tag) => ssr(_tmpl$26, `${escape(styles().pluginMarketplaceTagButton, true) || ""} ${props.selectedTags().has(tag) ? escape(escape(styles().pluginMarketplaceTagButtonActive, true), true) : ""}`, escape(tag))
|
|
2308
|
+
})));
|
|
2309
|
+
}
|
|
2310
|
+
});
|
|
2311
|
+
};
|
|
2312
|
+
|
|
2313
|
+
// src/tabs/marketplace/marketplace-header.tsx
|
|
2314
|
+
var _tmpl$15 = ["<div", "><div", "><h2", '>Plugin Marketplace</h2><div style="', '"><div', ">", '<input type="text"', ' placeholder="Search plugins..."', "></div><button", ">", "</button></div></div><p", ">Discover and install devtools for TanStack Query, Router, Form, and Pacer</p>", "</div>"];
|
|
2315
|
+
var MarketplaceHeader = (props) => {
|
|
2316
|
+
const styles = useStyles();
|
|
2317
|
+
return ssr(_tmpl$15, ssrAttribute("class", escape(styles().pluginMarketplaceHeader, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceTitleRow, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceTitle, true), false), "display:flex;align-items:center", ssrAttribute("class", escape(styles().pluginMarketplaceSearchWrapper, true), false), escape(createComponent(SearchIcon, {})), ssrAttribute("class", escape(styles().pluginMarketplaceSearch, true), false), ssrAttribute("value", escape(props.searchInput(), true), false), ssrAttribute("class", escape(styles().pluginMarketplaceSettingsButton, true), false), escape(createComponent(SettingsIcon, {})), ssrAttribute("class", escape(styles().pluginMarketplaceDescription, true), false), escape(createComponent(TagFilters, {
|
|
2318
|
+
get tags() {
|
|
2319
|
+
return props.tags;
|
|
2320
|
+
},
|
|
2321
|
+
get selectedTags() {
|
|
2322
|
+
return props.selectedTags;
|
|
2323
|
+
},
|
|
2324
|
+
get onToggleTag() {
|
|
2325
|
+
return props.onToggleTag;
|
|
2326
|
+
}
|
|
2327
|
+
})));
|
|
2328
|
+
};
|
|
2329
|
+
|
|
2330
|
+
// src/tabs/marketplace/types.ts
|
|
2331
|
+
var FRAMEWORKS = [
|
|
2332
|
+
"react",
|
|
2333
|
+
"solid",
|
|
2334
|
+
"vue",
|
|
2335
|
+
"svelte",
|
|
2336
|
+
"angular"
|
|
2337
|
+
];
|
|
2338
|
+
|
|
2339
|
+
// src/tabs/plugin-registry.ts
|
|
2340
|
+
var PLUGIN_REGISTRY = {
|
|
2341
|
+
// TanStack Query
|
|
2342
|
+
"@tanstack/react-query-devtools": {
|
|
2343
|
+
packageName: "@tanstack/react-query-devtools",
|
|
2344
|
+
title: "TanStack Query Devtools",
|
|
2345
|
+
description: "Powerful devtools for TanStack Query - inspect queries, mutations, and cache",
|
|
2346
|
+
requires: {
|
|
2347
|
+
packageName: "@tanstack/react-query",
|
|
2348
|
+
minVersion: "5.0.0"
|
|
2349
|
+
},
|
|
2350
|
+
pluginId: "tanstack-query",
|
|
2351
|
+
docsUrl: "https://tanstack.com/query/latest/docs/devtools",
|
|
2352
|
+
author: "TanStack",
|
|
2353
|
+
framework: "react",
|
|
2354
|
+
featured: true,
|
|
2355
|
+
// Featured plugin
|
|
2356
|
+
tags: ["TanStack", "data-fetching", "caching", "state-management"]
|
|
2357
|
+
},
|
|
2358
|
+
"@tanstack/solid-query-devtools": {
|
|
2359
|
+
packageName: "@tanstack/solid-query-devtools",
|
|
2360
|
+
title: "TanStack Query Devtools",
|
|
2361
|
+
description: "Powerful devtools for TanStack Query - inspect queries, mutations, and cache",
|
|
2362
|
+
requires: {
|
|
2363
|
+
packageName: "@tanstack/solid-query",
|
|
2364
|
+
minVersion: "5.0.0"
|
|
2365
|
+
},
|
|
2366
|
+
pluginId: "tanstack-query",
|
|
2367
|
+
docsUrl: "https://tanstack.com/query/latest/docs/devtools",
|
|
2368
|
+
author: "TanStack",
|
|
2369
|
+
framework: "solid",
|
|
2370
|
+
tags: ["TanStack", "data-fetching", "caching", "state-management"]
|
|
2371
|
+
},
|
|
2372
|
+
// TanStack Router
|
|
2373
|
+
"@tanstack/react-router-devtools": {
|
|
2374
|
+
packageName: "@tanstack/react-router-devtools",
|
|
2375
|
+
title: "TanStack Router Devtools",
|
|
2376
|
+
description: "Inspect routes, navigation, and router state in real-time",
|
|
2377
|
+
requires: {
|
|
2378
|
+
packageName: "@tanstack/react-router",
|
|
2379
|
+
minVersion: "1.0.0"
|
|
2380
|
+
},
|
|
2381
|
+
pluginId: "tanstack-router",
|
|
2382
|
+
docsUrl: "https://tanstack.com/router/latest/docs/devtools",
|
|
2383
|
+
author: "TanStack",
|
|
2384
|
+
framework: "react",
|
|
2385
|
+
featured: true,
|
|
2386
|
+
// Featured plugin
|
|
2387
|
+
tags: ["TanStack", "routing", "navigation"]
|
|
2388
|
+
},
|
|
2389
|
+
"@tanstack/solid-router-devtools": {
|
|
2390
|
+
packageName: "@tanstack/solid-router-devtools",
|
|
2391
|
+
title: "TanStack Router Devtools",
|
|
2392
|
+
description: "Inspect routes, navigation, and router state in real-time",
|
|
2393
|
+
requires: {
|
|
2394
|
+
packageName: "@tanstack/solid-router",
|
|
2395
|
+
minVersion: "1.0.0"
|
|
2396
|
+
},
|
|
2397
|
+
pluginId: "tanstack-router",
|
|
2398
|
+
docsUrl: "https://tanstack.com/router/latest/docs/devtools",
|
|
2399
|
+
author: "TanStack",
|
|
2400
|
+
framework: "solid",
|
|
2401
|
+
tags: ["TanStack", "routing", "navigation"]
|
|
2402
|
+
},
|
|
2403
|
+
// TanStack Form
|
|
2404
|
+
"@tanstack/react-form-devtools": {
|
|
2405
|
+
packageName: "@tanstack/react-form-devtools",
|
|
2406
|
+
title: "TanStack Form Devtools",
|
|
2407
|
+
description: "Debug form state, validation, and field values",
|
|
2408
|
+
requires: {
|
|
2409
|
+
packageName: "@tanstack/react-form",
|
|
2410
|
+
minVersion: "1.23.0"
|
|
2411
|
+
},
|
|
2412
|
+
pluginImport: {
|
|
2413
|
+
importName: "FormDevtoolsPlugin",
|
|
2414
|
+
type: "function"
|
|
2415
|
+
},
|
|
2416
|
+
pluginId: "tanstack-form",
|
|
2417
|
+
docsUrl: "https://tanstack.com/form/latest/docs/devtools",
|
|
2418
|
+
author: "TanStack",
|
|
2419
|
+
framework: "react",
|
|
2420
|
+
isNew: true,
|
|
2421
|
+
tags: ["TanStack", "forms", "validation"]
|
|
2422
|
+
},
|
|
2423
|
+
"@tanstack/solid-form-devtools": {
|
|
2424
|
+
packageName: "@tanstack/solid-form-devtools",
|
|
2425
|
+
title: "TanStack Form Devtools",
|
|
2426
|
+
description: "Debug form state, validation, and field values",
|
|
2427
|
+
requires: {
|
|
2428
|
+
packageName: "@tanstack/solid-form",
|
|
2429
|
+
minVersion: "1.23.0"
|
|
2430
|
+
},
|
|
2431
|
+
pluginImport: {
|
|
2432
|
+
importName: "FormDevtoolsPlugin",
|
|
2433
|
+
type: "function"
|
|
2434
|
+
},
|
|
2435
|
+
pluginId: "tanstack-form",
|
|
2436
|
+
docsUrl: "https://tanstack.com/form/latest/docs/devtools",
|
|
2437
|
+
author: "TanStack",
|
|
2438
|
+
isNew: true,
|
|
2439
|
+
framework: "solid",
|
|
2440
|
+
tags: ["TanStack", "forms", "validation"]
|
|
2441
|
+
},
|
|
2442
|
+
// TanStack Pacer (Example - adjust as needed)
|
|
2443
|
+
"@tanstack/react-pacer-devtools": {
|
|
2444
|
+
packageName: "@tanstack/react-pacer-devtools",
|
|
2445
|
+
title: "Pacer Devtools",
|
|
2446
|
+
description: "Monitor and debug your Pacer animations and transitions",
|
|
2447
|
+
requires: {
|
|
2448
|
+
packageName: "@tanstack/react-pacer",
|
|
2449
|
+
minVersion: "0.16.4"
|
|
2450
|
+
},
|
|
2451
|
+
author: "TanStack",
|
|
2452
|
+
framework: "react",
|
|
2453
|
+
isNew: true,
|
|
2454
|
+
// New plugin banner
|
|
2455
|
+
tags: ["TanStack"]
|
|
2456
|
+
},
|
|
2457
|
+
"@tanstack/solid-pacer-devtools": {
|
|
2458
|
+
packageName: "@tanstack/solid-pacer-devtools",
|
|
2459
|
+
title: "Pacer Devtools",
|
|
2460
|
+
description: "Monitor and debug your Pacer animations and transitions",
|
|
2461
|
+
requires: {
|
|
2462
|
+
packageName: "@tanstack/solid-pacer",
|
|
2463
|
+
minVersion: "0.14.4"
|
|
2464
|
+
},
|
|
2465
|
+
author: "TanStack",
|
|
2466
|
+
framework: "solid",
|
|
2467
|
+
isNew: true,
|
|
2468
|
+
// New plugin banner
|
|
2469
|
+
tags: ["TanStack"]
|
|
2470
|
+
}
|
|
2471
|
+
// ==========================================
|
|
2472
|
+
// THIRD-PARTY PLUGINS - Examples
|
|
2473
|
+
// ==========================================
|
|
2474
|
+
// External contributors can add their plugins below!
|
|
2475
|
+
};
|
|
2476
|
+
function getAllPluginMetadata() {
|
|
2477
|
+
return Object.values(PLUGIN_REGISTRY);
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
// src/tabs/semver-utils.ts
|
|
2481
|
+
function parseVersion(version) {
|
|
2482
|
+
if (!version) return null;
|
|
2483
|
+
const cleanVersion = version.replace(/^[v^~]/, "").split("-")[0]?.split("+")[0];
|
|
2484
|
+
if (!cleanVersion) return null;
|
|
2485
|
+
const parts = cleanVersion.split(".");
|
|
2486
|
+
if (parts.length < 2) return null;
|
|
2487
|
+
const major = parseInt(parts[0] ?? "0", 10);
|
|
2488
|
+
const minor = parseInt(parts[1] ?? "0", 10);
|
|
2489
|
+
const patch = parseInt(parts[2] ?? "0", 10);
|
|
2490
|
+
if (isNaN(major) || isNaN(minor) || isNaN(patch)) {
|
|
2491
|
+
return null;
|
|
2492
|
+
}
|
|
2493
|
+
return {
|
|
2494
|
+
major,
|
|
2495
|
+
minor,
|
|
2496
|
+
patch,
|
|
2497
|
+
raw: version
|
|
2498
|
+
};
|
|
2499
|
+
}
|
|
2500
|
+
function compareVersions(v1, v2) {
|
|
2501
|
+
if (v1.major !== v2.major) return v1.major - v2.major;
|
|
2502
|
+
if (v1.minor !== v2.minor) return v1.minor - v2.minor;
|
|
2503
|
+
return v1.patch - v2.patch;
|
|
2504
|
+
}
|
|
2505
|
+
function satisfiesMinVersion(currentVersion, minVersion) {
|
|
2506
|
+
const current = parseVersion(currentVersion);
|
|
2507
|
+
const min = parseVersion(minVersion);
|
|
2508
|
+
if (!current || !min) return true;
|
|
2509
|
+
return compareVersions(current, min) >= 0;
|
|
2510
|
+
}
|
|
2511
|
+
function satisfiesMaxVersion(currentVersion, maxVersion) {
|
|
2512
|
+
const current = parseVersion(currentVersion);
|
|
2513
|
+
const max = parseVersion(maxVersion);
|
|
2514
|
+
if (!current || !max) return true;
|
|
2515
|
+
return compareVersions(current, max) <= 0;
|
|
2516
|
+
}
|
|
2517
|
+
function satisfiesVersionRange(currentVersion, minVersion, maxVersion) {
|
|
2518
|
+
if (!minVersion && !maxVersion) {
|
|
2519
|
+
return { satisfied: true };
|
|
2520
|
+
}
|
|
2521
|
+
if (minVersion && !satisfiesMinVersion(currentVersion, minVersion)) {
|
|
2522
|
+
return {
|
|
2523
|
+
satisfied: false,
|
|
2524
|
+
reason: `Requires v${minVersion} or higher (current: v${currentVersion})`
|
|
2525
|
+
};
|
|
2526
|
+
}
|
|
2527
|
+
if (maxVersion && !satisfiesMaxVersion(currentVersion, maxVersion)) {
|
|
2528
|
+
return {
|
|
2529
|
+
satisfied: false,
|
|
2530
|
+
reason: `Requires v${maxVersion} or lower (current: v${currentVersion})`
|
|
2531
|
+
};
|
|
2532
|
+
}
|
|
2533
|
+
return { satisfied: true };
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
// src/tabs/marketplace/plugin-utils.ts
|
|
2537
|
+
var detectFramework = (pkg, frameworks) => {
|
|
2538
|
+
const allDeps = {
|
|
2539
|
+
...pkg.dependencies,
|
|
2540
|
+
...pkg.devDependencies
|
|
2541
|
+
};
|
|
2542
|
+
const frameworkPackageMap = {
|
|
2543
|
+
react: ["react", "react-dom"],
|
|
2544
|
+
vue: ["vue", "@vue/core"],
|
|
2545
|
+
solid: ["solid-js"],
|
|
2546
|
+
svelte: ["svelte"],
|
|
2547
|
+
angular: ["@angular/core"]
|
|
2548
|
+
};
|
|
2549
|
+
for (const framework of frameworks) {
|
|
2550
|
+
const frameworkPackages = frameworkPackageMap[framework];
|
|
2551
|
+
if (frameworkPackages && frameworkPackages.some((pkg2) => allDeps[pkg2])) {
|
|
2552
|
+
return framework;
|
|
2553
|
+
}
|
|
2554
|
+
}
|
|
2555
|
+
return "unknown";
|
|
2556
|
+
};
|
|
2557
|
+
var isPluginRegistered = (registeredPlugins, packageName, pluginName, framework, pluginId) => {
|
|
2558
|
+
if (pluginId) {
|
|
2559
|
+
return Array.from(registeredPlugins).some((id) => {
|
|
2560
|
+
const idLower = id.toLowerCase();
|
|
2561
|
+
const pluginIdLower = pluginId.toLowerCase();
|
|
2562
|
+
return idLower.startsWith(pluginIdLower) || idLower.includes(pluginIdLower);
|
|
2563
|
+
});
|
|
2564
|
+
}
|
|
2565
|
+
if (registeredPlugins.has(packageName)) return true;
|
|
2566
|
+
const pluginWords = pluginName.toLowerCase().split(/[-_/@]/).filter((word) => word.length > 0);
|
|
2567
|
+
const frameworkPart = framework.toLowerCase();
|
|
2568
|
+
return Array.from(registeredPlugins).some((id) => {
|
|
2569
|
+
const idLower = id.toLowerCase();
|
|
2570
|
+
if (idLower.includes(pluginName.toLowerCase())) {
|
|
2571
|
+
return true;
|
|
2572
|
+
}
|
|
2573
|
+
const matchedWords = pluginWords.filter((word) => idLower.includes(word));
|
|
2574
|
+
if (matchedWords.length >= 2) {
|
|
2575
|
+
return true;
|
|
2576
|
+
}
|
|
2577
|
+
if (idLower.includes(frameworkPart) && matchedWords.length >= 1) {
|
|
2578
|
+
return true;
|
|
2579
|
+
}
|
|
2580
|
+
return false;
|
|
2581
|
+
});
|
|
2582
|
+
};
|
|
2583
|
+
var buildPluginCards = (pkg, currentFramework, registeredPlugins, existingCards) => {
|
|
2584
|
+
const allDeps = {
|
|
2585
|
+
...pkg.dependencies,
|
|
2586
|
+
...pkg.devDependencies
|
|
2587
|
+
};
|
|
2588
|
+
const allCards = [];
|
|
2589
|
+
const allPlugins = getAllPluginMetadata();
|
|
2590
|
+
allPlugins.forEach((metadata) => {
|
|
2591
|
+
const devtoolsPackage = metadata.packageName;
|
|
2592
|
+
const isCurrentFramework = metadata.framework === currentFramework || metadata.framework === "other";
|
|
2593
|
+
const requiredPackageName = metadata.requires?.packageName;
|
|
2594
|
+
const hasPackage = requiredPackageName ? !!allDeps[requiredPackageName] : false;
|
|
2595
|
+
const hasDevtools = !!allDeps[devtoolsPackage];
|
|
2596
|
+
let versionInfo;
|
|
2597
|
+
if (hasPackage && metadata.requires) {
|
|
2598
|
+
const currentVersion = requiredPackageName ? allDeps[requiredPackageName] : void 0;
|
|
2599
|
+
if (currentVersion) {
|
|
2600
|
+
const versionCheck = satisfiesVersionRange(
|
|
2601
|
+
currentVersion,
|
|
2602
|
+
metadata.requires.minVersion,
|
|
2603
|
+
metadata.requires.maxVersion
|
|
2604
|
+
);
|
|
2605
|
+
versionInfo = {
|
|
2606
|
+
current: currentVersion,
|
|
2607
|
+
required: metadata.requires.minVersion,
|
|
2608
|
+
satisfied: versionCheck.satisfied,
|
|
2609
|
+
reason: versionCheck.reason
|
|
2610
|
+
};
|
|
2611
|
+
}
|
|
2612
|
+
}
|
|
2613
|
+
const isRegistered = isPluginRegistered(
|
|
2614
|
+
registeredPlugins,
|
|
2615
|
+
devtoolsPackage,
|
|
2616
|
+
metadata.packageName,
|
|
2617
|
+
metadata.framework,
|
|
2618
|
+
metadata.pluginId
|
|
2619
|
+
);
|
|
2620
|
+
let actionType;
|
|
2621
|
+
if (!isCurrentFramework) {
|
|
2622
|
+
actionType = "wrong-framework";
|
|
2623
|
+
} else if (metadata.requires && !hasPackage) {
|
|
2624
|
+
actionType = "requires-package";
|
|
2625
|
+
} else if (versionInfo && !versionInfo.satisfied) {
|
|
2626
|
+
actionType = "bump-version";
|
|
2627
|
+
} else if (hasDevtools && isRegistered) {
|
|
2628
|
+
actionType = "already-installed";
|
|
2629
|
+
} else if (hasDevtools && !isRegistered) {
|
|
2630
|
+
actionType = "add-to-devtools";
|
|
2631
|
+
} else if (!hasDevtools && metadata.requires && hasPackage) {
|
|
2632
|
+
actionType = "install-devtools";
|
|
2633
|
+
} else if (!hasDevtools) {
|
|
2634
|
+
actionType = "install";
|
|
2635
|
+
} else {
|
|
2636
|
+
actionType = "install";
|
|
1226
2637
|
}
|
|
2638
|
+
const existing = existingCards.find(
|
|
2639
|
+
(c) => c.devtoolsPackage === devtoolsPackage
|
|
2640
|
+
);
|
|
2641
|
+
allCards.push({
|
|
2642
|
+
requiredPackageName: requiredPackageName || "",
|
|
2643
|
+
devtoolsPackage,
|
|
2644
|
+
framework: metadata.framework,
|
|
2645
|
+
hasPackage,
|
|
2646
|
+
hasDevtools,
|
|
2647
|
+
isRegistered,
|
|
2648
|
+
actionType,
|
|
2649
|
+
status: existing?.status || "idle",
|
|
2650
|
+
error: existing?.error,
|
|
2651
|
+
isCurrentFramework,
|
|
2652
|
+
metadata,
|
|
2653
|
+
versionInfo
|
|
2654
|
+
});
|
|
2655
|
+
});
|
|
2656
|
+
return allCards;
|
|
2657
|
+
};
|
|
2658
|
+
var groupIntoSections = (allCards) => {
|
|
2659
|
+
const sections = [];
|
|
2660
|
+
const activeCards = allCards.filter(
|
|
2661
|
+
(c) => c.actionType === "already-installed" && c.isRegistered
|
|
2662
|
+
);
|
|
2663
|
+
if (activeCards.length > 0) {
|
|
2664
|
+
sections.push({
|
|
2665
|
+
id: "active",
|
|
2666
|
+
displayName: "\u2713 Active Plugins",
|
|
2667
|
+
cards: activeCards
|
|
2668
|
+
});
|
|
2669
|
+
}
|
|
2670
|
+
const featuredCards = allCards.filter(
|
|
2671
|
+
(c) => c.metadata?.featured && c.actionType !== "already-installed" && c.isCurrentFramework
|
|
2672
|
+
// Only show featured plugins for current framework
|
|
2673
|
+
);
|
|
2674
|
+
if (featuredCards.length > 0) {
|
|
2675
|
+
sections.push({
|
|
2676
|
+
id: "featured",
|
|
2677
|
+
displayName: "\u2B50 Featured",
|
|
2678
|
+
cards: featuredCards
|
|
2679
|
+
});
|
|
2680
|
+
}
|
|
2681
|
+
const availableCards = allCards.filter(
|
|
2682
|
+
(c) => c.isCurrentFramework && c.actionType !== "already-installed" && !c.metadata?.featured
|
|
2683
|
+
// Not featured (already in featured section)
|
|
2684
|
+
);
|
|
2685
|
+
if (availableCards.length > 0) {
|
|
2686
|
+
sections.push({
|
|
2687
|
+
id: "available",
|
|
2688
|
+
displayName: "Available Plugins",
|
|
2689
|
+
cards: availableCards
|
|
2690
|
+
});
|
|
2691
|
+
}
|
|
2692
|
+
return sections;
|
|
2693
|
+
};
|
|
2694
|
+
|
|
2695
|
+
// src/tabs/plugin-marketplace.tsx
|
|
2696
|
+
var _tmpl$16 = ["<div", "><p", ">", "</p></div>"];
|
|
2697
|
+
var _tmpl$27 = ["<div", ">", "", "", "", "</div>"];
|
|
2698
|
+
var PluginMarketplace = () => {
|
|
2699
|
+
const styles = useStyles();
|
|
2700
|
+
const {
|
|
2701
|
+
plugins
|
|
2702
|
+
} = usePlugins();
|
|
2703
|
+
const [pluginSections, setPluginSections] = createSignal([]);
|
|
2704
|
+
const [currentPackageJson, setCurrentPackageJson] = createSignal(null);
|
|
2705
|
+
const [searchInput, setSearchInput] = createSignal("");
|
|
2706
|
+
const [searchQuery, setSearchQuery] = createSignal("");
|
|
2707
|
+
const [collapsedSections, setCollapsedSections] = createSignal(/* @__PURE__ */ new Set());
|
|
2708
|
+
const [showActivePlugins, setShowActivePlugins] = createSignal(true);
|
|
2709
|
+
const [selectedTags, setSelectedTags] = createSignal(/* @__PURE__ */ new Set());
|
|
2710
|
+
const [isSettingsOpen, setIsSettingsOpen] = createSignal(false);
|
|
2711
|
+
let debounceTimeout;
|
|
2712
|
+
const handleSearchInput = (value) => {
|
|
2713
|
+
setSearchInput(value);
|
|
2714
|
+
if (debounceTimeout) {
|
|
2715
|
+
clearTimeout(debounceTimeout);
|
|
2716
|
+
}
|
|
2717
|
+
debounceTimeout = setTimeout(() => {
|
|
2718
|
+
setSearchQuery(value);
|
|
2719
|
+
}, 300);
|
|
2720
|
+
};
|
|
2721
|
+
const toggleSection = (framework) => {
|
|
2722
|
+
setCollapsedSections((prev) => {
|
|
2723
|
+
const newSet = new Set(prev);
|
|
2724
|
+
if (newSet.has(framework)) {
|
|
2725
|
+
newSet.delete(framework);
|
|
2726
|
+
} else {
|
|
2727
|
+
newSet.add(framework);
|
|
2728
|
+
}
|
|
2729
|
+
return newSet;
|
|
2730
|
+
});
|
|
2731
|
+
};
|
|
2732
|
+
const matchesSearch = (card, query) => {
|
|
2733
|
+
if (!query) return true;
|
|
2734
|
+
const lowerQuery = query.toLowerCase();
|
|
2735
|
+
return card.devtoolsPackage.toLowerCase().includes(lowerQuery) || card.requiredPackageName.toLowerCase().includes(lowerQuery) || card.framework.toLowerCase().includes(lowerQuery);
|
|
2736
|
+
};
|
|
2737
|
+
const getFilteredSections = () => {
|
|
2738
|
+
const query = searchQuery();
|
|
2739
|
+
const showActive = showActivePlugins();
|
|
2740
|
+
const tags = selectedTags();
|
|
2741
|
+
const pkg = currentPackageJson();
|
|
2742
|
+
if (!pkg) return [];
|
|
2743
|
+
const currentFramework = detectFramework(pkg, FRAMEWORKS);
|
|
2744
|
+
const registeredPlugins = new Set(plugins()?.map((p) => p.id || "") || []);
|
|
2745
|
+
const allCards = buildPluginCards(
|
|
2746
|
+
pkg,
|
|
2747
|
+
currentFramework,
|
|
2748
|
+
registeredPlugins,
|
|
2749
|
+
pluginSections().flatMap((s) => s.cards)
|
|
2750
|
+
// Preserve status from existing cards
|
|
2751
|
+
);
|
|
2752
|
+
let sections = groupIntoSections(allCards);
|
|
2753
|
+
if (!showActive) {
|
|
2754
|
+
sections = sections.filter((section) => section.id !== "active");
|
|
2755
|
+
}
|
|
2756
|
+
if (tags.size > 0) {
|
|
2757
|
+
sections = sections.map((section) => ({
|
|
2758
|
+
...section,
|
|
2759
|
+
cards: section.cards.filter((card) => {
|
|
2760
|
+
if (!card.metadata?.tags) return false;
|
|
2761
|
+
return card.metadata.tags.some((tag) => tags.has(tag));
|
|
2762
|
+
})
|
|
2763
|
+
})).filter((section) => section.cards.length > 0);
|
|
2764
|
+
}
|
|
2765
|
+
if (!query) return sections;
|
|
2766
|
+
return sections.map((section) => ({
|
|
2767
|
+
...section,
|
|
2768
|
+
cards: section.cards.filter((card) => matchesSearch(card, query))
|
|
2769
|
+
})).filter((section) => section.cards.length > 0);
|
|
2770
|
+
};
|
|
2771
|
+
onMount(() => {
|
|
2772
|
+
const cleanupJsonRead = devtoolsEventClient.on("package-json-read", (event) => {
|
|
2773
|
+
setCurrentPackageJson(event.payload.packageJson);
|
|
2774
|
+
updatePluginCards(event.payload.packageJson);
|
|
2775
|
+
});
|
|
2776
|
+
const cleanupJsonUpdated = devtoolsEventClient.on("package-json-updated", (event) => {
|
|
2777
|
+
setCurrentPackageJson(event.payload.packageJson);
|
|
2778
|
+
updatePluginCards(event.payload.packageJson);
|
|
2779
|
+
});
|
|
2780
|
+
const cleanupDevtoolsInstalled = devtoolsEventClient.on("devtools-installed", (event) => {
|
|
2781
|
+
setPluginSections((prevSections) => prevSections.map((section) => ({
|
|
2782
|
+
...section,
|
|
2783
|
+
cards: section.cards.map((card) => card.devtoolsPackage === event.payload.packageName ? {
|
|
2784
|
+
...card,
|
|
2785
|
+
status: event.payload.success ? "success" : "error",
|
|
2786
|
+
error: event.payload.error
|
|
2787
|
+
} : card)
|
|
2788
|
+
})));
|
|
2789
|
+
});
|
|
2790
|
+
const cleanupPluginAdded = devtoolsEventClient.on("plugin-added", (event) => {
|
|
2791
|
+
setPluginSections((prevSections) => prevSections.map((section) => ({
|
|
2792
|
+
...section,
|
|
2793
|
+
cards: section.cards.map((card) => card.devtoolsPackage === event.payload.packageName ? {
|
|
2794
|
+
...card,
|
|
2795
|
+
status: event.payload.success ? "success" : "error",
|
|
2796
|
+
error: event.payload.error
|
|
2797
|
+
} : card)
|
|
2798
|
+
})));
|
|
2799
|
+
if (event.payload.success) {
|
|
2800
|
+
const pkg = currentPackageJson();
|
|
2801
|
+
if (pkg) {
|
|
2802
|
+
updatePluginCards(pkg);
|
|
2803
|
+
}
|
|
2804
|
+
}
|
|
2805
|
+
});
|
|
2806
|
+
onCleanup(() => {
|
|
2807
|
+
cleanupJsonRead();
|
|
2808
|
+
cleanupJsonUpdated();
|
|
2809
|
+
cleanupDevtoolsInstalled();
|
|
2810
|
+
cleanupPluginAdded();
|
|
2811
|
+
});
|
|
2812
|
+
devtoolsEventClient.emit("mounted", void 0);
|
|
1227
2813
|
});
|
|
2814
|
+
const updatePluginCards = (pkg) => {
|
|
2815
|
+
if (!pkg) return;
|
|
2816
|
+
const currentFramework = detectFramework(pkg, FRAMEWORKS);
|
|
2817
|
+
const registeredPlugins = new Set(plugins()?.map((p) => p.id || "") || []);
|
|
2818
|
+
const allCards = buildPluginCards(pkg, currentFramework, registeredPlugins, pluginSections().flatMap((s) => s.cards));
|
|
2819
|
+
const sections = groupIntoSections(allCards);
|
|
2820
|
+
setPluginSections(sections);
|
|
2821
|
+
};
|
|
2822
|
+
const handleAction = (card) => {
|
|
2823
|
+
if (card.actionType === "requires-package" || card.actionType === "wrong-framework" || card.actionType === "already-installed" || card.actionType === "version-mismatch") {
|
|
2824
|
+
return;
|
|
2825
|
+
}
|
|
2826
|
+
setPluginSections((prevSections) => prevSections.map((section) => ({
|
|
2827
|
+
...section,
|
|
2828
|
+
cards: section.cards.map((c) => c.devtoolsPackage === card.devtoolsPackage ? {
|
|
2829
|
+
...c,
|
|
2830
|
+
status: "installing"
|
|
2831
|
+
} : c)
|
|
2832
|
+
})));
|
|
2833
|
+
if (card.actionType === "bump-version") {
|
|
2834
|
+
devtoolsEventClient.emit("bump-package-version", {
|
|
2835
|
+
packageName: card.requiredPackageName,
|
|
2836
|
+
devtoolsPackage: card.devtoolsPackage,
|
|
2837
|
+
pluginName: card.metadata?.title || card.devtoolsPackage,
|
|
2838
|
+
minVersion: card.metadata?.requires?.minVersion,
|
|
2839
|
+
pluginImport: card.metadata?.pluginImport
|
|
2840
|
+
});
|
|
2841
|
+
return;
|
|
2842
|
+
}
|
|
2843
|
+
if (card.actionType === "add-to-devtools") {
|
|
2844
|
+
devtoolsEventClient.emit("add-plugin-to-devtools", {
|
|
2845
|
+
packageName: card.devtoolsPackage,
|
|
2846
|
+
// should always be defined
|
|
2847
|
+
pluginName: card.metadata?.title ?? card.devtoolsPackage,
|
|
2848
|
+
pluginImport: card.metadata?.pluginImport
|
|
2849
|
+
});
|
|
2850
|
+
return;
|
|
2851
|
+
}
|
|
2852
|
+
devtoolsEventClient.emit("install-devtools", {
|
|
2853
|
+
packageName: card.devtoolsPackage,
|
|
2854
|
+
// should always be defined
|
|
2855
|
+
pluginName: card.metadata?.title ?? card.devtoolsPackage,
|
|
2856
|
+
pluginImport: card.metadata?.pluginImport
|
|
2857
|
+
});
|
|
2858
|
+
};
|
|
2859
|
+
const getAllTags = () => {
|
|
2860
|
+
const tags = /* @__PURE__ */ new Set();
|
|
2861
|
+
pluginSections().forEach((section) => {
|
|
2862
|
+
if (section.id === "featured" || section.id === "available") {
|
|
2863
|
+
section.cards.forEach((card) => {
|
|
2864
|
+
if (card.metadata?.tags) {
|
|
2865
|
+
card.metadata.tags.forEach((tag) => tags.add(tag));
|
|
2866
|
+
}
|
|
2867
|
+
});
|
|
2868
|
+
}
|
|
2869
|
+
});
|
|
2870
|
+
return Array.from(tags).sort();
|
|
2871
|
+
};
|
|
2872
|
+
const toggleTag = (tag) => {
|
|
2873
|
+
setSelectedTags((prev) => {
|
|
2874
|
+
const newTags = new Set(prev);
|
|
2875
|
+
if (newTags.has(tag)) {
|
|
2876
|
+
newTags.delete(tag);
|
|
2877
|
+
} else {
|
|
2878
|
+
newTags.add(tag);
|
|
2879
|
+
}
|
|
2880
|
+
return newTags;
|
|
2881
|
+
});
|
|
2882
|
+
};
|
|
2883
|
+
return ssr(_tmpl$27, ssrAttribute("class", escape(styles().pluginMarketplace, true), false), escape(createComponent(SettingsPanel, {
|
|
2884
|
+
isOpen: isSettingsOpen,
|
|
2885
|
+
onClose: () => setIsSettingsOpen(false),
|
|
2886
|
+
showActivePlugins,
|
|
2887
|
+
setShowActivePlugins
|
|
2888
|
+
})), escape(createComponent(MarketplaceHeader, {
|
|
2889
|
+
searchInput,
|
|
2890
|
+
onSearchInput: handleSearchInput,
|
|
2891
|
+
onSettingsClick: () => setIsSettingsOpen(!isSettingsOpen()),
|
|
2892
|
+
tags: getAllTags,
|
|
2893
|
+
selectedTags,
|
|
2894
|
+
onToggleTag: toggleTag
|
|
2895
|
+
})), escape(createComponent(Show, {
|
|
2896
|
+
get when() {
|
|
2897
|
+
return getFilteredSections().length > 0;
|
|
2898
|
+
},
|
|
2899
|
+
get children() {
|
|
2900
|
+
return createComponent(For, {
|
|
2901
|
+
get each() {
|
|
2902
|
+
return getFilteredSections();
|
|
2903
|
+
},
|
|
2904
|
+
children: (section) => createComponent(PluginSectionComponent, {
|
|
2905
|
+
section,
|
|
2906
|
+
isCollapsed: () => collapsedSections().has(section.id),
|
|
2907
|
+
onToggleCollapse: () => toggleSection(section.id),
|
|
2908
|
+
onCardAction: handleAction
|
|
2909
|
+
})
|
|
2910
|
+
});
|
|
2911
|
+
}
|
|
2912
|
+
})), escape(createComponent(Show, {
|
|
2913
|
+
get when() {
|
|
2914
|
+
return getFilteredSections().length === 0;
|
|
2915
|
+
},
|
|
2916
|
+
get children() {
|
|
2917
|
+
return ssr(_tmpl$16, ssrAttribute("class", escape(styles().pluginMarketplaceEmpty, true), false), ssrAttribute("class", escape(styles().pluginMarketplaceEmptyText, true), false), searchQuery() ? `No plugins found matching "${escape(searchQuery())}"` : "No additional plugins available. You have all compatible devtools installed and registered!");
|
|
2918
|
+
}
|
|
2919
|
+
})));
|
|
1228
2920
|
};
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
var _tmpl$
|
|
2921
|
+
|
|
2922
|
+
// src/tabs/plugins-tab.tsx
|
|
2923
|
+
var _tmpl$17 = ["<div", "><div", "><div", "><div", ">", "</div><div", "><h3>Add More</h3></div></div></div>", "</div>"];
|
|
2924
|
+
var _tmpl$28 = ["<div", '><h3 id="', '"></h3></div>'];
|
|
2925
|
+
var _tmpl$34 = ['<div id="', '"', "></div>"];
|
|
1232
2926
|
var PluginsTab = () => {
|
|
1233
2927
|
const {
|
|
1234
2928
|
plugins,
|
|
@@ -1238,13 +2932,19 @@ var PluginsTab = () => {
|
|
|
1238
2932
|
const {
|
|
1239
2933
|
expanded,
|
|
1240
2934
|
hoverUtils,
|
|
1241
|
-
animationMs
|
|
2935
|
+
animationMs,
|
|
2936
|
+
setForceExpand
|
|
1242
2937
|
} = useDrawContext();
|
|
1243
2938
|
const [pluginRefs, setPluginRefs] = createSignal(/* @__PURE__ */ new Map());
|
|
2939
|
+
const [showMarketplace, setShowMarketplace] = createSignal(false);
|
|
1244
2940
|
const styles = useStyles();
|
|
1245
2941
|
const {
|
|
1246
2942
|
theme
|
|
1247
2943
|
} = useTheme();
|
|
2944
|
+
const hasPlugins = createMemo(() => plugins()?.length && plugins().length > 0);
|
|
2945
|
+
createEffect(() => {
|
|
2946
|
+
setForceExpand(showMarketplace());
|
|
2947
|
+
});
|
|
1248
2948
|
createEffect(() => {
|
|
1249
2949
|
const currentActivePlugins = plugins()?.filter((plugin) => activePlugins().includes(plugin.id));
|
|
1250
2950
|
currentActivePlugins?.forEach((plugin) => {
|
|
@@ -1254,26 +2954,48 @@ var PluginsTab = () => {
|
|
|
1254
2954
|
}
|
|
1255
2955
|
});
|
|
1256
2956
|
});
|
|
1257
|
-
return
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
get each() {
|
|
1261
|
-
return plugins();
|
|
2957
|
+
return createComponent(Show, {
|
|
2958
|
+
get when() {
|
|
2959
|
+
return hasPlugins();
|
|
1262
2960
|
},
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
});
|
|
1266
|
-
const isActive = createMemo(() => activePlugins().includes(plugin.id));
|
|
1267
|
-
return ssr(_tmpl$24, ssrAttribute("class", escape(clsx3(styles().pluginName, {
|
|
1268
|
-
active: isActive()
|
|
1269
|
-
}), true), false), `${escape(PLUGIN_TITLE_CONTAINER_ID, true)}-${escape(plugin.id, true)}`);
|
|
1270
|
-
}
|
|
1271
|
-
})), escape(createComponent(For, {
|
|
1272
|
-
get each() {
|
|
1273
|
-
return activePlugins();
|
|
2961
|
+
get fallback() {
|
|
2962
|
+
return createComponent(PluginMarketplace, {});
|
|
1274
2963
|
},
|
|
1275
|
-
children
|
|
1276
|
-
|
|
2964
|
+
get children() {
|
|
2965
|
+
return ssr(_tmpl$17, ssrAttribute("class", escape(styles().pluginsTabPanel, true), false), ssrAttribute("class", escape(clsx3(styles().pluginsTabDraw(expanded()), {
|
|
2966
|
+
[styles().pluginsTabDraw(expanded())]: expanded()
|
|
2967
|
+
}, styles().pluginsTabDrawTransition(animationMs)), true), false), ssrAttribute("class", escape(clsx3(styles().pluginsTabSidebar(expanded()), styles().pluginsTabSidebarTransition(animationMs)), true), false), ssrAttribute("class", escape(styles().pluginsList, true), false), escape(createComponent(For, {
|
|
2968
|
+
get each() {
|
|
2969
|
+
return plugins();
|
|
2970
|
+
},
|
|
2971
|
+
children: (plugin) => {
|
|
2972
|
+
createEffect(() => {
|
|
2973
|
+
});
|
|
2974
|
+
const isActive = createMemo(() => activePlugins().includes(plugin.id));
|
|
2975
|
+
return ssr(_tmpl$28, ssrAttribute("class", escape(clsx3(styles().pluginName, {
|
|
2976
|
+
active: isActive()
|
|
2977
|
+
}), true), false), `${escape(PLUGIN_TITLE_CONTAINER_ID, true)}-${escape(plugin.id, true)}`);
|
|
2978
|
+
}
|
|
2979
|
+
})), ssrAttribute("class", escape(clsx3(styles().pluginNameAddMore, {
|
|
2980
|
+
active: showMarketplace()
|
|
2981
|
+
}), true), false), escape(createComponent(Show, {
|
|
2982
|
+
get when() {
|
|
2983
|
+
return showMarketplace();
|
|
2984
|
+
},
|
|
2985
|
+
get fallback() {
|
|
2986
|
+
return createComponent(For, {
|
|
2987
|
+
get each() {
|
|
2988
|
+
return activePlugins();
|
|
2989
|
+
},
|
|
2990
|
+
children: (pluginId) => ssr(_tmpl$34, `${escape(PLUGIN_CONTAINER_ID, true)}-${escape(pluginId, true)}`, ssrAttribute("class", escape(styles().pluginsTabContent, true), false))
|
|
2991
|
+
});
|
|
2992
|
+
},
|
|
2993
|
+
get children() {
|
|
2994
|
+
return createComponent(PluginMarketplace, {});
|
|
2995
|
+
}
|
|
2996
|
+
})));
|
|
2997
|
+
}
|
|
2998
|
+
});
|
|
1277
2999
|
};
|
|
1278
3000
|
function useHeadChanges(onChange, opts = {}) {
|
|
1279
3001
|
const {
|
|
@@ -1337,12 +3059,12 @@ function useHeadChanges(onChange, opts = {}) {
|
|
|
1337
3059
|
}
|
|
1338
3060
|
|
|
1339
3061
|
// src/tabs/seo-tab.tsx
|
|
1340
|
-
var _tmpl$
|
|
1341
|
-
var _tmpl$
|
|
1342
|
-
var _tmpl$
|
|
1343
|
-
var _tmpl$
|
|
1344
|
-
var _tmpl$
|
|
1345
|
-
var _tmpl$
|
|
3062
|
+
var _tmpl$18 = ["<div", ' style="', '"><div', ' style="', '">', " Preview</div>", "<div", ">", "</div><div", ">", "</div><div", ">", "</div></div>"];
|
|
3063
|
+
var _tmpl$29 = ["<img", ' alt="Preview"', ">"];
|
|
3064
|
+
var _tmpl$35 = ["<div", ' style="', '">No Image</div>'];
|
|
3065
|
+
var _tmpl$44 = ["<div", ">", "</div>"];
|
|
3066
|
+
var _tmpl$53 = ["<div>", "", "</div>"];
|
|
3067
|
+
var _tmpl$63 = ["<div", "><strong>Missing tags for ", ":</strong><ul", ">", "</ul></div>"];
|
|
1346
3068
|
var _tmpl$72 = ["<li", ">", "</li>"];
|
|
1347
3069
|
var SOCIALS = [
|
|
1348
3070
|
{
|
|
@@ -1468,7 +3190,7 @@ var SOCIALS = [
|
|
|
1468
3190
|
];
|
|
1469
3191
|
function SocialPreview(props) {
|
|
1470
3192
|
const styles = useStyles();
|
|
1471
|
-
return ssr(_tmpl$
|
|
3193
|
+
return ssr(_tmpl$18, ssrAttribute("class", escape(styles().seoPreviewCard, true), false), "border-color:" + escape(props.color, true), ssrAttribute("class", escape(styles().seoPreviewHeader, true), false), "color:" + escape(props.color, true), escape(props.network), props.meta.image ? ssr(_tmpl$29, ssrAttribute("src", escape(props.meta.image, true), false), ssrAttribute("class", escape(styles().seoPreviewImage, true), false)) : ssr(_tmpl$35, ssrAttribute("class", escape(styles().seoPreviewImage, true), false), "background:#222;color:#888;display:flex;align-items:center;justify-content:center;min-height:80px;width:100%"), ssrAttribute("class", escape(styles().seoPreviewTitle, true), false), escape(props.meta.title) || "No Title", ssrAttribute("class", escape(styles().seoPreviewDesc, true), false), escape(props.meta.description) || "No Description", ssrAttribute("class", escape(styles().seoPreviewUrl, true), false), escape(props.meta.url) || escape(window.location.href));
|
|
1472
3194
|
}
|
|
1473
3195
|
var SeoTab = () => {
|
|
1474
3196
|
const [reports, setReports] = createSignal(analyzeHead());
|
|
@@ -1513,13 +3235,13 @@ var SeoTab = () => {
|
|
|
1513
3235
|
}
|
|
1514
3236
|
}), createComponent(SectionDescription, {
|
|
1515
3237
|
children: "See how your current page will look when shared on popular social networks. The tool checks for essential meta tags and highlights any that are missing."
|
|
1516
|
-
}), ssr(_tmpl$
|
|
3238
|
+
}), ssr(_tmpl$44, ssrAttribute("class", escape(styles().seoPreviewSection, true), false), escape(createComponent(For, {
|
|
1517
3239
|
get each() {
|
|
1518
3240
|
return reports();
|
|
1519
3241
|
},
|
|
1520
3242
|
children: (report, i) => {
|
|
1521
3243
|
const social = SOCIALS[i()];
|
|
1522
|
-
return ssr(_tmpl$
|
|
3244
|
+
return ssr(_tmpl$53, escape(createComponent(SocialPreview, {
|
|
1523
3245
|
get meta() {
|
|
1524
3246
|
return report.found;
|
|
1525
3247
|
},
|
|
@@ -1529,7 +3251,7 @@ var SeoTab = () => {
|
|
|
1529
3251
|
get network() {
|
|
1530
3252
|
return social.network;
|
|
1531
3253
|
}
|
|
1532
|
-
})), report.missing.length > 0 ? escape(ssr(_tmpl$
|
|
3254
|
+
})), report.missing.length > 0 ? escape(ssr(_tmpl$63, ssrAttribute("class", escape(styles().seoMissingTagsSection, true), false), escape(social?.network), ssrAttribute("class", escape(styles().seoMissingTagsList, true), false), escape(createComponent(For, {
|
|
1533
3255
|
get each() {
|
|
1534
3256
|
return report.missing;
|
|
1535
3257
|
},
|
|
@@ -1562,9 +3284,9 @@ var tabs = [{
|
|
|
1562
3284
|
}];
|
|
1563
3285
|
|
|
1564
3286
|
// src/components/tabs.tsx
|
|
1565
|
-
var _tmpl$
|
|
1566
|
-
var _tmpl$
|
|
1567
|
-
var _tmpl$
|
|
3287
|
+
var _tmpl$19 = ["<div", ">", "", "</div>"];
|
|
3288
|
+
var _tmpl$210 = ['<button type="button"', ">", "</button>"];
|
|
3289
|
+
var _tmpl$36 = ['<div style="', '"><button type="button"', ">", '</button><button type="button"', ">", "</button></div>"];
|
|
1568
3290
|
var Tabs = (props) => {
|
|
1569
3291
|
const styles = useStyles();
|
|
1570
3292
|
const {
|
|
@@ -1575,25 +3297,161 @@ var Tabs = (props) => {
|
|
|
1575
3297
|
const {
|
|
1576
3298
|
hoverUtils
|
|
1577
3299
|
} = useDrawContext();
|
|
1578
|
-
return ssr(_tmpl$
|
|
3300
|
+
return ssr(_tmpl$19, ssrAttribute("class", escape(styles().tabContainer, true), false), escape(createComponent(For, {
|
|
1579
3301
|
each: tabs,
|
|
1580
|
-
children: (tab) => ssr(_tmpl$
|
|
3302
|
+
children: (tab) => ssr(_tmpl$210, ssrAttribute("class", escape(clsx3(styles().tab, {
|
|
1581
3303
|
active: state().activeTab === tab.id
|
|
1582
3304
|
}), true), false), escape(tab.icon()))
|
|
1583
|
-
})), pipWindow().pipWindow !== null ? escape(null) : ssr(_tmpl$
|
|
3305
|
+
})), pipWindow().pipWindow !== null ? escape(null) : ssr(_tmpl$36, "margin-top:auto", ssrAttribute("class", escape(clsx3(styles().tab, "detach"), true), false), escape(createComponent(PiP, {})), ssrAttribute("class", escape(clsx3(styles().tab, "close"), true), false), escape(createComponent(X, {}))));
|
|
1584
3306
|
};
|
|
1585
|
-
var _tmpl$
|
|
3307
|
+
var _tmpl$20 = ["<div", ">", "</div>"];
|
|
1586
3308
|
var TabContent = () => {
|
|
1587
3309
|
const {
|
|
1588
3310
|
state
|
|
1589
3311
|
} = useDevtoolsState();
|
|
1590
3312
|
const styles = useStyles();
|
|
1591
3313
|
const component = createMemo(() => tabs.find((t) => t.id === state().activeTab)?.component || null);
|
|
1592
|
-
return ssr(_tmpl$
|
|
3314
|
+
return ssr(_tmpl$20, ssrAttribute("class", escape(styles().tabContent, true), false), escape(component()?.()));
|
|
3315
|
+
};
|
|
3316
|
+
var _tmpl$21 = ['<div style="', '">', "</div>"];
|
|
3317
|
+
var _tmpl$211 = ['<div style="', '"></div>'];
|
|
3318
|
+
var SourceInspector = () => {
|
|
3319
|
+
const highlightStateInit = () => ({
|
|
3320
|
+
element: null,
|
|
3321
|
+
bounding: {
|
|
3322
|
+
width: 0,
|
|
3323
|
+
height: 0,
|
|
3324
|
+
left: 0,
|
|
3325
|
+
top: 0
|
|
3326
|
+
},
|
|
3327
|
+
dataSource: ""
|
|
3328
|
+
});
|
|
3329
|
+
const [highlightState, setHighlightState] = createStore(highlightStateInit());
|
|
3330
|
+
const resetHighlight = () => {
|
|
3331
|
+
setHighlightState(highlightStateInit());
|
|
3332
|
+
};
|
|
3333
|
+
const [nameTagRef, setNameTagRef] = createSignal(null);
|
|
3334
|
+
const nameTagSize = createElementSize(() => nameTagRef());
|
|
3335
|
+
const [mousePosition, setMousePosition] = createStore({
|
|
3336
|
+
x: 0,
|
|
3337
|
+
y: 0
|
|
3338
|
+
});
|
|
3339
|
+
createEventListener(document, "mousemove", (e) => {
|
|
3340
|
+
setMousePosition({
|
|
3341
|
+
x: e.clientX,
|
|
3342
|
+
y: e.clientY
|
|
3343
|
+
});
|
|
3344
|
+
});
|
|
3345
|
+
const downList = useKeyDownList();
|
|
3346
|
+
const isHighlightingKeysHeld = createMemo(() => {
|
|
3347
|
+
const keys = downList();
|
|
3348
|
+
const isShiftHeld = keys.includes("SHIFT");
|
|
3349
|
+
const isCtrlHeld = keys.includes("CONTROL");
|
|
3350
|
+
const isMetaHeld = keys.includes("META");
|
|
3351
|
+
return isShiftHeld && (isCtrlHeld || isMetaHeld);
|
|
3352
|
+
});
|
|
3353
|
+
createEffect(() => {
|
|
3354
|
+
if (!isHighlightingKeysHeld()) {
|
|
3355
|
+
resetHighlight();
|
|
3356
|
+
return;
|
|
3357
|
+
}
|
|
3358
|
+
const target = document.elementFromPoint(mousePosition.x, mousePosition.y);
|
|
3359
|
+
if (!(target instanceof HTMLElement)) {
|
|
3360
|
+
resetHighlight();
|
|
3361
|
+
return;
|
|
3362
|
+
}
|
|
3363
|
+
if (target === highlightState.element) {
|
|
3364
|
+
return;
|
|
3365
|
+
}
|
|
3366
|
+
const dataSource = target.getAttribute("data-tsd-source");
|
|
3367
|
+
if (!dataSource) {
|
|
3368
|
+
resetHighlight();
|
|
3369
|
+
return;
|
|
3370
|
+
}
|
|
3371
|
+
const rect = target.getBoundingClientRect();
|
|
3372
|
+
const bounding = {
|
|
3373
|
+
width: rect.width,
|
|
3374
|
+
height: rect.height,
|
|
3375
|
+
left: rect.left,
|
|
3376
|
+
top: rect.top
|
|
3377
|
+
};
|
|
3378
|
+
setHighlightState({
|
|
3379
|
+
element: target,
|
|
3380
|
+
bounding,
|
|
3381
|
+
dataSource
|
|
3382
|
+
});
|
|
3383
|
+
});
|
|
3384
|
+
createEventListener(document, "click", (e) => {
|
|
3385
|
+
if (!highlightState.element) return;
|
|
3386
|
+
window.getSelection()?.removeAllRanges();
|
|
3387
|
+
e.preventDefault();
|
|
3388
|
+
e.stopPropagation();
|
|
3389
|
+
fetch(`${location.origin}/__tsd/open-source?source=${encodeURIComponent(highlightState.dataSource)}`).catch(() => {
|
|
3390
|
+
});
|
|
3391
|
+
});
|
|
3392
|
+
const currentElementBoxStyles = createMemo(() => {
|
|
3393
|
+
if (highlightState.element) {
|
|
3394
|
+
return {
|
|
3395
|
+
display: "block",
|
|
3396
|
+
width: `${highlightState.bounding.width}px`,
|
|
3397
|
+
height: `${highlightState.bounding.height}px`,
|
|
3398
|
+
left: `${highlightState.bounding.left}px`,
|
|
3399
|
+
top: `${highlightState.bounding.top}px`,
|
|
3400
|
+
"background-color": "oklch(55.4% 0.046 257.417 /0.25)",
|
|
3401
|
+
transition: "all 0.05s linear",
|
|
3402
|
+
position: "fixed",
|
|
3403
|
+
"z-index": 9999
|
|
3404
|
+
};
|
|
3405
|
+
}
|
|
3406
|
+
return {
|
|
3407
|
+
display: "none"
|
|
3408
|
+
};
|
|
3409
|
+
});
|
|
3410
|
+
const fileNameStyles = createMemo(() => {
|
|
3411
|
+
if (highlightState.element && nameTagRef()) {
|
|
3412
|
+
const windowWidth = window.innerWidth;
|
|
3413
|
+
const nameTagHeight = nameTagSize.height || 26;
|
|
3414
|
+
const nameTagWidth = nameTagSize.width || 0;
|
|
3415
|
+
let left = highlightState.bounding.left;
|
|
3416
|
+
let top = highlightState.bounding.top - nameTagHeight - 4;
|
|
3417
|
+
if (top < 0) {
|
|
3418
|
+
top = highlightState.bounding.top + highlightState.bounding.height + 4;
|
|
3419
|
+
}
|
|
3420
|
+
if (left + nameTagWidth > windowWidth) {
|
|
3421
|
+
left = windowWidth - nameTagWidth - 4;
|
|
3422
|
+
}
|
|
3423
|
+
if (left < 0) {
|
|
3424
|
+
left = 4;
|
|
3425
|
+
}
|
|
3426
|
+
return {
|
|
3427
|
+
position: "fixed",
|
|
3428
|
+
left: `${left}px`,
|
|
3429
|
+
top: `${top}px`,
|
|
3430
|
+
"background-color": "oklch(55.4% 0.046 257.417 /0.80)",
|
|
3431
|
+
color: "white",
|
|
3432
|
+
padding: "2px 4px",
|
|
3433
|
+
fontSize: "12px",
|
|
3434
|
+
"border-radius": "2px",
|
|
3435
|
+
"z-index": 1e4,
|
|
3436
|
+
visibility: "visible",
|
|
3437
|
+
transition: "all 0.05s linear"
|
|
3438
|
+
};
|
|
3439
|
+
}
|
|
3440
|
+
return {
|
|
3441
|
+
display: "none"
|
|
3442
|
+
};
|
|
3443
|
+
});
|
|
3444
|
+
return [ssr(_tmpl$21, ssrStyle({
|
|
3445
|
+
...fileNameStyles(),
|
|
3446
|
+
"pointer-events": "none"
|
|
3447
|
+
}), escape(highlightState.dataSource)), ssr(_tmpl$211, ssrStyle({
|
|
3448
|
+
...currentElementBoxStyles(),
|
|
3449
|
+
"pointer-events": "none"
|
|
3450
|
+
}))];
|
|
1593
3451
|
};
|
|
1594
3452
|
|
|
1595
3453
|
// src/devtools.tsx
|
|
1596
|
-
var _tmpl$
|
|
3454
|
+
var _tmpl$30 = ["<div", ">", "", "</div>"];
|
|
1597
3455
|
function DevTools() {
|
|
1598
3456
|
const {
|
|
1599
3457
|
settings
|
|
@@ -1677,27 +3535,6 @@ function DevTools() {
|
|
|
1677
3535
|
});
|
|
1678
3536
|
}
|
|
1679
3537
|
});
|
|
1680
|
-
createEffect(() => {
|
|
1681
|
-
const openSourceHandler = (e) => {
|
|
1682
|
-
const isShiftHeld = e.shiftKey;
|
|
1683
|
-
const isCtrlHeld = e.ctrlKey || e.metaKey;
|
|
1684
|
-
if (!isShiftHeld || !isCtrlHeld) return;
|
|
1685
|
-
if (e.target instanceof HTMLElement) {
|
|
1686
|
-
const dataSource = e.target.getAttribute("data-tsd-source");
|
|
1687
|
-
window.getSelection()?.removeAllRanges();
|
|
1688
|
-
if (dataSource) {
|
|
1689
|
-
e.preventDefault();
|
|
1690
|
-
e.stopPropagation();
|
|
1691
|
-
fetch(`${location.origin}/__tsd/open-source?source=${encodeURIComponent(dataSource)}`).catch(() => {
|
|
1692
|
-
});
|
|
1693
|
-
}
|
|
1694
|
-
}
|
|
1695
|
-
};
|
|
1696
|
-
window.addEventListener("click", openSourceHandler);
|
|
1697
|
-
onCleanup(() => {
|
|
1698
|
-
window.removeEventListener("click", openSourceHandler);
|
|
1699
|
-
});
|
|
1700
|
-
});
|
|
1701
3538
|
const {
|
|
1702
3539
|
theme
|
|
1703
3540
|
} = useTheme();
|
|
@@ -1711,7 +3548,7 @@ function DevTools() {
|
|
|
1711
3548
|
return (pip().pipWindow ?? window).document.body;
|
|
1712
3549
|
},
|
|
1713
3550
|
get children() {
|
|
1714
|
-
return ssr(_tmpl$
|
|
3551
|
+
return ssr(_tmpl$30, ssrAttribute("data-testid", escape(TANSTACK_DEVTOOLS, true), false), escape(createComponent(Show, {
|
|
1715
3552
|
get when() {
|
|
1716
3553
|
return pip().pipWindow !== null ? true : settings().requireUrlFlag ? window.location.search.includes(settings().urlFlag) : true;
|
|
1717
3554
|
},
|
|
@@ -1737,7 +3574,7 @@ function DevTools() {
|
|
|
1737
3574
|
}
|
|
1738
3575
|
})];
|
|
1739
3576
|
}
|
|
1740
|
-
})));
|
|
3577
|
+
})), escape(createComponent(SourceInspector, {})));
|
|
1741
3578
|
}
|
|
1742
3579
|
});
|
|
1743
3580
|
}
|