@fragments-sdk/cli 0.7.4 → 0.7.6

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 (58) hide show
  1. package/LICENSE +1 -4
  2. package/dist/bin.js +33 -14
  3. package/dist/bin.js.map +1 -1
  4. package/dist/{chunk-NEJ2FBTN.js → chunk-CR3XHBGM.js} +2 -2
  5. package/dist/{chunk-S56I5FST.js → chunk-EFQ7SIBX.js} +582 -107
  6. package/dist/chunk-EFQ7SIBX.js.map +1 -0
  7. package/dist/{chunk-UXLGIGSX.js → chunk-GIC3I2KZ.js} +2 -2
  8. package/dist/{chunk-R6IZZSE7.js → chunk-JZNATKQA.js} +9 -3
  9. package/dist/chunk-JZNATKQA.js.map +1 -0
  10. package/dist/{chunk-P33AKQJW.js → chunk-SFWZ4K7C.js} +8 -2
  11. package/dist/{chunk-P33AKQJW.js.map → chunk-SFWZ4K7C.js.map} +1 -1
  12. package/dist/{core-3NMNCLFW.js → core-T7BDYEGO.js} +3 -3
  13. package/dist/{generate-23VLX7QN.js → generate-C2DKFCFJ.js} +4 -4
  14. package/dist/index.d.ts +28 -2
  15. package/dist/index.js +8 -6
  16. package/dist/index.js.map +1 -1
  17. package/dist/{init-VYVYMVHH.js → init-O3FCHEPN.js} +22 -6
  18. package/dist/init-O3FCHEPN.js.map +1 -0
  19. package/dist/mcp-bin.js +3 -3
  20. package/dist/{scan-FZR6YVI5.js → scan-IYTZDUKG.js} +5 -5
  21. package/dist/{service-CFFBHW4X.js → service-VA6XKADO.js} +3 -3
  22. package/dist/{static-viewer-VA2JXSCX.js → static-viewer-5N42MBDR.js} +3 -3
  23. package/dist/{test-VTD7R6G2.js → test-OMMDWL2W.js} +3 -3
  24. package/dist/{tokens-7JA5CPDL.js → tokens-6VJAHFIG.js} +4 -4
  25. package/dist/{viewer-WXTDDQGK.js → viewer-IVP5XC7U.js} +22 -14
  26. package/dist/viewer-IVP5XC7U.js.map +1 -0
  27. package/package.json +4 -2
  28. package/src/bin.ts +4 -0
  29. package/src/commands/add.ts +6 -0
  30. package/src/commands/init.ts +18 -2
  31. package/src/commands/validate.ts +24 -2
  32. package/src/core/config.ts +6 -0
  33. package/src/core/index.ts +1 -0
  34. package/src/core/schema.ts +6 -0
  35. package/src/core/types.ts +21 -0
  36. package/src/index.ts +2 -1
  37. package/src/service/snippet-validation.test.ts +209 -0
  38. package/src/service/snippet-validation.ts +635 -0
  39. package/src/validators.ts +53 -5
  40. package/src/viewer/__tests__/viewer-integration.test.ts +8 -0
  41. package/src/viewer/components/CodePanel.naming.test.tsx +60 -0
  42. package/src/viewer/components/CodePanel.tsx +76 -468
  43. package/src/viewer/components/Layout.tsx +1 -1
  44. package/src/viewer/utils/a11y-fixes.ts +24 -9
  45. package/src/viewer/vite-plugin.ts +9 -1
  46. package/dist/chunk-R6IZZSE7.js.map +0 -1
  47. package/dist/chunk-S56I5FST.js.map +0 -1
  48. package/dist/init-VYVYMVHH.js.map +0 -1
  49. package/dist/viewer-WXTDDQGK.js.map +0 -1
  50. /package/dist/{chunk-NEJ2FBTN.js.map → chunk-CR3XHBGM.js.map} +0 -0
  51. /package/dist/{chunk-UXLGIGSX.js.map → chunk-GIC3I2KZ.js.map} +0 -0
  52. /package/dist/{core-3NMNCLFW.js.map → core-T7BDYEGO.js.map} +0 -0
  53. /package/dist/{generate-23VLX7QN.js.map → generate-C2DKFCFJ.js.map} +0 -0
  54. /package/dist/{scan-FZR6YVI5.js.map → scan-IYTZDUKG.js.map} +0 -0
  55. /package/dist/{service-CFFBHW4X.js.map → service-VA6XKADO.js.map} +0 -0
  56. /package/dist/{static-viewer-VA2JXSCX.js.map → static-viewer-5N42MBDR.js.map} +0 -0
  57. /package/dist/{test-VTD7R6G2.js.map → test-OMMDWL2W.js.map} +0 -0
  58. /package/dist/{tokens-7JA5CPDL.js.map → tokens-6VJAHFIG.js.map} +0 -0
