@seed-design/figma 0.0.4 → 0.0.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 (211) hide show
  1. package/lib/index.cjs +10589 -12261
  2. package/lib/index.d.ts +1732 -41
  3. package/lib/index.js +10565 -12262
  4. package/package.json +2 -2
  5. package/src/codegen/context.ts +148 -0
  6. package/src/{component/type-helper.ts → codegen/core/component.ts} +1 -12
  7. package/src/codegen/core/index.ts +14 -0
  8. package/src/{jsx.ts → codegen/core/jsx.ts} +13 -3
  9. package/src/codegen/core/transformer.ts +40 -0
  10. package/src/{data → codegen/data}/icons.ts +2 -6
  11. package/src/{data → codegen/data}/styles.ts +87 -29
  12. package/src/codegen/data/variable-collections.ts +310 -0
  13. package/src/{data → codegen/data}/variables.ts +2821 -5887
  14. package/src/codegen/domain/codegen.service.ts +69 -0
  15. package/src/codegen/domain/figma-component.service.ts +21 -0
  16. package/src/codegen/domain/frame.service.ts +108 -0
  17. package/src/codegen/domain/icon.interface.ts +5 -0
  18. package/src/codegen/domain/icon.repository.ts +11 -0
  19. package/src/codegen/domain/icon.service.ts +35 -0
  20. package/src/codegen/domain/index.ts +22 -0
  21. package/src/codegen/domain/instance.service.ts +91 -0
  22. package/src/codegen/domain/props/container-layout-props.service.ts +248 -0
  23. package/src/codegen/domain/props/fill-props.service.ts +75 -0
  24. package/src/codegen/domain/props/radius-props.service.ts +105 -0
  25. package/src/codegen/domain/props/self-layout-props.service.ts +127 -0
  26. package/src/codegen/domain/props/stroke-props.service.ts +45 -0
  27. package/src/codegen/domain/props/type-style-props.service.ts +31 -0
  28. package/src/codegen/domain/rectangle.service.ts +31 -0
  29. package/src/codegen/domain/seed-component/deps.interface.ts +6 -0
  30. package/src/codegen/domain/seed-component/index.ts +75 -0
  31. package/src/{component/type.ts → codegen/domain/seed-component/properties.type.ts} +2 -2
  32. package/src/{component/properties.ts → codegen/domain/seed-component/size.ts} +4 -2
  33. package/src/codegen/domain/seed-component/transformers/action-button.ts +69 -0
  34. package/src/codegen/domain/seed-component/transformers/action-chip.ts +82 -0
  35. package/src/codegen/domain/seed-component/transformers/action-sheet.ts +78 -0
  36. package/src/{component/handlers → codegen/domain/seed-component/transformers}/app-bar.ts +114 -111
  37. package/src/codegen/domain/seed-component/transformers/avatar-stack.ts +30 -0
  38. package/src/codegen/domain/seed-component/transformers/avatar.ts +39 -0
  39. package/src/codegen/domain/seed-component/transformers/badge.ts +22 -0
  40. package/src/codegen/domain/seed-component/transformers/callout.ts +90 -0
  41. package/src/codegen/domain/seed-component/transformers/checkbox.ts +34 -0
  42. package/src/codegen/domain/seed-component/transformers/chip-tabs.ts +55 -0
  43. package/src/codegen/domain/seed-component/transformers/control-chip.ts +86 -0
  44. package/src/codegen/domain/seed-component/transformers/error-state.ts +39 -0
  45. package/src/codegen/domain/seed-component/transformers/extended-action-sheet.ts +99 -0
  46. package/src/codegen/domain/seed-component/transformers/extended-fab.ts +25 -0
  47. package/src/codegen/domain/seed-component/transformers/fab.ts +18 -0
  48. package/src/codegen/domain/seed-component/transformers/help-bubble.ts +68 -0
  49. package/src/codegen/domain/seed-component/transformers/identity-placeholder.ts +18 -0
  50. package/src/{component/handlers → codegen/domain/seed-component/transformers}/inline-banner.ts +11 -13
  51. package/src/codegen/domain/seed-component/transformers/manner-temp-badge.ts +19 -0
  52. package/src/codegen/domain/seed-component/transformers/multiline-text-field.ts +82 -0
  53. package/src/codegen/domain/seed-component/transformers/progress-circle.ts +51 -0
  54. package/src/codegen/domain/seed-component/transformers/reaction-button.ts +37 -0
  55. package/src/codegen/domain/seed-component/transformers/segmented-control.ts +59 -0
  56. package/src/codegen/domain/seed-component/transformers/select-box.ts +82 -0
  57. package/src/codegen/domain/seed-component/transformers/skeleton.ts +52 -0
  58. package/src/codegen/domain/seed-component/transformers/snackbar.ts +23 -0
  59. package/src/codegen/domain/seed-component/transformers/switch.ts +31 -0
  60. package/src/codegen/domain/seed-component/transformers/tabs.ts +129 -0
  61. package/src/{component/handlers → codegen/domain/seed-component/transformers}/text-button.ts +16 -18
  62. package/src/codegen/domain/seed-component/transformers/text-field.ts +109 -0
  63. package/src/codegen/domain/seed-component/transformers/toggle-button.ts +47 -0
  64. package/src/codegen/domain/style.interface.ts +5 -0
  65. package/src/codegen/domain/style.repository.ts +23 -0
  66. package/src/codegen/domain/style.service.ts +38 -0
  67. package/src/codegen/domain/text.service.ts +62 -0
  68. package/src/codegen/domain/variable.interface.ts +18 -0
  69. package/src/codegen/domain/variable.repository.ts +44 -0
  70. package/src/codegen/domain/variable.service.ts +95 -0
  71. package/src/codegen/index.ts +13 -0
  72. package/src/index.ts +2 -2
  73. package/src/normalizer/from-plugin.ts +29 -28
  74. package/src/normalizer/from-rest.ts +5 -1
  75. package/src/normalizer/types.ts +80 -32
  76. package/src/utils/common.ts +19 -0
  77. package/src/utils/css.ts +13 -0
  78. package/src/utils/figma-variable.ts +13 -0
  79. package/src/component/handlers/action-button.ts +0 -66
  80. package/src/component/handlers/action-chip.ts +0 -71
  81. package/src/component/handlers/action-sheet.ts +0 -74
  82. package/src/component/handlers/avatar-stack.ts +0 -35
  83. package/src/component/handlers/avatar.ts +0 -37
  84. package/src/component/handlers/badge.ts +0 -20
  85. package/src/component/handlers/callout.ts +0 -87
  86. package/src/component/handlers/checkbox.ts +0 -32
  87. package/src/component/handlers/chip-tabs.ts +0 -51
  88. package/src/component/handlers/control-chip.ts +0 -75
  89. package/src/component/handlers/error-state.ts +0 -37
  90. package/src/component/handlers/extended-action-sheet.ts +0 -86
  91. package/src/component/handlers/extended-fab.ts +0 -24
  92. package/src/component/handlers/fab.ts +0 -17
  93. package/src/component/handlers/help-bubble.ts +0 -66
  94. package/src/component/handlers/identity-placeholder.ts +0 -16
  95. package/src/component/handlers/manner-temp-badge.ts +0 -17
  96. package/src/component/handlers/multiline-text-field.ts +0 -80
  97. package/src/component/handlers/progress-circle.ts +0 -49
  98. package/src/component/handlers/reaction-button.ts +0 -36
  99. package/src/component/handlers/segmented-control.ts +0 -51
  100. package/src/component/handlers/select-box.ts +0 -76
  101. package/src/component/handlers/skeleton.ts +0 -51
  102. package/src/component/handlers/snackbar.ts +0 -21
  103. package/src/component/handlers/switch.ts +0 -29
  104. package/src/component/handlers/tabs.ts +0 -107
  105. package/src/component/handlers/text-field.ts +0 -108
  106. package/src/component/handlers/toggle-button.ts +0 -44
  107. package/src/component/index.ts +0 -76
  108. package/src/generate-code.ts +0 -251
  109. package/src/icon.ts +0 -46
  110. package/src/layout.ts +0 -31
  111. package/src/props/color.ts +0 -78
  112. package/src/props/layout.ts +0 -292
  113. package/src/props/sizing.ts +0 -58
  114. package/src/props/text.ts +0 -21
  115. package/src/props/variable.ts +0 -66
  116. /package/src/{data → codegen/data}/__generated__/component-sets/action-button.d.ts +0 -0
  117. /package/src/{data → codegen/data}/__generated__/component-sets/action-button.mjs +0 -0
  118. /package/src/{data → codegen/data}/__generated__/component-sets/action-chip.d.ts +0 -0
  119. /package/src/{data → codegen/data}/__generated__/component-sets/action-chip.mjs +0 -0
  120. /package/src/{data → codegen/data}/__generated__/component-sets/action-sheet.d.ts +0 -0
  121. /package/src/{data → codegen/data}/__generated__/component-sets/action-sheet.mjs +0 -0
  122. /package/src/{data → codegen/data}/__generated__/component-sets/avatar-stack.d.ts +0 -0
  123. /package/src/{data → codegen/data}/__generated__/component-sets/avatar-stack.mjs +0 -0
  124. /package/src/{data → codegen/data}/__generated__/component-sets/avatar.d.ts +0 -0
  125. /package/src/{data → codegen/data}/__generated__/component-sets/avatar.mjs +0 -0
  126. /package/src/{data → codegen/data}/__generated__/component-sets/badge.d.ts +0 -0
  127. /package/src/{data → codegen/data}/__generated__/component-sets/badge.mjs +0 -0
  128. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-global.d.ts +0 -0
  129. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-global.mjs +0 -0
  130. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-kr.d.ts +0 -0
  131. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-kr.mjs +0 -0
  132. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-sheet.d.ts +0 -0
  133. /package/src/{data → codegen/data}/__generated__/component-sets/bottom-sheet.mjs +0 -0
  134. /package/src/{data → codegen/data}/__generated__/component-sets/callout.d.ts +0 -0
  135. /package/src/{data → codegen/data}/__generated__/component-sets/callout.mjs +0 -0
  136. /package/src/{data → codegen/data}/__generated__/component-sets/checkbox.d.ts +0 -0
  137. /package/src/{data → codegen/data}/__generated__/component-sets/checkbox.mjs +0 -0
  138. /package/src/{data → codegen/data}/__generated__/component-sets/chip-tablist.d.ts +0 -0
  139. /package/src/{data → codegen/data}/__generated__/component-sets/chip-tablist.mjs +0 -0
  140. /package/src/{data → codegen/data}/__generated__/component-sets/control-chip.d.ts +0 -0
  141. /package/src/{data → codegen/data}/__generated__/component-sets/control-chip.mjs +0 -0
  142. /package/src/{data → codegen/data}/__generated__/component-sets/divider.d.ts +0 -0
  143. /package/src/{data → codegen/data}/__generated__/component-sets/divider.mjs +0 -0
  144. /package/src/{data → codegen/data}/__generated__/component-sets/error-state.d.ts +0 -0
  145. /package/src/{data → codegen/data}/__generated__/component-sets/error-state.mjs +0 -0
  146. /package/src/{data → codegen/data}/__generated__/component-sets/extended-action-sheet.d.ts +0 -0
  147. /package/src/{data → codegen/data}/__generated__/component-sets/extended-action-sheet.mjs +0 -0
  148. /package/src/{data → codegen/data}/__generated__/component-sets/extended-floating-action-button.d.ts +0 -0
  149. /package/src/{data → codegen/data}/__generated__/component-sets/extended-floating-action-button.mjs +0 -0
  150. /package/src/{data → codegen/data}/__generated__/component-sets/floating-action-button.d.ts +0 -0
  151. /package/src/{data → codegen/data}/__generated__/component-sets/floating-action-button.mjs +0 -0
  152. /package/src/{data → codegen/data}/__generated__/component-sets/help-bubble.d.ts +0 -0
  153. /package/src/{data → codegen/data}/__generated__/component-sets/help-bubble.mjs +0 -0
  154. /package/src/{data → codegen/data}/__generated__/component-sets/identity-placeholder.d.ts +0 -0
  155. /package/src/{data → codegen/data}/__generated__/component-sets/identity-placeholder.mjs +0 -0
  156. /package/src/{data → codegen/data}/__generated__/component-sets/index.d.ts +0 -0
  157. /package/src/{data → codegen/data}/__generated__/component-sets/index.mjs +0 -0
  158. /package/src/{data → codegen/data}/__generated__/component-sets/inline-banner.d.ts +0 -0
  159. /package/src/{data → codegen/data}/__generated__/component-sets/inline-banner.mjs +0 -0
  160. /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-global.d.ts +0 -0
  161. /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-global.mjs +0 -0
  162. /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-kr.d.ts +0 -0
  163. /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-kr.mjs +0 -0
  164. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-badge.d.ts +0 -0
  165. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-badge.mjs +0 -0
  166. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-bar.d.ts +0 -0
  167. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-bar.mjs +0 -0
  168. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp.d.ts +0 -0
  169. /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp.mjs +0 -0
  170. /package/src/{data → codegen/data}/__generated__/component-sets/multiline-text-field.d.ts +0 -0
  171. /package/src/{data → codegen/data}/__generated__/component-sets/multiline-text-field.mjs +0 -0
  172. /package/src/{data → codegen/data}/__generated__/component-sets/progress-circle.d.ts +0 -0
  173. /package/src/{data → codegen/data}/__generated__/component-sets/progress-circle.mjs +0 -0
  174. /package/src/{data → codegen/data}/__generated__/component-sets/radio.d.ts +0 -0
  175. /package/src/{data → codegen/data}/__generated__/component-sets/radio.mjs +0 -0
  176. /package/src/{data → codegen/data}/__generated__/component-sets/range-slider.d.ts +0 -0
  177. /package/src/{data → codegen/data}/__generated__/component-sets/range-slider.mjs +0 -0
  178. /package/src/{data → codegen/data}/__generated__/component-sets/reaction-button.d.ts +0 -0
  179. /package/src/{data → codegen/data}/__generated__/component-sets/reaction-button.mjs +0 -0
  180. /package/src/{data → codegen/data}/__generated__/component-sets/segmented-control.d.ts +0 -0
  181. /package/src/{data → codegen/data}/__generated__/component-sets/segmented-control.mjs +0 -0
  182. /package/src/{data → codegen/data}/__generated__/component-sets/select-box.d.ts +0 -0
  183. /package/src/{data → codegen/data}/__generated__/component-sets/select-box.mjs +0 -0
  184. /package/src/{data → codegen/data}/__generated__/component-sets/skeleton.d.ts +0 -0
  185. /package/src/{data → codegen/data}/__generated__/component-sets/skeleton.mjs +0 -0
  186. /package/src/{data → codegen/data}/__generated__/component-sets/slider.d.ts +0 -0
  187. /package/src/{data → codegen/data}/__generated__/component-sets/slider.mjs +0 -0
  188. /package/src/{data → codegen/data}/__generated__/component-sets/snackbar.d.ts +0 -0
  189. /package/src/{data → codegen/data}/__generated__/component-sets/snackbar.mjs +0 -0
  190. /package/src/{data → codegen/data}/__generated__/component-sets/standard-navigation.d.ts +0 -0
  191. /package/src/{data → codegen/data}/__generated__/component-sets/standard-navigation.mjs +0 -0
  192. /package/src/{data → codegen/data}/__generated__/component-sets/switch.d.ts +0 -0
  193. /package/src/{data → codegen/data}/__generated__/component-sets/switch.mjs +0 -0
  194. /package/src/{data → codegen/data}/__generated__/component-sets/tablist.d.ts +0 -0
  195. /package/src/{data → codegen/data}/__generated__/component-sets/tablist.mjs +0 -0
  196. /package/src/{data → codegen/data}/__generated__/component-sets/template-bottom-fixed-bar.d.ts +0 -0
  197. /package/src/{data → codegen/data}/__generated__/component-sets/template-bottom-fixed-bar.mjs +0 -0
  198. /package/src/{data → codegen/data}/__generated__/component-sets/template-button-group.d.ts +0 -0
  199. /package/src/{data → codegen/data}/__generated__/component-sets/template-button-group.mjs +0 -0
  200. /package/src/{data → codegen/data}/__generated__/component-sets/template-chip-group.d.ts +0 -0
  201. /package/src/{data → codegen/data}/__generated__/component-sets/template-chip-group.mjs +0 -0
  202. /package/src/{data → codegen/data}/__generated__/component-sets/template-select-box-group.d.ts +0 -0
  203. /package/src/{data → codegen/data}/__generated__/component-sets/template-select-box-group.mjs +0 -0
  204. /package/src/{data → codegen/data}/__generated__/component-sets/template-top-navigation.d.ts +0 -0
  205. /package/src/{data → codegen/data}/__generated__/component-sets/template-top-navigation.mjs +0 -0
  206. /package/src/{data → codegen/data}/__generated__/component-sets/text-button.d.ts +0 -0
  207. /package/src/{data → codegen/data}/__generated__/component-sets/text-button.mjs +0 -0
  208. /package/src/{data → codegen/data}/__generated__/component-sets/text-field.d.ts +0 -0
  209. /package/src/{data → codegen/data}/__generated__/component-sets/text-field.mjs +0 -0
  210. /package/src/{data → codegen/data}/__generated__/component-sets/toggle-button.d.ts +0 -0
  211. /package/src/{data → codegen/data}/__generated__/component-sets/toggle-button.mjs +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seed-design/figma",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/daangn/seed-design.git",
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@create-figma-plugin/utilities": "^3.0.2",
32
- "@seed-design/css": "0.0.12",
32
+ "@seed-design/css": "0.0.13",
33
33
  "change-case": "^5.2.0",
