@fragments-sdk/cli 0.10.1 → 0.12.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 (223) hide show
  1. package/dist/ai-client-I6MDWNYA.js +21 -0
  2. package/dist/bin.js +292 -367
  3. package/dist/bin.js.map +1 -1
  4. package/dist/{chunk-PW7QTQA6.js → chunk-4OC7FTJB.js} +2 -2
  5. package/dist/{chunk-HRFUSSZI.js → chunk-AM4MRTMN.js} +2 -2
  6. package/dist/{chunk-5G3VZH43.js → chunk-GVDSFQ4E.js} +281 -351
  7. package/dist/chunk-GVDSFQ4E.js.map +1 -0
  8. package/dist/chunk-JJ2VRTBU.js +626 -0
  9. package/dist/chunk-JJ2VRTBU.js.map +1 -0
  10. package/dist/{chunk-D5PYOXEI.js → chunk-LVWFOLUZ.js} +148 -13
  11. package/dist/{chunk-D5PYOXEI.js.map → chunk-LVWFOLUZ.js.map} +1 -1
  12. package/dist/{chunk-WXSR2II7.js → chunk-OQKMEFOS.js} +58 -6
  13. package/dist/chunk-OQKMEFOS.js.map +1 -0
  14. package/dist/chunk-SXTKFDCR.js +104 -0
  15. package/dist/chunk-SXTKFDCR.js.map +1 -0
  16. package/dist/chunk-T5OMVL7E.js +443 -0
  17. package/dist/chunk-T5OMVL7E.js.map +1 -0
  18. package/dist/{chunk-ZM4ZQZWZ.js → chunk-TPWGL2XS.js} +39 -37
  19. package/dist/chunk-TPWGL2XS.js.map +1 -0
  20. package/dist/{chunk-OQO55NKV.js → chunk-WFS63PCW.js} +85 -11
  21. package/dist/chunk-WFS63PCW.js.map +1 -0
  22. package/dist/core/index.js +9 -1
  23. package/dist/{discovery-NEOY4MPN.js → discovery-ZJQSXF56.js} +3 -3
  24. package/dist/{generate-FBHSXR3D.js → generate-RJFS2JWA.js} +4 -4
  25. package/dist/index.js +7 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/init-ZSX3NRCZ.js +636 -0
  28. package/dist/init-ZSX3NRCZ.js.map +1 -0
  29. package/dist/mcp-bin.js +2 -2
  30. package/dist/{scan-CJF2DOQW.js → scan-3PMCJ4RB.js} +6 -6
  31. package/dist/scan-generate-SYU4PYZD.js +1115 -0
  32. package/dist/scan-generate-SYU4PYZD.js.map +1 -0
  33. package/dist/{service-TQYWY65E.js → service-VMGNJZ42.js} +3 -3
  34. package/dist/snapshot-XOISO2IS.js +139 -0
  35. package/dist/snapshot-XOISO2IS.js.map +1 -0
  36. package/dist/{static-viewer-NUBFPKWH.js → static-viewer-5GXH2MGE.js} +3 -3
  37. package/dist/static-viewer-5GXH2MGE.js.map +1 -0
  38. package/dist/{test-Z5LVO724.js → test-SI4NSHQX.js} +4 -4
  39. package/dist/{tokens-CE46OTMD.js → tokens-T6SIVUT5.js} +5 -5
  40. package/dist/{viewer-DNMNC5VS.js → viewer-7ZEAFBVN.js} +80 -58
  41. package/dist/viewer-7ZEAFBVN.js.map +1 -0
  42. package/package.json +6 -14
  43. package/src/ai-client.ts +156 -0
  44. package/src/bin.ts +74 -2
  45. package/src/build.ts +95 -33
  46. package/src/commands/__tests__/drift-sync.test.ts +252 -0
  47. package/src/commands/__tests__/scan-generate.test.ts +497 -45
  48. package/src/commands/enhance.ts +11 -35
  49. package/src/commands/init.ts +296 -193
  50. package/src/commands/scan-generate.ts +740 -139
  51. package/src/commands/scan.ts +37 -32
  52. package/src/commands/setup.ts +143 -52
  53. package/src/commands/snapshot.ts +197 -0
  54. package/src/commands/sync.ts +357 -0
  55. package/src/commands/validate.ts +43 -1
  56. package/src/core/component-extractor.test.ts +282 -0
  57. package/src/core/component-extractor.ts +1030 -0
  58. package/src/core/discovery.ts +93 -7
  59. package/src/service/enhance/props-extractor.ts +235 -13
  60. package/src/validators.ts +236 -0
  61. package/src/viewer/__tests__/viewer-integration.test.ts +85 -74
  62. package/src/viewer/server.ts +37 -22
  63. package/src/viewer/vite-plugin.ts +25 -9
  64. package/dist/chunk-5G3VZH43.js.map +0 -1
  65. package/dist/chunk-OQO55NKV.js.map +0 -1
  66. package/dist/chunk-WXSR2II7.js.map +0 -1
  67. package/dist/chunk-ZM4ZQZWZ.js.map +0 -1
  68. package/dist/init-NDQXUWDU.js +0 -796
  69. package/dist/init-NDQXUWDU.js.map +0 -1
  70. package/dist/scan-generate-SJAN5MVI.js +0 -691
  71. package/dist/scan-generate-SJAN5MVI.js.map +0 -1
  72. package/dist/viewer-DNMNC5VS.js.map +0 -1
  73. package/src/ai.ts +0 -266
  74. package/src/commands/init-framework.ts +0 -414
  75. package/src/mcp/bin.ts +0 -36
  76. package/src/migrate/bin.ts +0 -114
  77. package/src/theme/index.ts +0 -77
  78. package/src/viewer/__tests__/a11y-fixes.test.ts +0 -358
  79. package/src/viewer/__tests__/jsx-parser.test.ts +0 -502
  80. package/src/viewer/__tests__/render-utils.test.ts +0 -232
  81. package/src/viewer/__tests__/style-utils.test.ts +0 -404
  82. package/src/viewer/assets/fragments-logo.ts +0 -4
  83. package/src/viewer/assets/fragments_logo.png +0 -0
  84. package/src/viewer/bin.ts +0 -86
  85. package/src/viewer/cli/health.ts +0 -256
  86. package/src/viewer/cli/index.ts +0 -33
  87. package/src/viewer/cli/scan.ts +0 -124
  88. package/src/viewer/cli/utils.ts +0 -174
  89. package/src/viewer/components/AccessibilityPanel.tsx +0 -1457
  90. package/src/viewer/components/ActionCapture.tsx +0 -172
  91. package/src/viewer/components/ActionsPanel.tsx +0 -332
  92. package/src/viewer/components/AllVariantsPreview.tsx +0 -78
  93. package/src/viewer/components/App.tsx +0 -582
  94. package/src/viewer/components/BottomPanel.tsx +0 -288
  95. package/src/viewer/components/CodePanel.naming.test.tsx +0 -59
  96. package/src/viewer/components/CodePanel.tsx +0 -118
  97. package/src/viewer/components/CommandPalette.tsx +0 -392
  98. package/src/viewer/components/ComponentDocView.tsx +0 -164
  99. package/src/viewer/components/ComponentGraph.tsx +0 -380
  100. package/src/viewer/components/ComponentHeader.tsx +0 -88
  101. package/src/viewer/components/ContractPanel.tsx +0 -241
  102. package/src/viewer/components/EmptyVariantMessage.tsx +0 -54
  103. package/src/viewer/components/ErrorBoundary.tsx +0 -97
  104. package/src/viewer/components/FigmaEmbed.tsx +0 -238
  105. package/src/viewer/components/FragmentEditor.tsx +0 -525
  106. package/src/viewer/components/FragmentRenderer.tsx +0 -61
  107. package/src/viewer/components/HeaderSearch.tsx +0 -24
  108. package/src/viewer/components/HealthDashboard.tsx +0 -441
  109. package/src/viewer/components/HmrStatusIndicator.tsx +0 -61
  110. package/src/viewer/components/Icons.tsx +0 -479
  111. package/src/viewer/components/InteractionsPanel.tsx +0 -757
  112. package/src/viewer/components/IsolatedPreviewFrame.tsx +0 -346
  113. package/src/viewer/components/IsolatedRender.tsx +0 -113
  114. package/src/viewer/components/KeyboardShortcutsHelp.tsx +0 -53
  115. package/src/viewer/components/LandingPage.tsx +0 -421
  116. package/src/viewer/components/Layout.tsx +0 -27
  117. package/src/viewer/components/LeftSidebar.tsx +0 -472
  118. package/src/viewer/components/LoadErrorMessage.tsx +0 -102
  119. package/src/viewer/components/MultiViewportPreview.tsx +0 -522
  120. package/src/viewer/components/NoVariantsMessage.tsx +0 -59
  121. package/src/viewer/components/PanelShell.tsx +0 -161
  122. package/src/viewer/components/PerformancePanel.tsx +0 -304
  123. package/src/viewer/components/PreviewArea.tsx +0 -472
  124. package/src/viewer/components/PreviewAside.tsx +0 -168
  125. package/src/viewer/components/PreviewFrameHost.tsx +0 -303
  126. package/src/viewer/components/PreviewPane.tsx +0 -149
  127. package/src/viewer/components/PreviewToolbar.tsx +0 -80
  128. package/src/viewer/components/PropsEditor.tsx +0 -506
  129. package/src/viewer/components/PropsTable.tsx +0 -111
  130. package/src/viewer/components/RelationsSection.tsx +0 -88
  131. package/src/viewer/components/ResizablePanel.tsx +0 -271
  132. package/src/viewer/components/RightSidebar.tsx +0 -102
  133. package/src/viewer/components/RuntimeToolsRegistrar.tsx +0 -17
  134. package/src/viewer/components/ScreenshotButton.tsx +0 -90
  135. package/src/viewer/components/Sidebar.tsx +0 -169
  136. package/src/viewer/components/SkeletonLoader.tsx +0 -161
  137. package/src/viewer/components/ThemeProvider.tsx +0 -42
  138. package/src/viewer/components/Toast.tsx +0 -3
  139. package/src/viewer/components/TokenStylePanel.tsx +0 -699
  140. package/src/viewer/components/TopToolbar.tsx +0 -159
  141. package/src/viewer/components/UsageSection.tsx +0 -95
  142. package/src/viewer/components/VariantMatrix.tsx +0 -388
  143. package/src/viewer/components/VariantRenderer.tsx +0 -131
  144. package/src/viewer/components/VariantTabs.tsx +0 -40
  145. package/src/viewer/components/ViewerHeader.tsx +0 -69
  146. package/src/viewer/components/ViewerStateSync.tsx +0 -52
  147. package/src/viewer/components/ViewportSelector.tsx +0 -172
  148. package/src/viewer/components/WebMCPDevTools.tsx +0 -503
  149. package/src/viewer/components/WebMCPIntegration.tsx +0 -47
  150. package/src/viewer/components/WebMCPStatusIndicator.tsx +0 -60
  151. package/src/viewer/components/_future/CreatePage.tsx +0 -836
  152. package/src/viewer/components/viewer-utils.ts +0 -16
  153. package/src/viewer/composition-renderer.ts +0 -381
  154. package/src/viewer/constants/index.ts +0 -1
  155. package/src/viewer/constants/ui.ts +0 -166
  156. package/src/viewer/entry.tsx +0 -335
  157. package/src/viewer/hooks/index.ts +0 -2
  158. package/src/viewer/hooks/useA11yCache.ts +0 -383
  159. package/src/viewer/hooks/useA11yService.ts +0 -364
  160. package/src/viewer/hooks/useActions.ts +0 -138
  161. package/src/viewer/hooks/useAppState.ts +0 -147
  162. package/src/viewer/hooks/useCompiledFragments.ts +0 -42
  163. package/src/viewer/hooks/useFigmaIntegration.ts +0 -132
  164. package/src/viewer/hooks/useHmrStatus.ts +0 -109
  165. package/src/viewer/hooks/useKeyboardShortcuts.ts +0 -270
  166. package/src/viewer/hooks/usePreviewBridge.ts +0 -347
  167. package/src/viewer/hooks/useScrollSpy.ts +0 -78
  168. package/src/viewer/hooks/useUrlState.ts +0 -318
  169. package/src/viewer/hooks/useViewSettings.ts +0 -111
  170. package/src/viewer/index.html +0 -28
  171. package/src/viewer/intelligence/healthReport.ts +0 -505
  172. package/src/viewer/intelligence/styleDrift.ts +0 -340
  173. package/src/viewer/intelligence/usageScanner.ts +0 -309
  174. package/src/viewer/jsx-parser.ts +0 -486
  175. package/src/viewer/preview-frame-entry.tsx +0 -25
  176. package/src/viewer/preview-frame.html +0 -125
  177. package/src/viewer/public/favicon.ico +0 -0
  178. package/src/viewer/render-template.html +0 -68
  179. package/src/viewer/styles/globals.css +0 -278
  180. package/src/viewer/types/a11y.ts +0 -197
  181. package/src/viewer/utils/a11y-fixes.ts +0 -509
  182. package/src/viewer/utils/actionExport.ts +0 -372
  183. package/src/viewer/utils/colorSchemes.ts +0 -201
  184. package/src/viewer/utils/detectRelationships.ts +0 -256
  185. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss +0 -10
  186. package/src/viewer/vendor/shared/src/ComponentDocContent.module.scss.d.ts +0 -2
  187. package/src/viewer/vendor/shared/src/ComponentDocContent.tsx +0 -274
  188. package/src/viewer/vendor/shared/src/DocsHeaderBar.tsx +0 -129
  189. package/src/viewer/vendor/shared/src/DocsPageAsideHost.tsx +0 -89
  190. package/src/viewer/vendor/shared/src/DocsPageShell.tsx +0 -124
  191. package/src/viewer/vendor/shared/src/DocsSearchCommand.tsx +0 -99
  192. package/src/viewer/vendor/shared/src/DocsSidebarNav.tsx +0 -66
  193. package/src/viewer/vendor/shared/src/PropsTable.module.scss +0 -68
  194. package/src/viewer/vendor/shared/src/PropsTable.module.scss.d.ts +0 -2
  195. package/src/viewer/vendor/shared/src/PropsTable.tsx +0 -76
  196. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss +0 -114
  197. package/src/viewer/vendor/shared/src/VariantPreviewCard.module.scss.d.ts +0 -2
  198. package/src/viewer/vendor/shared/src/VariantPreviewCard.tsx +0 -137
  199. package/src/viewer/vendor/shared/src/docs-data/index.ts +0 -32
  200. package/src/viewer/vendor/shared/src/docs-data/mcp-configs.ts +0 -72
  201. package/src/viewer/vendor/shared/src/docs-data/palettes.ts +0 -75
  202. package/src/viewer/vendor/shared/src/docs-data/setup-examples.ts +0 -55
  203. package/src/viewer/vendor/shared/src/docs-layout.scss +0 -28
  204. package/src/viewer/vendor/shared/src/docs-layout.scss.d.ts +0 -2
  205. package/src/viewer/vendor/shared/src/index.ts +0 -34
  206. package/src/viewer/vendor/shared/src/types.ts +0 -53
  207. package/src/viewer/webmcp/__tests__/analytics.test.ts +0 -108
  208. package/src/viewer/webmcp/analytics.ts +0 -165
  209. package/src/viewer/webmcp/index.ts +0 -3
  210. package/src/viewer/webmcp/posthog-bridge.ts +0 -39
  211. package/src/viewer/webmcp/runtime-tools.ts +0 -152
  212. package/src/viewer/webmcp/scan-utils.ts +0 -135
  213. package/src/viewer/webmcp/use-tool-analytics.ts +0 -69
  214. package/src/viewer/webmcp/viewer-state.ts +0 -45
  215. /package/dist/{discovery-NEOY4MPN.js.map → ai-client-I6MDWNYA.js.map} +0 -0
  216. /package/dist/{chunk-PW7QTQA6.js.map → chunk-4OC7FTJB.js.map} +0 -0
  217. /package/dist/{chunk-HRFUSSZI.js.map → chunk-AM4MRTMN.js.map} +0 -0
  218. /package/dist/{scan-CJF2DOQW.js.map → discovery-ZJQSXF56.js.map} +0 -0
  219. /package/dist/{generate-FBHSXR3D.js.map → generate-RJFS2JWA.js.map} +0 -0
  220. /package/dist/{service-TQYWY65E.js.map → scan-3PMCJ4RB.js.map} +0 -0
  221. /package/dist/{static-viewer-NUBFPKWH.js.map → service-VMGNJZ42.js.map} +0 -0
  222. /package/dist/{test-Z5LVO724.js.map → test-SI4NSHQX.js.map} +0 -0
  223. /package/dist/{tokens-CE46OTMD.js.map → tokens-T6SIVUT5.js.map} +0 -0
