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.
Files changed (31) hide show
  1. package/dist/THIRD_PARTY_LICENSES.txt +1 -1
  2. package/dist/build-meta.json +6 -6
  3. package/dist/index.cjs +3 -7
  4. package/dist/index.cjs.map +3 -3
  5. package/dist/toolbar-app/.vite/manifest.json +4 -4
  6. package/dist/toolbar-app/index-B0k7lxog.js +8907 -0
  7. package/dist/toolbar-app/{index-DZzSFjno.js → index-BEof4Zuj.js} +15 -13
  8. package/dist/toolbar-app/{index-BZHOXnId.js → index-BWhYIR3j.js} +5 -4
  9. package/dist/toolbar-app/index-BZPb_m5H.js +15301 -0
  10. package/dist/toolbar-app/index-CcQR8qhj.js +2 -2
  11. package/dist/toolbar-app/index-CkT0X5qN.js +8918 -0
  12. package/dist/toolbar-app/{index-pswOz6KO.js → index-DSOLAkGe.js} +29 -24
  13. package/dist/toolbar-app/{index-rW3Giydl.js → index-DVhsFHfB.js} +6 -5
  14. package/dist/toolbar-app/{index-ChCX2CjU.js → index-DfTwb8mq.js} +10 -9
  15. package/dist/toolbar-app/{index-BsmHzFJI.js → index-KEJk4WhW.js} +24 -9
  16. package/dist/toolbar-app/index-qh9EWxJX.js +8918 -0
  17. package/dist/toolbar-app/index.js +90 -77
  18. package/dist/toolbar-app/plugin-sdk.js +2 -2
  19. package/package.json +1 -1
  20. package/dist/toolbar-app/index-C5kLbmuE.js +0 -8917
  21. package/dist/toolbar-app/index-CK3aj61v.js +0 -8916
  22. package/dist/toolbar-app/index-COSu8H98.js +0 -8918
  23. package/dist/toolbar-app/index-CPzOXT0l.js +0 -8884
  24. package/dist/toolbar-app/index-CQOfGa9p.js +0 -8916
  25. package/dist/toolbar-app/index-CZ2quOq0.js +0 -8917
  26. package/dist/toolbar-app/index-CoMQvcfw.js +0 -8880
  27. package/dist/toolbar-app/index-CtdhG9I0.js +0 -8905
  28. package/dist/toolbar-app/index-DJ16UPrG.js +0 -8912
  29. package/dist/toolbar-app/index-DKAggkAP.js +0 -8880
  30. package/dist/toolbar-app/index-D_JMEWJE.js +0 -8892
  31. 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-CcQR8qhj.js";
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, cliVersion } = useAppState(), startPromptCreation = useCallback(() => {
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, cliVersion))
146
+ selectedBlocks.map((block) => getSelectedBlockInfo(block))
147
147
  ), selectedThemesInfo = selectedThemes.map(
148
- (theme) => getSelectedThemeInfo(theme, cliVersion)
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.isPro) === !1;
7124
- }), fetchBlocksFromAPI = async (isValidated) => {
7125
- const fetchBlocksUrl = "https://shadcnstudio.com/r/blocks/registry.json?is_extension=true";
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(isValidated);
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(query, isValidated);
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
- }, [searchQuery, localBlocks, isValidated, debounceMs, minScore, maxResults]), {
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" || !email || typeof email != "string" || !email.includes("@"))
7231
- return !1;
7232
- const trimmedLicenseKey = licensekey.trim(), validateUrl = `https://shadcnstudio.com/api/validate-user?email=${email.trim()}&license_key=${trimmedLicenseKey}`, response = await fetch(validateUrl, {
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 ? !0 : (console.error(
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
- ), !1);
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), !1;
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 : (console.warn(
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 = `https://shadcnstudio.com/api/user-themes?email=${email}&license_key=${licenseKey}&is_extension=true`;
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 : (console.warn(
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 userThemes.length > 0 ? [...userThemes, ...genericThemes] : genericThemes;
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), await validateLicenseKey(inputKey.trim(), email.trim()) ? (await saveLicenseKey(inputKey.trim(), email.trim()), setInputKey(""), onClose()) : setValidationError(
10538
- "Invalid license key or Email. Please check and try again."
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-CcQR8qhj.js";
2
- import { B, x, z, D, y } from "index-CcQR8qhj.js";
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
@@ -2,7 +2,7 @@
2
2
  "name": "shadcn-studio-extension-cli",
3
3
  "module": "src/index.ts",
4
4
  "type": "module",
5
- "version": "0.1.10",
5
+ "version": "0.2.0",
6
6
  "description": "Shadcn/Studio Extension CLI",
7
7
  "author": "stagewise GmbH",
8
8
  "license": "AGPL-3.0-only",