@seed-design/figma 0.0.4 → 0.0.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.
- package/lib/index.cjs +10589 -12261
- package/lib/index.d.ts +1732 -41
- package/lib/index.js +10565 -12262
- package/package.json +2 -2
- package/src/codegen/context.ts +148 -0
- package/src/{component/type-helper.ts → codegen/core/component.ts} +1 -12
- package/src/codegen/core/index.ts +14 -0
- package/src/{jsx.ts → codegen/core/jsx.ts} +13 -3
- package/src/codegen/core/transformer.ts +40 -0
- package/src/{data → codegen/data}/icons.ts +2 -6
- package/src/{data → codegen/data}/styles.ts +87 -29
- package/src/codegen/data/variable-collections.ts +310 -0
- package/src/{data → codegen/data}/variables.ts +2821 -5887
- package/src/codegen/domain/codegen.service.ts +69 -0
- package/src/codegen/domain/figma-component.service.ts +21 -0
- package/src/codegen/domain/frame.service.ts +108 -0
- package/src/codegen/domain/icon.interface.ts +5 -0
- package/src/codegen/domain/icon.repository.ts +11 -0
- package/src/codegen/domain/icon.service.ts +35 -0
- package/src/codegen/domain/index.ts +22 -0
- package/src/codegen/domain/instance.service.ts +91 -0
- package/src/codegen/domain/props/container-layout-props.service.ts +248 -0
- package/src/codegen/domain/props/fill-props.service.ts +75 -0
- package/src/codegen/domain/props/radius-props.service.ts +105 -0
- package/src/codegen/domain/props/self-layout-props.service.ts +127 -0
- package/src/codegen/domain/props/stroke-props.service.ts +45 -0
- package/src/codegen/domain/props/type-style-props.service.ts +31 -0
- package/src/codegen/domain/rectangle.service.ts +31 -0
- package/src/codegen/domain/seed-component/deps.interface.ts +6 -0
- package/src/codegen/domain/seed-component/index.ts +75 -0
- package/src/{component/type.ts → codegen/domain/seed-component/properties.type.ts} +2 -2
- package/src/{component/properties.ts → codegen/domain/seed-component/size.ts} +4 -2
- package/src/codegen/domain/seed-component/transformers/action-button.ts +69 -0
- package/src/codegen/domain/seed-component/transformers/action-chip.ts +82 -0
- package/src/codegen/domain/seed-component/transformers/action-sheet.ts +78 -0
- package/src/{component/handlers → codegen/domain/seed-component/transformers}/app-bar.ts +114 -111
- package/src/codegen/domain/seed-component/transformers/avatar-stack.ts +30 -0
- package/src/codegen/domain/seed-component/transformers/avatar.ts +39 -0
- package/src/codegen/domain/seed-component/transformers/badge.ts +22 -0
- package/src/codegen/domain/seed-component/transformers/callout.ts +90 -0
- package/src/codegen/domain/seed-component/transformers/checkbox.ts +34 -0
- package/src/codegen/domain/seed-component/transformers/chip-tabs.ts +55 -0
- package/src/codegen/domain/seed-component/transformers/control-chip.ts +86 -0
- package/src/codegen/domain/seed-component/transformers/error-state.ts +39 -0
- package/src/codegen/domain/seed-component/transformers/extended-action-sheet.ts +99 -0
- package/src/codegen/domain/seed-component/transformers/extended-fab.ts +25 -0
- package/src/codegen/domain/seed-component/transformers/fab.ts +18 -0
- package/src/codegen/domain/seed-component/transformers/help-bubble.ts +68 -0
- package/src/codegen/domain/seed-component/transformers/identity-placeholder.ts +18 -0
- package/src/{component/handlers → codegen/domain/seed-component/transformers}/inline-banner.ts +11 -13
- package/src/codegen/domain/seed-component/transformers/manner-temp-badge.ts +19 -0
- package/src/codegen/domain/seed-component/transformers/multiline-text-field.ts +82 -0
- package/src/codegen/domain/seed-component/transformers/progress-circle.ts +51 -0
- package/src/codegen/domain/seed-component/transformers/reaction-button.ts +37 -0
- package/src/codegen/domain/seed-component/transformers/segmented-control.ts +59 -0
- package/src/codegen/domain/seed-component/transformers/select-box.ts +82 -0
- package/src/codegen/domain/seed-component/transformers/skeleton.ts +52 -0
- package/src/codegen/domain/seed-component/transformers/snackbar.ts +23 -0
- package/src/codegen/domain/seed-component/transformers/switch.ts +31 -0
- package/src/codegen/domain/seed-component/transformers/tabs.ts +129 -0
- package/src/{component/handlers → codegen/domain/seed-component/transformers}/text-button.ts +16 -18
- package/src/codegen/domain/seed-component/transformers/text-field.ts +109 -0
- package/src/codegen/domain/seed-component/transformers/toggle-button.ts +47 -0
- package/src/codegen/domain/style.interface.ts +5 -0
- package/src/codegen/domain/style.repository.ts +23 -0
- package/src/codegen/domain/style.service.ts +38 -0
- package/src/codegen/domain/text.service.ts +62 -0
- package/src/codegen/domain/variable.interface.ts +18 -0
- package/src/codegen/domain/variable.repository.ts +44 -0
- package/src/codegen/domain/variable.service.ts +95 -0
- package/src/codegen/index.ts +13 -0
- package/src/index.ts +2 -2
- package/src/normalizer/from-plugin.ts +29 -28
- package/src/normalizer/from-rest.ts +5 -1
- package/src/normalizer/types.ts +80 -32
- package/src/utils/common.ts +19 -0
- package/src/utils/css.ts +13 -0
- package/src/utils/figma-variable.ts +13 -0
- package/src/component/handlers/action-button.ts +0 -66
- package/src/component/handlers/action-chip.ts +0 -71
- package/src/component/handlers/action-sheet.ts +0 -74
- package/src/component/handlers/avatar-stack.ts +0 -35
- package/src/component/handlers/avatar.ts +0 -37
- package/src/component/handlers/badge.ts +0 -20
- package/src/component/handlers/callout.ts +0 -87
- package/src/component/handlers/checkbox.ts +0 -32
- package/src/component/handlers/chip-tabs.ts +0 -51
- package/src/component/handlers/control-chip.ts +0 -75
- package/src/component/handlers/error-state.ts +0 -37
- package/src/component/handlers/extended-action-sheet.ts +0 -86
- package/src/component/handlers/extended-fab.ts +0 -24
- package/src/component/handlers/fab.ts +0 -17
- package/src/component/handlers/help-bubble.ts +0 -66
- package/src/component/handlers/identity-placeholder.ts +0 -16
- package/src/component/handlers/manner-temp-badge.ts +0 -17
- package/src/component/handlers/multiline-text-field.ts +0 -80
- package/src/component/handlers/progress-circle.ts +0 -49
- package/src/component/handlers/reaction-button.ts +0 -36
- package/src/component/handlers/segmented-control.ts +0 -51
- package/src/component/handlers/select-box.ts +0 -76
- package/src/component/handlers/skeleton.ts +0 -51
- package/src/component/handlers/snackbar.ts +0 -21
- package/src/component/handlers/switch.ts +0 -29
- package/src/component/handlers/tabs.ts +0 -107
- package/src/component/handlers/text-field.ts +0 -108
- package/src/component/handlers/toggle-button.ts +0 -44
- package/src/component/index.ts +0 -76
- package/src/generate-code.ts +0 -251
- package/src/icon.ts +0 -46
- package/src/layout.ts +0 -31
- package/src/props/color.ts +0 -78
- package/src/props/layout.ts +0 -292
- package/src/props/sizing.ts +0 -58
- package/src/props/text.ts +0 -21
- package/src/props/variable.ts +0 -66
- /package/src/{data → codegen/data}/__generated__/component-sets/action-button.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/action-button.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/action-chip.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/action-chip.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/action-sheet.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/action-sheet.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/avatar-stack.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/avatar-stack.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/avatar.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/avatar.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/badge.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/badge.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-global.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-global.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-kr.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-navigation-kr.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-sheet.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/bottom-sheet.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/callout.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/callout.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/checkbox.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/checkbox.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/chip-tablist.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/chip-tablist.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/control-chip.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/control-chip.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/divider.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/divider.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/error-state.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/error-state.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/extended-action-sheet.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/extended-action-sheet.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/extended-floating-action-button.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/extended-floating-action-button.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/floating-action-button.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/floating-action-button.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/help-bubble.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/help-bubble.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/identity-placeholder.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/identity-placeholder.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/index.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/index.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/inline-banner.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/inline-banner.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-global.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-global.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-kr.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/main-tab-navigation-kr.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-badge.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-badge.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-bar.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp-bar.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/manner-temp.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/multiline-text-field.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/multiline-text-field.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/progress-circle.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/progress-circle.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/radio.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/radio.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/range-slider.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/range-slider.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/reaction-button.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/reaction-button.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/segmented-control.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/segmented-control.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/select-box.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/select-box.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/skeleton.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/skeleton.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/slider.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/slider.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/snackbar.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/snackbar.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/standard-navigation.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/standard-navigation.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/switch.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/switch.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/tablist.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/tablist.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-bottom-fixed-bar.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-bottom-fixed-bar.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-button-group.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-button-group.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-chip-group.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-chip-group.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-select-box-group.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-select-box-group.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-top-navigation.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/template-top-navigation.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/text-button.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/text-button.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/text-field.d.ts +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/text-field.mjs +0 -0
- /package/src/{data → codegen/data}/__generated__/component-sets/toggle-button.d.ts +0 -0
- /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.
|
|
3
|
+
"version": "0.0.6",
|
|
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.
|
|
32
|
+
"@seed-design/css": "0.0.14",
|
|
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
|
-
|
|
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 "
|
|
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(
|
|
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
|
-
|
|
2
|
-
name: string;
|
|
3
|
-
type: "monochrome" | "multicolor";
|
|
4
|
-
weight?: string;
|
|
5
|
-
}
|
|
1
|
+
import type { IconData } from "../domain";
|
|
6
2
|
|
|
7
|
-
export const
|
|
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
|
-
|
|
1
|
+
import type { Style } from "../domain";
|
|
2
|
+
|
|
3
|
+
export const FIGMA_TEXT_STYLES: Style[] = [
|
|
2
4
|
{
|
|
3
|
-
|
|
5
|
+
styleType: "TEXT",
|
|
4
6
|
key: "2fec4e47f53f75ea46bee4d740795e099af5472f",
|
|
5
7
|
name: "legacy-14-150",
|
|
8
|
+
description: "",
|
|
9
|
+
remote: false,
|
|
6
10
|
},
|
|
7
11
|
{
|
|
8
|
-
|
|
12
|
+
styleType: "TEXT",
|
|
9
13
|
key: "af24f9e7cc90af3bf2a18029dd59ae0646966486",
|
|
10
14
|
name: "legacy-13-150",
|
|
15
|
+
description: "",
|
|
16
|
+
remote: false,
|
|
11
17
|
},
|
|
12
18
|
{
|
|
13
|
-
|
|
19
|
+
styleType: "TEXT",
|
|
14
20
|
key: "4d54fb58fa4a63a6ddec973099b4babfbe502849",
|
|
15
21
|
name: "scale/t1-regular",
|
|
22
|
+
description: "",
|
|
23
|
+
remote: false,
|
|
16
24
|
},
|
|
17
25
|
{
|
|
18
|
-
|
|
26
|
+
styleType: "TEXT",
|
|
19
27
|
key: "49735ed4693e2f7e9d98b6b6e3818f38e2fe77a8",
|
|
20
28
|
name: "scale/t1-medium",
|
|
29
|
+
description: "",
|
|
30
|
+
remote: false,
|
|
21
31
|
},
|
|
22
32
|
{
|
|
23
|
-
|
|
33
|
+
styleType: "TEXT",
|
|
24
34
|
key: "337e113e2fafc22ccd5423b3fc7a7da69a6c917c",
|
|
25
35
|
name: "scale/t1-bold",
|
|
36
|
+
description: "",
|
|
37
|
+
remote: false,
|
|
26
38
|
},
|
|
27
39
|
{
|
|
28
|
-
|
|
40
|
+
styleType: "TEXT",
|
|
29
41
|
key: "711eaf0bd91b906e108f3508cf7845fc82294b1a",
|
|
30
42
|
name: "scale/t2-regular",
|
|
43
|
+
description: "",
|
|
44
|
+
remote: false,
|
|
31
45
|
},
|
|
32
46
|
{
|
|
33
|
-
|
|
47
|
+
styleType: "TEXT",
|
|
34
48
|
key: "2aff06b0ad8be136acbfb3090fa4dde1f9eac48e",
|
|
35
49
|
name: "scale/t2-medium",
|
|
50
|
+
description: "",
|
|
51
|
+
remote: false,
|
|
36
52
|
},
|
|
37
53
|
{
|
|
38
|
-
|
|
54
|
+
styleType: "TEXT",
|
|
39
55
|
key: "8378bd59b14f5682dcaf20110efde4b7a1fb18e3",
|
|
40
56
|
name: "scale/t2-bold",
|
|
57
|
+
description: "",
|
|
58
|
+
remote: false,
|
|
41
59
|
},
|
|
42
60
|
{
|
|
43
|
-
|
|
61
|
+
styleType: "TEXT",
|
|
44
62
|
key: "22ead16ee07b342df4a26952bc987f3155988779",
|
|
45
63
|
name: "scale/t3-regular",
|
|
64
|
+
description: "",
|
|
65
|
+
remote: false,
|
|
46
66
|
},
|
|
47
67
|
{
|
|
48
|
-
|
|
68
|
+
styleType: "TEXT",
|
|
49
69
|
key: "96a2f248d201c246587d63eb4d00cb7610897400",
|
|
50
70
|
name: "scale/t3-medium",
|
|
71
|
+
description: "",
|
|
72
|
+
remote: false,
|
|
51
73
|
},
|
|
52
74
|
{
|
|
53
|
-
|
|
75
|
+
styleType: "TEXT",
|
|
54
76
|
key: "f749d659a689cbbecbdbb1b559056731234332a3",
|
|
55
77
|
name: "scale/t3-bold",
|
|
78
|
+
description: "",
|
|
79
|
+
remote: false,
|
|
56
80
|
},
|
|
57
81
|
{
|
|
58
|
-
|
|
82
|
+
styleType: "TEXT",
|
|
59
83
|
key: "b23d3e206b0244690c19472fd78bfc33b9b46d06",
|
|
60
84
|
name: "scale/t4-regular",
|
|
85
|
+
description: "",
|
|
86
|
+
remote: false,
|
|
61
87
|
},
|
|
62
88
|
{
|
|
63
|
-
|
|
89
|
+
styleType: "TEXT",
|
|
64
90
|
key: "2c143ba862b3c1af10a0bd5d2e723bd12e7878ef",
|
|
65
91
|
name: "scale/t4-medium",
|
|
92
|
+
description: "",
|
|
93
|
+
remote: false,
|
|
66
94
|
},
|
|
67
95
|
{
|
|
68
|
-
|
|
96
|
+
styleType: "TEXT",
|
|
69
97
|
key: "a85ea49c1625319427c047bc206c26e708012030",
|
|
70
98
|
name: "scale/t4-bold",
|
|
99
|
+
description: "",
|
|
100
|
+
remote: false,
|
|
71
101
|
},
|
|
72
102
|
{
|
|
73
|
-
|
|
103
|
+
styleType: "TEXT",
|
|
74
104
|
key: "54a5a4c2bfc09573fba3a8efe0dafff067cf53bd",
|
|
75
105
|
name: "scale/t5-regular",
|
|
106
|
+
description: "",
|
|
107
|
+
remote: false,
|
|
76
108
|
},
|
|
77
109
|
{
|
|
78
|
-
|
|
110
|
+
styleType: "TEXT",
|
|
79
111
|
key: "bc8bcf3caa904cdc2e1c2983d0f12d32832d7374",
|
|
80
112
|
name: "scale/t5-medium",
|
|
113
|
+
description: "",
|
|
114
|
+
remote: false,
|
|
81
115
|
},
|
|
82
116
|
{
|
|
83
|
-
|
|
117
|
+
styleType: "TEXT",
|
|
84
118
|
key: "8eff229c53f06eeb418f39ad1cb3dbe12480f12b",
|
|
85
119
|
name: "scale/t5-bold",
|
|
120
|
+
description: "",
|
|
121
|
+
remote: false,
|
|
86
122
|
},
|
|
87
123
|
{
|
|
88
|
-
|
|
124
|
+
styleType: "TEXT",
|
|
89
125
|
key: "6608eaab965859080a5effa6e23eb857d888057f",
|
|
90
126
|
name: "scale/t6-regular",
|
|
127
|
+
description: "",
|
|
128
|
+
remote: false,
|
|
91
129
|
},
|
|
92
130
|
{
|
|
93
|
-
|
|
131
|
+
styleType: "TEXT",
|
|
94
132
|
key: "02ee25a9050a9c78dbaa03ea006aa4d1db593e99",
|
|
95
133
|
name: "scale/t6-medium",
|
|
134
|
+
description: "",
|
|
135
|
+
remote: false,
|
|
96
136
|
},
|
|
97
137
|
{
|
|
98
|
-
|
|
138
|
+
styleType: "TEXT",
|
|
99
139
|
key: "adf921a56e89b5737a6b626034cfea184e828370",
|
|
100
140
|
name: "scale/t6-bold",
|
|
141
|
+
description: "",
|
|
142
|
+
remote: false,
|
|
101
143
|
},
|
|
102
144
|
{
|
|
103
|
-
|
|
145
|
+
styleType: "TEXT",
|
|
104
146
|
key: "eb1c0409582609a51fe9afc9e31301d529e3d12f",
|
|
105
147
|
name: "scale/t7-regular",
|
|
148
|
+
description: "",
|
|
149
|
+
remote: false,
|
|
106
150
|
},
|
|
107
151
|
{
|
|
108
|
-
|
|
152
|
+
styleType: "TEXT",
|
|
109
153
|
key: "b2e24640e7dc1264fc638434511c9f994e1e149c",
|
|
110
154
|
name: "scale/t7-medium",
|
|
155
|
+
description: "",
|
|
156
|
+
remote: false,
|
|
111
157
|
},
|
|
112
158
|
{
|
|
113
|
-
|
|
159
|
+
styleType: "TEXT",
|
|
114
160
|
key: "182d9252d7f7380075915a89e6160d7595124bc3",
|
|
115
161
|
name: "scale/t7-bold",
|
|
162
|
+
description: "",
|
|
163
|
+
remote: false,
|
|
116
164
|
},
|
|
117
165
|
{
|
|
118
|
-
|
|
166
|
+
styleType: "TEXT",
|
|
119
167
|
key: "b7f864e3f64524a863d38729e2cea18f44c7ebaa",
|
|
120
168
|
name: "scale/t8-bold",
|
|
169
|
+
description: "",
|
|
170
|
+
remote: false,
|
|
121
171
|
},
|
|
122
172
|
{
|
|
123
|
-
|
|
173
|
+
styleType: "TEXT",
|
|
124
174
|
key: "b146e1317c67db787834f1890493225bdbba4e48",
|
|
125
175
|
name: "scale/t9-bold",
|
|
176
|
+
description: "",
|
|
177
|
+
remote: false,
|
|
126
178
|
},
|
|
127
179
|
{
|
|
128
|
-
|
|
180
|
+
styleType: "TEXT",
|
|
129
181
|
key: "6ea6b06312771259d59de265a5ef12cd1dae9102",
|
|
130
182
|
name: "scale/t10-bold",
|
|
183
|
+
description: "",
|
|
184
|
+
remote: false,
|
|
131
185
|
},
|
|
132
186
|
{
|
|
133
|
-
|
|
187
|
+
styleType: "TEXT",
|
|
134
188
|
key: "85422ef9f0230f821f1a9e6d2f8f86b3ba87f20d",
|
|
135
189
|
name: "semantic/article-body",
|
|
190
|
+
description: "",
|
|
191
|
+
remote: false,
|
|
136
192
|
},
|
|
137
193
|
{
|
|
138
|
-
|
|
194
|
+
styleType: "TEXT",
|
|
139
195
|
key: "d918eb7069e10c8dd745abf40bc375004c1badb8",
|
|
140
196
|
name: "semantic/screen-title",
|
|
197
|
+
description: "",
|
|
198
|
+
remote: false,
|
|
141
199
|
},
|
|
142
200
|
];
|