shadcn-studio-extension-cli 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD_PARTY_LICENSES.txt +1 -1
- package/dist/build-meta.json +6 -6
- package/dist/index.cjs +3 -7
- package/dist/index.cjs.map +3 -3
- package/dist/toolbar-app/.vite/manifest.json +4 -4
- package/dist/toolbar-app/index-B0k7lxog.js +8907 -0
- package/dist/toolbar-app/{index-DZzSFjno.js → index-BEof4Zuj.js} +15 -13
- package/dist/toolbar-app/{index-BZHOXnId.js → index-BWhYIR3j.js} +5 -4
- package/dist/toolbar-app/index-BZPb_m5H.js +15301 -0
- package/dist/toolbar-app/index-CcQR8qhj.js +2 -2
- package/dist/toolbar-app/index-CkT0X5qN.js +8918 -0
- package/dist/toolbar-app/{index-pswOz6KO.js → index-DSOLAkGe.js} +29 -24
- package/dist/toolbar-app/{index-rW3Giydl.js → index-DVhsFHfB.js} +6 -5
- package/dist/toolbar-app/{index-ChCX2CjU.js → index-DfTwb8mq.js} +10 -9
- package/dist/toolbar-app/{index-BsmHzFJI.js → index-KEJk4WhW.js} +24 -9
- package/dist/toolbar-app/index-qh9EWxJX.js +8918 -0
- package/dist/toolbar-app/index.js +90 -77
- package/dist/toolbar-app/plugin-sdk.js +2 -2
- package/package.json +1 -1
- package/dist/toolbar-app/index-C5kLbmuE.js +0 -8917
- package/dist/toolbar-app/index-CK3aj61v.js +0 -8916
- package/dist/toolbar-app/index-COSu8H98.js +0 -8918
- package/dist/toolbar-app/index-CPzOXT0l.js +0 -8884
- package/dist/toolbar-app/index-CQOfGa9p.js +0 -8916
- package/dist/toolbar-app/index-CZ2quOq0.js +0 -8917
- package/dist/toolbar-app/index-CoMQvcfw.js +0 -8880
- package/dist/toolbar-app/index-CtdhG9I0.js +0 -8905
- package/dist/toolbar-app/index-DJ16UPrG.js +0 -8912
- package/dist/toolbar-app/index-DKAggkAP.js +0 -8880
- package/dist/toolbar-app/index-D_JMEWJE.js +0 -8892
- package/dist/toolbar-app/index-LNolXi86.js +0 -8901
|
@@ -2,7 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import React__default, { createContext, useState, useEffect, useContext, useCallback, useMemo, useRef, forwardRef, createElement, useLayoutEffect, Fragment as Fragment$1, isValidElement, cloneElement, useId as useId$1, useReducer, useSyncExternalStore, createRef, useImperativeHandle, StrictMode } from "react";
|
|
3
3
|
import { createRoot } from "react-dom/client";
|
|
4
4
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
5
|
-
import { A as AgentStateType, u as useAgents, a as useAppState, b as usePlugins, c as useAgentMessaging, d as usePanels, g as getSelectedElementInfo, e as getSelectedDocInfo, f as getSelectedBlockInfo, h as getSelectedThemeInfo, i as collectUserMessageMetadata, j as generateId, C as ConfigProvider, k as AgentProvider, l as AgentAvailabilityProvider, m as AgentMessagingProvider, P as PanelsProvider, n as PluginProvider, H as HotkeyActions, o as hotkeyActionDefinitions, p as getIFrameWindow, q as cn, r as getElementAtPoint, s as getXPathForElement, B as Button, t as glassyBoxClassName, v as AgentAvailabilityError, w as useAgentAvailability, x as Panel, y as PanelHeader, z as PanelContent, D as PanelFooter, E as cva, F as getLicenseDataFromStorage, G as Glassy, I as AppStateProvider } from "index-
|
|
5
|
+
import { A as AgentStateType, u as useAgents, a as useAppState, b as usePlugins, c as useAgentMessaging, d as usePanels, g as getSelectedElementInfo, e as getSelectedDocInfo, f as getSelectedBlockInfo, h as getSelectedThemeInfo, i as collectUserMessageMetadata, j as generateId, C as ConfigProvider, k as AgentProvider, l as AgentAvailabilityProvider, m as AgentMessagingProvider, P as PanelsProvider, n as PluginProvider, H as HotkeyActions, o as hotkeyActionDefinitions, p as getIFrameWindow, q as cn, r as getElementAtPoint, s as getXPathForElement, B as Button, t as glassyBoxClassName, v as AgentAvailabilityError, w as useAgentAvailability, x as Panel, y as PanelHeader, z as PanelContent, D as PanelFooter, E as cva, F as getLicenseDataFromStorage, G as Glassy, I as AppStateProvider } from "index-B0k7lxog.js";
|
|
6
6
|
import * as ReactDOM from "react-dom";
|
|
7
7
|
import { createPortal, flushSync } from "react-dom";
|
|
8
8
|
import config from "@stagewise/toolbar/config";
|
|
@@ -68,7 +68,7 @@ const useAgentState = () => useContext(agentStateContext), ChatContext = createC
|
|
|
68
68
|
},
|
|
69
69
|
isSending: !1
|
|
70
70
|
}), ChatStateProvider = ({ children }) => {
|
|
71
|
-
const [chatInput, setChatInput] = useState(""), [isPromptCreationMode, setIsPromptCreationMode] = useState(!1), [isSending, setIsSending] = useState(!1), [domContextElements, setDomContextElements] = useState([]), [selectedDocs, setSelectedDocs] = useState([]), [selectedBlocks, setSelectedBlocks] = useState([]), [selectedThemes, setSelectedThemes] = useState([]), { minimized } = useAppState(), { plugins } = usePlugins(), { sendMessage: sendAgentMessage } = useAgentMessaging(), { isChatOpen } = usePanels(), agentState = useAgentState(), { promptAction
|
|
71
|
+
const [chatInput, setChatInput] = useState(""), [isPromptCreationMode, setIsPromptCreationMode] = useState(!1), [isSending, setIsSending] = useState(!1), [domContextElements, setDomContextElements] = useState([]), [selectedDocs, setSelectedDocs] = useState([]), [selectedBlocks, setSelectedBlocks] = useState([]), [selectedThemes, setSelectedThemes] = useState([]), { minimized } = useAppState(), { plugins } = usePlugins(), { sendMessage: sendAgentMessage } = useAgentMessaging(), { isChatOpen } = usePanels(), agentState = useAgentState(), { promptAction } = useAppState(), startPromptCreation = useCallback(() => {
|
|
72
72
|
setIsPromptCreationMode(!0), plugins.forEach((plugin) => {
|
|
73
73
|
var _a;
|
|
74
74
|
(_a = plugin.onPromptingStart) == null || _a.call(plugin);
|
|
@@ -143,16 +143,15 @@ const useAgentState = () => useContext(agentStateContext), ChatContext = createC
|
|
|
143
143
|
), selectedDocsInfo = selectedDocs.map(
|
|
144
144
|
(doc) => getSelectedDocInfo(doc)
|
|
145
145
|
), selectedBlocksInfo = await Promise.all(
|
|
146
|
-
selectedBlocks.map((block) => getSelectedBlockInfo(block
|
|
146
|
+
selectedBlocks.map((block) => getSelectedBlockInfo(block))
|
|
147
147
|
), selectedThemesInfo = selectedThemes.map(
|
|
148
|
-
(theme) => getSelectedThemeInfo(theme
|
|
148
|
+
(theme) => getSelectedThemeInfo(theme)
|
|
149
149
|
), metadata = collectUserMessageMetadata(
|
|
150
150
|
selectedElementsInfo,
|
|
151
151
|
selectedDocsInfo,
|
|
152
152
|
selectedBlocksInfo,
|
|
153
153
|
selectedThemesInfo,
|
|
154
|
-
promptAction
|
|
155
|
-
cliVersion
|
|
154
|
+
promptAction
|
|
156
155
|
), baseUserMessage = {
|
|
157
156
|
id: generateId(),
|
|
158
157
|
createdAt: /* @__PURE__ */ new Date(),
|
|
@@ -7120,23 +7119,34 @@ const performLocalSearch = (blocks, query) => {
|
|
|
7120
7119
|
return new Fuse(blocks, fuseLocalSearchOptions).search(query).map((result) => result.item);
|
|
7121
7120
|
}, filterProBlocks = (blocks) => blocks.filter((block) => {
|
|
7122
7121
|
var _a;
|
|
7123
|
-
return ((_a = block.meta) == null ? void 0 : _a.
|
|
7124
|
-
}),
|
|
7125
|
-
const
|
|
7122
|
+
return ((_a = block.meta) == null ? void 0 : _a.isBasic) === !1;
|
|
7123
|
+
}), checkPlan$1 = async (licenseKey, email) => {
|
|
7124
|
+
const fetchPlanUrl = `http://localhost:3000/api/ide-extension/plan-variant?email=${email}&license_key=${licenseKey}`;
|
|
7125
|
+
try {
|
|
7126
|
+
return (await (await fetch(fetchPlanUrl, { method: "GET" })).json()).plan_variant;
|
|
7127
|
+
} catch (error2) {
|
|
7128
|
+
console.error("Failed to fetch plan variant:", error2);
|
|
7129
|
+
}
|
|
7130
|
+
}, fetchBlocksFromAPI = async (isValidated, licenseKey, email) => {
|
|
7131
|
+
const fetchBlocksUrl = "https://shadcnstudio.com/r/blocks/radix-vega/registry.json?is_extension=true";
|
|
7126
7132
|
try {
|
|
7127
7133
|
const response = await fetch(fetchBlocksUrl, { method: "GET" });
|
|
7128
7134
|
if (!response.ok)
|
|
7129
7135
|
return console.warn(
|
|
7130
7136
|
`Failed to fetch blocks: ${response.status} ${response.statusText}`
|
|
7131
7137
|
), [];
|
|
7132
|
-
let blocks = (await response.json()).items;
|
|
7133
|
-
return isValidated || (blocks = filterProBlocks(blocks)), blocks;
|
|
7138
|
+
let blocks = (await response.json()).items, planVariant = "basic";
|
|
7139
|
+
return isValidated && licenseKey && email && (planVariant = await checkPlan$1(licenseKey, email)), console.log("User plan variant:", planVariant, "isValidated:", isValidated), (!isValidated || isValidated && planVariant === "basic") && (blocks = filterProBlocks(blocks)), blocks;
|
|
7134
7140
|
} catch (error2) {
|
|
7135
7141
|
return console.warn("Error fetching blocks:", error2), [];
|
|
7136
7142
|
}
|
|
7137
|
-
}, fetchAndSearchBlocks = async (query, isValidated) => {
|
|
7143
|
+
}, fetchAndSearchBlocks = async (query, isValidated, licenseKey, email) => {
|
|
7138
7144
|
try {
|
|
7139
|
-
const searchResults = await fetchBlocksFromAPI(
|
|
7145
|
+
const searchResults = await fetchBlocksFromAPI(
|
|
7146
|
+
isValidated,
|
|
7147
|
+
licenseKey,
|
|
7148
|
+
email
|
|
7149
|
+
);
|
|
7140
7150
|
if (searchResults.length === 0)
|
|
7141
7151
|
return [];
|
|
7142
7152
|
const fuseBlocksOptions = {
|
|
@@ -7161,7 +7171,9 @@ const performLocalSearch = (blocks, query) => {
|
|
|
7161
7171
|
isValidated,
|
|
7162
7172
|
debounceMs = 200,
|
|
7163
7173
|
minScore = 0.35,
|
|
7164
|
-
maxResults = 20
|
|
7174
|
+
maxResults = 20,
|
|
7175
|
+
licenseKey,
|
|
7176
|
+
email
|
|
7165
7177
|
} = options2, [searchResults, setSearchResults] = useState([]), [isSearching, setIsSearching] = useState(!1), [searchError, setSearchError] = useState(null);
|
|
7166
7178
|
return useEffect(() => {
|
|
7167
7179
|
if (!(searchQuery != null && searchQuery.trim())) {
|
|
@@ -7173,7 +7185,12 @@ const performLocalSearch = (blocks, query) => {
|
|
|
7173
7185
|
try {
|
|
7174
7186
|
const query = searchQuery.trim().toLowerCase(), localResults = performLocalSearch(localBlocks, query);
|
|
7175
7187
|
setSearchResults(localResults);
|
|
7176
|
-
const apiResults = await fetchAndSearchBlocks(
|
|
7188
|
+
const apiResults = await fetchAndSearchBlocks(
|
|
7189
|
+
query,
|
|
7190
|
+
isValidated,
|
|
7191
|
+
licenseKey,
|
|
7192
|
+
email
|
|
7193
|
+
);
|
|
7177
7194
|
if (apiResults.length > 0) {
|
|
7178
7195
|
const combinedResults = [...apiResults, ...localResults], uniqueResults = removeDuplicateBlocks(combinedResults);
|
|
7179
7196
|
setSearchResults(uniqueResults);
|
|
@@ -7186,7 +7203,16 @@ const performLocalSearch = (blocks, query) => {
|
|
|
7186
7203
|
}
|
|
7187
7204
|
}, debounceMs);
|
|
7188
7205
|
return () => clearTimeout(searchTimeout);
|
|
7189
|
-
}, [
|
|
7206
|
+
}, [
|
|
7207
|
+
searchQuery,
|
|
7208
|
+
localBlocks,
|
|
7209
|
+
isValidated,
|
|
7210
|
+
debounceMs,
|
|
7211
|
+
minScore,
|
|
7212
|
+
maxResults,
|
|
7213
|
+
licenseKey,
|
|
7214
|
+
email
|
|
7215
|
+
]), {
|
|
7190
7216
|
searchResults,
|
|
7191
7217
|
isSearching,
|
|
7192
7218
|
searchError
|
|
@@ -7227,18 +7253,26 @@ function useLicenseKey() {
|
|
|
7227
7253
|
}, [loadLicenseKey]);
|
|
7228
7254
|
const validateLicenseKey = useCallback(
|
|
7229
7255
|
async (licensekey, email) => {
|
|
7230
|
-
if (!licensekey || typeof licensekey != "string"
|
|
7231
|
-
return !1;
|
|
7232
|
-
|
|
7256
|
+
if (!licensekey || typeof licensekey != "string")
|
|
7257
|
+
return { isValid: !1, message: "Invalid license key" };
|
|
7258
|
+
if (!email || typeof email != "string" || !email.includes("@"))
|
|
7259
|
+
return { isValid: !1, message: "Invalid email" };
|
|
7260
|
+
const trimmedLicenseKey = licensekey.trim(), validateUrl = `http://localhost:3000/api/ide-extension/validate-user?email=${email.trim()}&license_key=${trimmedLicenseKey}`, response = await fetch(validateUrl, {
|
|
7233
7261
|
method: "GET",
|
|
7234
7262
|
headers: {
|
|
7235
7263
|
"Content-Type": "application/json"
|
|
7236
7264
|
}
|
|
7237
|
-
});
|
|
7238
|
-
return response.ok ?
|
|
7265
|
+
}), data = await response.json();
|
|
7266
|
+
return response.ok ? {
|
|
7267
|
+
isValid: !0,
|
|
7268
|
+
message: data.message || "License key validation successful"
|
|
7269
|
+
} : (console.error(
|
|
7239
7270
|
"License key validation request failed:",
|
|
7240
7271
|
response.status
|
|
7241
|
-
),
|
|
7272
|
+
), {
|
|
7273
|
+
isValid: !1,
|
|
7274
|
+
message: data.message
|
|
7275
|
+
});
|
|
7242
7276
|
},
|
|
7243
7277
|
[]
|
|
7244
7278
|
), saveLicenseKey = useCallback(
|
|
@@ -7294,7 +7328,7 @@ function useLicenseKey() {
|
|
|
7294
7328
|
}
|
|
7295
7329
|
}, []), refreshLicenseValidation = useCallback(async () => {
|
|
7296
7330
|
if (!licenseState.licenseKey)
|
|
7297
|
-
return !1;
|
|
7331
|
+
return { isValid: !1, message: "No license key found" };
|
|
7298
7332
|
try {
|
|
7299
7333
|
const isValid = await validateLicenseKey(
|
|
7300
7334
|
licenseState.licenseKey,
|
|
@@ -7320,7 +7354,10 @@ function useLicenseKey() {
|
|
|
7320
7354
|
removeLicenseKey();
|
|
7321
7355
|
return isValid;
|
|
7322
7356
|
} catch (error2) {
|
|
7323
|
-
return console.error("Failed to refresh license validation:", error2),
|
|
7357
|
+
return console.error("Failed to refresh license validation:", error2), {
|
|
7358
|
+
isValid: !1,
|
|
7359
|
+
message: "Failed to refresh license validation"
|
|
7360
|
+
};
|
|
7324
7361
|
}
|
|
7325
7362
|
}, [licenseState.licenseKey, validateLicenseKey, removeLicenseKey]), needsRevalidation = useCallback(() => licenseState.lastValidated ? (Date.now() - licenseState.lastValidated.getTime()) / (1e3 * 60 * 60) > 24 : !0, [licenseState.lastValidated]);
|
|
7326
7363
|
return {
|
|
@@ -7365,7 +7402,7 @@ const RECENT_BLOCKS_KEY = "shadcnstudio-toolbar-blocks-recent", getRecentBlocks
|
|
|
7365
7402
|
onCloseBlocks,
|
|
7366
7403
|
onReady
|
|
7367
7404
|
}, ref) => {
|
|
7368
|
-
const { isValidated } = useLicenseKey(), [recentBlocks, setRecentBlocks] = useState([]);
|
|
7405
|
+
const { isValidated, licenseKey, email } = useLicenseKey(), [recentBlocks, setRecentBlocks] = useState([]);
|
|
7369
7406
|
useEffect(() => {
|
|
7370
7407
|
setRecentBlocks(getRecentBlocks());
|
|
7371
7408
|
}, []);
|
|
@@ -7379,7 +7416,7 @@ const RECENT_BLOCKS_KEY = "shadcnstudio-toolbar-blocks-recent", getRecentBlocks
|
|
|
7379
7416
|
}, [recentBlocks]), { searchResults, isSearching, searchError } = useBlockSearch(
|
|
7380
7417
|
searchQuery || "",
|
|
7381
7418
|
localBlocks,
|
|
7382
|
-
{ isValidated, debounceMs: 500 }
|
|
7419
|
+
{ isValidated, debounceMs: 500, licenseKey, email }
|
|
7383
7420
|
), filteredBlocks = useMemo(() => searchQuery != null && searchQuery.trim() ? searchResults : localBlocks, [searchQuery, searchResults, localBlocks]), [activeIndex, setActiveIndex] = useState(-1), [startIndex, setStartIndex] = useState(0), [isFocused, setIsFocused] = useState(!1), containerRef = useRef(null), visibleBlocks = useMemo(() => filteredBlocks.slice(startIndex, startIndex + 3), [filteredBlocks, startIndex]);
|
|
7384
7421
|
useEffect(() => {
|
|
7385
7422
|
activeIndex >= filteredBlocks.length && filteredBlocks.length > 0 ? (setActiveIndex(filteredBlocks.length - 1), setStartIndex(Math.max(0, filteredBlocks.length - 3))) : filteredBlocks.length === 0 && activeIndex !== -1 && (setActiveIndex(-1), setStartIndex(0));
|
|
@@ -8007,25 +8044,44 @@ const fetchGenericThemesFromAPI = async () => {
|
|
|
8007
8044
|
const fetchThemesUrl = "https://shadcnstudio.com/r/themes/registry.json?is_extension=true";
|
|
8008
8045
|
try {
|
|
8009
8046
|
const response = await fetch(fetchThemesUrl, { method: "GET" });
|
|
8010
|
-
return response.ok ? (await response.json()).items
|
|
8047
|
+
return response.ok ? (await response.json()).items.map((theme) => ({
|
|
8048
|
+
...theme,
|
|
8049
|
+
type: "generic"
|
|
8050
|
+
})) : (console.warn(
|
|
8011
8051
|
`Failed to fetch themes: ${response.status} ${response.statusText}`
|
|
8012
8052
|
), []);
|
|
8013
8053
|
} catch (error2) {
|
|
8014
8054
|
return console.warn("Error fetching themes:", error2), [];
|
|
8015
8055
|
}
|
|
8056
|
+
}, checkPlan = async () => {
|
|
8057
|
+
const { email, licenseKey } = getLicenseDataFromStorage();
|
|
8058
|
+
if (!email || !licenseKey)
|
|
8059
|
+
return "basic";
|
|
8060
|
+
const fetchPlanUrl = `http://localhost:3000/api/ide-extension/plan-variant?email=${email}&license_key=${licenseKey}`;
|
|
8061
|
+
try {
|
|
8062
|
+
return (await (await fetch(fetchPlanUrl, { method: "GET" })).json()).plan_variant;
|
|
8063
|
+
} catch (error2) {
|
|
8064
|
+
console.error("Failed to fetch plan variant:", error2);
|
|
8065
|
+
}
|
|
8016
8066
|
}, fetchUserThemesFromAPI = async () => {
|
|
8017
|
-
const { email, licenseKey } = getLicenseDataFromStorage(), fetchThemesUrl = `
|
|
8067
|
+
const { email, licenseKey } = getLicenseDataFromStorage(), fetchThemesUrl = `http://localhost:3000/api/ide-extension/user-themes?email=${email}&license_key=${licenseKey}&is_extension=true`;
|
|
8018
8068
|
try {
|
|
8019
8069
|
const response = await fetch(fetchThemesUrl, { method: "GET" });
|
|
8020
|
-
return response.ok ? (await response.json()).themes
|
|
8070
|
+
return response.ok ? (await response.json()).themes.map((theme) => ({
|
|
8071
|
+
...theme,
|
|
8072
|
+
type: "user"
|
|
8073
|
+
})) : (console.warn(
|
|
8021
8074
|
`Failed to fetch themes: ${response.status} ${response.statusText}`
|
|
8022
8075
|
), []);
|
|
8023
8076
|
} catch (error2) {
|
|
8024
8077
|
return console.warn("Error fetching themes:", error2), [];
|
|
8025
8078
|
}
|
|
8026
8079
|
}, fetchThemesFromAPI = async () => {
|
|
8027
|
-
const userThemes = await fetchUserThemesFromAPI(), genericThemes = await fetchGenericThemesFromAPI();
|
|
8028
|
-
return
|
|
8080
|
+
const userThemes = await fetchUserThemesFromAPI(), genericThemes = await fetchGenericThemesFromAPI(), userPlan = await checkPlan(), allThemes = userThemes.length > 0 ? [...userThemes, ...genericThemes] : genericThemes;
|
|
8081
|
+
return userPlan === "basic" ? allThemes.filter((theme) => {
|
|
8082
|
+
var _a;
|
|
8083
|
+
return ((_a = theme.meta) == null ? void 0 : _a.isPro) !== !0;
|
|
8084
|
+
}) : allThemes;
|
|
8029
8085
|
}, fetchAndSearchThemes = async (searchQuery) => {
|
|
8030
8086
|
try {
|
|
8031
8087
|
const searchResults = await fetchThemesFromAPI();
|
|
@@ -10534,9 +10590,9 @@ function LicenseKeyDialog({
|
|
|
10534
10590
|
}
|
|
10535
10591
|
setIsValidating(!0), setValidationError(null);
|
|
10536
10592
|
try {
|
|
10537
|
-
console.log("In handle Save function Validating license key:", inputKey), console.log("In handle save function With email:", email)
|
|
10538
|
-
|
|
10539
|
-
);
|
|
10593
|
+
console.log("In handle Save function Validating license key:", inputKey), console.log("In handle save function With email:", email);
|
|
10594
|
+
const isValid = await validateLicenseKey(inputKey.trim(), email.trim());
|
|
10595
|
+
console.log("License key validation result:", isValid), isValid.isValid ? (await saveLicenseKey(inputKey.trim(), email.trim()), setInputKey(""), onClose()) : (console.log("License key validation failed:", isValid), setValidationError(isValid.message || "Invalid license key or Email"));
|
|
10540
10596
|
} catch (error2) {
|
|
10541
10597
|
setValidationError(
|
|
10542
10598
|
error2 instanceof Error ? error2.message : "Failed to validate license key"
|
|
@@ -10889,47 +10945,6 @@ function PromptActionSelector() {
|
|
|
10889
10945
|
] })
|
|
10890
10946
|
] }) });
|
|
10891
10947
|
}
|
|
10892
|
-
function ShadcnCliVersionSelector() {
|
|
10893
|
-
const { cliVersion, setCliVersion } = useAppState();
|
|
10894
|
-
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
10895
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
|
|
10896
|
-
/* @__PURE__ */ jsx("div", { className: "font-medium text-foreground text-sm", children: "Shadcn CLI version" }),
|
|
10897
|
-
/* @__PURE__ */ jsx("div", { className: "text-muted-foreground text-xs", children: "Set your preferred shadcn CLI version." })
|
|
10898
|
-
] }),
|
|
10899
|
-
/* @__PURE__ */ jsxs(DropdownMenu, { children: [
|
|
10900
|
-
/* @__PURE__ */ jsx(DropdownMenuButton, { children: /* @__PURE__ */ jsxs(
|
|
10901
|
-
Button,
|
|
10902
|
-
{
|
|
10903
|
-
size: "sm",
|
|
10904
|
-
variant: "ghost",
|
|
10905
|
-
className: "flex items-center gap-2 rounded-md text-xs",
|
|
10906
|
-
children: [
|
|
10907
|
-
cliVersion === "v2" && "v2",
|
|
10908
|
-
cliVersion === "v3" && "v3"
|
|
10909
|
-
]
|
|
10910
|
-
}
|
|
10911
|
-
) }),
|
|
10912
|
-
/* @__PURE__ */ jsxs(DropdownMenuContent, { children: [
|
|
10913
|
-
/* @__PURE__ */ jsx(
|
|
10914
|
-
DropdownMenuButtonItem,
|
|
10915
|
-
{
|
|
10916
|
-
onClick: () => setCliVersion("v2"),
|
|
10917
|
-
className: "flex items-center gap-2",
|
|
10918
|
-
children: "v2"
|
|
10919
|
-
}
|
|
10920
|
-
),
|
|
10921
|
-
/* @__PURE__ */ jsx(
|
|
10922
|
-
DropdownMenuButtonItem,
|
|
10923
|
-
{
|
|
10924
|
-
onClick: () => setCliVersion("v3"),
|
|
10925
|
-
className: "flex items-center gap-2",
|
|
10926
|
-
children: "v3"
|
|
10927
|
-
}
|
|
10928
|
-
)
|
|
10929
|
-
] })
|
|
10930
|
-
] })
|
|
10931
|
-
] }) });
|
|
10932
|
-
}
|
|
10933
10948
|
function SettingsPanel() {
|
|
10934
10949
|
const { closeSettings } = usePanels();
|
|
10935
10950
|
return /* @__PURE__ */ jsxs(Panel, { children: [
|
|
@@ -10959,8 +10974,6 @@ function SettingsPanel() {
|
|
|
10959
10974
|
/* @__PURE__ */ jsx("hr", { className: "-mx-4 text-zinc-500/15 dark:text-zinc-500/30" }),
|
|
10960
10975
|
/* @__PURE__ */ jsx(CompactThemeToggle, {}),
|
|
10961
10976
|
/* @__PURE__ */ jsx("hr", { className: "-mx-4 text-zinc-500/15 dark:text-zinc-500/30" }),
|
|
10962
|
-
/* @__PURE__ */ jsx(ShadcnCliVersionSelector, {}),
|
|
10963
|
-
/* @__PURE__ */ jsx("hr", { className: "-mx-4 text-zinc-500/15 dark:text-zinc-500/30" }),
|
|
10964
10977
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
10965
10978
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
10966
10979
|
/* @__PURE__ */ jsx("div", { className: "font-medium text-foreground text-sm", children: "Toggle chat" }),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { q as cn, E as cva, b as usePlugins } from "index-
|
|
2
|
-
import { B, x, z, D, y } from "index-
|
|
1
|
+
import { q as cn, E as cva, b as usePlugins } from "index-B0k7lxog.js";
|
|
2
|
+
import { B, x, z, D, y } from "index-B0k7lxog.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
const badgeVariants = cva("rounded-md p-2", {
|
|
5
5
|
variants: {
|
package/package.json
CHANGED