@seed-design/figma 1.3.3 → 1.3.5

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 (30) hide show
  1. package/lib/codegen/index.cjs +72 -12
  2. package/lib/codegen/index.d.ts +2 -1
  3. package/lib/codegen/index.d.ts.map +1 -1
  4. package/lib/codegen/index.js +73 -13
  5. package/lib/codegen/targets/react/index.cjs +207 -30
  6. package/lib/codegen/targets/react/index.d.ts.map +1 -1
  7. package/lib/codegen/targets/react/index.js +207 -30
  8. package/lib/index.cjs +47 -9
  9. package/lib/index.js +47 -9
  10. package/package.json +3 -3
  11. package/src/codegen/component-properties.ts +20 -0
  12. package/src/codegen/core/codegen.ts +26 -1
  13. package/src/codegen/skip-components.ts +7 -0
  14. package/src/codegen/targets/figma/pipeline.ts +2 -0
  15. package/src/codegen/targets/react/component/handlers/action-button.ts +3 -1
  16. package/src/codegen/targets/react/component/handlers/app-bar.ts +17 -0
  17. package/src/codegen/targets/react/component/handlers/bottom-sheet.ts +1 -2
  18. package/src/codegen/targets/react/component/handlers/identity-placeholder.ts +4 -13
  19. package/src/codegen/targets/react/component/handlers/image-frame.ts +134 -0
  20. package/src/codegen/targets/react/component/handlers/index.ts +1 -0
  21. package/src/codegen/targets/react/component/handlers/menu-sheet.ts +1 -1
  22. package/src/codegen/targets/react/component/handlers/switch.ts +0 -4
  23. package/src/codegen/targets/react/component/handlers/tabs.ts +7 -3
  24. package/src/codegen/targets/react/pipeline.ts +2 -0
  25. package/src/entities/data/__generated__/component-sets/index.d.ts +21 -8
  26. package/src/entities/data/__generated__/component-sets/index.mjs +22 -9
  27. package/src/entities/data/__generated__/components/index.d.ts +6 -6
  28. package/src/entities/data/__generated__/components/index.mjs +6 -6
  29. package/src/entities/data/__generated__/variable-collections/index.mjs +1 -0
  30. package/src/entities/data/__generated__/variables/index.mjs +24 -0
@@ -448,11 +448,20 @@ function applyInferredLayout(parentNode, result) {
448
448
  };
449
449
  }
450
450
 