34
34
  "ts-pattern": "^5.2.0"
35
35
  },
@@ -0,0 +1,148 @@
1
+ import { camelCasePreserveUnderscoreBetweenNumbers } from "@/utils/common";
2
+ import { camelCase } from "change-case";
3
+ import { FIGMA_ICONS } from "./data/icons";
4
+ import { FIGMA_TEXT_STYLES } from "./data/styles";
5
+ import { FIGMA_VARIABLE_COLLECTIONS } from "./data/variable-collections";
6
+ import { FIGMA_VARIABLES } from "./data/variables";
7
+ import {
8
+ createCodegenService,
9
+ createContainerLayoutPropsService,
10
+ createFigmaComponentService,
11
+ createFrameFillPropsService,
12
+ createFrameStrokePropsService,
13
+ createFrameTypeStylePropsService,
14
+ createIconService,
15
+ createRadiusPropsService,
16
+ createSeedComponentTransformers,
17
+ createSeedFrameService,
18
+ createSeedInstanceService,
19
+ createSeedRectangleService,
20
+ createSeedTextService,
21
+ createSelfLayoutPropsService,
22
+ createShapeFillPropsService,
23
+ createStaticIconRepository,
24
+ createStaticStyleRepository,
25
+ createStaticVariableRepository,
26
+ createStyleService,
27
+ createVariableService,
28
+ } from "./domain";
29
+
30
+ const IGNORED_COMPONENT_KEYS = new Set<string>([
31
+ "1acdc7247c83a73a0504d6fad86d08783938cb1a",
32
+ "b38b719b61cdf1a24458d7a7888bee74b7649084",
33
+ ]);
34
+
35
+ export interface CodegenContextOptions {
36
+ ignoredComponentKeys?: Set<string>;
37
+ shouldInferVariableName: boolean;
38
+ shouldPrintSource: boolean;
39
+ }
40
+
41
+ export function createCodegenContext(options: CodegenContextOptions) {
42
+ const {
43
+ ignoredComponentKeys = IGNORED_COMPONENT_KEYS,
44
+ shouldInferVariableName,
45
+ shouldPrintSource,
46
+ } = options;
47
+
48
+ const styleRepository = createStaticStyleRepository(FIGMA_TEXT_STYLES);
49
+ const variableRepository = createStaticVariableRepository({
50
+ variables: FIGMA_VARIABLES,
51
+ variableCollections: FIGMA_VARIABLE_COLLECTIONS,
52
+ });
53
+ const iconRepository = createStaticIconRepository(FIGMA_ICONS);
54
+
55
+ const styleService = createStyleService({
56
+ styleRepository,
57
+ styleNameTransformer: ({ slug }) =>
58
+ camelCase(slug[slug.length - 1]!, { mergeAmbiguousCharacters: true }),
59
+ });
60
+ const variableService = createVariableService({
61
+ variableRepository,
62
+ variableNameTransformer: ({ slug }) =>
63
+ slug
64
+ .filter((s) => s !== "dimension")
65
+ .map((s) => s.replaceAll(",", "_"))
66
+ .map(camelCasePreserveUnderscoreBetweenNumbers)
67
+ .join("."),
68
+ });
69
+ const iconService = createIconService({
70
+ iconRepository,
71
+ });
72
+
73
+ const containerLayoutPropsService = createContainerLayoutPropsService({
74
+ variableService,
75
+ shouldInferVariableName,
76
+ });
77
+ const selfLayoutPropsService = createSelfLayoutPropsService({
78
+ variableService,
79
+ shouldInferVariableName,
80
+ });
81
+ const frameFillPropsService = createFrameFillPropsService({
82
+ variableService,
83
+ });
84
+ const shapeFillPropsService = createShapeFillPropsService({
85
+ variableService,
86
+ });
87
+ const radiusPropsService = createRadiusPropsService({
88
+ variableService,
89
+ shouldInferVariableName,
90
+ });
91
+ const strokePropsService = createFrameStrokePropsService({
92
+ variableService,
93
+ });
94
+ const typeStylePropsService = createFrameTypeStylePropsService({
95
+ variableService,
96
+ });
97
+
98
+ const figmaComponentService = createFigmaComponentService({
99
+ transformers: createSeedComponentTransformers({
100
+ iconService,
101
+ variableService,
102
+ }),
103
+ });
104
+
105
+ const frameService = createSeedFrameService({
106
+ containerLayoutPropsService,
107
+ selfLayoutPropsService,
108
+ radiusPropsService,
109
+ fillPropsService: frameFillPropsService,
110
+ strokePropsService,
111
+ });
112
+ const instanceService = createSeedInstanceService({
113
+ figmaComponentService,
114
+ fillPropsService: shapeFillPropsService,
115
+ selfLayoutPropsService,
116
+ iconService,
117
+ frameService,
118
+ ignoredComponentKeys,
119
+ });
120
+ const textService = createSeedTextService({
121
+ styleService,
122
+ fillPropsService: shapeFillPropsService,
123
+ typeStylePropsService,
124
+ });
125
+ const rectangleService = createSeedRectangleService({
126
+ selfLayoutPropsService,
127
+ });
128
+
129
+ const codegenService = createCodegenService({
130
+ frameService,
131
+ textService,
132
+ rectangleService,
133
+ instanceService,
134
+ shouldPrintSource,
135
+ });
136
+
137
+ return codegenService;
138
+ }
139
+
140
+ export const codegenService = createCodegenContext({
141
+ shouldInferVariableName: true,
142
+ shouldPrintSource: false,
143
+ });
144
+
145
+ export const devCodegenService = createCodegenContext({
146
+ shouldInferVariableName: false,
147
+ shouldPrintSource: true,
148
+ });
@@ -1,7 +1,4 @@
1
- import type { ElementNode } from "../jsx";
2
- import type { NormalizedInstanceNode } from "../normalizer";
3
-
4
- interface ComponentPropertyDefinition {
1
+ export interface ComponentPropertyDefinition {
5
2
  type: ComponentPropertyType;
6
3
  preferredValues?: InstanceSwapPreferredValue[];
7
4
  variantOptions?: string[];
@@ -30,11 +27,3 @@ export type InferFromDefinition<T extends Record<string, ComponentPropertyDefini
30
27
  };
31
28
  };
