@seed-design/figma 0.1.6 → 0.1.8

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 (165) hide show
  1. package/lib/codegen/index.cjs +746 -646
  2. package/lib/codegen/index.d.ts +707 -627
  3. package/lib/codegen/index.d.ts.map +1 -1
  4. package/lib/codegen/index.js +746 -646
  5. package/lib/codegen/targets/react/index.cjs +1170 -1180
  6. package/lib/codegen/targets/react/index.d.ts +20 -9
  7. package/lib/codegen/targets/react/index.d.ts.map +1 -1
  8. package/lib/codegen/targets/react/index.js +1170 -1180
  9. package/lib/index.cjs +883 -668
  10. package/lib/index.d.ts +3 -1
  11. package/lib/index.d.ts.map +1 -1
  12. package/lib/index.js +883 -668
  13. package/package.json +3 -3
  14. package/src/codegen/component-properties.ts +283 -146
  15. package/src/codegen/core/component-handler.ts +9 -3
  16. package/src/codegen/core/jsx.ts +7 -2
  17. package/src/codegen/core/value-resolver.ts +35 -21
  18. package/src/codegen/targets/figma/pipeline.ts +4 -2
  19. package/src/codegen/targets/figma/value-resolver.ts +38 -2
  20. package/src/codegen/targets/react/component/handlers/action-button.ts +69 -5
  21. package/src/codegen/targets/react/component/handlers/alert-dialog.ts +81 -0
  22. package/src/codegen/targets/react/component/handlers/app-bar.ts +93 -128
  23. package/src/codegen/targets/react/component/handlers/avatar.ts +17 -8
  24. package/src/codegen/targets/react/component/handlers/badge.ts +0 -1
  25. package/src/codegen/targets/react/component/handlers/bottom-sheet.ts +71 -0
  26. package/src/codegen/targets/react/component/handlers/callout.ts +13 -17
  27. package/src/codegen/targets/react/component/handlers/chip.ts +66 -0
  28. package/src/codegen/targets/react/component/handlers/contextual-floating-button.ts +52 -0
  29. package/src/codegen/targets/react/component/handlers/divider.ts +19 -0
  30. package/src/codegen/targets/react/component/handlers/error-state.ts +26 -23
  31. package/src/codegen/targets/react/component/handlers/floating-action-button.ts +48 -0
  32. package/src/codegen/targets/react/component/handlers/help-bubble.ts +4 -5
  33. package/src/codegen/targets/react/component/handlers/identity-placeholder.ts +3 -2
  34. package/src/codegen/targets/react/component/handlers/inline-banner.ts +7 -14
  35. package/src/codegen/targets/react/component/handlers/manner-temp.ts +18 -0
  36. package/src/codegen/targets/react/component/handlers/menu-sheet.ts +106 -0
  37. package/src/codegen/targets/react/component/handlers/multiline-text-field.ts +1 -1
  38. package/src/codegen/targets/react/component/handlers/progress-circle.ts +3 -1
  39. package/src/codegen/targets/react/component/handlers/segmented-control.ts +4 -2
  40. package/src/codegen/targets/react/component/handlers/select-box.ts +7 -4
  41. package/src/codegen/targets/react/component/handlers/snackbar.ts +2 -2
  42. package/src/codegen/targets/react/component/handlers/tabs.ts +8 -125
  43. package/src/codegen/targets/react/component/index.ts +22 -19
  44. package/src/codegen/targets/react/instance.ts +1 -1
  45. package/src/codegen/targets/react/pipeline.ts +4 -2
  46. package/src/codegen/targets/react/props.ts +11 -4
  47. package/src/codegen/targets/react/value-resolver.ts +38 -3
  48. package/src/entities/data/__generated__/component-sets/action-button.d.ts +5 -5
  49. package/src/entities/data/__generated__/component-sets/action-button.mjs +5 -5
  50. package/src/entities/data/__generated__/component-sets/alert-dialog.d.ts +26 -0
  51. package/src/entities/data/__generated__/component-sets/alert-dialog.mjs +26 -0
  52. package/src/entities/data/__generated__/component-sets/avatar-stack.d.ts +5 -18
  53. package/src/entities/data/__generated__/component-sets/avatar-stack.mjs +5 -18
  54. package/src/entities/data/__generated__/component-sets/avatar.d.ts +11 -5
  55. package/src/entities/data/__generated__/component-sets/avatar.mjs +11 -5
  56. package/src/entities/data/__generated__/component-sets/badge.d.ts +0 -7
  57. package/src/entities/data/__generated__/component-sets/badge.mjs +0 -7
  58. package/src/entities/data/__generated__/component-sets/bottom-navigation-global.d.ts +3 -0
  59. package/src/entities/data/__generated__/component-sets/bottom-navigation-global.mjs +3 -0
  60. package/src/entities/data/__generated__/component-sets/bottom-navigation-kr.d.ts +3 -0
  61. package/src/entities/data/__generated__/component-sets/bottom-navigation-kr.mjs +3 -0
  62. package/src/entities/data/__generated__/component-sets/bottom-sheet.d.ts +53 -4
  63. package/src/entities/data/__generated__/component-sets/bottom-sheet.mjs +53 -4
  64. package/src/entities/data/__generated__/component-sets/callout.d.ts +13 -22
  65. package/src/entities/data/__generated__/component-sets/callout.mjs +13 -22
  66. package/src/entities/data/__generated__/component-sets/checkbox.d.ts +3 -3
  67. package/src/entities/data/__generated__/component-sets/checkbox.mjs +3 -3
  68. package/src/entities/data/__generated__/component-sets/checkmark.d.ts +34 -0
  69. package/src/entities/data/__generated__/component-sets/checkmark.mjs +34 -0
  70. package/src/entities/data/__generated__/component-sets/chip.d.ts +86 -0
  71. package/src/entities/data/__generated__/component-sets/chip.mjs +86 -0
  72. package/src/entities/data/__generated__/component-sets/chlid.d.ts +14 -0
  73. package/src/entities/data/__generated__/component-sets/chlid.mjs +14 -0
  74. package/src/entities/data/__generated__/component-sets/{extended-floating-action-button.d.ts → contextual-floating-button.d.ts} +12 -10
  75. package/src/entities/data/__generated__/component-sets/{extended-floating-action-button.mjs → contextual-floating-button.mjs} +12 -10
  76. package/src/entities/data/__generated__/component-sets/floating-action-button.d.ts +4 -8
  77. package/src/entities/data/__generated__/component-sets/floating-action-button.mjs +4 -8
  78. package/src/entities/data/__generated__/component-sets/help-bubble.d.ts +3 -10
  79. package/src/entities/data/__generated__/component-sets/help-bubble.mjs +3 -10
  80. package/src/entities/data/__generated__/component-sets/index.d.ts +13 -13
  81. package/src/entities/data/__generated__/component-sets/index.mjs +13 -13
  82. package/src/entities/data/__generated__/component-sets/inline-banner.d.ts +3 -3
  83. package/src/entities/data/__generated__/component-sets/inline-banner.mjs +3 -3
  84. package/src/entities/data/__generated__/component-sets/main-tab-navigation-global.d.ts +2 -2
  85. package/src/entities/data/__generated__/component-sets/main-tab-navigation-global.mjs +2 -2
  86. package/src/entities/data/__generated__/component-sets/manner-temp-badge.d.ts +2 -2
  87. package/src/entities/data/__generated__/component-sets/manner-temp-badge.mjs +2 -2
  88. package/src/entities/data/__generated__/component-sets/manner-temp.d.ts +2 -2
  89. package/src/entities/data/__generated__/component-sets/manner-temp.mjs +2 -2
  90. package/src/entities/data/__generated__/component-sets/{extended-action-sheet.d.ts → menu-sheet.d.ts} +17 -13
  91. package/src/entities/data/__generated__/component-sets/{extended-action-sheet.mjs → menu-sheet.mjs} +17 -13
  92. package/src/entities/data/__generated__/component-sets/multiline-text-field.d.ts +18 -18
  93. package/src/entities/data/__generated__/component-sets/multiline-text-field.mjs +18 -18
  94. package/src/entities/data/__generated__/component-sets/progress-circle.d.ts +2 -1
  95. package/src/entities/data/__generated__/component-sets/progress-circle.mjs +2 -1
  96. package/src/entities/data/__generated__/component-sets/radio-mark.d.ts +34 -0
  97. package/src/entities/data/__generated__/component-sets/radio-mark.mjs +34 -0
  98. package/src/entities/data/__generated__/component-sets/radio.d.ts +2 -2
  99. package/src/entities/data/__generated__/component-sets/radio.mjs +2 -2
  100. package/src/entities/data/__generated__/component-sets/reaction-button.d.ts +6 -6
  101. package/src/entities/data/__generated__/component-sets/reaction-button.mjs +6 -6
  102. package/src/entities/data/__generated__/component-sets/resizable-child.d.ts +18 -0
  103. package/src/entities/data/__generated__/component-sets/resizable-child.mjs +18 -0
  104. package/src/entities/data/__generated__/component-sets/resizable-icon.d.ts +18 -0
  105. package/src/entities/data/__generated__/component-sets/resizable-icon.mjs +18 -0
  106. package/src/entities/data/__generated__/component-sets/select-box.d.ts +4 -4
  107. package/src/entities/data/__generated__/component-sets/select-box.mjs +4 -4
  108. package/src/entities/data/__generated__/component-sets/skeleton.d.ts +7 -0
  109. package/src/entities/data/__generated__/component-sets/skeleton.mjs +7 -0
  110. package/src/entities/data/__generated__/component-sets/snackbar.d.ts +4 -4
  111. package/src/entities/data/__generated__/component-sets/snackbar.mjs +4 -4
  112. package/src/entities/data/__generated__/component-sets/switch.d.ts +1 -1
  113. package/src/entities/data/__generated__/component-sets/switch.mjs +1 -1
  114. package/src/entities/data/__generated__/component-sets/tabs.d.ts +13 -0
  115. package/src/entities/data/__generated__/component-sets/tabs.mjs +13 -0
  116. package/src/entities/data/__generated__/component-sets/template-button-group.d.ts +9 -33
  117. package/src/entities/data/__generated__/component-sets/template-button-group.mjs +9 -33
  118. package/src/entities/data/__generated__/component-sets/template-chip-group.d.ts +15 -12
  119. package/src/entities/data/__generated__/component-sets/template-chip-group.mjs +15 -12
  120. package/src/entities/data/__generated__/component-sets/template-completion.d.ts +28 -0
  121. package/src/entities/data/__generated__/component-sets/template-completion.mjs +28 -0
  122. package/src/entities/data/__generated__/component-sets/{error-state.d.ts → template-error-state.d.ts} +5 -5
  123. package/src/entities/data/__generated__/component-sets/{error-state.mjs → template-error-state.mjs} +5 -5
  124. package/src/entities/data/__generated__/component-sets/template-top-navigation.d.ts +9 -7
  125. package/src/entities/data/__generated__/component-sets/template-top-navigation.mjs +9 -7
  126. package/src/entities/data/__generated__/component-sets/text-field.d.ts +35 -36
  127. package/src/entities/data/__generated__/component-sets/text-field.mjs +35 -36
  128. package/src/entities/data/__generated__/component-sets/toggle-button.d.ts +7 -7
  129. package/src/entities/data/__generated__/component-sets/toggle-button.mjs +7 -7
  130. package/src/entities/data/__generated__/component-sets/top-navigation.d.ts +42 -0
  131. package/src/entities/data/__generated__/component-sets/top-navigation.mjs +42 -0
  132. package/src/entities/data/styles.ts +94 -0
  133. package/src/entities/index.ts +5 -2
  134. package/src/normalizer/from-plugin.ts +104 -44
  135. package/src/normalizer/types.ts +3 -1
  136. package/src/utils/figma-gradient.ts +72 -0
  137. package/src/utils/figma-node.ts +4 -3
  138. package/src/codegen/targets/react/component/handlers/action-chip.ts +0 -72
  139. package/src/codegen/targets/react/component/handlers/action-sheet.ts +0 -82
  140. package/src/codegen/targets/react/component/handlers/chip-tabs.ts +0 -57
  141. package/src/codegen/targets/react/component/handlers/control-chip.ts +0 -81
  142. package/src/codegen/targets/react/component/handlers/extended-action-sheet.ts +0 -98
  143. package/src/codegen/targets/react/component/handlers/extended-fab.ts +0 -25
  144. package/src/codegen/targets/react/component/handlers/fab.ts +0 -22
  145. package/src/codegen/targets/react/component/handlers/text-button.ts +0 -49
  146. package/src/entities/data/__generated__/component-sets/action-chip.d.ts +0 -57
  147. package/src/entities/data/__generated__/component-sets/action-chip.mjs +0 -57
  148. package/src/entities/data/__generated__/component-sets/action-sheet.d.ts +0 -40
  149. package/src/entities/data/__generated__/component-sets/action-sheet.mjs +0 -40
  150. package/src/entities/data/__generated__/component-sets/chip-tablist.d.ts +0 -24
  151. package/src/entities/data/__generated__/component-sets/chip-tablist.mjs +0 -24
  152. package/src/entities/data/__generated__/component-sets/control-chip.d.ts +0 -60
  153. package/src/entities/data/__generated__/component-sets/control-chip.mjs +0 -60
  154. package/src/entities/data/__generated__/component-sets/identity-placeholder.d.ts +0 -13
  155. package/src/entities/data/__generated__/component-sets/identity-placeholder.mjs +0 -13
  156. package/src/entities/data/__generated__/component-sets/manner-temp-bar.d.ts +0 -23
  157. package/src/entities/data/__generated__/component-sets/manner-temp-bar.mjs +0 -23
  158. package/src/entities/data/__generated__/component-sets/standard-navigation.d.ts +0 -23
  159. package/src/entities/data/__generated__/component-sets/standard-navigation.mjs +0 -23
  160. package/src/entities/data/__generated__/component-sets/tablist.d.ts +0 -29
  161. package/src/entities/data/__generated__/component-sets/tablist.mjs +0 -29
  162. package/src/entities/data/__generated__/component-sets/template-bottom-fixed-bar.d.ts +0 -42
  163. package/src/entities/data/__generated__/component-sets/template-bottom-fixed-bar.mjs +0 -42
  164. package/src/entities/data/__generated__/component-sets/text-button.d.ts +0 -45
  165. package/src/entities/data/__generated__/component-sets/text-button.mjs +0 -45