@@ -5,16 +5,16 @@ import {
5
5
  generatePreviewModule,
6
6
  loadConfig,
7
7
  parseFragmentFile
8
- } from "./chunk-HRFUSSZI.js";
8
+ } from "./chunk-AM4MRTMN.js";
9
9
  import {
10
10
  discoverFragmentFiles,
11
11
  discoverInstalledFragments
12
- } from "./chunk-WXSR2II7.js";
12
+ } from "./chunk-OQKMEFOS.js";
13
13
  import "./chunk-D2CDBRNU.js";
14
14
  import {
15
15
  BRAND,
16
16
  generateContext
17
- } from "./chunk-OQO55NKV.js";
17
+ } from "./chunk-WFS63PCW.js";
18
18
  import "./chunk-Z7EY4VHE.js";
19
19
 
20
20
  // src/viewer/server.ts
@@ -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,13 +355,25 @@ 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;
361
374
  async function getSharedRenderPool() {
362
375
  if (!browserPoolModule) {
363
- browserPoolModule = await import("./service-TQYWY65E.js");
376
+ browserPoolModule = await import("./service-VMGNJZ42.js");
364
377
  }
365
378
  if (!sharedRenderPool) {
366
379
  sharedRenderPool = new browserPoolModule.BrowserPool({
@@ -603,7 +616,7 @@ function fragmentsPlugin(options) {
603
616
  const address = _server.httpServer?.address();
604
617
  const port = typeof address === "object" && address ? address.port : 6006;
605
618
  const renderViewport = viewport || { width: 800, height: 600 };
606
- const { FigmaClient, bufferToBase64Url } = await import("./service-TQYWY65E.js");
619
+ const { FigmaClient, bufferToBase64Url } = await import("./service-VMGNJZ42.js");
607
620
  const figmaClient = new FigmaClient({
608
621
  accessToken: figmaToken
609
622
  });
@@ -694,7 +707,7 @@ function fragmentsPlugin(options) {
694
707
  );
695
708
  return;
696
709
  }
697
- const { FigmaClient } = await import("./service-TQYWY65E.js");
710
+ const { FigmaClient } = await import("./service-VMGNJZ42.js");
698
711
  const figmaClient = new FigmaClient({ accessToken: figmaToken });
699
712
  const { fileKey, nodeId } = figmaClient.parseUrl(figmaUrl);
700
713
  const figmaDesignProps = await figmaClient.getNodeProperties(
@@ -735,7 +748,7 @@ function fragmentsPlugin(options) {
735
748
  }));
736
749
  return;
737
750
  }
738
- const { getSharedTokenRegistry } = await import("./service-TQYWY65E.js");
751
+ const { getSharedTokenRegistry } = await import("./service-VMGNJZ42.js");
739
752
  const registry = getSharedTokenRegistry();
740
753
  if (!registry.isInitialized()) {
741
754
  await registry.initialize(config.tokens, projectRoot);
@@ -795,7 +808,7 @@ function fragmentsPlugin(options) {
795
808
  }));
796
809
  return;
797
810
  }