32
29
  };
33
-
34
- export interface ComponentHandler<
35
- T extends
36
- NormalizedInstanceNode["componentProperties"] = NormalizedInstanceNode["componentProperties"],
37
- > {
38
- key: string;
39
- codegen: (node: NormalizedInstanceNode & { componentProperties: T }) => Promise<ElementNode>;
40
- }
@@ -0,0 +1,14 @@
1
+ export type {
2
+ ComponentPropertyDefinition,
3
+ InferFromDefinition,
4
+ InferPropertyType,
5
+ } from "./component";
6
+ export type { ElementNode } from "./jsx";
7
+ export type { ElementTransformer, PropsTransformer, ComponentTransformer } from "./transformer";
8
+
9
+ export { createElement } from "./jsx";
10
+ export {
11
+ defineElementTransformer,
12
+ definePropsTransformer,
13
+ defineComponentTransformer,
14
+ } from "./transformer";
@@ -1,4 +1,4 @@
1
- import { ensureArray, exists } from "./utils/common";
1
+ import { ensureArray, exists } from "@/utils/common";
2
2
 
3
3
  export interface ElementNode {
4
4
  __IS_JSX_ELEMENT_NODE: true;
@@ -6,6 +6,7 @@ export interface ElementNode {
6
6
  props: Record<string, string | number | boolean | ElementNode | object | undefined>;
7
7
  children: (ElementNode | string)[];
8
8
  comment?: string;
9
+ source?: string;
9
10
  }
10
11
 
11
12
  export function createElement(
@@ -23,6 +24,13 @@ export function createElement(
23
24
  };
24
25
  }
25
26
 
27
+ export function appendSource(element: ElementNode, source: string) {
28
+ return {
29
+ ...element,
30
+ source,
31
+ };
32
+ }
33
+
26
34
  export function isElement(node: unknown): node is ElementNode {
27
35
  return (
28
36
  typeof node === "object" &&
@@ -32,14 +40,16 @@ export function isElement(node: unknown): node is ElementNode {
32
40
  );
33
41
  }
34
42
 
35
- export function stringifyElement(element: ElementNode) {
43
+ export function stringifyElement(element: ElementNode, options: { printSource?: boolean } = {}) {
36
44
  function recursive(node: ElementNode | string, depth: number): string {
37
45
  if (typeof node === "string") {
38
46
  return node;
39
47
  }
40
48
 
41
49
  const { tag, props, children, comment } = node;
42
- const propEntries = Object.entries(props);
50
+ const propEntries = Object.entries(
51
+ options.printSource ? { ...props, "data-figma-node-id": node.source } : props,
52
+ );
43
53
  const propFragments = propEntries
44
54
  .map(([key, value]) => {
45
55
  if (typeof value === "string") {
@@ -0,0 +1,40 @@
1
+ import type { ElementNode } from "./jsx";
2
+ import type { NormalizedInstanceNode, NormalizedSceneNode } from "@/normalizer";
3
+
4
+ export type ElementTransformer<T extends NormalizedSceneNode> = (
5
+ node: T,
6
+ traverse: (node: NormalizedSceneNode) => ElementNode | undefined,
7
+ ) => ElementNode | undefined;
8
+
9
+ export type PropsTransformer<
10
+ T extends Record<string, any> = Record<string, any>,
11
+ R extends Record<string, any> = Record<string, any>,
12
+ > = (node: T, traverse: (node: NormalizedSceneNode) => ElementNode | undefined) => R;
13
+
14
+ export interface ComponentTransformer<
15
+ T extends
16
+ NormalizedInstanceNode["componentProperties"] = NormalizedInstanceNode["componentProperties"],
17
+ > {
18
+ key: string;
19
+ transform: (node: NormalizedInstanceNode & { componentProperties: T }) => ElementNode;
20
+ }
21
+
22
+ export function defineElementTransformer<T extends NormalizedSceneNode>(
23
+ transformer: ElementTransformer<T>,
24
+ ) {
25
+ return transformer;
26
+ }
27
+
28
+ export function definePropsTransformer<
29
+ T extends Record<string, any>,
30
+ R extends Record<string, any>,
31
+ >(transformer: PropsTransformer<T, R>) {
32
+ return transformer;
33
+ }
34
+
35
+ export function defineComponentTransformer<T extends NormalizedInstanceNode["componentProperties"]>(
36
+ key: string,
37
+ transform: (node: NormalizedInstanceNode & { componentProperties: T }) => ElementNode,
38
+ ): ComponentTransformer<T> {
39
+ return { key, transform };
40
+ }
@@ -1,10 +1,6 @@
1
- export interface IconData {
2
- name: string;
3
- type: "monochrome" | "multicolor";
4
- weight?: string;
5
- }
1
+ import type { IconData } from "../domain";
6
2
 
7
- export const iconRecord: Record<string, IconData> = {
3
+ export const FIGMA_ICONS: Record<string, IconData> = {
8
4
  "8b12671ecc2e0d9bd87c854fd10f7907bd06c54b": {
9
5
  name: "icon_arrow_left",
10
6
  type: "monochrome",
@@ -1,142 +1,200 @@
1
- export const FIGMA_TEXT_STYLES = [
1
+ import type { Style } from "../domain";
2
+
3
+ export const FIGMA_TEXT_STYLES: Style[] = [
2
4
  {
3
- id: "S:2fec4e47f53f75ea46bee4d740795e099af5472f,",
5
+ styleType: "TEXT",
4
6
  key: "2fec4e47f53f75ea46bee4d740795e099af5472f",
5
7
  name: "legacy-14-150",
8
+ description: "",
9
+ remote: false,
6
10
  },
7
11
  {
8
- id: "S:af24f9e7cc90af3bf2a18029dd59ae0646966486,",
12
+ styleType: "TEXT",
9
13
  key: "af24f9e7cc90af3bf2a18029dd59ae0646966486",
10
14
  name: "legacy-13-150",
15
+ description: "",
16
+ remote: false,
11
17
  },
12
18
  {
13
- id: "S:4d54fb58fa4a63a6ddec973099b4babfbe502849,",
19
+ styleType: "TEXT",
14
20
  key: "4d54fb58fa4a63a6ddec973099b4babfbe502849",
15
21
  name: "scale/t1-regular",
22
+ description: "",
23
+ remote: false,
16
24
  },
17
25
  {
18
- id: "S:49735ed4693e2f7e9d98b6b6e3818f38e2fe77a8,",
26
+ styleType: "TEXT",
19
27
  key: "49735ed4693e2f7e9d98b6b6e3818f38e2fe77a8",
20
28
  name: "scale/t1-medium",
29
+ description: "",
30
+ remote: false,
21
31
  },
22
32
  {
23
- id: "S:337e113e2fafc22ccd5423b3fc7a7da69a6c917c,",
33
+ styleType: "TEXT",
24
34
  key: "337e113e2fafc22ccd5423b3fc7a7da69a6c917c",
25
35
  name: "scale/t1-bold",
36
+ description: "",
37
+ remote: false,
26
38
  },
27
39
  {
28
- id: "S:711eaf0bd91b906e108f3508cf7845fc82294b1a,",
40
+ styleType: "TEXT",
29
41
  key: "711eaf0bd91b906e108f3508cf7845fc82294b1a",
30
42
  name: "scale/t2-regular",
43
+ description: "",
44
+ remote: false,
31
45
  },
32
46
  {
33
- id: "S:2aff06b0ad8be136acbfb3090fa4dde1f9eac48e,",
47
+ styleType: "TEXT",
34
48
  key: "2aff06b0ad8be136acbfb3090fa4dde1f9eac48e",
35
49
  name: "scale/t2-medium",
50
+ description: "",
51
+ remote: false,
36
52
  },
37
53
  {
38
- id: "S:8378bd59b14f5682dcaf20110efde4b7a1fb18e3,",
54
+ styleType: "TEXT",
39
55
  key: "8378bd59b14f5682dcaf20110efde4b7a1fb18e3",
40
56
  name: "scale/t2-bold",
57
+ description: "",
58
+ remote: false,
41
59
  },
42
60
  {
43
- id: "S:22ead16ee07b342df4a26952bc987f3155988779,",
61
+ styleType: "TEXT",
44
62
  key: "22ead16ee07b342df4a26952bc987f3155988779",
45
63
  name: "scale/t3-regular",
64
+ description: "",
65
+ remote: false,
46
66
  },
47
67
  {
48
- id: "S:96a2f248d201c246587d63eb4d00cb7610897400,",
68
+ styleType: "TEXT",
49
69
  key: "96a2f248d201c246587d63eb4d00cb7610897400",
50
70
  name: "scale/t3-medium",
71
+ description: "",
72
+ remote: false,
51
73
  },
52
74
  {
53
- id: "S:f749d659a689cbbecbdbb1b559056731234332a3,",
75
+ styleType: "TEXT",
54
76
  key: "f749d659a689cbbecbdbb1b559056731234332a3",
55
77
  name: "scale/t3-bold",
78
+ description: "",
79
+ remote: false,
56
80
  },
57
81
  {
58
- id: "S:b23d3e206b0244690c19472fd78bfc33b9b46d06,",
82
+ styleType: "TEXT",
59
83
  key: "b23d3e206b0244690c19472fd78bfc33b9b46d06",
60
84
  name: "scale/t4-regular",
85
+ description: "",
86
+ remote: false,
61
87
  },
62
88
  {
63
- id: "S:2c143ba862b3c1af10a0bd5d2e723bd12e7878ef,",
89
+ styleType: "TEXT",
64
90
  key: "2c143ba862b3c1af10a0bd5d2e723bd12e7878ef",
65
91
  name: "scale/t4-medium",
92
+ description: "",
93
+ remote: false,
66
94
  },
67
95
  {
68
- id: "S:a85ea49c1625319427c047bc206c26e708012030,",
96
+ styleType: "TEXT",
69
97
  key: "a85ea49c1625319427c047bc206c26e708012030",
70
98
  name: "scale/t4-bold",
99
+ description: "",
100
+ remote: false,
71
101
  },
72
102
  {
73
- id: "S:54a5a4c2bfc09573fba3a8efe0dafff067cf53bd,",
103
+ styleType: "TEXT",
74
104
  key: "54a5a4c2bfc09573fba3a8efe0dafff067cf53bd",
75
105
  name: "scale/t5-regular",
106
+ description: "",
107
+ remote: false,
76
108
  },
77
109
  {
78
- id: "S:bc8bcf3caa904cdc2e1c2983d0f12d32832d7374,",
110
+ styleType: "TEXT",
79
111
  key: "bc8bcf3caa904cdc2e1c2983d0f12d32832d7374",
80
112
  name: "scale/t5-medium",
113
+ description: "",
114
+ remote: false,
81
115
  },
82
116
  {
83
- id: "S:8eff229c53f06eeb418f39ad1cb3dbe12480f12b,",
117
+ styleType: "TEXT",
84
118
  key: "8eff229c53f06eeb418f39ad1cb3dbe12480f12b",
85
119
  name: "scale/t5-bold",
120
+ description: "",
121
+ remote: false,
86
122
  },
87
123
  {
88
- id: "S:6608eaab965859080a5effa6e23eb857d888057f,",
124
+ styleType: "TEXT",
89
125
  key: "6608eaab965859080a5effa6e23eb857d888057f",
90
126
  name: "scale/t6-regular",
127
+ description: "",
128
+ remote: false,
91
129
  },
92
130
  {
93
- id: "S:02ee25a9050a9c78dbaa03ea006aa4d1db593e99,",
131
+ styleType: "TEXT",
94
132
  key: "02ee25a9050a9c78dbaa03ea006aa4d1db593e99",
95
133
  name: "scale/t6-medium",
134
+ description: "",
135
+ remote: false,
96
136
  },
97
137
  {
98
- id: "S:adf921a56e89b5737a6b626034cfea184e828370,",
138
+ styleType: "TEXT",
99
139
  key: "adf921a56e89b5737a6b626034cfea184e828370",
100
140
  name: "scale/t6-bold",
141
+ description: "",
142
+ remote: false,
101
143
  },
102
144
  {
103
- id: "S:eb1c0409582609a51fe9afc9e31301d529e3d12f,",
145
+ styleType: "TEXT",
104
146
  key: "eb1c0409582609a51fe9afc9e31301d529e3d12f",
105
147
  name: "scale/t7-regular",
148
+ description: "",
149
+ remote: false,
106
150
  },
107
151
  {
108
- id: "S:b2e24640e7dc1264fc638434511c9f994e1e149c,",
152
+ styleType: "TEXT",
109
153
  key: "b2e24640e7dc1264fc638434511c9f994e1e149c",
110
154
  name: "scale/t7-medium",
155
+ description: "",
156
+ remote: false,
111
157
  },
112
158
  {
113
- id: "S:182d9252d7f7380075915a89e6160d7595124bc3,",
159
+ styleType: "TEXT",
114
160
  key: "182d9252d7f7380075915a89e6160d7595124bc3",
115
161
  name: "scale/t7-bold",
162
+ description: "",
163
+ remote: false,
116
164
  },
117
165
  {
118
- id: "S:b7f864e3f64524a863d38729e2cea18f44c7ebaa,",
166
+ styleType: "TEXT",
119
167
  key: "b7f864e3f64524a863d38729e2cea18f44c7ebaa",
120
168
  name: "scale/t8-bold",
169
+ description: "",
170
+ remote: false,
121
171
  },
122
172
  {
123
- id: "S:b146e1317c67db787834f1890493225bdbba4e48,",
173
+ styleType: "TEXT",
124
174
  key: "b146e1317c67db787834f1890493225bdbba4e48",
125
175
  name: "scale/t9-bold",
176
+ description: "",
177
+ remote: false,
126
178
  },
127
179
  {
128
- id: "S:6ea6b06312771259d59de265a5ef12cd1dae9102,",
180
+ styleType: "TEXT",
129
181
  key: "6ea6b06312771259d59de265a5ef12cd1dae9102",
130
182
  name: "scale/t10-bold",
183
+ description: "",
184
+ remote: false,
131
185
  },
132
186
  {
133
- id: "S:85422ef9f0230f821f1a9e6d2f8f86b3ba87f20d,",
187
+ styleType: "TEXT",
134
188
  key: "85422ef9f0230f821f1a9e6d2f8f86b3ba87f20d",
135
189
  name: "semantic/article-body",
190
+ description: "",
191
+ remote: false,
136
192
  },
137
193
  {
138
- id: "S:d918eb7069e10c8dd745abf40bc375004c1badb8,",
194
+ styleType: "TEXT",
139
195
  key: "d918eb7069e10c8dd745abf40bc375004c1badb8",
140
196
  name: "semantic/screen-title",
197
+ description: "",
198
+ remote: false,
141
199
  },
142
200
  ];