451
- function createCodeGenerator({ frameTransformer, textTransformer, rectangleTransformer, instanceTransformer, vectorTransformer, booleanOperationTransformer, shouldInferAutoLayout }) {
451
+ function createCodeGenerator({ frameTransformer, textTransformer, rectangleTransformer, instanceTransformer, vectorTransformer, booleanOperationTransformer, shouldInferAutoLayout, skipComponentKeys }) {
452
+ function isSkippedInstance(node) {
453
+ if (!skipComponentKeys || skipComponentKeys.size === 0) return false;
454
+ if (node.type !== "INSTANCE") return false;
455
+ const { componentKey, componentSetKey } = node;
456
+ return skipComponentKeys.has(componentKey) || !!componentSetKey && skipComponentKeys.has(componentSetKey);
457
+ }
452
458
  function traverse(node) {
453
459
  if ("visible" in node && !node.visible) {
454
460
  return;
455
461
  }
462
+ if (isSkippedInstance(node)) {
463
+ return;
464
+ }
456
465
  const result = tsPattern.match(node).with({
457
466
  type: "FRAME"
458
467
  }, (node)=>shouldInferAutoLayout ? frameTransformer(applyInferredLayout(node, inferLayout(node)), traverse) : frameTransformer(node, traverse)).with({
@@ -470,7 +479,7 @@ function createCodeGenerator({ frameTransformer, textTransformer, rectangleTrans
470
479
  type: "BOOLEAN_OPERATION"
471
480
  }, (node)=>booleanOperationTransformer(node, traverse)).with({
472
481
  type: "UNHANDLED"
473
- }, ()=>createElement("UnhandledFigmaNode")).exhaustive();
482
+ }, (node)=>createElement(`Unhandled${changeCase.pascalCase(node.original.type)}Node`)).exhaustive();
474
483
  if (result) {
475
484
  return appendSource(result, node.id);
476
485
  }
@@ -480,6 +489,12 @@ function createCodeGenerator({ frameTransformer, textTransformer, rectangleTrans
480
489
  return traverse(node);
481
490
  }
482
491
  function generateCode(node, options) {
492
+ if (isSkippedInstance(node)) {
493
+ return {
494
+ imports: "",
495
+ jsx: "// This component is intentionally excluded from codegen"
496
+ };
497
+ }
483
498
  const jsxTree = generateJsxTree(node);
484
499
  if (!jsxTree) {
485
500
  return undefined;
@@ -11517,6 +11532,7 @@ const FIGMA_VARIABLE_COLLECTIONS = {
11517
11532
  "VariableID:576:22878",
11518
11533
  "VariableID:59176:2",
11519
11534
  "VariableID:59176:3",
11535
+ "VariableID:61337:3",
11520
11536
  "VariableID:654:20851",
11521
11537
  "VariableID:670:2700",
11522
11538
  "VariableID:6782:76317",
@@ -18350,6 +18366,30 @@ const FIGMA_VARIABLES = {
18350
18366
  ],
18351
18367
  "codeSyntax": {}
18352
18368
  },
18369
+ "VariableID:61337:3": {
18370
+ "name": "stroke/focus-ring",
18371
+ "id": "VariableID:61337:3",
18372
+ "remote": false,
18373
+ "key": "ca937a0bb83fda59d06959cfb5d960f00b5e9add",
18374
+ "variableCollectionId": "VariableCollectionId:1:3",
18375
+ "resolvedType": "COLOR",
18376
+ "description": "",
18377
+ "hiddenFromPublishing": false,
18378
+ "valuesByMode": {
18379
+ "1928:7": {
18380
+ "type": "VARIABLE_ALIAS",
18381
+ "id": "VariableID:1883:92938"
18382
+ },
18383
+ "1928:8": {
18384
+ "type": "VARIABLE_ALIAS",
18385
+ "id": "VariableID:1883:92938"
18386
+ }
18387
+ },
18388
+ "scopes": [
18389
+ "ALL_SCOPES"
18390
+ ],
18391
+ "codeSyntax": {}
18392
+ },
18353
18393
  "VariableID:41338:806": {
18354
18394
  "name": "stroke/informative-solid",
18355
18395
  "id": "VariableID:41338:806",
@@ -18651,8 +18691,8 @@ const FIGMA_VARIABLES = {
18651
18691
  }
18652
18692
  };
18653
18693
 
18654
- const privateTemplateAttechmentField = {
18655
- "name": "privateTemplateAttechmentField",
18694
+ const privateTemplateAttachmentField = {
18695
+ "name": "privateTemplateAttachmentField",
18656
18696
  "key": "5ba20e248e9cd0292fc285488b2ed3b3145d37b0",
18657
18697
  "componentPropertyDefinitions": {
18658
18698
  "Show Header#40606:8": {
@@ -18865,6 +18905,19 @@ const privateComponentFieldHeaderSuffix = {
18865
18905
  }
18866
18906
  }
18867
18907
  };
18908
+ const privateComponentIdentityPlaceholder = {
18909
+ "name": "privateComponentIdentityPlaceholder",
18910
+ "key": "7d7ae18cabac6ebad19934516de8e7e256854eba",
18911
+ "componentPropertyDefinitions": {
18912
+ "Identity": {
18913
+ "type": "VARIANT",
18914
+ "variantOptions": [
18915
+ "Person",
18916
+ "Business"
18917
+ ]
18918
+ }
18919
+ }
18920
+ };
18868
18921
  const privateComponentInputButtonPrefix = {
18869
18922
  "name": "privateComponentInputButtonPrefix",
18870
18923
  "key": "c7d12be4056a8171f6857ec4ef15d81bd18d8cae",
@@ -20657,11 +20710,11 @@ const componentBottomSheet = {
20657
20710
  "Header Layout": {
20658
20711
  "type": "VARIANT",
20659
20712
  "variantOptions": [
20713
+ "Top Left",
20714
+ "Top Center",
20660
20715
  "Bottom Left",
20661
- "None",
20662
20716
  "Bottom Center",
20663
- "Top Center",
20664
- "Top Left"
20717
+ "None"
20665
20718
  ]
20666
20719
  }
20667
20720
  }
@@ -21209,7 +21262,7 @@ const componentImageFrame = {
21209
21262
  "80",
21210
21263
  "96",
21211
21264
  "120",
21212
- "\bFree"
21265
+ "Free"
21213
21266
  ]
21214
21267
  },
21215
21268
  "Rounded": {
@@ -22068,8 +22121,7 @@ const componentSwitch = {
22068
22121
  "type": "VARIANT",
22069
22122
  "variantOptions": [
22070
22123
  "Label Last",
22071
- "Label First",
22072
- "🚫[Switch Mark 사용] Switch Only"
22124
+ "Label First"
22073
22125
  ]
22074
22126
  }
22075
22127
  }
@@ -22838,6 +22890,7 @@ var FIGMA_COMPONENTS = {
22838
22890
  privateComponentFieldFooterCharacterCount: privateComponentFieldFooterCharacterCount,
22839
22891
  privateComponentFieldHeaderIndicator: privateComponentFieldHeaderIndicator,
22840
22892
  privateComponentFieldHeaderSuffix: privateComponentFieldHeaderSuffix,
22893
+ privateComponentIdentityPlaceholder: privateComponentIdentityPlaceholder,
22841
22894
  privateComponentInputButtonPrefix: privateComponentInputButtonPrefix,
22842
22895
  privateComponentInputButtonSuffix: privateComponentInputButtonSuffix,
22843
22896
  privateComponentInputButtonValue: privateComponentInputButtonValue,
@@ -22882,7 +22935,7 @@ var FIGMA_COMPONENTS = {
22882
22935
  privateComponentUnderlineTextInputInputReadOnly: privateComponentUnderlineTextInputInputReadOnly,
22883
22936
  privateComponentUnderlineTextInputPrefix: privateComponentUnderlineTextInputPrefix,
22884
22937
  privateComponentUnderlineTextInputSuffix: privateComponentUnderlineTextInputSuffix,
22885
- privateTemplateAttechmentField: privateTemplateAttechmentField,
22938
+ privateTemplateAttachmentField: privateTemplateAttachmentField,
22886
22939
  privateTemplateChipGroup: privateTemplateChipGroup,
22887
22940
  privateTemplateChipGroupField: privateTemplateChipGroupField,
22888
22941
  privateTemplatePhoneNumberField: privateTemplatePhoneNumberField,
@@ -23059,6 +23112,12 @@ const variableService = createVariableService({
23059
23112
  }
23060
23113
  });
23061
23114
 
23115
+ const SKIP_COMPONENT_KEYS = new Set([
23116
+ componentOsBottomIndicatorFigmaOnly.key,
23117
+ componentOsKeyboardFigmaOnly.key,
23118
+ componentOsStatusBarFigmaOnly.key
23119
+ ]);
23120
+
23062
23121
  function createFrameTransformer({ propsConverters }) {
23063
23122
  return defineElementTransformer((node, traverse)=>{
23064
23123
  const children = node.children;
@@ -23381,7 +23440,8 @@ function createPipeline(options = {}) {
23381
23440
  instanceTransformer,
23382
23441
  vectorTransformer,
23383
23442
  booleanOperationTransformer,
23384
- shouldInferAutoLayout
23443
+ shouldInferAutoLayout,
23444
+ skipComponentKeys: SKIP_COMPONENT_KEYS
23385
23445
  });
23386
23446
  return codegenTransformer;
23387
23447
  }
@@ -122,6 +122,7 @@ interface CodeGeneratorDeps {
122
122
  vectorTransformer: ElementTransformer<NormalizedVectorNode>;
123
123
  booleanOperationTransformer: ElementTransformer<NormalizedBooleanOperationNode>;
124
124
  shouldInferAutoLayout: boolean;
125
+ skipComponentKeys?: Set<string>;
125
126
  }
126
127
  interface CodeGenerator {
127
128
  generateJsxTree: (node: NormalizedSceneNode) => ElementNode | undefined;
@@ -132,7 +133,7 @@ interface CodeGenerator {
132
133
  jsx: string;
133
134
  } | undefined;
134
135
  }
135
- declare function createCodeGenerator({ frameTransformer, textTransformer, rectangleTransformer, instanceTransformer, vectorTransformer, booleanOperationTransformer, shouldInferAutoLayout, }: CodeGeneratorDeps): CodeGenerator;
136
+ declare function createCodeGenerator({ frameTransformer, textTransformer, rectangleTransformer, instanceTransformer, vectorTransformer, booleanOperationTransformer, shouldInferAutoLayout, skipComponentKeys, }: CodeGeneratorDeps): CodeGenerator;
136
137
 
137
138
  interface ComponentHandler<T extends NormalizedInstanceNode["componentProperties"] = NormalizedInstanceNode["componentProperties"]> {
138
139
  key: string;