@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
@@ -1,35 +0,0 @@
1
- import * as metadata from "../../data/__generated__/component-sets";
2
- import { createElement } from "../../jsx";
3
- import { findAllInstances } from "../../utils/figma-node";
4
- import type { AvatarProperties, AvatarStackProperties } from "../type";
5
- import type { ComponentHandler } from "../type-helper";
6
- import { avatarHandler } from "./avatar";
7
-
8
- export const avatarStackHandler: ComponentHandler<AvatarStackProperties> = {
9
- key: metadata.avatarStack.key,
10
- codegen: async (node) => {
11
- const avatarNodes = await findAllInstances<AvatarProperties>({
12
- node,
13
- key: avatarHandler.key,
14
- });
15
-
16
- const { componentProperties: props } = node;
17
-
18
- const commonProps = {
19
- size: props.Size.value,
20
- // TODO: 구현될 예정
21
- // topItem: camelCase(props["Top Item"].value),
22
- };
23
-
24
- const avatarStackChildren = (await Promise.all(avatarNodes.map(avatarHandler.codegen))).map(
25
- (avatar) => {
26
- return {
27
- ...avatar,
28
- props: { ...avatar.props, size: undefined },
29
- };
30
- },
31
- );
32
-
33
- return createElement("AvatarStack", commonProps, avatarStackChildren);
34
- },
35
- };
@@ -1,37 +0,0 @@
1
- import * as metadata from "../../data/__generated__/component-sets";
2
- import { createElement } from "../../jsx";
3
- import { findAllInstances } from "../../utils/figma-node";
4
- import type { AvatarProperties, IdentityPlaceholderProperties } from "../type";
5
- import type { ComponentHandler } from "../type-helper";
6
- import { identityPlaceholderHandler } from "./identity-placeholder";
7
-
8
- export const avatarHandler: ComponentHandler<AvatarProperties> = {
9
- key: metadata.avatar.key,
10
- codegen: async (node) => {
11
- const [placeholder] = findAllInstances<IdentityPlaceholderProperties>({
12
- node,
13
- key: identityPlaceholderHandler.key,
14
- });
15
- const { componentProperties: props } = node;
16
-
17
- const avatarHasSrc = props["Show Image#71850:57"].value;
18
-
19
- const commonProps = {
20
- ...(avatarHasSrc && {
21
- // Placeholder
22
- src: `https://placehold.co/${props.Size.value}x${props.Size.value}`,
23
- }),
24
- ...(placeholder && {
25
- fallback: await identityPlaceholderHandler.codegen(placeholder),
26
- }),
27
- size: props.Size.value,
28
- };
29
-
30
- return createElement(
31
- "Avatar",
32
- commonProps,
33
- props["Show Badge#1398:26"].value ? createElement("AvatarBadge", {}) : undefined,
34
- avatarHasSrc ? "alt 텍스트를 제공해야 합니다." : undefined,
35
- );
36
- },
37
- };
@@ -1,20 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createElement } from "../../jsx";
4
- import { handleSize } from "../properties";
5
- import type { BadgeProperties } from "../type";
6
- import type { ComponentHandler } from "../type-helper";
7
-
8
- export const badgeHandler: ComponentHandler<BadgeProperties> = {
9
- key: metadata.badge.key,
10
- codegen: async ({ componentProperties: props }) => {
11
- const commonProps = {
12
- size: handleSize(props.Size.value),
13
- tone: camelCase(props.Tone.value),
14
- variant: camelCase(props.Variant.value),
15
- shape: camelCase(props.Shape.value),
16
- };
17
-
18
- return createElement("Badge", commonProps, props["Label#1584:0"].value);
19
- },
20
- };
@@ -1,87 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createIconTagNameFromKey } from "../../icon";
4
- import { createElement } from "../../jsx";
5
- import type { NormalizedTextNode } from "../../normalizer";
6
- import type { ComponentHandler } from "../type-helper";
7
- import type { CalloutProperties } from "../type";
8
-
9
- export const calloutHandler: ComponentHandler<CalloutProperties> = {
10
- key: metadata.callout.key,
11
- codegen: async ({ componentProperties: props, children }) => {
12
- const tag = (() => {
13
- switch (props.Interaction.value) {
14
- case "Default":
15
- return "Callout";
16
- case "Actionable":
17
- return "ActionableCallout";
18
- case "Dismissible":
19
- return "DismissibleCallout";
20
- default:
21
- return "Callout";
22
- }
23
- })();
24
-
25
- const textNode = children.find((child) => child.type === "TEXT") as NormalizedTextNode | null;
26
-
27
- if (!textNode) {
28
- return createElement(tag, undefined, undefined, "내용을 제공해주세요.");
29
- }
30
-
31
- const slices = textNode.segments;
32
-
33
- let title: string | undefined;
34
- let description: string | undefined;
35
- let linkLabel: string | undefined;
36
-
37
- switch (slices.length) {
38
- case 1: {
39
- description = slices[0]?.characters.trim();
40
-
41
- break;
42
- }
43
- case 2: {
44
- const firstSlice = slices[0];
45
- const secondSlice = slices[1];
46
-
47
- if (firstSlice?.style.fontWeight === 700) {
48
- title = firstSlice?.characters.trim();
49
- description = secondSlice?.characters.trim();
50
- break;
51
- }
52
-
53
- description = firstSlice?.characters.trim();
54
-
55
- if (tag !== "ActionableCallout") {
56
- linkLabel = secondSlice?.characters.trim();
57
- }
58
-
59
- break;
60
- }
61
- case 3: {
62
- title = slices[0]?.characters.trim();
63
- description = slices[1]?.characters.trim();
64
-
65
- if (tag !== "ActionableCallout") {
66
- linkLabel = slices[2]?.characters.trim();
67
- }
68
-
69
- break;
70
- }
71
- }
72
-
73
- const commonProps = {
74
- tone: camelCase(props.Tone.value),
75
- title,
76
- description,
77
- linkProps: {
78
- children: linkLabel,
79
- },
80
- ...(props["Icon#12598:210"].value && {
81
- prefixIcon: createElement(createIconTagNameFromKey(props["Icon#12598:210"].componentKey)),
82
- }),
83
- };
84
-
85
- return createElement(tag, commonProps);
86
- },
87
- };
@@ -1,32 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createElement } from "../../jsx";
4
- import { handleSize } from "../properties";
5
- import type { CheckboxProperties } from "../type";
6
- import type { ComponentHandler } from "../type-helper";
7
-
8
- export const checkboxHandler: ComponentHandler<CheckboxProperties> = {
9
- key: metadata.checkbox.key,
10
- codegen: async ({ componentProperties: props }) => {
11
- const states = props.State.value.split("-");
12
-
13
- const commonProps = {
14
- label: props["Label#49990:0"].value,
15
- weight: camelCase(props.Weight.value),
16
- variant: camelCase(props.Shape.value),
17
- size: handleSize(props.Size.value),
18
- ...(states.includes("Selected") && {
19
- defaultChecked: true,
20
- }),
21
- ...(states.includes("Indeterminate") && {
22
- defaultChecked: true,
23
- indeterminate: true,
24
- }),
25
- ...(states.includes("Disabled") && {
26
- disabled: true,
27
- }),
28
- };
29
-
30
- return createElement("Checkbox", commonProps);
31
- },
32
- };
@@ -1,51 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createElement } from "../../jsx";
4
- import { findAllInstances } from "../../utils/figma-node";
5
- import type { ChipTabsItemProperties, ChipTabsProperties } from "../type";
6
- import type { ComponentHandler } from "../type-helper";
7
-
8
- export const chipTabsHandler: ComponentHandler<ChipTabsProperties> = {
9
- key: metadata.chipTablist.key,
10
- codegen: async (node) => {
11
- const chipTabsItems = findAllInstances<ChipTabsItemProperties>({
12
- node,
13
- key: chipTabsItemHandler.key,
14
- });
15
-
16
- const selectedChipTabsItem = chipTabsItems.find((chipTabsItem) =>
17
- chipTabsItem.componentProperties.State.value.split("-").includes("Selected"),
18
- );
19
-
20
- const chipTabsList = createElement(
21
- "ChipTabsList",
22
- undefined,
23
- await Promise.all(chipTabsItems.map(chipTabsItemHandler.codegen)),
24
- );
25
-
26
- const commonProps = {
27
- variant: camelCase(node.componentProperties.Variant.value),
28
- ...(selectedChipTabsItem && {
29
- defaultValue: selectedChipTabsItem.componentProperties["Label#8876:0"].value,
30
- }),
31
- };
32
-
33
- return createElement("ChipTabs", commonProps, chipTabsList);
34
- },
35
- };
36
-
37
- const chipTabsItemHandler: ComponentHandler<ChipTabsItemProperties> = {
38
- key: "fa80168b02051fbb0ba032238bd76d840dbe2e15",
39
- codegen: async ({ componentProperties: props }) => {
40
- const states = props.State.value.split("-");
41
-
42
- const commonProps = {
43
- value: props["Label#8876:0"].value,
44
- ...(states.includes("Disabled") && {
45
- disabled: true,
46
- }),
47
- };
48
-
49
- return createElement("ChipTabsTrigger", commonProps, props["Label#8876:0"].value);
50
- },
51
- };
@@ -1,75 +0,0 @@
1
- import { match } from "ts-pattern";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createIconTagNameFromKey } from "../../icon";
4
- import { createElement } from "../../jsx";
5
- import { handleSize } from "../properties";
6
- import type { ControlChipProperties } from "../type";
7
- import type { ComponentHandler } from "../type-helper";
8
-
9
- export const controlChipHandler: ComponentHandler<ControlChipProperties> = {
10
- key: metadata.controlChip.key,
11
- codegen: async ({ componentProperties: props }) => {
12
- const states = props.State.value.split("-");
13
-
14
- const { layout, children } = await match(props.Layout.value)
15
- .with("Icon Only", async () => ({
16
- layout: "iconOnly",
17
- children: [
18
- createElement("Icon", {
19
- svg: createElement(createIconTagNameFromKey(props["Icon#8722:41"].componentKey)),
20
- }),
21
- ],
22
- }))
23
- .with("Icon First", async () => ({
24
- layout: "withText",
25
- children: [
26
- createElement("PrefixIcon", {
27
- svg: createElement(createIconTagNameFromKey(props["Prefix Icon#8722:0"].componentKey)),
28
- }),
29
- props["Label#7185:0"].value,
30
- ],
31
- }))
32
- .with("Icon Last", async () => ({
33
- layout: "withText",
34
- children: [
35
- props["Label#7185:0"].value,
36
- createElement("SuffixIcon", {
37
- svg: createElement(createIconTagNameFromKey(props["Suffix Icon#8722:82"].componentKey)),
38
- }),
39
- ],
40
- }))
41
- .with("Icon Both", async () => ({
42
- layout: "withText",
43
- children: [
44
- createElement("PrefixIcon", {
45
- svg: createElement(createIconTagNameFromKey(props["Prefix Icon#8722:0"].componentKey)),
46
- }),
47
- props["Label#7185:0"].value,
48
- createElement("SuffixIcon", {
49
- svg: createElement(createIconTagNameFromKey(props["Suffix Icon#8722:82"].componentKey)),
50
- }),
51
- ],
52
- }))
53
- .with("Text Only", () => ({
54
- layout: "withText",
55
- children: props["Label#7185:0"].value,
56
- }))
57
- .exhaustive();
58
-
59
- const commonProps = {
60
- size: handleSize(props.Size.value),
61
- layout,
62
- ...(states.includes("Selected") && {
63
- defaultChecked: true,
64
- }),
65
- ...(states.includes("Disabled") && {
66
- disabled: true,
67
- }),
68
- ...(props["Show Count#7185:42"].value && {
69
- count: Number(props["Count#7185:21"].value),
70
- }),
71
- };
72
-
73
- return createElement("ControlChip.Toggle", commonProps, children);
74
- },
75
- };
@@ -1,37 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createElement } from "../../jsx";
4
- import { findAllInstances } from "../../utils/figma-node";
5
- import type { ActionButtonProperties, ErrorStateProperties } from "../type";
6
- import type { ComponentHandler } from "../type-helper";
7
- import { actionButtonHandler } from "./action-button";
8
-
9
- export const errorStateHandler: ComponentHandler<ErrorStateProperties> = {
10
- key: metadata.errorState.key,
11
- codegen: async (node) => {
12
- const props = node.componentProperties;
13
-
14
- const [actionButtonNode] = await findAllInstances<ActionButtonProperties>({
15
- node,
16
- key: actionButtonHandler.key,
17
- });
18
-
19
- const commonProps = {
20
- variant: camelCase(props.Variant.value),
21
- ...(props.Layout.value === "With Title" && {
22
- title: props["Title#16237:0"].value,
23
- }),
24
- description: props["Description#16237:5"].value,
25
- ...(actionButtonNode && {
26
- primaryActionProps: {
27
- children: (await actionButtonHandler.codegen(actionButtonNode)).children[0],
28
- },
29
- secondaryActionProps: {
30
- children: props["Secondary Action Label#17042:0"].value,
31
- },
32
- }),
33
- };
34
-
35
- return createElement("ErrorState", commonProps);
36
- },
37
- };
@@ -1,86 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createIconTagNameFromKey } from "../../icon";
4
- import { createElement } from "../../jsx";
5
- import { findAllInstances } from "../../utils/figma-node";
6
- import type {
7
- ExtendedActionSheetGroupProperties,
8
- ExtendedActionSheetItemProperties,
9
- ExtendedActionSheetProperties,
10
- } from "../type";
11
- import type { ComponentHandler } from "../type-helper";
12
-
13
- export const extendedActionSheetHandler: ComponentHandler<ExtendedActionSheetProperties> = {
14
- key: metadata.extendedActionSheet.key,
15
- codegen: async (node) => {
16
- const { componentProperties: props } = node;
17
-
18
- const groups = findAllInstances<ExtendedActionSheetGroupProperties>({
19
- node,
20
- key: extendedActionSheetGroupHandler.key,
21
- });
22
-
23
- const contentChildren = await Promise.all(groups.map(extendedActionSheetGroupHandler.codegen));
24
-
25
- const title = props["Show Title#17043:12"].value ? props["Title#14599:0"].value : undefined;
26
-
27
- const content = createElement(
28
- "ExtendedActionSheetContent",
29
- { title },
30
- contentChildren,
31
- title
32
- ? undefined
33
- : "title을 제공하지 않는 경우 aria-label이나 aria-labelledby 중 하나를 제공해야 합니다.",
34
- );
35
-
36
- const trigger = createElement(
37
- "ExtendedActionSheetTrigger",
38
- { asChild: true },
39
- createElement(
40
- "ActionButton",
41
- undefined,
42
- "열기",
43
- "ExtendedActionSheet을 여는 요소를 제공해주세요.",
44
- ),
45
- );
46
-
47
- return createElement("ExtendedActionSheet", undefined, [trigger, content]);
48
- },
49
- };
50
-
51
- const extendedActionSheetGroupHandler: ComponentHandler<ExtendedActionSheetGroupProperties> = {
52
- key: "2a504a1c6b7810d5e652862dcba2cb7048f9eb16",
53
- codegen: async (node) => {
54
- const items = findAllInstances<ExtendedActionSheetItemProperties>({
55
- node,
56
- key: extendedActionSheetItemHandler.key,
57
- });
58
-
59
- const contentChildren = await Promise.all(items.map(extendedActionSheetItemHandler.codegen));
60
-
61
- return createElement("ExtendedActionSheetGroup", undefined, contentChildren);
62
- },
63
- };
64
-
65
- const extendedActionSheetItemHandler: ComponentHandler<ExtendedActionSheetItemProperties> = {
66
- key: "057083e95466da59051119eec0b41d4ad5a07f8f",
67
- codegen: async ({ componentProperties: props }) => {
68
- const states = props.State.value.split("-");
69
-
70
- const commonProps = {
71
- tone: camelCase(props.Tone.value),
72
- ...(states.includes("Disabled") && {
73
- disabled: true,
74
- }),
75
- };
76
-
77
- return createElement("ExtendedActionSheetItem", commonProps, [
78
- props["Show Prefix Icon#17043:5"].value
79
- ? createElement("PrefixIcon", {
80
- svg: createElement(createIconTagNameFromKey(props["Prefix Icon#55948:0"].componentKey)),
81
- })
82
- : undefined,
83
- props["Label#55905:8"].value,
84
- ]);
85
- },
86
- };
@@ -1,24 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createIconTagNameFromKey } from "../../icon";
4
- import { createElement } from "../../jsx";
5
- import { handleSize } from "../properties";
6
- import type { ExtendedFabProperties } from "../type";
7
- import type { ComponentHandler } from "../type-helper";
8
-
9
- export const extendedFabHandler: ComponentHandler<ExtendedFabProperties> = {
10
- key: metadata.extendedFloatingActionButton.key,
11
- codegen: async ({ componentProperties: props }) => {
12
- const commonProps = {
13
- size: handleSize(props.Size.value),
14
- variant: camelCase(props.Variant.value),
15
- };
16
-
17
- return createElement("ExtendedFab", commonProps, [
18
- createElement("PrefixIcon", {
19
- svg: createElement(createIconTagNameFromKey(props["Icon#28796:0"].componentKey)),
20
- }),
21
- props["Label#28936:0"].value,
22
- ]);
23
- },
24
- };
@@ -1,17 +0,0 @@
1
- import * as metadata from "../../data/__generated__/component-sets";
2
- import { createIconTagNameFromKey } from "../../icon";
3
- import { createElement } from "../../jsx";
4
- import type { ComponentHandler } from "../type-helper";
5
- import type { FabProperties } from "../type";
6
-
7
- export const fabHandler: ComponentHandler<FabProperties> = {
8
- key: metadata.floatingActionButton.key,
9
- codegen: async ({ componentProperties: props }) => {
10
- return createElement(
11
- "Fab",
12
- undefined,
13
- createElement(createIconTagNameFromKey(props["Icon#28796:0"].componentKey)),
14
- "aria-label이나 aria-labelledby 중 하나를 제공해야 합니다.",
15
- );
16
- },
17
- };
@@ -1,66 +0,0 @@
1
- import * as metadata from "../../data/__generated__/component-sets";
2
- import { createElement } from "../../jsx";
3
- import type { ComponentHandler } from "../type-helper";
4
- import type { HelpBubbleProperties } from "../type";
5
-
6
- export const helpBubbleHandler: ComponentHandler<HelpBubbleProperties> = {
7
- key: metadata.helpBubble.key,
8
- codegen: async ({ componentProperties: props }) => {
9
- const placement:
10
- | "top"
11
- | "right"
12
- | "bottom"
13
- | "left"
14
- | "top-end"
15
- | "top-start"
16
- | "right-end"
17
- | "right-start"
18
- | "bottom-end"
19
- | "bottom-start"
20
- | "left-end"
21
- | "left-start" = (() => {
22
- switch (props.Placement.value) {
23
- case "Bottom-Left":
24
- return "top-start";
25
- case "Bottom-Center":
26
- return "top";
27
- case "Bottom-Right":
28
- return "top-end";
29
- case "Left-Top":
30
- return "right-start";
31
- case "Left-Center":
32
- return "right";
33
- case "Left-Bottom":
34
- return "right-end";
35
- case "Top-Left":
36
- return "bottom-start";
37
- case "Top-Center":
38
- return "bottom";
39
- case "Top-Right":
40
- return "bottom-end";
41
- case "Right-Top":
42
- return "left-start";
43
- case "Right-Center":
44
- return "left";
45
- case "Right-Bottom":
46
- return "left-end";
47
- }
48
- })();
49
-
50
- const commonProps = {
51
- title: props["Title#62535:0"].value,
52
- ...(props["Show Description#62499:0"].value && {
53
- description: props["Description#62535:98"].value,
54
- }),
55
- showCloseButton: props["Show Close Button"].value === "True",
56
- defaultOpen: true,
57
- placement,
58
- };
59
-
60
- return createElement(
61
- "HelpBubbleTrigger",
62
- commonProps,
63
- createElement("ActionButton", undefined, "열기", "HelpBubble을 여는 요소를 제공해주세요."),
64
- );
65
- },
66
- };
@@ -1,16 +0,0 @@
1
- import { camelCase } from "change-case";
2
- import * as metadata from "../../data/__generated__/component-sets";
3
- import { createElement } from "../../jsx";
4
- import type { ComponentHandler } from "../type-helper";
5
- import type { IdentityPlaceholderProperties } from "../type";
6
-
7
- export const identityPlaceholderHandler: ComponentHandler<IdentityPlaceholderProperties> = {
8
- key: metadata.identityPlaceholder.key,
9
- codegen: async ({ componentProperties: props }) => {
10
- const commonProps = {
11
- identity: camelCase(props.Identity.value),
12
- };
13
-
14
- return createElement("IdentityPlaceholder", commonProps);
15
- },
16
- };
@@ -1,17 +0,0 @@
1
- import * as metadata from "../../data/__generated__/component-sets";
2
- import { createElement } from "../../jsx";
3
- import type { MannerTempBadgeProperties } from "../type";
4
- import type { ComponentHandler } from "../type-helper";
5
-
6
- export const mannerTempBadgeHandler: ComponentHandler<MannerTempBadgeProperties> = {
7
- key: metadata.mannerTempBadge.key,
8
- codegen: async ({ children }) => {
9
- const textNode = children.find((child) => child.type === "TEXT");
10
-
11
- const commonProps = {
12
- temperature: Number(textNode?.characters.replace(/[^\d.-]/g, "") ?? "-1"),
13
- };
14
-
15
- return createElement("MannerTempBadge", commonProps);
16
- },
17
- };