webstudio 0.301.0 → 0.302.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/lib/cli.js CHANGED
@@ -38,6 +38,7 @@ import { createServer } from "node:net";
38
38
  import "detect-port";
39
39
  import { Launcher } from "chrome-launcher";
40
40
  import { Buffer as Buffer$1 } from "node:buffer";
41
+ import semver from "semver";
41
42
  import { createRequire } from "node:module";
42
43
  import { x as x$6 } from "tinyexec";
43
44
  import makeCLI from "yargs";
@@ -52970,7 +52971,7 @@ const editCustomResponseHeaders = (headers, key2, next) => {
52970
52971
  (header2) => customResponseHeaderKey(header2) !== key2
52971
52972
  );
52972
52973
  if (next !== void 0) {
52973
- updated.unshift(next);
52974
+ updated.push(next);
52974
52975
  }
52975
52976
  return customResponseHeaders.parse(updated);
52976
52977
  };
@@ -327221,7 +327222,8 @@ const createProjectSessionMcpServer = async ({
327221
327222
  toolNameFormat = "canonical",
327222
327223
  toolHeartbeatIntervalMs = 1e4,
327223
327224
  onToolFailure,
327224
- onToolSuccess
327225
+ onToolSuccess,
327226
+ additionalInstructions
327225
327227
  }) => {
327226
327228
  const server = new Server(
327227
327229
  { name: "webstudio", version: "0.0.0" },
@@ -327231,7 +327233,7 @@ const createProjectSessionMcpServer = async ({
327231
327233
  resources: {},
327232
327234
  logging: {}
327233
327235
  },
327234
- instructions: startupGuidance
327236
+ instructions: [startupGuidance, additionalInstructions?.trim()].filter(Boolean).join("\n\n")
327235
327237
  }
327236
327238
  );
327237
327239
  const sendLog = (level, data2) => {
@@ -332692,7 +332694,7 @@ class HandledCliError extends Error {
332692
332694
  }
332693
332695
  const isHandledCliError = (error) => error instanceof HandledCliError;
332694
332696
  const name = "webstudio";
332695
- const version$1 = "0.301.0";
332697
+ const version$1 = "0.302.0";
332696
332698
  const description = "Webstudio CLI";
332697
332699
  const author = "Webstudio <github@webstudio.is>";
332698
332700
  const homepage = "https://webstudio.is";
@@ -333839,7 +333841,24 @@ const sync = async (options, dependencies2 = defaultSyncDependencies) => {
333839
333841
  )
333840
333842
  });
333841
333843
  const isStaticBuild = project.build.deployment?.destination === "static";