798
- const { getSharedTokenRegistry } = await import("./service-TQYWY65E.js");
811
+ const { getSharedTokenRegistry } = await import("./service-VMGNJZ42.js");
799
812
  const registry = getSharedTokenRegistry();
800
813
  if (!registry.isInitialized()) {
801
814
  await registry.initialize(config.tokens, projectRoot);
@@ -857,7 +870,7 @@ function fragmentsPlugin(options) {
857
870
  res.end(JSON.stringify({ error: "Could not resolve fragment file path" }));
858
871
  return;
859
872
  }
860
- const { getSharedTokenRegistry } = await import("./service-TQYWY65E.js");
873
+ const { getSharedTokenRegistry } = await import("./service-VMGNJZ42.js");
861
874
  const registry = getSharedTokenRegistry();
862
875
  if (!registry.isInitialized()) {
863
876
  await registry.initialize(config.tokens, projectRoot);
@@ -1035,7 +1048,7 @@ function fragmentsPlugin(options) {
1035
1048
  }
1036
1049
  if (!config.tokens || !config.tokens.include || config.tokens.include.length === 0) {
1037
1050
  try {
1038
- const { discoverTokenFiles } = await import("./discovery-NEOY4MPN.js");
1051
+ const { discoverTokenFiles } = await import("./discovery-ZJQSXF56.js");
1039
1052
  const discovered = await discoverTokenFiles(projectRoot);
1040
1053
  if (discovered.length > 0) {
1041
1054
  config.tokens = {
@@ -1072,7 +1085,7 @@ function fragmentsPlugin(options) {
1072
1085
  const {
1073
1086
  getSharedTokenRegistry,
1074
1087
  generateTokenPatches
1075
- } = await import("./service-TQYWY65E.js");
1088
+ } = await import("./service-VMGNJZ42.js");
1076
1089
  const registry = getSharedTokenRegistry();
1077
1090
  if (!registry.isInitialized()) {
1078
1091
  await registry.initialize(config.tokens, projectRoot);
@@ -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(
@@ -2180,7 +2194,7 @@ async function loadFullFragmentForCompare(_server, _fragmentFiles, componentName
2180
2194
  }
2181
2195
  }
2182
2196
  async function compareImages(image1Base64, image2Base64, threshold) {
2183
- const { DiffEngine, base64UrlToBuffer, bufferToBase64Url } = await import("./service-TQYWY65E.js");
2197
+ const { DiffEngine, base64UrlToBuffer, bufferToBase64Url } = await import("./service-VMGNJZ42.js");
2184
2198
  const { PNG } = await import("pngjs");
2185
2199
  const buffer1 = base64UrlToBuffer(image1Base64);
2186
2200
  const buffer2 = base64UrlToBuffer(image2Base64);
@@ -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-7ZEAFBVN.js.map