@@ -45,7 +45,9 @@ export const createProgressCircleHandler = (_ctx: ComponentHandlerDeps) =>
45
45
  minValue,
46
46
  maxValue,
47
47
  size: props.Size.value,
48
- tone: camelCase(props.Tone.value),
48
+ ...(props.Tone.value !== "Custom" && {
49
+ tone: camelCase(props.Tone.value),
50
+ }),
49
51
  };
50
52
 
51
53
  return createLocalSnippetElement("ProgressCircle", commonProps);
@@ -36,7 +36,7 @@ export const createSegmentedControlHandler = (ctx: ComponentHandlerDeps) => {
36
36
 
37
37
  return defineComponentHandler<SegmentedControlProperties>(
38
38
  metadata.segmentedControl.key,
39
- (node) => {
39
+ (node, traverse) => {
40
40
  const segments = findAllInstances<SegmentedControlItemProperties>({
41
41
  node,
42
42
  key: segmentedControlItemHandler.key,
@@ -46,7 +46,9 @@ export const createSegmentedControlHandler = (ctx: ComponentHandlerDeps) => {
46
46
  segment.componentProperties.State.value.split("-").includes("Selected"),
47
47
  );
48
48
 
49
- const segmentedControlChildren = segments.map(segmentedControlItemHandler.transform);
49
+ const segmentedControlChildren = segments.map((segment) =>
50
+ segmentedControlItemHandler.transform(segment, traverse),
51
+ );
50
52
 
51
53
  const commonProps = {
52
54
  ...(selectedSegment && {
@@ -42,7 +42,7 @@ export const createSelectBoxGroupHandler = (ctx: ComponentHandlerDeps) => {
42
42
 
43
43
  return defineComponentHandler<SelectBoxGroupProperties>(
44
44
  metadata.templateSelectBoxGroup.key,
45
- (node) => {
45
+ (node, traverse) => {
46
46
  const props = node.componentProperties;
47
47
 
48
48
  const tag = match(props.Control.value)
@@ -59,10 +59,13 @@ export const createSelectBoxGroupHandler = (ctx: ComponentHandlerDeps) => {
59
59
  selectBox.componentProperties.State.value.split("-").includes("Selected"),
60
60
  );
61
61
 
62
+ // traverse the container like it's a frame
63
+ const vStackProps = traverse({ ...node, type: "FRAME" })?.props;
64
+
62
65
  const stack = createSeedReactElement(
63
- "Stack",
64
- { gap: "spacingY.componentDefault" },
65
- selectBoxes.map(selectBoxHandler.transform),
66
+ "VStack",
67
+ vStackProps,
68
+ selectBoxes.map((box) => selectBoxHandler.transform(box, traverse)),
66
69
  );
67
70
 
68
71
  const commonProps = {
@@ -14,8 +14,8 @@ export const createSnackbarHandler = (_ctx: ComponentHandlerDeps) =>
14
14
  const commonProps = {
15
15
  message: props["Message#1528:4"].value,
16
16
  variant: camelCase(props.Variant.value),
17
- ...(props["Show Action Button#1528:0"].value && {
18
- actionLabel: props["Action Button Label#1528:8"].value,
17
+ ...(props["Show Action#1528:0"].value && {
18
+ actionLabel: props["Action Label#1528:8"].value,
19
19
  }),
20
20
  };
21
21
 
@@ -1,131 +1,14 @@
1
- import type {
2
- TabsFillItemProperties,
3
- TabsHugItemProperties,
4
- TabsProperties,
5
- } from "@/codegen/component-properties";
6
- import { defineComponentHandler } from "@/codegen/core";
7
- import * as metadata from "@/entities/data/__generated__/component-sets";
8
- import type { NormalizedInstanceNode } from "@/normalizer";
9
- import { camelCase } from "change-case";
10
1
  import { createLocalSnippetHelper } from "../../element-factories";
11
- import type { ComponentHandlerDeps } from "../deps.interface";
12
- import { handleSizeProp } from "../size";
13
2
 
14
- const { createLocalSnippetElement } = createLocalSnippetHelper("tabs");
3
+ const { createLocalSnippetElement: createTabsLocalSnippetElement } =
4
+ createLocalSnippetHelper("tabs");
15
5
 
16
- const TABS_HUG_ITEM_KEY = "c242492543b327ceb84fa9933841512fc62a898c";
17
- const createTabsHugItemHandler = (_ctx: ComponentHandlerDeps) =>
18
- defineComponentHandler<TabsHugItemProperties>(
19
- TABS_HUG_ITEM_KEY,
20
- ({ componentProperties: props }) => {
21
- const states = props.State.value.split("-");
6
+ const TABS_UNDERLINE_HUG_ITEM_KEY = "946cc52671ac3f46e20a8ff12fcc1c7f618da675";
7
+ const TABS_UNDERLINE_FILL_ITEM_KEY = "78039b6b86852b685a6e93e9b6743b9e577cd7db";
22
8
 
23
- const commonProps = {
24
- value: props["Label#4478:2"].value,
25
- ...(props.Notification.value === "True" && {
26
- alert: true,
27
- }),
28
- ...(states.includes("Disabled") && {
29
- disabled: true,
30
- }),
31
- };
9
+ const { createLocalSnippetElement: createChipTabsLocalSnippetElement } =
10
+ createLocalSnippetHelper("chip-tabs");
32
11
 
33
- return createLocalSnippetElement("TabsTrigger", commonProps, props["Label#4478:2"].value);
34
- },
35
- );
12
+ const TABS_CHIP_ITEM_KEY = "95bf31a329f9e8bba0d9aa2299d1552f1d388148";
36
13
 
37
- const TABS_FILL_ITEM_KEY = "7275293344efb40ee9a3f5248ba2659b94a0b305";
38
- const createTabsFillItemHandler = (_ctx: ComponentHandlerDeps) =>
39
- defineComponentHandler<TabsFillItemProperties>(
40
- TABS_FILL_ITEM_KEY,
41
- ({ componentProperties: props }) => {
42
- const states = props.State.value.split("-");
43
-
44
- const commonProps = {
45
- value: props["Label#4478:2"].value,
46
- ...(props.Notification.value === "True" && {
47
- alert: true,
48
- }),
49
- ...(states.includes("Disabled") && {
50
- disabled: true,
51
- }),
52
- };
53
-
54
- return createLocalSnippetElement("TabsTrigger", commonProps, props["Label#4478:2"].value);
55
- },
56
- );
57
-
58
- export const createTabsHandler = (ctx: ComponentHandlerDeps) => {
59
- const tabsHugItemHandler = createTabsHugItemHandler(ctx);
60
- const tabsFillItemHandler = createTabsFillItemHandler(ctx);
61
-
62
- return defineComponentHandler<TabsProperties>(metadata.tablist.key, (node) => {
63
- const { componentProperties: props, children } = node;
64
-
65
- const mappedItems = children.map(
66
- (
67
- child,
68
- ): {
69
- triggerLayout: "hug" | "fill";
70
- node: NormalizedInstanceNode & {
71
- componentProperties: TabsHugItemProperties | TabsFillItemProperties;
72
- };
73
- } | null => {
74
- if (child.type !== "INSTANCE") return null;
75
-
76
- const componentKey = child.componentSetKey ? child.componentSetKey : child.componentKey;
77
-
78
- if (componentKey === tabsHugItemHandler.key)
79
- return {
80
- triggerLayout: "hug" as const,
81
- node: child as NormalizedInstanceNode & { componentProperties: TabsHugItemProperties },
82
- };
83
-
84
- if (componentKey === tabsFillItemHandler.key)
85
- return {
86
- triggerLayout: "fill" as const,
87
- node: child as NormalizedInstanceNode & { componentProperties: TabsFillItemProperties },
88
- };
89
-
90
- return null;
91
- },
92
- );
93
-
94
- const tabsItems = mappedItems.filter(
95
- (item): item is NonNullable<(typeof mappedItems)[number]> => item !== null,
96
- );
97
-
98
- const selectedTabsItem = tabsItems.find(({ node: { componentProperties } }) =>
99
- componentProperties.State.value.split("-").includes("Selected"),
100
- )?.node;
101
-
102
- const tabTriggerList = createLocalSnippetElement(
103
- "TabsList",
104
- undefined,
105
- tabsItems.map(({ triggerLayout, node }) => {
106
- switch (triggerLayout) {
107
- case "hug":
108
- return tabsHugItemHandler.transform(node);
109
- case "fill":
110
- return tabsFillItemHandler.transform(node);
111
- }
112
- }),
113
- );
114
-
115
- const tabContents = tabsItems.map(({ node }) => {
116
- const value = node.componentProperties["Label#4478:2"].value;
117
-
118
- return createLocalSnippetElement("TabsContent", { value }, "{/* TODO: 컨텐츠 추가 */}");
119
- });
120
-
121
- const commonProps = {
122
- triggerLayout: camelCase(props.Layout.value),
123
- size: handleSizeProp(props.Size.value),
124
- ...(selectedTabsItem && {
125
- defaultValue: selectedTabsItem.componentProperties["Label#4478:2"].value,
126
- }),
127
- };
128
-
129
- return createLocalSnippetElement("TabsRoot", commonProps, [tabTriggerList, ...tabContents]);
130
- });
131
- };
14
+ // TODO: Implement the tabs handler
@@ -1,25 +1,30 @@
1
1
  import type { ComponentHandler } from "@/codegen/core";
2
2
  import type { NormalizedInstanceNode } from "@/normalizer";
3
3
  import type { ComponentHandlerDeps } from "./deps.interface";
4
- import { createActionButtonHandler } from "./handlers/action-button";
5
- import { createActionChipHandler } from "./handlers/action-chip";
6
- import { createActionSheetHandler } from "./handlers/action-sheet";
4
+
5
+ import {
6
+ createActionButtonHandler,
7
+ createActionButtonGhostHandler,
8
+ } from "./handlers/action-button";
9
+ import { createAlertDialogHandler } from "./handlers/alert-dialog";
7
10
  import { createAppBarHandler } from "./handlers/app-bar";
8
11
  import { createAvatarHandler } from "./handlers/avatar";
9
12
  import { createAvatarStackHandler } from "./handlers/avatar-stack";
10
13
  import { createBadgeHandler } from "./handlers/badge";
14
+ import { createBottomSheetHandler } from "./handlers/bottom-sheet";
11
15
  import { createCalloutHandler } from "./handlers/callout";
12
16
  import { createCheckboxHandler } from "./handlers/checkbox";
13
- import { createChipTabsHandler } from "./handlers/chip-tabs";
14
- import { createControlChipHandler } from "./handlers/control-chip";
17
+ import { createChipHandler } from "./handlers/chip";
18
+ import { createContextualFloatingButtonHandler } from "./handlers/contextual-floating-button";
19
+ import { createDividerHandler } from "./handlers/divider";
15
20
  import { createErrorStateHandler } from "./handlers/error-state";
16
- import { createExtendedActionSheetHandler } from "./handlers/extended-action-sheet";
17
- import { createExtendedFabHandler } from "./handlers/extended-fab";
18
- import { createFabHandler } from "./handlers/fab";
21
+ import { createFloatingActionButtonHandler } from "./handlers/floating-action-button";
19
22
  import { createHelpBubbleHandler } from "./handlers/help-bubble";
20
23
  import { createIdentityPlaceholderHandler } from "./handlers/identity-placeholder";
21
24
  import { createInlineBannerHandler } from "./handlers/inline-banner";
22
25
  import { createMannerTempBadgeHandler } from "./handlers/manner-temp-badge";
26
+ import { createMannerTempHandler } from "./handlers/manner-temp";
27
+ import { createMenuSheetHandler } from "./handlers/menu-sheet";
23
28
  import { createMultilineTextFieldHandler } from "./handlers/multiline-text-field";
24
29
  import { createProgressCircleHandler } from "./handlers/progress-circle";
25
30
  import { createReactionButtonHandler } from "./handlers/reaction-button";
@@ -28,8 +33,6 @@ import { createSelectBoxGroupHandler, createSelectBoxHandler } from "./handlers/
28
33
  import { createSkeletonHandler } from "./handlers/skeleton";
29
34
  import { createSnackbarHandler } from "./handlers/snackbar";
30
35
  import { createSwitchHandler } from "./handlers/switch";
31
- import { createTabsHandler } from "./handlers/tabs";
32
- import { createTextButtonHandler } from "./handlers/text-button";
33
36
  import { createTextFieldHandler } from "./handlers/text-field";
34
37
  import { createToggleButtonHandler } from "./handlers/toggle-button";
35
38
 
@@ -46,25 +49,27 @@ export function bindComponentHandler<T extends NormalizedInstanceNode["component
46
49
  }
47
50
 
48
51
  export const unboundSeedComponentHandlers: Array<UnboundComponentHandler<any>> = [
52
+ createActionButtonGhostHandler,
49
53
  createActionButtonHandler,
50
- createActionChipHandler,
51
- createActionSheetHandler,
54
+ createAlertDialogHandler,
52
55
  createAppBarHandler,
53
56
  createAvatarHandler,
54
57
  createAvatarStackHandler,
55
58
  createBadgeHandler,
59
+ createBottomSheetHandler,
56
60
  createCalloutHandler,
57
61
  createCheckboxHandler,
58
- createChipTabsHandler,
59
- createControlChipHandler,
62
+ createChipHandler,
63
+ createContextualFloatingButtonHandler,
64
+ createDividerHandler,
60
65
  createErrorStateHandler,
61
- createExtendedActionSheetHandler,
62
- createExtendedFabHandler,
63
- createFabHandler,
66
+ createFloatingActionButtonHandler,
64
67
  createHelpBubbleHandler,
65
68
  createIdentityPlaceholderHandler,
66
69
  createInlineBannerHandler,
67
70
  createMannerTempBadgeHandler,
71
+ createMannerTempHandler,
72
+ createMenuSheetHandler,
68
73
  createMultilineTextFieldHandler,
69
74
  createProgressCircleHandler,
70
75
  createReactionButtonHandler,
@@ -74,8 +79,6 @@ export const unboundSeedComponentHandlers: Array<UnboundComponentHandler<any>> =
74
79
  createSkeletonHandler,
75
80
  createSnackbarHandler,
76
81
  createSwitchHandler,
77
- createTabsHandler,
78
- createTextButtonHandler,
79
82
  createTextFieldHandler,
80
83
  createToggleButtonHandler,
81
84
  ];
@@ -37,7 +37,7 @@ export function createInstanceTransformer({
37
37
  : componentHandlers[componentKey];
38
38
 
39
39
  if (componentHandler) {
40
- return componentHandler.transform(node);
40
+ return componentHandler.transform(node, traverse);
41
41
  }
42
42
 
43
43
  return frameTransformer(node, traverse);
@@ -28,7 +28,8 @@ import {
28
28
  import { createTextTransformer } from "./text";
29
29
  import {
30
30
  defaultRawValueFormatters,
31
- defaultStyleNameFormatter,
31
+ defaultTextStyleNameFormatter,
32
+ defaultFillStyleResolver,
32
33
  defaultVariableNameFormatter,
33
34
  } from "./value-resolver";
34
35
 
@@ -51,7 +52,8 @@ export function createPipeline(options: CreatePipelineConfig = {}) {
51
52
  variableService,
52
53
  variableNameFormatter: defaultVariableNameFormatter,
53
54
  styleService,
54
- styleNameFormatter: defaultStyleNameFormatter,
55
+ textStyleNameFormatter: defaultTextStyleNameFormatter,
56
+ fillStyleResolver: defaultFillStyleResolver,
55
57
  rawValueFormatters: defaultRawValueFormatters,
56
58
  shouldInferVariableName,
57
59
  });
@@ -291,16 +291,23 @@ export function createTypeStylePropsConverter({
291
291
  });
292
292
  }
293
293
 
294
- export interface FrameFillProps {
295
- bg?: string;
296
- }
294
+ export type FrameFillProps =
295
+ | { bg?: string | undefined; bgGradient?: never; bgGradientDirection?: never }
296
+ | { bg?: never; bgGradient: string; bgGradientDirection?: string };
297
297
 
298
298
  export function createFrameFillPropsConverter(valueResolver: ReactValueResolver) {
299
299
  return definePropsConverter<FillTrait, FrameFillProps>((node) => {
300
300
  const bg = valueResolver.getFormattedValue.frameFill(node);
301
301
 
302
+ if (bg === undefined || typeof bg === "string") {
303
+ return {
304
+ bg,
305
+ };
306
+ }
307
+
302
308
  return {
303
- bg,
309
+ bgGradient: bg.value,
310
+ ...(bg.direction && { bgGradientDirection: bg.direction }),
304
311
  };
305
312
  });
306
313
  }
@@ -3,7 +3,13 @@ import { camelCasePreserveUnderscoreBetweenNumbers } from "@/utils/common";
3
3
  import { toCssPixel, toCssRgba } from "@/utils/css";
4
4
  import { camelCase } from "change-case";
5
5
 
6
- export type ReactValueResolver = ValueResolver<string, string, string, number>;
6
+ export type ReactValueResolver = ValueResolver<
7
+ string,
8
+ { value: string; direction?: string },
9
+ string,
10
+ string,
11
+ number
12
+ >;
7
13
 
8
14
  export const defaultVariableNameFormatter = ({ slug }: { slug: string[] }) =>
9
15
  slug
@@ -21,8 +27,37 @@ export const defaultVariableNameFormatter = ({ slug }: { slug: string[] }) =>
21
27
  .map(camelCasePreserveUnderscoreBetweenNumbers)
22
28
  .join(".");
23
29
 
24
- export const defaultStyleNameFormatter = ({ slug }: { slug: string[] }) =>
25
- camelCase(slug[slug.length - 1]!, { mergeAmbiguousCharacters: true });
30
+ export const defaultTextStyleNameFormatter = ({ slug }: { slug: string[] }) => {
31
+ return camelCase(slug[slug.length - 1]!, { mergeAmbiguousCharacters: true });
32
+ };
33
+
34
+ export const defaultFillStyleResolver = ({ slug }: { slug: string[] }) => {
35
+ const [, ...rest] = slug;
36
+
37
+ if (rest[0] === "fade") {
38
+ // ["fade", "layer-default", "↓(to-bottom)"]
39
+
40
+ const last = rest[rest.length - 1];
41
+
42
+ const direction = (() => {
43
+ if (last.startsWith("↓")) return "to bottom";
44
+ if (last.startsWith("↑")) return "to top";
45
+ if (last.startsWith("→")) return "to right";
46
+ if (last.startsWith("←")) return "to left";
47
+
48
+ return "unknown";
49
+ })();
50
+
51
+ return {
52
+ value: camelCase(rest.slice(0, -1).join("-"), { mergeAmbiguousCharacters: true }),
53
+ direction,
54
+ };
55
+ }
56
+
57
+ return {
58
+ value: camelCase(rest.join("-"), { mergeAmbiguousCharacters: true }),
59
+ };
60
+ };
26
61
 
27
62
  export const defaultRawValueFormatters = {
28
63
  color: (value: RGBA) => toCssRgba(value),
@@ -2,21 +2,21 @@ export declare const metadata: {
2
2
  "name": "🟢 Action Button",
3
3
  "key": "450ede9d0bf42fc6ef14345c77e6e407d6d5ee89",
4
4
  "componentPropertyDefinitions": {
5
+ "Label#5987:61": {
6
+ "type": "TEXT"
7
+ },
5
8
  "Suffix Icon#5987:244": {
6
9
  "type": "INSTANCE_SWAP",
7
10
  "preferredValues": []
8
11
  },
9
- "Icon#7574:0": {
12
+ "Prefix Icon#5987:305": {
10
13
  "type": "INSTANCE_SWAP",
11
14
  "preferredValues": []
12
15
  },
13
- "Prefix Icon#5987:305": {
16
+ "Icon#7574:0": {
14
17
  "type": "INSTANCE_SWAP",
15
18
  "preferredValues": []
16
19
  },
17
- "Label#5987:61": {
18
- "type": "TEXT"
19
- },
20
20
  "Size": {
21
21
  "type": "VARIANT",
22
22
  "variantOptions": [
@@ -2,21 +2,21 @@ export const metadata = {
2
2
  "name": "🟢 Action Button",
3
3
  "key": "450ede9d0bf42fc6ef14345c77e6e407d6d5ee89",
4
4
  "componentPropertyDefinitions": {
5
+ "Label#5987:61": {
6
+ "type": "TEXT"
7
+ },
5
8
  "Suffix Icon#5987:244": {
6
9
  "type": "INSTANCE_SWAP",
7
10
  "preferredValues": []
8
11
  },
9
- "Icon#7574:0": {
12
+ "Prefix Icon#5987:305": {
10
13
  "type": "INSTANCE_SWAP",
11
14
  "preferredValues": []
12
15
  },
13
- "Prefix Icon#5987:305": {
16
+ "Icon#7574:0": {
14
17
  "type": "INSTANCE_SWAP",
15
18
  "preferredValues": []
16
19
  },
17
- "Label#5987:61": {
18
- "type": "TEXT"
19
- },
20
20
  "Size": {
21
21
  "type": "VARIANT",
22
22
  "variantOptions": [
@@ -0,0 +1,26 @@
1
+ export declare const metadata: {
2
+ "name": "🟢 Alert Dialog",
3
+ "key": "e0c89524a554ca1bf95c016b7255f29e257624aa",
4
+ "componentPropertyDefinitions": {
5
+ "Title Text#20361:0": {
6
+ "type": "TEXT"
7
+ },
8
+ "Description Text#20361:7": {
9
+ "type": "TEXT"
10
+ },
11
+ "Show Title#20361:14": {
12
+ "type": "BOOLEAN"
13
+ },
14
+ "Layout": {
15
+ "type": "VARIANT",
16
+ "variantOptions": [
17
+ "Single",
18
+ "Neutral",
19
+ "Neutral (Overflow)",
20
+ "Critical",
21
+ "Critical (Overflow)",
22
+ "Nonpreferred"
23
+ ]
24
+ }
25
+ }
26
+ };
@@ -0,0 +1,26 @@
1
+ export const metadata = {
2
+ "name": "🟢 Alert Dialog",
3
+ "key": "e0c89524a554ca1bf95c016b7255f29e257624aa",
4
+ "componentPropertyDefinitions": {
5
+ "Title Text#20361:0": {
6
+ "type": "TEXT"
7
+ },
8
+ "Description Text#20361:7": {
9
+ "type": "TEXT"
10
+ },
11
+ "Show Title#20361:14": {
12
+ "type": "BOOLEAN"
13
+ },
14
+ "Layout": {
15
+ "type": "VARIANT",
16
+ "variantOptions": [
17
+ "Single",
18
+ "Neutral",
19
+ "Neutral (Overflow)",
20
+ "Critical",
21
+ "Critical (Overflow)",
22
+ "Nonpreferred"
23
+ ]
24
+ }
25
+ }
26
+ };
@@ -1,6 +1,6 @@
1
1
  export declare const metadata: {
2
2
  "name": "🟢 Avatar Stack",
3
- "key": "019467fdad2192abb48699dcfb79e344df04b799",
3
+ "key": "e8e91e01000d878742c55cd6e44b6786460440f7",
4
4
  "componentPropertyDefinitions": {
5
5
  "Size": {
6
6
  "type": "VARIANT",
@@ -8,24 +8,11 @@ export declare const metadata: {
8
8
  "20",
9
9
  "24",
10
10
  "36",
11
+ "42",
11
12
  "48",
12
- "64"
13
- ]
14
- },
15
- "Item Count": {
16
- "type": "VARIANT",
17
- "variantOptions": [
18
- "2",
19
- "3",
20
- "4",
21
- "5"
22
- ]
23
- },
24
- "Top Item": {
25
- "type": "VARIANT",
26
- "variantOptions": [
27
- "Last Item",
28
- "First Item"
13
+ "64",
14
+ "80",
15
+ "96"
29
16
  ]
30
17
  }
31
18
  }
@@ -1,6 +1,6 @@
1
1
  export const metadata = {
2
2
  "name": "🟢 Avatar Stack",
3
- "key": "019467fdad2192abb48699dcfb79e344df04b799",
3
+ "key": "e8e91e01000d878742c55cd6e44b6786460440f7",
4
4
  "componentPropertyDefinitions": {
5
5
  "Size": {
6
6
  "type": "VARIANT",
@@ -8,24 +8,11 @@ export const metadata = {
8
8
  "20",
9
9
  "24",
10
10
  "36",
11
+ "42",
11
12
  "48",
12
- "64"
13
- ]
14
- },
15
- "Item Count": {
16
- "type": "VARIANT",
17
- "variantOptions": [
18
- "2",
19
- "3",
20
- "4",
21
- "5"
22
- ]
23
- },
24
- "Top Item": {
25
- "type": "VARIANT",
26
- "variantOptions": [
27
- "Last Item",
28
- "First Item"
13
+ "64",
14
+ "80",
15
+ "96"
29
16
  ]
30
17
  }
31
18
  }
@@ -1,11 +1,8 @@
1
1
  export declare const metadata: {
2
2
  "name": "🟢 Avatar",
3
- "key": "d71644aeba2e29deda366798fdfe35977166d120",
3
+ "key": "4a8853c3068c08b69b13e71dd42ce186e968697e",
4
4
  "componentPropertyDefinitions": {
5
- "Show Image#71850:57": {
6
- "type": "BOOLEAN"
7
- },
8
- "Show Badge#1398:26": {
5
+ "Has Image Contents#33407:0": {
9
6
  "type": "BOOLEAN"
10
7
  },
11
8
  "Size": {
@@ -20,6 +17,15 @@ export declare const metadata: {
20
17
  "80",
21
18
  "96"
22
19
  ]
20
+ },
21
+ "Badge": {
22
+ "type": "VARIANT",
23
+ "variantOptions": [
24
+ "None",
25
+ "Circle",
26
+ "Shield",
27
+ "Flower"
28
+ ]
23
29
  }
24
30
  }
25
31
  };
@@ -1,11 +1,8 @@
1
1
  export const metadata = {
2
2
  "name": "🟢 Avatar",
3
- "key": "d71644aeba2e29deda366798fdfe35977166d120",
3
+ "key": "4a8853c3068c08b69b13e71dd42ce186e968697e",
4
4
  "componentPropertyDefinitions": {
5
- "Show Image#71850:57": {
6
- "type": "BOOLEAN"
7
- },
8
- "Show Badge#1398:26": {
5
+ "Has Image Contents#33407:0": {
9
6
  "type": "BOOLEAN"
10
7
  },
11
8
  "Size": {
@@ -20,6 +17,15 @@ export const metadata = {
20
17
  "80",
21
18
  "96"
22
19
  ]
20
+ },
21
+ "Badge": {
22
+ "type": "VARIANT",
23
+ "variantOptions": [
24
+ "None",
25
+ "Circle",
26
+ "Shield",
27
+ "Flower"
28
+ ]
23
29
  }
24
30
  }
25
31
  };