@fragments-sdk/cli 0.10.1 → 0.11.1

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 (149) hide show
  1. package/dist/bin.js +20 -2
  2. package/dist/bin.js.map +1 -1
  3. package/dist/{init-NDQXUWDU.js → init-UFGK5TCN.js} +75 -4
  4. package/dist/init-UFGK5TCN.js.map +1 -0
  5. package/dist/snapshot-SV2JOFZH.js +139 -0
  6. package/dist/snapshot-SV2JOFZH.js.map +1 -0
  7. package/dist/{viewer-DNMNC5VS.js → viewer-DLLJIMCK.js} +68 -46
  8. package/dist/viewer-DLLJIMCK.js.map +1 -0
  9. package/package.json +6 -14
  10. package/src/bin.ts +30 -0
  11. package/src/commands/init.ts +76 -1
  12. package/src/commands/snapshot.ts +197 -0
  13. package/src/viewer/__tests__/viewer-integration.test.ts +85 -74
  14. package/src/viewer/server.ts +37 -22
  15. package/src/viewer/vite-plugin.ts +25 -9
  16. package/dist/init-NDQXUWDU.js.map +0 -1
  17. package/dist/viewer-DNMNC5VS.js.map +0 -1
  18. package/src/viewer/__tests__/a11y-fixes.test.ts +0 -358
  19. package/src/viewer/__tests__/jsx-parser.test.ts +0 -502
  20. package/src/viewer/__tests__/render-utils.test.ts +0 -232
  21. package/src/viewer/__tests__/style-utils.test.ts +0 -404
  22. package/src/viewer/assets/fragments-logo.ts +0 -4
  23. package/src/viewer/assets/fragments_logo.png +0 -0
  24. package/src/viewer/components/AccessibilityPanel.tsx +0 -1457
  25. package/src/viewer/components/ActionCapture.tsx +0 -172
  26. package/src/viewer/components/ActionsPanel.tsx +0 -332
  27. package/src/viewer/components/AllVariantsPreview.tsx +0 -78
  28. package/src/viewer/components/App.tsx +0 -582
  29. package/src/viewer/components/BottomPanel.tsx +0 -288
  30. package/src/viewer/components/CodePanel.naming.test.tsx +0 -59
  31. package/src/viewer/components/CodePanel.tsx +0 -118
  32. package/src/viewer/components/CommandPalette.tsx +0 -392
  33. package/src/viewer/components/ComponentDocView.tsx +0 -164
  34. package/src/viewer/components/ComponentGraph.tsx +0 -380
  35. package/src/viewer/components/ComponentHeader.tsx +0 -88
  36. package/src/viewer/components/ContractPanel.tsx +0 -241
  37. package/src/viewer/components/EmptyVariantMessage.tsx +0 -54
  38. package/src/viewer/components/ErrorBoundary.tsx +0 -97
  39. package/src/viewer/components/FigmaEmbed.tsx +0 -238
  40. package/src/viewer/components/FragmentEditor.tsx +0 -525
  41. package/src/viewer/components/FragmentRenderer.tsx +0 -61
  42. package/src/viewer/components/HeaderSearch.tsx +0 -24
  43. package/src/viewer/components/HealthDashboard.tsx +0 -441
  44. package/src/viewer/components/HmrStatusIndicator.tsx +0 -61
  45. package/src/viewer/components/Icons.tsx +0 -479
  46. package/src/viewer/components/InteractionsPanel.tsx +0 -757
  47. package/src/viewer/components/IsolatedPreviewFrame.tsx +0 -346
  48. package/src/viewer/components/IsolatedRender.tsx +0 -113
  49. package/src/viewer/components/KeyboardShortcutsHelp.tsx +0 -53
  50. package/src/viewer/components/LandingPage.tsx +0 -421
  51. package/src/viewer/components/Layout.tsx +0 -27
  52. package/src/viewer/components/LeftSidebar.tsx +0 -472
  53. package/src/viewer/components/LoadErrorMessage.tsx +0 -102
  54. package/src/viewer/components/MultiViewportPreview.tsx +0 -522
  55. package/src/viewer/components/NoVariantsMessage.tsx +0 -59
  56. package/src/viewer/components/PanelShell.tsx +0 -161
  57. package/src/viewer/components/PerformancePanel.tsx +0 -304
  58. package/src/viewer/components/PreviewArea.tsx +0 -472
  59. package/src/viewer/components/PreviewAside.tsx +0 -168
  60. package/src/viewer/components/PreviewFrameHost.tsx +0 -303
  61. package/src/viewer/components/PreviewPane.tsx +0 -149
  62. package/src/viewer/components/PreviewToolbar.tsx +0 -80
  63. package/src/viewer/components/PropsEditor.tsx +0 -506
  64. package/src/viewer/components/PropsTable.tsx +0 -111
  65. package/src/viewer/components/RelationsSection.tsx +0 -88
  66. package/src/viewer/components/ResizablePanel.tsx +0 -271
  67. package/src/viewer/components/RightSidebar.tsx +0 -102
  68. package/src/viewer/components/RuntimeToolsRegistrar.tsx +0 -17
  69. package/src/viewer/components/ScreenshotButton.tsx +0 -90
  70. package/src/viewer/components/Sidebar.tsx +0 -169
  71. package/src/viewer/components/SkeletonLoader.tsx +0 -161
  72. package/src/viewer/components/ThemeProvider.tsx +0 -42
  73. package/src/viewer/components/Toast.tsx +0 -3
  74. package/src/viewer/components/TokenStylePanel.tsx +0 -699
  75. package/src/viewer/components/TopToolbar.tsx +0 -159
  76. package/src/viewer/components/UsageSection.tsx +0 -95
  77. package/src/viewer/components/VariantMatrix.tsx +0 -388
  78. package/src/viewer/components/VariantRenderer.tsx +0 -131
  79. package/src/viewer/components/VariantTabs.tsx +0 -40
  80. package/src/viewer/components/ViewerHeader.tsx +0 -69
  81. package/src/viewer/components/ViewerStateSync.tsx +0 -52
  82. package/src/viewer/components/ViewportSelector.tsx +0 -172
  83. package/src/viewer/components/WebMCPDevTools.tsx +0 -503
  84. package/src/viewer/components/WebMCPIntegration.tsx +0 -47
  85. package/src/viewer/components/WebMCPStatusIndicator.tsx +0 -60
  86. package/src/viewer/components/_future/CreatePage.tsx +0 -836
  87. package/src/viewer/components/viewer-utils.ts +0 -16
  88. package/src/viewer/composition-renderer.ts +0 -381
  89. package/src/viewer/constants/index.ts +0 -1
  90. package/src/viewer/constants/ui.ts +0 -166
  91. package/src/viewer/entry.tsx +0 -335
  92. package/src/viewer/hooks/index.ts +0 -2
  93. package/src/viewer/hooks/useA11yCache.ts +0 -383
  94. package/src/viewer/hooks/useA11yService.ts +0 -364
  95. package/src/viewer/hooks/useActions.ts +0 -138
  96. package/src/viewer/hooks/useAppState.ts +0 -147
  97. package/src/viewer/hooks/useCompiledFragments.ts +0 -42
  98. package/src/viewer/hooks/useFigmaIntegration.ts +0 -132
  99. package/src/viewer/hooks/useHmrStatus.ts +0 -109
  100. package/src/viewer/hooks/useKeyboardShortcuts.ts +0 -270
  101. package/src/viewer/hooks/usePreviewBridge.ts +0 -347
  102. package/src/viewer/hooks/useScrollSpy.ts +0 -78
  103. package/src/viewer/hooks/useUrlState.ts +0 -318
  104. package/src/viewer/hooks/useViewSettings.ts +0 -111
  105. package/src/viewer/index.html +0 -28
  106. package/src/viewer/intelligence/healthReport.ts +0 -505
  107. package/src/viewer/intelligence/styleDrift.ts +0 -340
  108. package/src/viewer/intelligence/usageScanner.ts +0 -309
  109. package/src/viewer/jsx-parser.ts +0 -486
  110. package/src/viewer/preview-frame-entry.tsx +0 -25
  111. package/src/viewer/preview-frame.html +0 -125
  112. package/src/viewer/public/favicon.ico +0 -0
  113. package/src/viewer/render-template.html +0 -68
  114. package/src/viewer/styles/globals.css +0 -278
  115. package/src/viewer/types/a11y.ts +0 -197
  116. package/src/viewer/utils/a11y-fixes.ts +0 -509
  117. package/src/viewer/utils/actionExport.ts +0 -372
  118. package/src/viewer/utils/colorSchemes.ts +0 -201
  119. package/src/viewer/utils/detectRelationships.ts +0 -256
  120. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss +0 -10
  121. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss.d.ts +0 -2
  122. package/src/viewer/vendor/shared/src/ComponentDocContent.tsx +0 -274
  123. package/src/viewer/vendor/shared/src/DocsHeaderBar.tsx +0 -129
  124. package/src/viewer/vendor/shared/src/DocsPageAsideHost.tsx +0 -89
  125. package/src/viewer/vendor/shared/src/DocsPageShell.tsx +0 -124
  126. package/src/viewer/vendor/shared/src/DocsSearchCommand.tsx +0 -99
  127. package/src/viewer/vendor/shared/src/DocsSidebarNav.tsx +0 -66
  128. package/src/viewer/vendor/shared/src/PropsTable.module.scss +0 -68
  129. package/src/viewer/vendor/shared/src/PropsTable.module.scss.d.ts +0 -2
  130. package/src/viewer/vendor/shared/src/PropsTable.tsx +0 -76
  131. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss +0 -114
  132. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss.d.ts +0 -2
  133. package/src/viewer/vendor/shared/src/VariantPreviewCard.tsx +0 -137
  134. package/src/viewer/vendor/shared/src/docs-data/index.ts +0 -32
  135. package/src/viewer/vendor/shared/src/docs-data/mcp-configs.ts +0 -72
  136. package/src/viewer/vendor/shared/src/docs-data/palettes.ts +0 -75
  137. package/src/viewer/vendor/shared/src/docs-data/setup-examples.ts +0 -55
  138. package/src/viewer/vendor/shared/src/docs-layout.scss +0 -28
  139. package/src/viewer/vendor/shared/src/docs-layout.scss.d.ts +0 -2
  140. package/src/viewer/vendor/shared/src/index.ts +0 -34
  141. package/src/viewer/vendor/shared/src/types.ts +0 -53
  142. package/src/viewer/webmcp/__tests__/analytics.test.ts +0 -108
  143. package/src/viewer/webmcp/analytics.ts +0 -165
  144. package/src/viewer/webmcp/index.ts +0 -3
  145. package/src/viewer/webmcp/posthog-bridge.ts +0 -39
  146. package/src/viewer/webmcp/runtime-tools.ts +0 -152
  147. package/src/viewer/webmcp/scan-utils.ts +0 -135
  148. package/src/viewer/webmcp/use-tool-analytics.ts +0 -69
  149. package/src/viewer/webmcp/viewer-state.ts +0 -45