333842
- const assetsToDownload = options.buildId !== void 0 && isStaticBuild === false ? project.assets.filter(
333844
+ const publicationBuild = {
333845
+ ...project.build,
333846
+ pages: migratePages(project.build.pages)
333847
+ };
333848
+ const projectCandidates = resolvePublishedMdxAssetCandidates({
333849
+ build: publicationBuild,
333850
+ artifact: project.assetIndex,
333851
+ allowUnresolved: true
333852
+ });
333853
+ const dynamicBlockIds = getDynamicPublishedMdxSourceBlockIds(publicationBuild);
333854
+ const publicationPlan = createPublishedBuildContentCompilationPlan(
333855
+ publicationBuild,
333856
+ projectCandidates
333857
+ );
333858
+ const needsMdxCompilation = dynamicBlockIds.length > 0 || publicationPlan?.queries.some(
333859
+ ({ id: id2 }) => id2.startsWith("__content-block-mdx__:")
333860
+ ) === true;
333861
+ const assetsToDownload = options.buildId !== void 0 && !isStaticBuild && !needsMdxCompilation ? project.assets.filter(
333843
333862
  (asset2) => asset2.format !== "md" && asset2.format !== "mdx"
333844
333863
  ) : project.assets;
333845
333864
  if (assetsToDownload.length > 0) {
@@ -333863,23 +333882,12 @@ const sync = async (options, dependencies2 = defaultSyncDependencies) => {
333863
333882
  throw new HandledCliError();
333864
333883
  }
333865
333884
  }
333866
- if (options.buildId !== void 0 && isStaticBuild && project.assetIndex === void 0) {
333867
- const publicationBuild = {
333868
- ...project.build,
333869
- pages: migratePages(project.build.pages)
333870
- };
333871
- const projectCandidates = resolvePublishedMdxAssetCandidates({
333872
- build: publicationBuild,
333873
- allowUnresolved: true
333874
- });
333875
- const needsCandidateDiscovery = getDynamicPublishedMdxSourceBlockIds(
333876
- publicationBuild
333877
- ).some((blockId) => projectCandidates.has(blockId) === false);
333878
- const candidateDiscoveryPlan = needsCandidateDiscovery ? createBuildContentCompilationPlan(publicationBuild) : void 0;
333879
- let plan = candidateDiscoveryPlan ?? createPublishedBuildContentCompilationPlan(
333880
- publicationBuild,
333881
- projectCandidates
333885
+ if (options.buildId !== void 0 && (isStaticBuild && project.assetIndex === void 0 || needsMdxCompilation)) {
333886
+ const needsCandidateDiscovery = dynamicBlockIds.some(
333887
+ (blockId) => projectCandidates.has(blockId) === false
333882
333888
  );
333889
+ const candidateDiscoveryPlan = needsCandidateDiscovery ? createBuildContentCompilationPlan(publicationBuild) : void 0;
333890
+ const plan = candidateDiscoveryPlan ?? publicationPlan;
333883
333891
  if (plan !== void 0) {
333884
333892
  syncing.message("Preparing local content index");
333885
333893
  const source = createContentSource();
@@ -346947,6 +346955,36 @@ Please check webstudio --help for more details`
346947
346955
  exit$4(1);
346948
346956
  }
346949
346957
  }
346958
+ const loadedSiteData = await loadJSONFile(LOCAL_DATA_FILE);
346959
+ if (loadedSiteData === null) {
346960
+ throw new Error(
346961
+ `Project bundle is missing, please make sure the project is synced.`
346962
+ );
346963
+ }
346964
+ const parsedSiteData = publishedProjectBundle.safeParse(loadedSiteData);
346965
+ if (parsedSiteData.success === false) {
346966
+ throw Object.assign(
346967
+ new Error(
346968
+ `Project bundle is invalid, please make sure the project is synced. Invalid fields: ${formatZodIssues(
346969
+ parsedSiteData.error.issues,
346970
+ loadedSiteData
346971
+ )}`
346972
+ ),
346973
+ {
346974
+ code: "PROJECT_BUNDLE_INVALID",
346975
+ bundleVersion,
346976
+ issues: getZodValidationIssues(parsedSiteData.error)
346977
+ }
346978
+ );
346979
+ }
346980
+ const siteData = parsedSiteData.data;
346981
+ const pages2 = migratePages(siteData.build.pages);
346982
+ const publicationBuild = { ...siteData.build, pages: pages2 };
346983
+ if (siteData.assetIndex === void 0 && (createPublishedBuildContentCompilationPlan(publicationBuild) !== void 0 || hasDynamicPublishedMdxSources(publicationBuild))) {
346984
+ throw new Error(
346985
+ "Assets queries require a content database. Sync the project again before building."
346986
+ );
346987
+ }
346950
346988
  feedback.step("Scaffolding the project files");
346951
346989
  if (options.incremental !== true) {
346952
346990
  await rm(generatedDir, { recursive: true, force: true });
@@ -346985,31 +347023,6 @@ Please check webstudio --help for more details`
346985
347023
  framework = await createFramework$2(frameworkOptions);
346986
347024
  }
346987
347025
  const assetBaseUrl = await readAssetBaseUrl(join$2(cwd$1(), "app/constants.mjs"));
346988
- const loadedSiteData = await loadJSONFile(LOCAL_DATA_FILE);
346989
- if (loadedSiteData === null) {
346990
- throw new Error(
346991
- `Project bundle is missing, please make sure the project is synced.`
346992
- );
346993
- }
346994
- const parsedSiteData = publishedProjectBundle.safeParse(loadedSiteData);
346995
- if (parsedSiteData.success === false) {
346996
- throw Object.assign(
346997
- new Error(
346998
- `Project bundle is invalid, please make sure the project is synced. Invalid fields: ${formatZodIssues(
346999
- parsedSiteData.error.issues,
347000
- loadedSiteData
347001
- )}`
347002
- ),
347003
- {
347004
- code: "PROJECT_BUNDLE_INVALID",
347005
- bundleVersion,
347006
- issues: getZodValidationIssues(parsedSiteData.error)
347007
- }
347008
- );
347009
- }
347010
- const siteData = parsedSiteData.data;
347011
- const pages2 = migratePages(siteData.build.pages);
347012
- const publicationBuild = { ...siteData.build, pages: pages2 };
347013
347026
  let verifiedAssetIndex = siteData.assetIndex === void 0 ? void 0 : await verifyContentArtifact(siteData.assetIndex);
347014
347027
  if (verifiedAssetIndex !== void 0 && (options.previewIdentity === true || options.assets === true)) {
347015
347028
  verifiedAssetIndex = await hydrateLocalMarkdownContents({
@@ -347386,6 +347399,9 @@ Please check webstudio --help for more details`
347386
347399
  ...warning2.diagnostic
347387
347400
  })
347388
347401
  );
347402
+ if (warning2.diagnostic.severity === "error") {
347403
+ throw new Error(warning2.diagnostic.message);
347404
+ }
347389
347405
  }
347390
347406
  }
347391
347407
  pageData.build.instances = Array.from(pageInstances);
@@ -347659,7 +347675,8 @@ Please check webstudio --help for more details`
347659
347675
  import type { PageMeta } from "@webstudio-is/sdk";
347660
347676
  ${generateResources({
347661
347677
  scope: scope2,
347662
- page: page2,
347678
+ // XML generation removes the body wrapper from the instance map.
347679
+ page: { ...page2, rootInstanceId },
347663
347680
  dataSources,
347664
347681
  props: props2,
347665
347682
  resources,
@@ -354807,6 +354824,35 @@ const withTimeout = async (operation, timeout, createTimeoutError2) => {
354807
354824
  }
354808
354825
  }
354809
354826
  };
354827
+ const latestPackageUrl = "https://registry.npmjs.org/webstudio/latest";
354828
+ const requestTimeoutMs = 1500;
354829
+ const checkForCliUpdate = async ({
354830
+ currentVersion,
354831
+ request = fetch
354832
+ }) => {
354833
+ if (semver.valid(currentVersion) === null) {
354834
+ return;
354835
+ }
354836
+ try {
354837
+ const response = await request(latestPackageUrl, {
354838
+ signal: AbortSignal.timeout(requestTimeoutMs)
354839
+ });
354840
+ if (response.ok === false) {
354841
+ return;
354842
+ }
354843
+ const latestPackage = await response.json();
354844
+ if (isPlainRecord(latestPackage) === false) {
354845
+ return;
354846
+ }
354847
+ const latestVersion = typeof latestPackage.version === "string" ? semver.valid(latestPackage.version) : null;
354848
+ if (latestVersion === null || semver.gt(latestVersion, currentVersion) === false) {
354849
+ return;
354850
+ }
354851
+ return { currentVersion, latestVersion };
354852
+ } catch {
354853
+ return;
354854
+ }
354855
+ };
354810
354856
  const createProgressProjects = () => /* @__PURE__ */ Object.create(null);
354811
354857
  const maximumConcurrency = 16;
354812
354858
  const parsePositiveInteger = (value2, fallback) => {
@@ -355958,14 +356004,32 @@ const createMcpPreviewHandlers = ({
355958
356004
  quality: input2.quality,
355959
356005
  scale: input2.scale
355960
356006
  });
356007
+ const captureWhileRouteSettles = async (capture, isGeneratedSite, progress2) => {
356008
+ let result2 = await capture();
356009
+ for (let retry = 0; retry < 2 && !isGeneratedSite(result2); retry += 1) {
356010
+ progress2?.report("tool screenshot waiting for refreshed generated route");
356011
+ await sleep(1e3);
356012
+ result2 = await capture();
356013
+ }
356014
+ return result2;
356015
+ };
355961
356016
  const assertGeneratedSiteCapture = (input2, result2) => {
355962
356017
  if (input2.path !== void 0 && input2.baseUrl === void 0 && result2.navigation?.generatedSiteRootPresent === false) {
355963
- throw Object.assign(
355964
- new Error(
355965
- 'Screenshot did not render the generated Webstudio site. Capture the route with screenshot { path: "/" }; do not capture the Builder UI.'
355966
- ),
355967
- { code: "SCREENSHOT_NOT_GENERATED_SITE" }
355968
- );
356018
+ const status = result2.navigation.status;
356019
+ const routeFailed = status !== void 0 && status >= 400;
356020
+ const code2 = routeFailed ? "SCREENSHOT_ROUTE_HTTP_ERROR" : "SCREENSHOT_NOT_GENERATED_SITE";
356021
+ const message = routeFailed ? `The generated route returned HTTP ${status} before a Webstudio page could render. Check the preview server output for the route error.` : "The requested route did not render a generated Webstudio page. Check the route and preview server output; a screenshot of the home route does not verify this page.";
356022
+ throw Object.assign(new Error(message), {
356023
+ code: code2,
356024
+ issues: [
356025
+ {
356026
+ code: routeFailed ? "screenshot_route_http_error" : "generated_site_marker_missing",
356027
+ path: [],
356028
+ message,
356029
+ constraint: routeFailed ? `http_status:${status}` : "generated_site_identity_present"
356030
+ }
356031
+ ]
356032
+ });
355969
356033
  }
355970
356034
  return result2;
355971
356035
  };
@@ -356037,17 +356101,11 @@ const createMcpPreviewHandlers = ({
356037
356101
  return await captureWithSessionReconnect(
356038
356102
  input2,
356039
356103
  progress2,
356040
- async (captureSession2) => {
356041
- let captureResult = await captureSession2.capture(captureOptions);
356042
- for (let retry = 0; retry < 2 && captureResult.navigation?.generatedSiteRootPresent === false; retry += 1) {
356043
- progress2?.report(
356044
- "tool screenshot waiting for refreshed generated route"
356045
- );
356046
- await sleep(1e3);
356047
- captureResult = await captureSession2.capture(captureOptions);
356048
- }
356049
- return captureResult;
356050
- }
356104
+ async (captureSession2) => await captureWhileRouteSettles(
356105
+ () => captureSession2.capture(captureOptions),
356106
+ (result22) => result22.navigation?.generatedSiteRootPresent !== false,
356107
+ progress2
356108
+ )
356051
356109
  );
356052
356110
  }
356053
356111
  return await captureScreenshot2({
@@ -356106,8 +356164,8 @@ const createMcpPreviewHandlers = ({
356106
356164
  return await captureWithSessionReconnect(
356107
356165
  firstInput,
356108
356166
  progress2,
356109
- async (captureSession2) => await captureSession2.capturePage(
356110
- inputs.map((input2, index2) => {
356167
+ async (captureSession2) => {
356168
+ const captureOptions = inputs.map((input2, index2) => {
356111
356169
  const url2 = urls[index2];
356112
356170
  if (url2 === void 0) {
356113
356171
  throw new Error(
@@ -356115,8 +356173,18 @@ const createMcpPreviewHandlers = ({
356115
356173
  );
356116
356174
  }
356117
356175
  return getCaptureOptions(input2, url2);
356118
- })
356119
- )
356176
+ });
356177
+ if (isManagedSessionPreviewCapture(firstInput) === false) {
356178
+ return await captureSession2.capturePage(captureOptions);
356179
+ }
356180
+ return await captureWhileRouteSettles(
356181
+ () => captureSession2.capturePage(captureOptions),
356182
+ (results2) => results2.every(
356183
+ (result2) => result2.navigation?.generatedSiteRootPresent !== false
356184
+ ),
356185
+ progress2
356186
+ );
356187
+ }
356120
356188
  );
356121
356189
  },
356122
356190
  timeout,
@@ -356178,6 +356246,12 @@ const prepareMcpProjectSession = async (session) => {
356178
356246
  };
356179
356247
  const mcpStatusPrefix = "[webstudio mcp]";
356180
356248
  const renderedAuditArtifactDirectory = ".webstudio/audits";
356249
+ const getCliUpdateInstructions = (update) => {
356250
+ if (update === void 0) {
356251
+ return;
356252
+ }
356253
+ return `This MCP server runs Webstudio CLI ${update.currentVersion}, but ${update.latestVersion} is available. Tell the user before editing and recommend restarting this MCP server with the latest CLI, for example \`npx -y webstudio@latest mcp\`. Do not try to update or restart the CLI yourself. The existing API compatibility check remains the authority for whether writes are supported.`;
356254
+ };
356181
356255
  const formatMcpStatusLine = (message) => `${mcpStatusPrefix} ${message}`;
356182
356256
  const createMcpStatusReporter = (write = (line) => {
356183
356257
  stderr.write(`${line}
@@ -357483,7 +357557,7 @@ const createCliMcpHost = async ({
357483
357557
  const renderedProjectVersion = previewStatus.renderedProjectVersion;
357484
357558
  const namespacesByStatus = snapshot === void 0 ? void 0 : (status) => getBuilderStateNamespacesByStatus(snapshot.freshness, status);
357485
357559
  return createIssueReportRuntime(failureTracker.get(), {
357486
- projectId,
357560
+ projectId: connection.projectId,
357487
357561
  ...namespacesByStatus === void 0 ? {} : {
357488
357562
  session: {
357489
357563
  staleNamespaces: namespacesByStatus("stale"),
@@ -358307,6 +358381,9 @@ const mcp = async (options = {}) => {
358307
358381
  stdin.once("end", reportClose);
358308
358382
  stdin.once("close", reportClose);
358309
358383
  status.starting();
358384
+ const cliUpdatePromise = checkForCliUpdate({
358385
+ currentVersion: packageJson.version
358386
+ });
358310
358387
  const {
358311
358388
  host,
358312
358389
  toolCount,
@@ -358318,6 +358395,7 @@ const mcp = async (options = {}) => {
358318
358395
  } = await createCliMcpHost({
358319
358396
  projectId: options.project
358320
358397
  });
358398
+ const cliUpdate = await cliUpdatePromise;
358321
358399
  disposeHost = dispose;
358322
358400
  if (didReportClose) {
358323
358401
  await disposeHost().catch(() => void 0);
@@ -358328,6 +358406,7 @@ const mcp = async (options = {}) => {
358328
358406
  status.ready(toolCount);
358329
358407
  const server = await connectProjectSessionMcpServer({
358330
358408
  ...host,
358409
+ additionalInstructions: getCliUpdateInstructions(cliUpdate),
358331
358410
  toolNameFormat: options.toolNameFormat,
358332
358411
  getErrorCode: getStableErrorCode,
358333
358412
  onToolFailure: recordToolFailure,
@@ -358344,6 +358423,7 @@ const mcp = async (options = {}) => {
358344
358423
  };
358345
358424
  const __testing__ = {
358346
358425
  getMcpDownloadAsset,
358426
+ getCliUpdateInstructions,
358347
358427
  createMcpStatusReporter,
358348
358428
  formatMcpStatusLine,
358349
358429
  assertSingleOpCallToolSupported,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webstudio",
3
- "version": "0.301.0",
3
+ "version": "0.302.0",
4
4
  "description": "Webstudio CLI",
5
5
  "author": "Webstudio <github@webstudio.is>",
6
6
  "homepage": "https://webstudio.is",
@@ -53,9 +53,9 @@
53
53
  "which": "^5.0.0",
54
54
  "yargs": "^17.7.2",
55
55
  "zod": "^4.4.3",
56
- "@webstudio-is/http-client": "0.301.0",
57
- "@webstudio-is/project-migrations": "0.301.0",
58
- "@webstudio-is/protocol": "0.301.0",
56
+ "@webstudio-is/http-client": "0.302.0",
57
+ "@webstudio-is/project-migrations": "0.302.0",
58
+ "@webstudio-is/protocol": "0.302.0",
59
59
  "@webstudio-is/sync-client": "0.0.0"
60
60
  },
61
61
  "devDependencies": {
@@ -99,24 +99,24 @@
99
99
  "vite": "^6.3.4",
100
100
  "vitest": "^3.1.2",
101
101
  "wrangler": "4.130.0",
102
- "@webstudio-is/content-engine": "0.301.0",
103
- "@webstudio-is/css-engine": "0.301.0",
104
- "@webstudio-is/expression": "0.301.0",
105
- "@webstudio-is/image": "0.301.0",
106
- "@webstudio-is/query-builder": "0.301.0",
107
- "@webstudio-is/react-sdk": "0.301.0",
108
- "@webstudio-is/sdk-components-animation": "0.301.0",
109
- "@webstudio-is/sdk": "0.301.0",
110
- "@webstudio-is/sdk-components-react": "0.301.0",
111
- "@webstudio-is/sdk-components-react-radix": "0.301.0",
112
- "@webstudio-is/sdk-components-react-remix": "0.301.0",
113
- "@webstudio-is/fonts": "0.301.0",
114
- "@webstudio-is/sdk-components-react-router": "0.301.0",
102
+ "@webstudio-is/css-engine": "0.302.0",
103
+ "@webstudio-is/content-engine": "0.302.0",
104
+ "@webstudio-is/fonts": "0.302.0",
105
+ "@webstudio-is/expression": "0.302.0",
106
+ "@webstudio-is/image": "0.302.0",
107
+ "@webstudio-is/project-build": "0.0.0",
108
+ "@webstudio-is/query-builder": "0.302.0",
109
+ "@webstudio-is/react-sdk": "0.302.0",
110
+ "@webstudio-is/sdk-components-animation": "0.302.0",
111
+ "@webstudio-is/sdk": "0.302.0",
112
+ "@webstudio-is/sdk-components-react": "0.302.0",
113
+ "@webstudio-is/sdk-components-react-remix": "0.302.0",
114
+ "@webstudio-is/sdk-components-react-radix": "0.302.0",
115
+ "@webstudio-is/sdk-components-react-router": "0.302.0",
116
+ "@webstudio-is/sdk-components-registry": "0.302.0",
115
117
  "@webstudio-is/tsconfig": "1.0.7",
116
118
  "@webstudio-is/vision": "0.0.0",
117
- "@webstudio-is/wsauth": "0.301.0",
118
- "@webstudio-is/project-build": "0.0.0",
119
- "@webstudio-is/sdk-components-registry": "0.301.0"
119
+ "@webstudio-is/wsauth": "0.302.0"
120
120
  },
121
121
  "scripts": {
122
122
  "typecheck": "tsc --noEmit",
@@ -12,7 +12,7 @@
12
12
  "build-cf-types": "wrangler types"
13
13
  },
14
14
  "dependencies": {
15
- "@webstudio-is/wsauth": "0.301.0",
15
+ "@webstudio-is/wsauth": "0.302.0",
16
16
  "@remix-run/cloudflare": "2.16.5",
17
17
  "@remix-run/cloudflare-pages": "2.16.5"
18
18
  },
@@ -13,14 +13,14 @@
13
13
  "@remix-run/node": "2.16.5",
14
14
  "@remix-run/react": "2.16.5",
15
15
  "@remix-run/server-runtime": "2.16.5",
16
- "@webstudio-is/image": "0.301.0",
17
- "@webstudio-is/react-sdk": "0.301.0",
18
- "@webstudio-is/sdk": "0.301.0",
19
- "@webstudio-is/sdk-components-react": "0.301.0",
20
- "@webstudio-is/sdk-components-animation": "0.301.0",
21
- "@webstudio-is/sdk-components-react-radix": "0.301.0",
22
- "@webstudio-is/sdk-components-react-remix": "0.301.0",
23
- "@webstudio-is/wsauth": "0.301.0",
16
+ "@webstudio-is/image": "0.302.0",
17
+ "@webstudio-is/react-sdk": "0.302.0",
18
+ "@webstudio-is/sdk": "0.302.0",
19
+ "@webstudio-is/sdk-components-react": "0.302.0",
20
+ "@webstudio-is/sdk-components-animation": "0.302.0",
21
+ "@webstudio-is/sdk-components-react-radix": "0.302.0",
22
+ "@webstudio-is/sdk-components-react-remix": "0.302.0",
23
+ "@webstudio-is/wsauth": "0.302.0",
24
24
  "isbot": "^5.1.25",
25
25
  "react": "18.3.0-canary-14898b6a9-20240318",
26
26
  "react-dom": "18.3.0-canary-14898b6a9-20240318",
@@ -15,14 +15,14 @@
15
15
  "@react-router/fs-routes": "^7.5.3",
16
16
  "@react-router/node": "^7.5.3",
17
17
  "@react-router/serve": "^7.5.3",
18
- "@webstudio-is/image": "0.301.0",
19
- "@webstudio-is/react-sdk": "0.301.0",
20
- "@webstudio-is/sdk": "0.301.0",
21
- "@webstudio-is/sdk-components-animation": "0.301.0",
22
- "@webstudio-is/sdk-components-react-radix": "0.301.0",
23
- "@webstudio-is/sdk-components-react-router": "0.301.0",
24
- "@webstudio-is/sdk-components-react": "0.301.0",
25
- "@webstudio-is/wsauth": "0.301.0",
18
+ "@webstudio-is/image": "0.302.0",
19
+ "@webstudio-is/react-sdk": "0.302.0",
20
+ "@webstudio-is/sdk": "0.302.0",
21
+ "@webstudio-is/sdk-components-animation": "0.302.0",
22
+ "@webstudio-is/sdk-components-react-radix": "0.302.0",
23
+ "@webstudio-is/sdk-components-react-router": "0.302.0",
24
+ "@webstudio-is/sdk-components-react": "0.302.0",
25
+ "@webstudio-is/wsauth": "0.302.0",
26
26
  "isbot": "^5.1.25",
27
27
  "react": "18.3.0-canary-14898b6a9-20240318",
28
28
  "react-dom": "18.3.0-canary-14898b6a9-20240318",
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "dependencies": {
9
9
  "@cloudflare/vite-plugin": "^1.1.0",
10
- "@webstudio-is/wsauth": "0.301.0",
10
+ "@webstudio-is/wsauth": "0.302.0",
11
11
  "wrangler": "^4.14.1"
12
12
  }
13
13
  }
@@ -11,12 +11,12 @@
11
11
  "dependencies": {
12
12
  "@shikijs/langs": "4.4.1",
13
13
  "@shikijs/themes": "4.4.1",
14
- "@webstudio-is/image": "0.301.0",
15
- "@webstudio-is/react-sdk": "0.301.0",
16
- "@webstudio-is/sdk": "0.301.0",
17
- "@webstudio-is/sdk-components-react": "0.301.0",
18
- "@webstudio-is/sdk-components-animation": "0.301.0",
19
- "@webstudio-is/sdk-components-react-radix": "0.301.0",
14
+ "@webstudio-is/image": "0.302.0",
15
+ "@webstudio-is/react-sdk": "0.302.0",
16
+ "@webstudio-is/sdk": "0.302.0",
17
+ "@webstudio-is/sdk-components-react": "0.302.0",
18
+ "@webstudio-is/sdk-components-animation": "0.302.0",
19
+ "@webstudio-is/sdk-components-react-radix": "0.302.0",
20
20
  "react": "18.3.0-canary-14898b6a9-20240318",
21
21
  "react-dom": "18.3.0-canary-14898b6a9-20240318",
22
22
  "shiki": "4.4.1",