package/dist/mcp-bin.js CHANGED
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
3
3
  import {
4
4
  generateContext
5
- } from "./chunk-UXLGIGSX.js";
6
- import "./chunk-P33AKQJW.js";
5
+ } from "./chunk-GIC3I2KZ.js";
6
+ import "./chunk-SFWZ4K7C.js";
7
7
  import {
8
8
  BRAND,
9
9
  DEFAULTS
@@ -60,7 +60,7 @@ var _service = null;
60
60
  async function getService() {
61
61
  if (!_service) {
62
62
  try {
63
- _service = await import("./service-CFFBHW4X.js");
63
+ _service = await import("./service-VA6XKADO.js");
64
64
  } catch {
65
65
  throw new Error(
66
66
  "Visual tools require playwright. Install it with: npm install playwright"
@@ -1,15 +1,15 @@
1
1
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
2
2
  import {
3
3
  scan
4
- } from "./chunk-NEJ2FBTN.js";
5
- import "./chunk-R6IZZSE7.js";
4
+ } from "./chunk-CR3XHBGM.js";
5
+ import "./chunk-JZNATKQA.js";
6
6
  import "./chunk-AWYCDRPG.js";
7
7
  import "./chunk-YMPGYEWK.js";
8
- import "./chunk-UXLGIGSX.js";
9
- import "./chunk-P33AKQJW.js";
8
+ import "./chunk-GIC3I2KZ.js";
9
+ import "./chunk-SFWZ4K7C.js";
10
10
  import "./chunk-EKLMXTWU.js";
11
11
  import "./chunk-Z7EY4VHE.js";
12
12
  export {
13
13
  scan
14
14
  };
15
- //# sourceMappingURL=scan-FZR6YVI5.js.map
15
+ //# sourceMappingURL=scan-IYTZDUKG.js.map
@@ -98,8 +98,8 @@ import {
98
98
  sleep,
99
99
  summarizePatternsForPrompt
100
100
  } from "./chunk-YMPGYEWK.js";
101
- import "./chunk-UXLGIGSX.js";
102
- import "./chunk-P33AKQJW.js";
101
+ import "./chunk-GIC3I2KZ.js";
102
+ import "./chunk-SFWZ4K7C.js";
103
103
  import {
104
104
  BRAND,
105
105
  DEFAULTS
@@ -207,4 +207,4 @@ export {
207
207
  sleep,
208
208
  summarizePatternsForPrompt
209
209
  };
210
- //# sourceMappingURL=service-CFFBHW4X.js.map
210
+ //# sourceMappingURL=service-VA6XKADO.js.map
@@ -3,12 +3,12 @@ import {
3
3
  generateStaticViewer,
4
4
  generateViewerFromJson
5
5
  } from "./chunk-TOIE7VXF.js";
6
- import "./chunk-UXLGIGSX.js";
7
- import "./chunk-P33AKQJW.js";
6
+ import "./chunk-GIC3I2KZ.js";
7
+ import "./chunk-SFWZ4K7C.js";
8
8
  import "./chunk-EKLMXTWU.js";
9
9
  import "./chunk-Z7EY4VHE.js";
10
10
  export {
11
11
  generateStaticViewer,
12
12
  generateViewerFromJson
13
13
  };
14
- //# sourceMappingURL=static-viewer-VA2JXSCX.js.map
14
+ //# sourceMappingURL=static-viewer-5N42MBDR.js.map
@@ -1,11 +1,11 @@
1
1
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
2
2
  import {
3
3
  parseFragmentFile
4
- } from "./chunk-R6IZZSE7.js";
4
+ } from "./chunk-JZNATKQA.js";
5
5
  import {
6
6
  discoverFragmentFiles
7
7
  } from "./chunk-AWYCDRPG.js";
8
- import "./chunk-P33AKQJW.js";
8
+ import "./chunk-SFWZ4K7C.js";
9
9
  import "./chunk-EKLMXTWU.js";
10
10
  import "./chunk-Z7EY4VHE.js";
11
11
 
@@ -1072,4 +1072,4 @@ export {
1072
1072
  listTests,
1073
1073
  runTestCommand
1074
1074
  };
1075
- //# sourceMappingURL=test-VTD7R6G2.js.map
1075
+ //# sourceMappingURL=test-OMMDWL2W.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
2
2
  import {
3
3
  loadConfig
4
- } from "./chunk-R6IZZSE7.js";
4
+ } from "./chunk-JZNATKQA.js";
5
5
  import "./chunk-AWYCDRPG.js";
6
6
  import {
7
7
  parseTokenFiles
8
8
  } from "./chunk-YMPGYEWK.js";
9
- import "./chunk-UXLGIGSX.js";
10
- import "./chunk-P33AKQJW.js";
9
+ import "./chunk-GIC3I2KZ.js";
10
+ import "./chunk-SFWZ4K7C.js";
11
11
  import {
12
12
  BRAND
13
13
  } from "./chunk-EKLMXTWU.js";
@@ -173,4 +173,4 @@ export {
173
173
  tokens_default as default,
174
174
  tokens
175
175
  };
176
- //# sourceMappingURL=tokens-7JA5CPDL.js.map
176
+ //# sourceMappingURL=tokens-6VJAHFIG.js.map
@@ -4,15 +4,15 @@ import {
4
4
  findStorybookDir,
5
5
  generatePreviewModule,
6
6
  loadConfig
7
- } from "./chunk-R6IZZSE7.js";
7
+ } from "./chunk-JZNATKQA.js";
8
8
  import {
9
9
  discoverFragmentFiles,
10
10
  discoverInstalledFragments
11
11
  } from "./chunk-AWYCDRPG.js";
12
12
  import {
13
13
  generateContext
14
- } from "./chunk-UXLGIGSX.js";
15
- import "./chunk-P33AKQJW.js";
14
+ } from "./chunk-GIC3I2KZ.js";
15
+ import "./chunk-SFWZ4K7C.js";
16
16
  import {
17
17
  BRAND
18
18
  } from "./chunk-EKLMXTWU.js";
@@ -360,7 +360,7 @@ var sharedRenderPool = null;
360
360
  var browserPoolModule = null;
361
361
  async function getSharedRenderPool() {
362
362
  if (!browserPoolModule) {
363
- browserPoolModule = await import("./service-CFFBHW4X.js");
363
+ browserPoolModule = await import("./service-VA6XKADO.js");
364
364
  }
365
365
  if (!sharedRenderPool) {
366
366
  sharedRenderPool = new browserPoolModule.BrowserPool({
@@ -603,7 +603,7 @@ function fragmentsPlugin(options) {
603
603
  const address = _server.httpServer?.address();
604
604
  const port = typeof address === "object" && address ? address.port : 6006;
605
605
  const renderViewport = viewport || { width: 800, height: 600 };
606
- const { FigmaClient, bufferToBase64Url } = await import("./service-CFFBHW4X.js");
606
+ const { FigmaClient, bufferToBase64Url } = await import("./service-VA6XKADO.js");
607
607
  const figmaClient = new FigmaClient({
608
608
  accessToken: figmaToken
609
609
  });
@@ -694,7 +694,7 @@ function fragmentsPlugin(options) {
694
694
  );
695
695
  return;
696
696
  }
697
- const { FigmaClient } = await import("./service-CFFBHW4X.js");
697
+ const { FigmaClient } = await import("./service-VA6XKADO.js");
698
698
  const figmaClient = new FigmaClient({ accessToken: figmaToken });
699
699
  const { fileKey, nodeId } = figmaClient.parseUrl(figmaUrl);
700
700
  const figmaDesignProps = await figmaClient.getNodeProperties(
@@ -735,7 +735,7 @@ function fragmentsPlugin(options) {
735
735
  }));
736
736
  return;
737
737
  }
738
- const { getSharedTokenRegistry } = await import("./service-CFFBHW4X.js");
738
+ const { getSharedTokenRegistry } = await import("./service-VA6XKADO.js");
739
739
  const registry = getSharedTokenRegistry();
740
740
  if (!registry.isInitialized()) {
741
741
  await registry.initialize(config.tokens, projectRoot);
@@ -795,7 +795,7 @@ function fragmentsPlugin(options) {
795
795
  }));
796
796
  return;
797
797
  }
798
- const { getSharedTokenRegistry } = await import("./service-CFFBHW4X.js");
798
+ const { getSharedTokenRegistry } = await import("./service-VA6XKADO.js");
799
799
  const registry = getSharedTokenRegistry();
800
800
  if (!registry.isInitialized()) {
801
801
  await registry.initialize(config.tokens, projectRoot);
@@ -857,7 +857,7 @@ function fragmentsPlugin(options) {
857
857
  res.end(JSON.stringify({ error: "Could not resolve fragment file path" }));
858
858
  return;
859
859
  }
860
- const { getSharedTokenRegistry } = await import("./service-CFFBHW4X.js");
860
+ const { getSharedTokenRegistry } = await import("./service-VA6XKADO.js");
861
861
  const registry = getSharedTokenRegistry();
862
862
  if (!registry.isInitialized()) {
863
863
  await registry.initialize(config.tokens, projectRoot);
@@ -983,7 +983,7 @@ function fragmentsPlugin(options) {
983
983
  }
984
984
  const { writeFile, mkdir } = await import("fs/promises");
985
985
  const { join: join2 } = await import("path");
986
- const { BRAND: BRAND2 } = await import("./core-3NMNCLFW.js");
986
+ const { BRAND: BRAND2 } = await import("./core-T7BDYEGO.js");
987
987
  const fragmentsDir = join2(projectRoot, BRAND2.dataDir, BRAND2.componentsDir);
988
988
  await mkdir(fragmentsDir, { recursive: true });
989
989
  const fragmentPath = join2(
@@ -1056,7 +1056,7 @@ function fragmentsPlugin(options) {
1056
1056
  const {
1057
1057
  getSharedTokenRegistry,
1058
1058
  generateTokenPatches
1059
- } = await import("./service-CFFBHW4X.js");
1059
+ } = await import("./service-VA6XKADO.js");
1060
1060
  const registry = getSharedTokenRegistry();
1061
1061
  if (!registry.isInitialized()) {
1062
1062
  await registry.initialize(config.tokens, projectRoot);
@@ -1475,7 +1475,15 @@ function mergeMetadata(fragment, metadataModule) {
1475
1475
  if (metadata.variants && fragment.variants) {
1476
1476
  for (const metaVariant of metadata.variants) {
1477
1477
  const fragmentVariant = fragment.variants.find(v => v.name === metaVariant.name);
1478
- if (fragmentVariant && metaVariant.figma && !fragmentVariant.figma) {
1478
+ if (!fragmentVariant) continue;
1479
+
1480
+ // Use authored code snippets from fragment metadata when story variants
1481
+ // don't define their own code.
1482
+ if (metaVariant.code && !fragmentVariant.code) {
1483
+ fragmentVariant.code = metaVariant.code;
1484
+ }
1485
+
1486
+ if (metaVariant.figma && !fragmentVariant.figma) {
1479
1487
  fragmentVariant.figma = metaVariant.figma;
1480
1488
  }
1481
1489
  }
@@ -1943,7 +1951,7 @@ async function loadFullFragmentForCompare(_server, _fragmentFiles, componentName
1943
1951
  }
1944
1952
  }
1945
1953
  async function compareImages(image1Base64, image2Base64, threshold) {
1946
- const { DiffEngine, base64UrlToBuffer, bufferToBase64Url } = await import("./service-CFFBHW4X.js");
1954
+ const { DiffEngine, base64UrlToBuffer, bufferToBase64Url } = await import("./service-VA6XKADO.js");
1947
1955
  const { PNG } = await import("pngjs");
1948
1956
  const buffer1 = base64UrlToBuffer(image1Base64);
1949
1957
  const buffer2 = base64UrlToBuffer(image2Base64);
@@ -2196,4 +2204,4 @@ export {
2196
2204
  createDevServer,
2197
2205
  fragmentsPlugin
2198
2206
  };
2199
- //# sourceMappingURL=viewer-WXTDDQGK.js.map
2207
+ //# sourceMappingURL=viewer-IVP5XC7U.js.map