@@ -25,13 +25,14 @@ import {
25
25
  } from "vite";
26
26
  import react from "@vitejs/plugin-react";
27
27
  import { resolve as resolve2, dirname as dirname2, join } from "path";
28
- import { existsSync, realpathSync } from "fs";
28
+ import { existsSync as existsSync2, realpathSync } from "fs";
29
29
  import { readFile as readFile2 } from "fs/promises";
30
30
  import { fileURLToPath as fileURLToPath2 } from "url";
31
31
 
32
32
  // src/viewer/vite-plugin.ts
33
33
  import { resolve, dirname } from "path";
34
34
  import { fileURLToPath } from "url";
35
+ import { existsSync } from "fs";
35
36
  import { readFile } from "fs/promises";
36
37
  import { transform } from "esbuild";
37
38
  import svgr from "vite-plugin-svgr";
@@ -354,7 +355,19 @@ function compareNumericValues(value1, value2, tolerance) {
354
355
 
355
356
  // src/viewer/vite-plugin.ts
356
357
  var __dirname = dirname(fileURLToPath(import.meta.url));
357
- var viewerAssetsRoot = resolve(__dirname, "..", "src/viewer");
358
+ var monorepoViewerSrc = resolve(__dirname, "..", "..", "viewer", "src");
359
+ var npmViewerSrc = (() => {
360
+ const cliNm = resolve(__dirname, "..", "node_modules", "@fragments-sdk", "viewer", "src");
361
+ if (existsSync(cliNm)) return cliNm;
362
+ let dir = resolve(__dirname, "..");
363
+ for (let i = 0; i < 5; i++) {
364
+ const candidate = resolve(dir, "node_modules", "@fragments-sdk", "viewer", "src");
365
+ if (existsSync(candidate)) return candidate;
366
+ dir = resolve(dir, "..");
367
+ }
368
+ return null;
369
+ })();
370
+ var viewerAssetsRoot = existsSync(monorepoViewerSrc) ? monorepoViewerSrc : npmViewerSrc ?? monorepoViewerSrc;
358
371
  var pendingRenders = /* @__PURE__ */ new Map();
359
372
  var sharedRenderPool = null;
360
373
  var browserPoolModule = null;
@@ -1860,10 +1873,11 @@ async function loadFragmentsForContext(_server, _fragmentFiles, _config, configD
1860
1873
  }
1861
1874
  }
1862
1875
  async function serveViewerHTML(res, server) {
1863
- const viewerRoot2 = viewerAssetsRoot;
1864
- const entryPath = resolve(viewerRoot2, "entry.tsx");
1876
+ const viewerSrc = viewerAssetsRoot;
1877
+ const viewerPkgRoot = resolve(viewerSrc, "..");
1878
+ const entryPath = resolve(viewerSrc, "entry.tsx");
1865
1879
  try {
1866
- let html = await readFile(resolve(viewerRoot2, "index.html"), "utf-8");
1880
+ let html = await readFile(resolve(viewerPkgRoot, "index.html"), "utf-8");
1867
1881
  html = html.replace("/src/entry.tsx", entryPath);
1868
1882
  html = await server.transformIndexHtml("/fragments/", html);
1869
1883
  res.writeHead(200, { "Content-Type": "text/html" });
@@ -1875,10 +1889,10 @@ async function serveViewerHTML(res, server) {
1875
1889
  }
1876
1890
  }
1877
1891
  async function servePreviewFrameHTML(res, server) {
1878
- const viewerRoot2 = viewerAssetsRoot;
1879
- const entryPath = resolve(viewerRoot2, "preview-frame-entry.tsx");
1892
+ const viewerSrc = viewerAssetsRoot;
1893
+ const entryPath = resolve(viewerSrc, "preview-frame-entry.tsx");
1880
1894
  try {
1881
- let html = await readFile(resolve(viewerRoot2, "preview-frame.html"), "utf-8");
1895
+ let html = await readFile(resolve(viewerSrc, "preview-frame.html"), "utf-8");
1882
1896
  html = html.replace("/src/preview-frame-entry.tsx", entryPath);
1883
1897
  html = await server.transformIndexHtml("/fragments/preview/", html);
1884
1898
  res.writeHead(200, { "Content-Type": "text/html" });
@@ -1971,10 +1985,10 @@ async function captureA11yAudit(url, viewport) {
1971
1985
  }
1972
1986
  }
1973
1987
  async function serveRenderHTML(res, server, renderScript) {
1974
- const viewerRoot2 = viewerAssetsRoot;
1988
+ const viewerRoot = viewerAssetsRoot;
1975
1989
  try {
1976
1990
  let html = await readFile(
1977
- resolve(viewerRoot2, "render-template.html"),
1991
+ resolve(viewerRoot, "render-template.html"),
1978
1992
  "utf-8"
1979
1993
  );
1980
1994
  html = html.replace(
@@ -2278,68 +2292,73 @@ async function resizePng(buffer, srcWidth, srcHeight, targetWidth, targetHeight)
2278
2292
  // src/viewer/server.ts
2279
2293
  var __dirname2 = dirname2(fileURLToPath2(import.meta.url));
2280
2294
  var cliPackageRoot = resolve2(__dirname2, "..");
2281
- var viewerRoot = resolve2(cliPackageRoot, "src/viewer");
2282
2295
  var packagesRoot = resolve2(cliPackageRoot, "..");
2283
2296
  var localUiLibRoot = resolve2(packagesRoot, "../libs/ui/src");
2284
- var localSharedLibRoot = resolve2(packagesRoot, "../libs/shared/src");
2285
- var vendoredSharedLibRoot = resolve2(viewerRoot, "vendor/shared/src");
2286
2297
  var localWebMCPRoot = resolve2(packagesRoot, "webmcp/src");
2287
2298
  var localContextRoot = resolve2(packagesRoot, "context/src");
2299
+ function resolveViewerRoot(nodeModulesDir) {
2300
+ const monorepoPath = resolve2(packagesRoot, "viewer");
2301
+ if (existsSync2(join(monorepoPath, "src/shared/index.ts"))) {
2302
+ return monorepoPath;
2303
+ }
2304
+ const npmPath = join(nodeModulesDir, "@fragments-sdk/viewer");
2305
+ if (existsSync2(npmPath)) {
2306
+ return npmPath;
2307
+ }
2308
+ const cliNpmPath = join(cliPackageRoot, "node_modules/@fragments-sdk/viewer");
2309
+ if (existsSync2(cliNpmPath)) {
2310
+ return cliNpmPath;
2311
+ }
2312
+ return monorepoPath;
2313
+ }
2288
2314
  function resolveUiLib(nodeModulesDir) {
2289
2315
  const localIndex = join(localUiLibRoot, "index.ts");
2290
- if (existsSync(localIndex)) {
2316
+ if (existsSync2(localIndex)) {
2291
2317
  return localUiLibRoot;
2292
2318
  }
2293
2319
  const installedUi = join(nodeModulesDir, "@fragments-sdk/ui/src/index.ts");
2294
- if (existsSync(installedUi)) {
2320
+ if (existsSync2(installedUi)) {
2295
2321
  return resolve2(dirname2(installedUi));
2296
2322
  }
2297
2323
  const installedUiDist = join(nodeModulesDir, "@fragments-sdk/ui");
2298
- if (existsSync(installedUiDist)) {
2324
+ if (existsSync2(installedUiDist)) {
2299
2325
  return installedUiDist;
2300
2326
  }
2301
2327
  return localUiLibRoot;
2302
2328
  }
2303
2329
  function resolveWebMCPLib(nodeModulesDir) {
2304
2330
  const localIndex = join(localWebMCPRoot, "index.ts");
2305
- if (existsSync(localIndex)) {
2331
+ if (existsSync2(localIndex)) {
2306
2332
  return localWebMCPRoot;
2307
2333
  }
2308
2334
  const installedSrc = join(nodeModulesDir, "@fragments-sdk/webmcp/src/index.ts");
2309
- if (existsSync(installedSrc)) {
2335
+ if (existsSync2(installedSrc)) {
2310
2336
  return resolve2(dirname2(installedSrc));
2311
2337
  }
2312
2338
  const installedDist = join(nodeModulesDir, "@fragments-sdk/webmcp");
2313
- if (existsSync(installedDist)) {
2339
+ if (existsSync2(installedDist)) {
2314
2340
  return installedDist;
2315
2341
  }
2316
2342
  return localWebMCPRoot;
2317
2343
  }
2318
2344
  function resolveContextLib(nodeModulesDir) {
2319
2345
  const localIndex = join(localContextRoot, "index.ts");
2320
- if (existsSync(localIndex)) {
2346
+ if (existsSync2(localIndex)) {
2321
2347
  return localContextRoot;
2322
2348
  }
2323
2349
  const installedSrc = join(nodeModulesDir, "@fragments-sdk/context/src/index.ts");
2324
- if (existsSync(installedSrc)) {
2350
+ if (existsSync2(installedSrc)) {
2325
2351
  return resolve2(dirname2(installedSrc));
2326
2352
  }
2327
2353
  const installedDist = join(nodeModulesDir, "@fragments-sdk/context");
2328
- if (existsSync(installedDist)) {
2354
+ if (existsSync2(installedDist)) {
2329
2355
  return installedDist;
2330
2356
  }
2331
2357
  return localContextRoot;
2332
2358
  }
2333
- function resolveSharedLib() {
2334
- const localIndex = join(localSharedLibRoot, "index.ts");
2335
- if (existsSync(localIndex)) {
2336
- return localSharedLibRoot;
2337
- }
2338
- const vendoredIndex = join(vendoredSharedLibRoot, "index.ts");
2339
- if (existsSync(vendoredIndex)) {
2340
- return vendoredSharedLibRoot;
2341
- }
2342
- return localSharedLibRoot;
2359
+ function resolveViewerLib(nodeModulesDir) {
2360
+ const viewerRoot = resolveViewerRoot(nodeModulesDir);
2361
+ return resolve2(viewerRoot, "src");
2343
2362
  }
2344
2363
  function cjsInteropPlugin(nodeModulesPath) {
2345
2364
  const virtualModules = {
@@ -2423,7 +2442,7 @@ function optionalPeerDepsPlugin(uiLibRoot) {
2423
2442
  const availableDeps = /* @__PURE__ */ new Set();
2424
2443
  for (const dep of optionalDeps) {
2425
2444
  const depPath = join(uiLibRoot, "..", "node_modules", ...dep.split("/"));
2426
- if (existsSync(depPath)) availableDeps.add(dep);
2445
+ if (existsSync2(depPath)) availableDeps.add(dep);
2427
2446
  }
2428
2447
  return {
2429
2448
  name: "fragments:optional-peer-deps",
@@ -2461,7 +2480,7 @@ function optionalPeerDepsPlugin(uiLibRoot) {
2461
2480
  async function detectTsconfigPaths(projectRoot) {
2462
2481
  const aliases = {};
2463
2482
  const tsconfigPath = join(projectRoot, "tsconfig.json");
2464
- if (!existsSync(tsconfigPath)) return aliases;
2483
+ if (!existsSync2(tsconfigPath)) return aliases;
2465
2484
  try {
2466
2485
  const content = await readFile2(tsconfigPath, "utf-8");
2467
2486
  const cleaned = content.replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, "");
@@ -2486,10 +2505,10 @@ async function detectStorybookAliases(projectRoot) {
2486
2505
  const aliases = {};
2487
2506
  const assetsDir = resolve2(projectRoot, "assets");
2488
2507
  const fontsDir = resolve2(projectRoot, "assets/fonts");
2489
- if (existsSync(fontsDir)) {
2508
+ if (existsSync2(fontsDir)) {
2490
2509
  aliases["/fonts"] = fontsDir;
2491
2510
  }
2492
- if (existsSync(assetsDir)) {
2511
+ if (existsSync2(assetsDir)) {
2493
2512
  aliases["/assets"] = assetsDir;
2494
2513
  }
2495
2514
  return aliases;
@@ -2529,16 +2548,17 @@ async function createDevServer(options = {}) {
2529
2548
  }
2530
2549
  const nodeModulesPath = findNodeModules(projectRoot);
2531
2550
  const uiLibRoot = resolveUiLib(nodeModulesPath);
2532
- const sharedLibRoot = resolveSharedLib();
2551
+ const viewerRoot = resolveViewerRoot(nodeModulesPath);
2552
+ const viewerLibRoot = resolveViewerLib(nodeModulesPath);
2533
2553
  const webmcpLibRoot = resolveWebMCPLib(nodeModulesPath);
2534
2554
  const contextLibRoot = resolveContextLib(nodeModulesPath);
2535
- const isWebMCPSource = existsSync(join(webmcpLibRoot, "react/index.ts"));
2536
- const isContextSource = existsSync(join(contextLibRoot, "types/index.ts"));
2555
+ const isWebMCPSource = existsSync2(join(webmcpLibRoot, "react/index.ts"));
2556
+ const isContextSource = existsSync2(join(contextLibRoot, "types/index.ts"));
2537
2557
  console.log(`\u{1F4C1} Using node_modules: ${nodeModulesPath}`);
2538
2558
  const tsconfigAliases = await detectTsconfigPaths(projectRoot);
2539
2559
  const storybookAliases = await detectStorybookAliases(projectRoot);
2540
2560
  const storybookDir = resolve2(projectRoot, ".storybook");
2541
- const hasStorybookDir = existsSync(storybookDir);
2561
+ const hasStorybookDir = existsSync2(storybookDir);
2542
2562
  if (Object.keys(tsconfigAliases).length > 0) {
2543
2563
  console.log(`\u{1F4CE} Detected ${Object.keys(tsconfigAliases).length} tsconfig path alias(es)`);
2544
2564
  }
@@ -2570,7 +2590,7 @@ async function createDevServer(options = {}) {
2570
2590
  allow: [
2571
2591
  viewerRoot,
2572
2592
  uiLibRoot,
2573
- sharedLibRoot,
2593
+ viewerLibRoot,
2574
2594
  webmcpLibRoot,
2575
2595
  contextLibRoot,
2576
2596
  projectRoot,
@@ -2626,8 +2646,10 @@ async function createDevServer(options = {}) {
2626
2646
  ...storybookAliases,
2627
2647
  // Resolve @fragments-sdk/ui to local source or installed package
2628
2648
  "@fragments-sdk/ui": uiLibRoot,
2629
- // Resolve @fragments-sdk/shared to monorepo source or vendored fallback
2630
- "@fragments-sdk/shared": sharedLibRoot,
2649
+ // Resolve @fragments-sdk/viewer subpaths to viewer package source
2650
+ "@fragments-sdk/viewer/shared": join(viewerLibRoot, "shared/index.ts"),
2651
+ "@fragments-sdk/viewer/app": join(viewerLibRoot, "app/index.ts"),
2652
+ "@fragments-sdk/viewer/docs-data": join(viewerLibRoot, "shared/docs-data/index.ts"),
2631
2653
  // Resolve @fragments-sdk/webmcp subpaths to monorepo source or installed package
2632
2654
  "@fragments-sdk/webmcp/react": isWebMCPSource ? join(webmcpLibRoot, "react/index.ts") : join(webmcpLibRoot, "dist/react/index.js"),
2633
2655
  "@fragments-sdk/webmcp/fragments": isWebMCPSource ? join(webmcpLibRoot, "fragments/index.ts") : join(webmcpLibRoot, "dist/fragments/index.js"),
@@ -2666,7 +2688,7 @@ function findNodeModules(startDir) {
2666
2688
  let current = startDir;
2667
2689
  while (current !== dirname2(current)) {
2668
2690
  const nodeModulesPath = join(current, "node_modules");
2669
- if (existsSync(join(nodeModulesPath, "react"))) {
2691
+ if (existsSync2(join(nodeModulesPath, "react"))) {
2670
2692
  return nodeModulesPath;
2671
2693
  }
2672
2694
  current = dirname2(current);
@@ -2682,7 +2704,7 @@ function findViteConfig(projectRoot) {
2682
2704
  ];
2683
2705
  for (const file of configFiles) {
2684
2706
  const path = join(projectRoot, file);
2685
- if (existsSync(path)) {
2707
+ if (existsSync2(path)) {
2686
2708
  return path;
2687
2709
  }
2688
2710
  }
@@ -2705,4 +2727,4 @@ export {
2705
2727
  createDevServer,
2706
2728
  fragmentsPlugin
2707
2729
  };
2708
- //# sourceMappingURL=viewer-DNMNC5VS.js.map
2730
+ //# sourceMappingURL=viewer-DLLJIMCK.js.map