@seed-design/figma 1.0.7 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/lib/codegen/index.cjs +366 -286
  2. package/lib/codegen/index.d.ts +508 -233
  3. package/lib/codegen/index.d.ts.map +1 -1
  4. package/lib/codegen/index.js +366 -286
  5. package/lib/codegen/targets/react/index.cjs +1024 -511
  6. package/lib/codegen/targets/react/index.d.ts.map +1 -1
  7. package/lib/codegen/targets/react/index.js +1024 -511
  8. package/lib/index.cjs +394 -286
  9. package/lib/index.js +394 -286
  10. package/package.json +2 -2
  11. package/src/codegen/component-properties.ts +362 -103
  12. package/src/codegen/targets/react/component/handlers/action-button.ts +69 -54
  13. package/src/codegen/targets/react/component/handlers/bottom-sheet.ts +2 -3
  14. package/src/codegen/targets/react/component/handlers/error-state.ts +18 -6
  15. package/src/codegen/targets/react/component/handlers/field-button.ts +197 -0
  16. package/src/codegen/targets/react/component/handlers/field.ts +167 -0
  17. package/src/codegen/targets/react/component/handlers/slider.ts +114 -0
  18. package/src/codegen/targets/react/component/handlers/text-field.ts +245 -92
  19. package/src/codegen/targets/react/component/index.ts +40 -23
  20. package/src/codegen/targets/react/element-factories.ts +1 -1
  21. package/src/codegen/targets/react/instance.ts +23 -2
  22. package/src/entities/data/__generated__/component-sets/index.d.ts +225 -222
  23. package/src/entities/data/__generated__/component-sets/index.mjs +225 -222
  24. package/src/entities/data/__generated__/components/index.d.ts +121 -0
  25. package/src/entities/data/__generated__/components/index.mjs +121 -0
  26. package/src/entities/data/__generated__/icons/index.mjs +28 -0
  27. package/src/entities/data/__generated__/styles/index.mjs +0 -56
  28. package/src/entities/data/__generated__/variable-collections/index.mjs +11 -8
  29. package/src/entities/data/__generated__/variables/index.mjs +130 -0
  30. package/src/codegen/targets/react/component/handlers/multiline-text-field.ts +0 -84
@@ -885,7 +885,7 @@ function createStrokePropsConverter(valueResolver) {
885
885
  }
886
886
 
887
887
  const SEED_REACT_IMPORT_PATH = "@seed-design/react";
888
- const LOCAL_SNIPPET_BASE_PATH = "@/seed-design/ui";
888
+ const LOCAL_SNIPPET_BASE_PATH = "seed-design/ui";
889
889
  const MONOCHROME_ICON_IMPORT_PATH = "@karrotmarket/react-monochrome-icon";
890
890
  const MULTICOLOR_ICON_IMPORT_PATH = "@karrotmarket/react-multicolor-icon";
891
891
  function createSeedReactElement(tag, props, children, meta) {
@@ -989,6 +989,18 @@ function createFrameTransformer({ propsConverters }) {
989
989
  });
990
990
  }
991
991
 
992
+ const OVERRIDE_ACCEPTABLE_PROPERTIES = new Set([
993
+ "characters",
994
+ "parent",
995
+ "locked",
996
+ "visible",
997
+ "name",
998
+ "x",
999
+ "y",
1000
+ "componentProperties",
1001
+ "componentPropertyDefinitions",
1002
+ "componentPropertyReferences"
1003
+ ]);
992
1004
  function createInstanceTransformer({ iconHandler, propsConverters, componentHandlers, frameTransformer }) {
993
1005
  const transform = defineElementTransformer((node, traverse)=>{
994
1006
  const { componentKey, componentSetKey } = node;
@@ -1006,12 +1018,15 @@ function createInstanceTransformer({ iconHandler, propsConverters, componentHand
1006
1018
  if (componentHandler) {
1007
1019
  const handled = componentHandler.transform(node, traverse);
1008
1020
  if (node.overrides && node.overrides.length > 0) {
1009
- const overriddenFields = node.overrides.flatMap(({ overriddenFields })=>overriddenFields);
1021
+ const overriddenFields = node.overrides.flatMap(({ overriddenFields })=>overriddenFields).filter((field)=>OVERRIDE_ACCEPTABLE_PROPERTIES.has(field) === false);
1022
+ if (overriddenFields.length === 0) {
1023
+ return handled;
1024
+ }
1010
1025
  return {
1011
1026
  ...handled,
1012
1027
  meta: {
1013
1028
  ...handled.meta,
1014
- comment: `${handled.meta.comment ? `${handled.meta.comment} ` : ""}오버라이드된 필드: ${overriddenFields.join(", ")}`
1029
+ comment: `${handled.meta.comment ? `${handled.meta.comment} ` : ""}오버라이드된 필드: ${Array.from(new Set(overriddenFields)).join(", ")}`
1015
1030
  }
1016
1031
  };
1017
1032
  }
@@ -1143,11 +1158,39 @@ const templateCompletion = {
1143
1158
  }
1144
1159
  }
1145
1160
  };
1161
+ const templateCustomPickerField = {
1162
+ "name": "templateCustomPickerField",
1163
+ "key": "91d73dfc297a467d78dc91ade6ff9be9a152619e",
1164
+ "componentPropertyDefinitions": {
1165
+ "Show Header#40606:8": {
1166
+ "type": "BOOLEAN"
1167
+ },
1168
+ "Show Footer#40606:9": {
1169
+ "type": "BOOLEAN"
1170
+ },
1171
+ "State": {
1172
+ "type": "VARIANT",
1173
+ "variantOptions": [
1174
+ "Default",
1175
+ "Error",
1176
+ "Disabled",
1177
+ "Read Only"
1178
+ ]
1179
+ },
1180
+ "Has Value": {
1181
+ "type": "VARIANT",
1182
+ "variantOptions": [
1183
+ "False",
1184
+ "True"
1185
+ ]
1186
+ }
1187
+ }
1188
+ };
1146
1189
  const templateErrorState = {
1147
1190
  "name": "templateErrorState",
1148
1191
  "key": "39b4ecd0b5b4d35f4dc5791765ca04aa062a5172",
1149
1192
  "componentPropertyDefinitions": {
1150
- "Show Buttons#9080:5": {
1193
+ "Show Action Button#9080:5": {
1151
1194
  "type": "BOOLEAN"
1152
1195
  },
1153
1196
  "Title#16237:0": {
@@ -1156,9 +1199,6 @@ const templateErrorState = {
1156
1199
  "Description#16237:5": {
1157
1200
  "type": "TEXT"
1158
1201
  },
1159
- "Secondary Action Label#17042:0": {
1160
- "type": "TEXT"
1161
- },
1162
1202
  "Variant": {
1163
1203
  "type": "VARIANT",
1164
1204
  "variantOptions": [
@@ -1199,6 +1239,83 @@ const templateSelectBoxGroup = {
1199
1239
  }
1200
1240
  }
1201
1241
  };
1242
+ const templateSliderField = {
1243
+ "name": "templateSliderField",
1244
+ "key": "7d2b449bcfb28ebf3c509ed76a141511f7d955eb",
1245
+ "componentPropertyDefinitions": {
1246
+ "Show Header#40606:8": {
1247
+ "type": "BOOLEAN"
1248
+ },
1249
+ "Show Footer#40606:9": {
1250
+ "type": "BOOLEAN"
1251
+ },
1252
+ "State": {
1253
+ "type": "VARIANT",
1254
+ "variantOptions": [
1255
+ "Default",
1256
+ "Error",
1257
+ "Disabled",
1258
+ "Read Only",
1259
+ "Pressed"
1260
+ ]
1261
+ }
1262
+ }
1263
+ };
1264
+ const templateTextField = {
1265
+ "name": "templateTextField",
1266
+ "key": "0a83a0ff9d18d98a14536b21aa5411622f9f0c05",
1267
+ "componentPropertyDefinitions": {
1268
+ "Show Header#40606:8": {
1269
+ "type": "BOOLEAN"
1270
+ },
1271
+ "Show Footer#40606:9": {
1272
+ "type": "BOOLEAN"
1273
+ },
1274
+ "Variant": {
1275
+ "type": "VARIANT",
1276
+ "variantOptions": [
1277
+ "Outline",
1278
+ "Underline"
1279
+ ]
1280
+ },
1281
+ "State": {
1282
+ "type": "VARIANT",
1283
+ "variantOptions": [
1284
+ "Default",
1285
+ "Focused",
1286
+ "Error",
1287
+ "Error Focused",
1288
+ "Disabled",
1289
+ "Read Only",
1290
+ "AI Loading (Figma Only)"
1291
+ ]
1292
+ }
1293
+ }
1294
+ };
1295
+ const templateTextareaField = {
1296
+ "name": "templateTextareaField",
1297
+ "key": "cdc688eccd78b947289e8089a620bdc494f6c809",
1298
+ "componentPropertyDefinitions": {
1299
+ "Show Header#40606:8": {
1300
+ "type": "BOOLEAN"
1301
+ },
1302
+ "Show Footer#40606:9": {
1303
+ "type": "BOOLEAN"
1304
+ },
1305
+ "State": {
1306
+ "type": "VARIANT",
1307
+ "variantOptions": [
1308
+ "Default",
1309
+ "Focused",
1310
+ "Error",
1311
+ "Error Focused",
1312
+ "Disabled",
1313
+ "Read Only",
1314
+ "AI Loading (Figma Only)"
1315
+ ]
1316
+ }
1317
+ }
1318
+ };
1202
1319
  const templateTopNavigation = {
1203
1320
  "name": "templateTopNavigation",
1204
1321
  "key": "74f045c1972dc31d0fddd0a0027537b6779cd0e8",
@@ -1488,6 +1605,9 @@ const bottomSheet = {
1488
1605
  "Show Safe Area#25488:8": {
1489
1606
  "type": "BOOLEAN"
1490
1607
  },
1608
+ "Show Handle#49774:6": {
1609
+ "type": "BOOLEAN"
1610
+ },
1491
1611
  "Header Layout": {
1492
1612
  "type": "VARIANT",
1493
1613
  "variantOptions": [
@@ -1867,8 +1987,8 @@ const listHeader = {
1867
1987
  "type": "VARIANT",
1868
1988
  "variantOptions": [
1869
1989
  "None",
1870
- "Button",
1871
- "Custom"
1990
+ "Custom",
1991
+ "Button"
1872
1992
  ]
1873
1993
  },
1874
1994
  "Variant": {
@@ -2159,74 +2279,6 @@ const menuSheet = {
2159
2279
  }
2160
2280
  }
2161
2281
  };
2162
- const multilineTextField = {
2163
- "name": "multilineTextField",
2164
- "key": "88b2399c930c85f9ce2972163a078bc684b84bbe",
2165
- "componentPropertyDefinitions": {
2166
- "Show Header#870:0": {
2167
- "type": "BOOLEAN"
2168
- },
2169
- "Placeholder#958:0": {
2170
- "type": "TEXT"
2171
- },
2172
- "Show Footer#958:25": {
2173
- "type": "BOOLEAN"
2174
- },
2175
- "Show Description#958:50": {
2176
- "type": "BOOLEAN"
2177
- },
2178
- "Show Character count#958:75": {
2179
- "type": "BOOLEAN"
2180
- },
2181
- "Show Indicator#1259:0": {
2182
- "type": "BOOLEAN"
2183
- },
2184
- "Filled Text#1304:0": {
2185
- "type": "TEXT"
2186
- },
2187
- "Max Character Count#15327:175": {
2188
- "type": "TEXT"
2189
- },
2190
- "Description#15327:212": {
2191
- "type": "TEXT"
2192
- },
2193
- "Indicator#15327:286": {
2194
- "type": "TEXT"
2195
- },
2196
- "Label#15327:323": {
2197
- "type": "TEXT"
2198
- },
2199
- "Character Count#15327:360": {
2200
- "type": "TEXT"
2201
- },
2202
- "Size": {
2203
- "type": "VARIANT",
2204
- "variantOptions": [
2205
- "Medium",
2206
- "Large",
2207
- "XLarge"
2208
- ]
2209
- },
2210
- "State": {
2211
- "type": "VARIANT",
2212
- "variantOptions": [
2213
- "Enabled",
2214
- "Focused",
2215
- "Invalid",
2216
- "Invalid-Focused",
2217
- "Disabled",
2218
- "Read Only"
2219
- ]
2220
- },
2221
- "Filled": {
2222
- "type": "VARIANT",
2223
- "variantOptions": [
2224
- "True",
2225
- "False"
2226
- ]
2227
- }
2228
- }
2229
- };
2230
2282
  const pageBanner = {
2231
2283
  "name": "pageBanner",
2232
2284
  "key": "ce587d0f21754af05240cb32a4880227cb0ea1e1",
@@ -2389,37 +2441,6 @@ const radioMark = {
2389
2441
  }
2390
2442
  }
2391
2443
  };
2392
- const rangeSlider = {
2393
- "name": "rangeSlider",
2394
- "key": "64fc49184979e0be40aa367ca98868601eb7dad5",
2395
- "componentPropertyDefinitions": {
2396
- "Steps": {
2397
- "type": "VARIANT",
2398
- "variantOptions": [
2399
- "0",
2400
- "1",
2401
- "2",
2402
- "3",
2403
- "4"
2404
- ]
2405
- },
2406
- "State": {
2407
- "type": "VARIANT",
2408
- "variantOptions": [
2409
- "Enabled",
2410
- "Disabled"
2411
- ]
2412
- },
2413
- "Marker": {
2414
- "type": "VARIANT",
2415
- "variantOptions": [
2416
- "None",
2417
- "Min Max",
2418
- "All"
2419
- ]
2420
- }
2421
- }
2422
- };
2423
2444
  const reactionButton = {
2424
2445
  "name": "reactionButton",
2425
2446
  "key": "ec43e4e881f7048e95601f8b58c01a0905a174e0",
@@ -2498,6 +2519,28 @@ const resizableChild = {
2498
2519
  }
2499
2520
  }
2500
2521
  };
2522
+ const scrollFog = {
2523
+ "name": "scrollFog",
2524
+ "key": "0a06ea65fe164e0245fde6ac6c97135990a4de3c",
2525
+ "componentPropertyDefinitions": {
2526
+ "Orientation": {
2527
+ "type": "VARIANT",
2528
+ "variantOptions": [
2529
+ "Top ⬇️",
2530
+ "Bottom ⬆️",
2531
+ "Right ➡️",
2532
+ "Left ⬅️"
2533
+ ]
2534
+ },
2535
+ "Layer": {
2536
+ "type": "VARIANT",
2537
+ "variantOptions": [
2538
+ "Default",
2539
+ "Floating"
2540
+ ]
2541
+ }
2542
+ }
2543
+ };
2501
2544
  const segmentedControl = {
2502
2545
  "name": "segmentedControl",
2503
2546
  "key": "3ad7133ba52755867f42f9232375f75639e00d58",
@@ -2572,32 +2615,31 @@ const skeleton = {
2572
2615
  };
2573
2616
  const slider = {
2574
2617
  "name": "slider",
2575
- "key": "aee027230a478315e380704c4523141e67e464ee",
2618
+ "key": "c748f314f790eb804138bd105bfb0bd0584c9aa1",
2576
2619
  "componentPropertyDefinitions": {
2577
- "Steps": {
2620
+ "Has Tick Mark#47921:0": {
2621
+ "type": "BOOLEAN"
2622
+ },
2623
+ "Show Active Track#48156:0": {
2624
+ "type": "BOOLEAN"
2625
+ },
2626
+ "Show Markers#49596:0": {
2627
+ "type": "BOOLEAN"
2628
+ },
2629
+ "Value": {
2578
2630
  "type": "VARIANT",
2579
2631
  "variantOptions": [
2580
- "0",
2581
- "1",
2582
- "2",
2583
- "3",
2584
- "4"
2632
+ "Single",
2633
+ "Range"
2585
2634
  ]
2586
2635
  },
2587
2636
  "State": {
2588
2637
  "type": "VARIANT",
2589
2638
  "variantOptions": [
2590
2639
  "Enabled",
2640
+ "Pressed",
2591
2641
  "Disabled"
2592
2642
  ]
2593
- },
2594
- "Marker": {
2595
- "type": "VARIANT",
2596
- "variantOptions": [
2597
- "None",
2598
- "Min Max",
2599
- "All"
2600
- ]
2601
2643
  }
2602
2644
  }
2603
2645
  };
@@ -2759,105 +2801,6 @@ const tagGroup = {
2759
2801
  }
2760
2802
  }
2761
2803
  };
2762
- const textField = {
2763
- "name": "textField",
2764
- "key": "c49873c37a639f0dffdea4efd0eb43760d66c141",
2765
- "componentPropertyDefinitions": {
2766
- "Show Header#870:0": {
2767
- "type": "BOOLEAN"
2768
- },
2769
- "Placeholder#958:0": {
2770
- "type": "TEXT"
2771
- },
2772
- "Show Footer#958:25": {
2773
- "type": "BOOLEAN"
2774
- },
2775
- "Show Description#958:50": {
2776
- "type": "BOOLEAN"
2777
- },
2778
- "Show Character Count#958:75": {
2779
- "type": "BOOLEAN"
2780
- },
2781
- "Show Suffix#958:100": {
2782
- "type": "BOOLEAN"
2783
- },
2784
- "Show Prefix#958:125": {
2785
- "type": "BOOLEAN"
2786
- },
2787
- "Show Indicator#1259:0": {
2788
- "type": "BOOLEAN"
2789
- },
2790
- "Show Prefix Text#1267:0": {
2791
- "type": "BOOLEAN"
2792
- },
2793
- "Prefix Icon#1267:25": {
2794
- "type": "INSTANCE_SWAP",
2795
- "preferredValues": []
2796
- },
2797
- "Show Prefix Icon#1267:50": {
2798
- "type": "BOOLEAN"
2799
- },
2800
- "Show Suffix Icon#1267:75": {
2801
- "type": "BOOLEAN"
2802
- },
2803
- "Suffix Icon #1267:100": {
2804
- "type": "INSTANCE_SWAP",
2805
- "preferredValues": []
2806
- },
2807
- "Show Suffix Text#1267:125": {
2808
- "type": "BOOLEAN"
2809
- },
2810
- "Filled Text#1304:0": {
2811
- "type": "TEXT"
2812
- },
2813
- "Description#12626:5": {
2814
- "type": "TEXT"
2815
- },
2816
- "Label#14964:0": {
2817
- "type": "TEXT"
2818
- },
2819
- "Max Character Count#15327:27": {
2820
- "type": "TEXT"
2821
- },
2822
- "Character Count#15327:64": {
2823
- "type": "TEXT"
2824
- },
2825
- "Prefix Text#15327:101": {
2826
- "type": "TEXT"
2827
- },
2828
- "Suffix Text#15327:138": {
2829
- "type": "TEXT"
2830
- },
2831
- "Indicator#15327:249": {
2832
- "type": "TEXT"
2833
- },
2834
- "Size": {
2835
- "type": "VARIANT",
2836
- "variantOptions": [
2837
- "Medium",
2838
- "Large(Default)"
2839
- ]
2840
- },
2841
- "State": {
2842
- "type": "VARIANT",
2843
- "variantOptions": [
2844
- "Enabled",
2845
- "Focused",
2846
- "Invalid",
2847
- "Invalid-Focused",
2848
- "Disabled",
2849
- "Read Only"
2850
- ]
2851
- },
2852
- "Filled": {
2853
- "type": "VARIANT",
2854
- "variantOptions": [
2855
- "True",
2856
- "False"
2857
- ]
2858
- }
2859
- }
2860
- };
2861
2804
  const toggleButton = {
2862
2805
  "name": "toggleButton",
2863
2806
  "key": "1d240ee5fd7a56879713e69cbea1b6f006f0ea22",
@@ -2953,11 +2896,84 @@ const topNavigation = {
2953
2896
  }
2954
2897
  }
2955
2898
  };
2899
+ const actionButtonGhostButton = {
2900
+ "name": "actionButtonGhostButton",
2901
+ "key": "ea69291fb4d76217419f3d9613ae16aadafb56a5",
2902
+ "componentPropertyDefinitions": {
2903
+ "Label#30511:2": {
2904
+ "type": "TEXT"
2905
+ },
2906
+ "Prefix Icon#30511:3": {
2907
+ "type": "INSTANCE_SWAP",
2908
+ "preferredValues": []
2909
+ },
2910
+ "Suffix Icon#30525:0": {
2911
+ "type": "INSTANCE_SWAP",
2912
+ "preferredValues": [
2913
+ {
2914
+ "type": "COMPONENT_SET",
2915
+ "key": "c8415f85843e5aea5a1d3620d03d16b643bf86cd"
2916
+ },
2917
+ {
2918
+ "type": "COMPONENT_SET",
2919
+ "key": "0d0a2bc648a2c4e1f06a56a30ef16299b6e91037"
2920
+ },
2921
+ {
2922
+ "type": "COMPONENT_SET",
2923
+ "key": "8f28ae559baf8f388d84ccc3ad65a282966e1b05"
2924
+ },
2925
+ {
2926
+ "type": "COMPONENT_SET",
2927
+ "key": "57341e8a9961bf31590240dd288e57c76969098d"
2928
+ }
2929
+ ]
2930
+ },
2931
+ "Icon#30525:15": {
2932
+ "type": "INSTANCE_SWAP",
2933
+ "preferredValues": []
2934
+ },
2935
+ "Bleed": {
2936
+ "type": "VARIANT",
2937
+ "variantOptions": [
2938
+ "true",
2939
+ "false"
2940
+ ]
2941
+ },
2942
+ "Size": {
2943
+ "type": "VARIANT",
2944
+ "variantOptions": [
2945
+ "Xsmall",
2946
+ "Small",
2947
+ "Medium",
2948
+ "Large"
2949
+ ]
2950
+ },
2951
+ "Layout": {
2952
+ "type": "VARIANT",
2953
+ "variantOptions": [
2954
+ "Text Only",
2955
+ "Icon First",
2956
+ "Icon Last",
2957
+ "Icon Only"
2958
+ ]
2959
+ },
2960
+ "State": {
2961
+ "type": "VARIANT",
2962
+ "variantOptions": [
2963
+ "Enabled",
2964
+ "Pressed",
2965
+ "Loading",
2966
+ "Disabled"
2967
+ ]
2968
+ }
2969
+ }
2970
+ };
2956
2971
 
2957
2972
  var FIGMA_COMPONENTS = {
2958
2973
  __proto__: null,
2959
2974
  _switch: _switch,
2960
2975
  actionButton: actionButton,
2976
+ actionButtonGhostButton: actionButtonGhostButton,
2961
2977
  alertDialog: alertDialog,
2962
2978
  avatar: avatar,
2963
2979
  avatarStack: avatarStack,
@@ -2981,15 +2997,14 @@ var FIGMA_COMPONENTS = {
2981
2997
  mannerTemp: mannerTemp,
2982
2998
  mannerTempBadge: mannerTempBadge,
2983
2999
  menuSheet: menuSheet,
2984
- multilineTextField: multilineTextField,
2985
3000
  pageBanner: pageBanner,
2986
3001
  progressCircle: progressCircle,
2987
3002
  radio: radio,
2988
3003
  radioMark: radioMark,
2989
- rangeSlider: rangeSlider,
2990
3004
  reactionButton: reactionButton,
2991
3005
  resizableChild: resizableChild,
2992
3006
  resizableIcon: resizableIcon,
3007
+ scrollFog: scrollFog,
2993
3008
  segmentedControl: segmentedControl,
2994
3009
  selectBox: selectBox,
2995
3010
  skeleton: skeleton,
@@ -3003,10 +3018,13 @@ var FIGMA_COMPONENTS = {
3003
3018
  templateButtonGroup: templateButtonGroup,
3004
3019
  templateChipGroup: templateChipGroup,
3005
3020
  templateCompletion: templateCompletion,
3021
+ templateCustomPickerField: templateCustomPickerField,
3006
3022
  templateErrorState: templateErrorState,
3007
3023
  templateSelectBoxGroup: templateSelectBoxGroup,
3024
+ templateSliderField: templateSliderField,
3025
+ templateTextField: templateTextField,
3026
+ templateTextareaField: templateTextareaField,
3008
3027
  templateTopNavigation: templateTopNavigation,
3009
- textField: textField,
3010
3028
  toggleButton: toggleButton,
3011
3029
  topNavigation: topNavigation
3012
3030
  };
@@ -3029,7 +3047,7 @@ function handleSizeProp(size) {
3029
3047
  }
3030
3048
  }
3031
3049
 
3032
- const { createLocalSnippetElement: createLocalSnippetElement$w } = createLocalSnippetHelper("action-button");
3050
+ const { createLocalSnippetElement: createLocalSnippetElement$x } = createLocalSnippetHelper("action-button");
3033
3051
  const createActionButtonHandler = (ctx)=>defineComponentHandler(actionButton.key, ({ componentProperties: props })=>{
3034
3052
  const states = props.State.value.split("-");
3035
3053
  const { layout, children } = tsPattern.match(props.Layout.value).with("Icon Only", ()=>({
@@ -3070,11 +3088,16 @@ const createActionButtonHandler = (ctx)=>defineComponentHandler(actionButton.key
3070
3088
  variant: changeCase.camelCase(props.Variant.value),
3071
3089
  layout
3072
3090
  };
3073
- return createLocalSnippetElement$w("ActionButton", commonProps, children);
3091
+ return createLocalSnippetElement$x("ActionButton", commonProps, children);
3074
3092
  });
3075
3093
  const ACTION_BUTTON_GHOST_BUTTON_KEY = "ea69291fb4d76217419f3d9613ae16aadafb56a5";
3076
- const createActionButtonGhostHandler = (ctx)=>defineComponentHandler(ACTION_BUTTON_GHOST_BUTTON_KEY, ({ componentProperties: props })=>{
3094
+ const createActionButtonGhostHandler = (ctx)=>defineComponentHandler(ACTION_BUTTON_GHOST_BUTTON_KEY, (node)=>{
3095
+ const props = node.componentProperties;
3077
3096
  const states = props.State.value.split("-");
3097
+ const buttonWrapperNode = findOne(node, (n)=>n.type === "FRAME" && n.layoutPositioning !== "ABSOLUTE");
3098
+ const labelNode = buttonWrapperNode ? findOne(buttonWrapperNode, (n)=>n.type === "TEXT") : undefined;
3099
+ const color = labelNode ? ctx.valueResolver.getFormattedValue.textFill(labelNode) : null;
3100
+ const fontWeight = labelNode ? ctx.valueResolver.getFormattedValue.fontWeight(labelNode) : null;
3078
3101
  const { layout, children } = tsPattern.match(props.Layout.value).with("Icon Only", ()=>({
3079
3102
  layout: "iconOnly",
3080
3103
  children: [
@@ -3112,31 +3135,37 @@ const createActionButtonGhostHandler = (ctx)=>defineComponentHandler(ACTION_BUTT
3112
3135
  size: handleSizeProp(props.Size.value),
3113
3136
  variant: "ghost",
3114
3137
  layout,
3138
+ ...color && {
3139
+ color
3140
+ },
3141
+ ...fontWeight && {
3142
+ fontWeight
3143
+ },
3115
3144
  ...props.Bleed.value === "true" && {
3116
3145
  bleedX: "asPadding",
3117
3146
  bleedY: "asPadding"
3118
3147
  }
3119
3148
  };
3120
- return createLocalSnippetElement$w("ActionButton", commonProps, children);
3149
+ return createLocalSnippetElement$x("ActionButton", commonProps, children);
3121
3150
  });
3122
3151
 
3123
- const { createLocalSnippetElement: createLocalSnippetElement$v } = createLocalSnippetHelper("alert-dialog");
3152
+ const { createLocalSnippetElement: createLocalSnippetElement$w } = createLocalSnippetHelper("alert-dialog");
3124
3153
  const { createLocalSnippetElement: createLocalSnippetElementTrigger$3 } = createLocalSnippetHelper("action-button");
3125
3154
  const ALERT_DIALOG_FOOTER_KEY = "00b1b131d67edf2875a7a1df8dfa88098d7c04be";
3126
3155
  const createAlertDialogHandler = (_ctx)=>defineComponentHandler(alertDialog.key, (node, traverse)=>{
3127
3156
  const props = node.componentProperties;
3128
- const alertDialogHeader = createLocalSnippetElement$v("AlertDialogHeader", undefined, [
3157
+ const alertDialogHeader = createLocalSnippetElement$w("AlertDialogHeader", undefined, [
3129
3158
  ...props["Show Title#20361:14"].value ? [
3130
- createLocalSnippetElement$v("AlertDialogTitle", undefined, props["Title Text#20361:0"].value)
3159
+ createLocalSnippetElement$w("AlertDialogTitle", undefined, props["Title Text#20361:0"].value)
3131
3160
  ] : [],
3132
- createLocalSnippetElement$v("AlertDialogDescription", undefined, props["Description Text#20361:7"].value)
3161
+ createLocalSnippetElement$w("AlertDialogDescription", undefined, props["Description Text#20361:7"].value)
3133
3162
  ]);
3134
3163
  const footerNodes = findAllInstances({
3135
3164
  node,
3136
3165
  key: ALERT_DIALOG_FOOTER_KEY
3137
3166
  });
3138
3167
  if (footerNodes.length === 0 || footerNodes.length > 1) {
3139
- return createLocalSnippetElement$v("AlertDialog", undefined, alertDialogHeader, {
3168
+ return createLocalSnippetElement$w("AlertDialog", undefined, alertDialogHeader, {
3140
3169
  comment: "Footer 영역을 확인해주세요."
3141
3170
  });
3142
3171
  }
@@ -3144,21 +3173,21 @@ const createAlertDialogHandler = (_ctx)=>defineComponentHandler(alertDialog.key,
3144
3173
  const footerNodeProps = traverse(footerNode)?.props;
3145
3174
  const buttons = footerNode.children.map(traverse);
3146
3175
  const alertDialogFooterChildren = tsPattern.match(footerNode.componentProperties.Type.value).with("Single", ()=>buttons).with("Neutral", "Critical", ()=>createSeedReactElement("ResponsivePair", footerNodeProps, buttons)).with("Neutral (Overflow)", "Critical (Overflow)", "Nonpreferred", ()=>createSeedReactElement("VStack", footerNodeProps, buttons)).exhaustive();
3147
- const alertDialogFooter = createLocalSnippetElement$v("AlertDialogFooter", undefined, alertDialogFooterChildren);
3148
- return createLocalSnippetElement$v("AlertDialogRoot", {
3176
+ const alertDialogFooter = createLocalSnippetElement$w("AlertDialogFooter", undefined, alertDialogFooterChildren);
3177
+ return createLocalSnippetElement$w("AlertDialogRoot", {
3149
3178
  open: true
3150
3179
  }, [
3151
- createLocalSnippetElement$v("AlertDialogTrigger", {
3180
+ createLocalSnippetElement$w("AlertDialogTrigger", {
3152
3181
  asChild: true
3153
3182
  }, createLocalSnippetElementTrigger$3("ActionButton", {}, "AlertDialog 열기")),
3154
- createLocalSnippetElement$v("AlertDialogContent", undefined, [
3183
+ createLocalSnippetElement$w("AlertDialogContent", undefined, [
3155
3184
  alertDialogHeader,
3156
3185
  alertDialogFooter
3157
3186
  ])
3158
3187
  ]);
3159
3188
  });
3160
3189
 
3161
- const { createLocalSnippetElement: createLocalSnippetElement$u } = createLocalSnippetHelper("app-bar");
3190
+ const { createLocalSnippetElement: createLocalSnippetElement$v } = createLocalSnippetHelper("app-bar");
3162
3191
  const APP_BAR_TITLE_KEY = "d2cc4f615b2b44098be89448ad1c573f94af0355";
3163
3192
  const APP_BAR_LEFT_ICON_BUTTON_KEY = "5a953f7bafc0df744777517458396e9f6c915825";
3164
3193
  const APP_BAR_RIGHT_ICON_BUTTON_KEY = "c08db793288077e53bd45ef11aa419a835e88fce";
@@ -3175,12 +3204,12 @@ const createAppBarMainHandler = (_ctx)=>{
3175
3204
  subtitle: undefined
3176
3205
  })).exhaustive();
3177
3206
  if (title) {
3178
- return createLocalSnippetElement$u("AppBarMain", {
3207
+ return createLocalSnippetElement$v("AppBarMain", {
3179
3208
  title,
3180
3209
  subtitle
3181
3210
  });
3182
3211
  }
3183
- return createLocalSnippetElement$u("AppBarMain", undefined, undefined, {
3212
+ return createLocalSnippetElement$v("AppBarMain", undefined, undefined, {
3184
3213
  comment: "AppBarMain 내부를 직접 작성해주세요."
3185
3214
  });
3186
3215
  });
@@ -3207,33 +3236,33 @@ const createAppBarHandler = (ctx)=>{
3207
3236
  return appBarMainHandler.transform(mainNode, traverse);
3208
3237
  })();
3209
3238
  const leftChildren = tsPattern.match(props.Left.value).with("None", ()=>undefined).with("Back", ()=>[
3210
- createLocalSnippetElement$u("AppBarBackButton")
3239
+ createLocalSnippetElement$v("AppBarBackButton")
3211
3240
  ]).with("Close", ()=>[
3212
- createLocalSnippetElement$u("AppBarCloseButton")
3241
+ createLocalSnippetElement$v("AppBarCloseButton")
3213
3242
  ]).with("Custom", ()=>{
3214
3243
  const buttons = findAllInstances({
3215
3244
  node,
3216
3245
  key: APP_BAR_LEFT_ICON_BUTTON_KEY
3217
3246
  });
3218
3247
  if (buttons.length > 0) {
3219
- return buttons.map((button)=>createLocalSnippetElement$u("AppBarIconButton", undefined, ctx.iconHandler.transform(button.componentProperties["Icon#33580:0"]), {
3248
+ return buttons.map((button)=>createLocalSnippetElement$v("AppBarIconButton", undefined, ctx.iconHandler.transform(button.componentProperties["Icon#33580:0"]), {
3220
3249
  comment: "AppBarIconButton에 aria-label 속성을 추가해주세요."
3221
3250
  }));
3222
3251
  }
3223
3252
  return undefined;
3224
3253
  }).exhaustive();
3225
- const left = leftChildren && leftChildren.length > 0 ? createLocalSnippetElement$u("AppBarLeft", {}, leftChildren) : undefined;
3254
+ const left = leftChildren && leftChildren.length > 0 ? createLocalSnippetElement$v("AppBarLeft", {}, leftChildren) : undefined;
3226
3255
  const rightChildren = tsPattern.match(props.Right.value).with("None", ()=>undefined).with("1 Icon Button", "2 Icon Button", "3 Icon Button", ()=>{
3227
3256
  const buttons = findAllInstances({
3228
3257
  node,
3229
3258
  key: APP_BAR_RIGHT_ICON_BUTTON_KEY
3230
3259
  });
3231
- return buttons.map((button)=>createLocalSnippetElement$u("AppBarIconButton", undefined, ctx.iconHandler.transform(button.componentProperties["Icon#6406:3"]), {
3260
+ return buttons.map((button)=>createLocalSnippetElement$v("AppBarIconButton", undefined, ctx.iconHandler.transform(button.componentProperties["Icon#6406:3"]), {
3232
3261
  comment: "AppBarIconButton에 aria-label 속성을 추가해주세요."
3233
3262
  }));
3234
3263
  }).with("Text Button", ()=>undefined).exhaustive();
3235
- const right = rightChildren && rightChildren.length > 0 ? createLocalSnippetElement$u("AppBarRight", {}, rightChildren) : undefined;
3236
- return createLocalSnippetElement$u("AppBar", {
3264
+ const right = rightChildren && rightChildren.length > 0 ? createLocalSnippetElement$v("AppBarRight", {}, rightChildren) : undefined;
3265
+ return createLocalSnippetElement$v("AppBar", {
3237
3266
  theme,
3238
3267
  tone
3239
3268
  }, [
@@ -3247,15 +3276,15 @@ const createAppBarHandler = (ctx)=>{
3247
3276
  };
3248
3277
 
3249
3278
  const IDENTITY_PLACEHOLDER_KEY = "b3563b6f16ba4cfe4240c9b33eef7edad4c304eb";
3250
- const { createLocalSnippetElement: createLocalSnippetElement$t } = createLocalSnippetHelper("identity-placeholder");
3279
+ const { createLocalSnippetElement: createLocalSnippetElement$u } = createLocalSnippetHelper("identity-placeholder");
3251
3280
  const createIdentityPlaceholderHandler = (_ctx)=>defineComponentHandler(IDENTITY_PLACEHOLDER_KEY, ({ componentProperties: props })=>{
3252
3281
  const commonProps = {
3253
3282
  identity: changeCase.camelCase(props.Identity.value)
3254
3283
  };
3255
- return createLocalSnippetElement$t("IdentityPlaceholder", commonProps);
3284
+ return createLocalSnippetElement$u("IdentityPlaceholder", commonProps);
3256
3285
  });
3257
3286
 
3258
- const { createLocalSnippetElement: createLocalSnippetElement$s } = createLocalSnippetHelper("avatar");
3287
+ const { createLocalSnippetElement: createLocalSnippetElement$t } = createLocalSnippetHelper("avatar");
3259
3288
  const createAvatarHandler = (ctx)=>{
3260
3289
  const identityPlaceholderHandler = createIdentityPlaceholderHandler();
3261
3290
  return defineComponentHandler(avatar.key, (node, traverse)=>{
@@ -3278,7 +3307,7 @@ const createAvatarHandler = (ctx)=>{
3278
3307
  },
3279
3308
  size: props.Size.value
3280
3309
  };
3281
- return createLocalSnippetElement$s("Avatar", commonProps, props["Badge"].value === "None" ? undefined : createLocalSnippetElement$s("AvatarBadge", {
3310
+ return createLocalSnippetElement$t("Avatar", commonProps, props["Badge"].value === "None" ? undefined : createLocalSnippetElement$t("AvatarBadge", {
3282
3311
  asChild: true
3283
3312
  }, createElement("img", {
3284
3313
  src: "https://placehold.co/20x20"
@@ -3290,7 +3319,7 @@ const createAvatarHandler = (ctx)=>{
3290
3319
  });
3291
3320
  };
3292
3321
 
3293
- const { createLocalSnippetElement: createLocalSnippetElement$r } = createLocalSnippetHelper("avatar");
3322
+ const { createLocalSnippetElement: createLocalSnippetElement$s } = createLocalSnippetHelper("avatar");
3294
3323
  const createAvatarStackHandler = (ctx)=>{
3295
3324
  const avatarHandler = createAvatarHandler();
3296
3325
  return defineComponentHandler(avatarStack.key, (node, traverse)=>{
@@ -3303,7 +3332,7 @@ const createAvatarStackHandler = (ctx)=>{
3303
3332
  size: props.Size.value
3304
3333
  };
3305
3334
  const avatarStackChildren = avatarNodes.map((avatarNode)=>avatarHandler.transform(avatarNode, traverse));
3306
- return createLocalSnippetElement$r("AvatarStack", commonProps, avatarStackChildren);
3335
+ return createLocalSnippetElement$s("AvatarStack", commonProps, avatarStackChildren);
3307
3336
  });
3308
3337
  };
3309
3338
 
@@ -3316,7 +3345,7 @@ const createBadgeHandler = (_ctx)=>defineComponentHandler(badge.key, ({ componen
3316
3345
  return createSeedReactElement("Badge", commonProps, props["Label#1584:0"].value);
3317
3346
  });
3318
3347
 
3319
- const { createLocalSnippetElement: createLocalSnippetElement$q } = createLocalSnippetHelper("bottom-sheet");
3348
+ const { createLocalSnippetElement: createLocalSnippetElement$r } = createLocalSnippetHelper("bottom-sheet");
3320
3349
  const { createLocalSnippetElement: createLocalSnippetElementTrigger$2 } = createLocalSnippetHelper("action-button");
3321
3350
  // TODO: Bottom Action Bar (WIP) handler의 키. 해당 컴포넌트(템플릿) 핸들러 작성 시 handler.transform()으로 대체
3322
3351
  const BOTTOM_SHEET_FOOTER_KEY = "de6c65d34cc4a01c18c9a7c0ded34635170ca11f";
@@ -3329,40 +3358,39 @@ const createBottomSheetHandler = (_ctx)=>defineComponentHandler(bottomSheet.key,
3329
3358
  ...props["Show Description#25192:0"].value === true && {
3330
3359
  description: props["Description#19787:7"].value
3331
3360
  },
3332
- ...props["Show Close Button#19787:11"].value === false && {
3333
- hideCloseButton: true
3334
- }
3361
+ showHandle: props["Show Handle#49774:6"].value,
3362
+ showCloseButton: props["Show Close Button#19787:11"].value
3335
3363
  };
3336
3364
  const bodyNodes = findAllInstances({
3337
3365
  node,
3338
3366
  key: BOTTOM_SHEET_BODY_KEY
3339
3367
  });
3340
- const bottomSheetBody = bodyNodes.length === 1 ? createLocalSnippetElement$q("BottomSheetBody", {}, bodyNodes[0].children.map(traverse)) : createLocalSnippetElement$q("BottomSheetBody", {}, createElement("div", undefined, "No content available"));
3368
+ const bottomSheetBody = bodyNodes.length === 1 ? createLocalSnippetElement$r("BottomSheetBody", {}, bodyNodes[0].children.map(traverse)) : createLocalSnippetElement$r("BottomSheetBody", {}, createElement("div", undefined, "No content available"));
3341
3369
  const footerNodes = findAllInstances({
3342
3370
  node,
3343
3371
  key: BOTTOM_SHEET_FOOTER_KEY
3344
3372
  });
3345
- const bottomSheetFooter = props["Show Footer#25162:14"] && footerNodes.length === 1 ? createLocalSnippetElement$q("BottomSheetFooter", {}, footerNodes[0].children.map(traverse)) : undefined;
3346
- return createLocalSnippetElement$q("BottomSheetRoot", {
3373
+ const bottomSheetFooter = props["Show Footer#25162:14"] && footerNodes.length === 1 ? createLocalSnippetElement$r("BottomSheetFooter", {}, footerNodes[0].children.map(traverse)) : undefined;
3374
+ return createLocalSnippetElement$r("BottomSheetRoot", {
3347
3375
  defaultOpen: true,
3348
3376
  headerAlign
3349
3377
  }, [
3350
- createLocalSnippetElement$q("BottomSheetTrigger", {
3378
+ createLocalSnippetElement$r("BottomSheetTrigger", {
3351
3379
  asChild: true
3352
3380
  }, createLocalSnippetElementTrigger$2("ActionButton", {}, "BottomSheet 열기")),
3353
- createLocalSnippetElement$q("BottomSheetContent", contentProps, [
3381
+ createLocalSnippetElement$r("BottomSheetContent", contentProps, [
3354
3382
  bottomSheetBody,
3355
3383
  bottomSheetFooter
3356
3384
  ])
3357
3385
  ]);
3358
3386
  });
3359
3387
 
3360
- const { createLocalSnippetElement: createLocalSnippetElement$p } = createLocalSnippetHelper("callout");
3388
+ const { createLocalSnippetElement: createLocalSnippetElement$q } = createLocalSnippetHelper("callout");
3361
3389
  const createCalloutHandler = (ctx)=>defineComponentHandler(callout.key, ({ componentProperties: props, children })=>{
3362
3390
  const tag = tsPattern.match(props.Interaction.value).with("Display", ()=>"Callout").with("Actionable", ()=>"ActionableCallout").with("Dismissible", ()=>"DismissibleCallout").exhaustive();
3363
3391
  const textNode = children.find((child)=>child.type === "TEXT");
3364
3392
  if (!textNode) {
3365
- return createLocalSnippetElement$p(tag, undefined, undefined, {
3393
+ return createLocalSnippetElement$q(tag, undefined, undefined, {
3366
3394
  comment: "내용을 제공해주세요."
3367
3395
  });
3368
3396
  }
@@ -3414,10 +3442,10 @@ const createCalloutHandler = (ctx)=>defineComponentHandler(callout.key, ({ compo
3414
3442
  prefixIcon: ctx.iconHandler.transform(props["Prefix Icon#35087:0"])
3415
3443
  }
3416
3444
  };
3417
- return createLocalSnippetElement$p(tag, commonProps);
3445
+ return createLocalSnippetElement$q(tag, commonProps);
3418
3446
  });
3419
3447
 
3420
- const { createLocalSnippetElement: createLocalSnippetElement$o } = createLocalSnippetHelper("checkbox");
3448
+ const { createLocalSnippetElement: createLocalSnippetElement$p } = createLocalSnippetHelper("checkbox");
3421
3449
  const createCheckboxHandler = (_ctx)=>defineComponentHandler(checkbox.key, ({ componentProperties: props })=>{
3422
3450
  const tone = tsPattern.match(props.Tone.value).with("Neutral", ()=>"neutral").with("🚫[Deprecated]Brand", ()=>"brand").exhaustive();
3423
3451
  const commonProps = {
@@ -3437,10 +3465,10 @@ const createCheckboxHandler = (_ctx)=>defineComponentHandler(checkbox.key, ({ co
3437
3465
  disabled: true
3438
3466
  }
3439
3467
  };
3440
- return createLocalSnippetElement$o("Checkbox", commonProps);
3468
+ return createLocalSnippetElement$p("Checkbox", commonProps);
3441
3469
  });
3442
3470
 
3443
- const { createLocalSnippetElement: createLocalSnippetElement$n } = createLocalSnippetHelper("checkbox");
3471
+ const { createLocalSnippetElement: createLocalSnippetElement$o } = createLocalSnippetHelper("checkbox");
3444
3472
  const createCheckmarkHandler = (_ctx)=>defineComponentHandler(checkmark.key, ({ componentProperties: props })=>{
3445
3473
  const tone = tsPattern.match(props.Tone.value).with("Neutral", ()=>"neutral").with("🚫[Deprecated]Brand", ()=>"brand").exhaustive();
3446
3474
  const commonProps = {
@@ -3448,14 +3476,14 @@ const createCheckmarkHandler = (_ctx)=>defineComponentHandler(checkmark.key, ({
3448
3476
  variant: changeCase.camelCase(props.Shape.value),
3449
3477
  size: handleSizeProp(props.Size.value)
3450
3478
  };
3451
- return createLocalSnippetElement$n("Checkmark", commonProps);
3479
+ return createLocalSnippetElement$o("Checkmark", commonProps);
3452
3480
  });
3453
3481
 
3454
- const { createLocalSnippetElement: createLocalSnippetElement$m } = createLocalSnippetHelper("chip");
3482
+ const { createLocalSnippetElement: createLocalSnippetElement$n } = createLocalSnippetHelper("chip");
3455
3483
  const CHIP_ICON_SUFFIX_KEY = "27343e0e5ab2c66948e9b10fde03d58b5e037212";
3456
3484
  const createChipIconSuffixHandler = (ctx)=>{
3457
3485
  return defineComponentHandler(CHIP_ICON_SUFFIX_KEY, ({ componentProperties })=>{
3458
- return createLocalSnippetElement$m("Chip.SuffixIcon", undefined, createSeedReactElement("Icon", {
3486
+ return createLocalSnippetElement$n("Chip.SuffixIcon", undefined, createSeedReactElement("Icon", {
3459
3487
  svg: ctx.iconHandler.transform(componentProperties["Icon#33203:0"])
3460
3488
  }));
3461
3489
  });
@@ -3465,7 +3493,7 @@ const createChipHandler = (ctx)=>{
3465
3493
  const iconSuffixHandler = createChipIconSuffixHandler(ctx);
3466
3494
  return defineComponentHandler(chip.key, (node, traverse)=>{
3467
3495
  const props = node.componentProperties;
3468
- const prefix = tsPattern.match(props["Prefix Type"].value).with("None", "Image", ()=>undefined).with("Icon", ()=>createLocalSnippetElement$m("Chip.PrefixIcon", undefined, createSeedReactElement("Icon", {
3496
+ const prefix = tsPattern.match(props["Prefix Type"].value).with("None", "Image", ()=>undefined).with("Icon", ()=>createLocalSnippetElement$n("Chip.PrefixIcon", undefined, createSeedReactElement("Icon", {
3469
3497
  svg: ctx.iconHandler.transform(props["Prefix Icon#8722:0"])
3470
3498
  }))).with("Avatar", ()=>{
3471
3499
  const [avatar$1] = findAllInstances({
@@ -3473,9 +3501,9 @@ const createChipHandler = (ctx)=>{
3473
3501
  key: avatar.key
3474
3502
  });
3475
3503
  if (!avatar$1) return undefined;
3476
- return createLocalSnippetElement$m("Chip.PrefixAvatar", undefined, avatarHandler.transform(avatar$1, traverse));
3504
+ return createLocalSnippetElement$n("Chip.PrefixAvatar", undefined, avatarHandler.transform(avatar$1, traverse));
3477
3505
  }).exhaustive();
3478
- const label = createLocalSnippetElement$m("Chip.Label", undefined, props["Label#7185:0"].value);
3506
+ const label = createLocalSnippetElement$n("Chip.Label", undefined, props["Label#7185:0"].value);
3479
3507
  const [suffixIcon] = findAllInstances({
3480
3508
  node,
3481
3509
  key: CHIP_ICON_SUFFIX_KEY
@@ -3491,7 +3519,7 @@ const createChipHandler = (ctx)=>{
3491
3519
  disabled: true
3492
3520
  }
3493
3521
  };
3494
- return createLocalSnippetElement$m("Chip.Toggle", commonProps, [
3522
+ return createLocalSnippetElement$n("Chip.Toggle", commonProps, [
3495
3523
  prefix,
3496
3524
  label,
3497
3525
  suffixIcon ? iconSuffixHandler.transform(suffixIcon, traverse) : undefined
@@ -3501,7 +3529,7 @@ const createChipHandler = (ctx)=>{
3501
3529
  });
3502
3530
  };
3503
3531
 
3504
- const { createLocalSnippetElement: createLocalSnippetElement$l } = createLocalSnippetHelper("contextual-floating-button");
3532
+ const { createLocalSnippetElement: createLocalSnippetElement$m } = createLocalSnippetHelper("contextual-floating-button");
3505
3533
  const createContextualFloatingButtonHandler = (ctx)=>defineComponentHandler(contextualFloatingButton.key, ({ componentProperties: props })=>{
3506
3534
  const states = props.State.value.split("-");
3507
3535
  const { layout, children } = tsPattern.match(props.Layout.value).with("Icon Only", ()=>({
@@ -3530,7 +3558,7 @@ const createContextualFloatingButtonHandler = (ctx)=>defineComponentHandler(cont
3530
3558
  variant: tsPattern.match(props.Variant.value).with("Solid", ()=>"solid").with("Layer", ()=>"layer").exhaustive(),
3531
3559
  layout
3532
3560
  };
3533
- return createLocalSnippetElement$l("ContextualFloatingButton", commonProps, children);
3561
+ return createLocalSnippetElement$m("ContextualFloatingButton", commonProps, children);
3534
3562
  });
3535
3563
 
3536
3564
  const createDividerHandler = (_ctx)=>defineComponentHandler(divider.key, ({ componentProperties: props })=>{
@@ -3546,31 +3574,257 @@ const createDividerHandler = (_ctx)=>defineComponentHandler(divider.key, ({ comp
3546
3574
  return createSeedReactElement("Divider", commonProps, undefined);
3547
3575
  });
3548
3576
 
3549
- const { createLocalSnippetElement: createLocalSnippetElement$k } = createLocalSnippetHelper("error-state");
3577
+ const { createLocalSnippetElement: createLocalSnippetElement$l } = createLocalSnippetHelper("error-state");
3550
3578
  const createErrorStateHandler = (ctx)=>{
3551
3579
  const actionButtonHandler = createActionButtonHandler(ctx);
3580
+ const ghostButtonHandler = createActionButtonGhostHandler(ctx);
3552
3581
  return defineComponentHandler(templateErrorState.key, (node, traverse)=>{
3553
3582
  const props = node.componentProperties;
3554
- const [actionButtonNode] = findAllInstances({
3583
+ const [actionButton] = findAllInstances({
3555
3584
  node,
3556
3585
  key: actionButtonHandler.key
3557
3586
  });
3587
+ const [ghostButton] = findAllInstances({
3588
+ node,
3589
+ key: ghostButtonHandler.key
3590
+ });
3558
3591
  const commonProps = {
3559
3592
  variant: changeCase.camelCase(props.Variant.value),
3560
3593
  ...props.Layout.value === "With Title" && {
3561
3594
  title: props["Title#16237:0"].value
3562
3595
  },
3563
3596
  description: props["Description#16237:5"].value,
3564
- ...actionButtonNode && {
3597
+ ...actionButton && {
3565
3598
  primaryActionProps: {
3566
- children: actionButtonHandler.transform(actionButtonNode, traverse).children[0]
3567
- },
3599
+ children: actionButtonHandler.transform(actionButton, traverse).children[0]
3600
+ }
3601
+ },
3602
+ ...ghostButton && {
3568
3603
  secondaryActionProps: {
3569
- children: props["Secondary Action Label#17042:0"].value
3604
+ children: ghostButtonHandler.transform(ghostButton, traverse).children[0]
3570
3605
  }
3571
3606
  }
3572
3607
  };
3573
- return createLocalSnippetElement$k("ErrorState", commonProps);
3608
+ return createLocalSnippetElement$l("ErrorState", commonProps);
3609
+ });
3610
+ };
3611
+
3612
+ const templateAddressPickerField = {
3613
+ "key": "a6cb0e888094d95ca0e9862f4775b34407b3611d"
3614
+ };
3615
+ const templateDatePickerField = {
3616
+ "key": "9fac6c04140c81cdb2e446979952381f1afc0e1a"
3617
+ };
3618
+ const templateSelectField = {
3619
+ "key": "a43d16a5c3cbb5fe22ca230d6a28338da21c7562"
3620
+ };
3621
+ const templateTimePickerField = {
3622
+ "key": "0ee0729eb92d55acfa557e8fe3f0a21a0e43f117"
3623
+ };
3624
+
3625
+ const FIELD_HEADER_KEY = "84fe2e479c3291177662e41c71af29716e48789b";
3626
+ const FIELD_INDICATOR_KEY = "a0a170973212ea0cd952b45a8acb11a92561f402";
3627
+ const FIELD_FOOTER_KEY = "ab528f3b51a6dc529bb144de1495b07deef77ffa";
3628
+ const FIELD_CHARACTER_COUNT_KEY = "25dd9a96f4bf3b866b8713f6d8deec370eebfa72";
3629
+ const FIELD_KEYS = {
3630
+ HEADER: FIELD_HEADER_KEY,
3631
+ FOOTER: FIELD_FOOTER_KEY
3632
+ };
3633
+ /**
3634
+ * NOTE: only gives useful 'props' for field-related components but doesn't give fully functional code.
3635
+ */ const createFieldHeaderHandler = (ctx)=>{
3636
+ const indicatorHandler = createFieldIndicatorHandler();
3637
+ return defineComponentHandler(FIELD_HEADER_KEY, (node, traverse)=>{
3638
+ const { componentProperties: props } = node;
3639
+ const [indicator] = findAllInstances({
3640
+ node,
3641
+ key: FIELD_INDICATOR_KEY
3642
+ });
3643
+ // only returns some nice common props for Slider, TextField and more
3644
+ return createSeedReactElement("__FieldHeader__", {
3645
+ label: props["Label#34796:0"].value,
3646
+ labelWeight: changeCase.camelCase(props.Weight.value),
3647
+ ...indicator && indicatorHandler.transform(indicator, traverse).props
3648
+ });
3649
+ });
3650
+ };
3651
+ /**
3652
+ * NOTE: only gives useful 'props' for field-related components but doesn't give fully functional code.
3653
+ */ const createFieldIndicatorHandler = (_ctx)=>{
3654
+ return defineComponentHandler(FIELD_INDICATOR_KEY, ({ componentProperties: props })=>{
3655
+ const { required, showRequiredIndicator, indicator } = tsPattern.match(props.Type.value).with("Required Mark", ()=>({
3656
+ required: true,
3657
+ showRequiredIndicator: true,
3658
+ indicator: undefined
3659
+ })).with("Text", ()=>({
3660
+ required: undefined,
3661
+ showRequiredIndicator: undefined,
3662
+ indicator: props["Required Label#40606:3"].value
3663
+ })).exhaustive();
3664
+ // only returns some nice common props for Slider, TextField and more
3665
+ return createSeedReactElement("__FieldIndicator__", {
3666
+ required,
3667
+ showRequiredIndicator,
3668
+ indicator
3669
+ });
3670
+ });
3671
+ };
3672
+ /**
3673
+ * NOTE: only gives useful 'props' for field-related components but doesn't give fully functional code.
3674
+ */ const createFieldFooterHandler = (ctx)=>{
3675
+ const characterCountHandler = createFieldCharacterCountHandler();
3676
+ return defineComponentHandler(FIELD_FOOTER_KEY, (node, traverse)=>{
3677
+ const { componentProperties: props } = node;
3678
+ const { description, maxGraphemeCount } = tsPattern.match(props.Type.value).with("Description", ()=>({
3679
+ description: props["Text#2770:0"].value,
3680
+ maxGraphemeCount: undefined
3681
+ })).with("Description With Character Count", ()=>({
3682
+ description: props["Text#2770:0"].value,
3683
+ maxGraphemeCount: undefined
3684
+ })).with("Character Count", ()=>{
3685
+ const [characterCount] = findAllInstances({
3686
+ node,
3687
+ key: FIELD_CHARACTER_COUNT_KEY
3688
+ });
3689
+ return {
3690
+ description: undefined,
3691
+ ...characterCount && characterCountHandler.transform(characterCount, traverse).props
3692
+ };
3693
+ }).exhaustive();
3694
+ const { errorMessage, invalid } = tsPattern.match(props.Error.value === "true").with(true, ()=>({
3695
+ invalid: true,
3696
+ errorMessage: props["Error Text#32821:0"].value
3697
+ })).with(false, ()=>({
3698
+ invalid: undefined,
3699
+ errorMessage: undefined
3700
+ })).exhaustive();
3701
+ // only returns some nice common props for Slider, TextField and more
3702
+ return createSeedReactElement("__FieldFooter__", {
3703
+ description,
3704
+ maxGraphemeCount,
3705
+ invalid,
3706
+ errorMessage
3707
+ });
3708
+ });
3709
+ };
3710
+ /**
3711
+ * NOTE: only gives useful 'props' for field-related components but doesn't give fully functional code.
3712
+ */ const createFieldCharacterCountHandler = (_ctx)=>{
3713
+ return defineComponentHandler(FIELD_CHARACTER_COUNT_KEY, ({ componentProperties: props })=>{
3714
+ // only returns some nice common props for Slider, TextField and more
3715
+ return createSeedReactElement("__FieldCharacterCount__", {
3716
+ maxGraphemeCount: Number(props["Max Count#40960:4"].value)
3717
+ });
3718
+ });
3719
+ };
3720
+
3721
+ const { createLocalSnippetElement: createLocalSnippetElement$k } = createLocalSnippetHelper("field-button");
3722
+ const INPUT_BUTTON_KEY = "965bdecb58755af9a08d60cc3c8d2d33b42e15f0";
3723
+ const INPUT_BUTTON_PREFIX_KEY = "12b40c736a098298c64ba16de85702b4b460d1f1";
3724
+ const INPUT_BUTTON_SUFFIX_KEY = "5dda27af9f4afafa471925c17acf97d81912877a";
3725
+ const createFieldButtonHandler = (ctx)=>{
3726
+ const fieldHeaderHandler = createFieldHeaderHandler();
3727
+ const fieldFooterHandler = createFieldFooterHandler();
3728
+ return defineComponentHandler(templateCustomPickerField.key, (node, traverse)=>{
3729
+ const props = node.componentProperties;
3730
+ const [inputButton] = findAllInstances({
3731
+ node,
3732
+ key: INPUT_BUTTON_KEY
3733
+ });
3734
+ const [clearButton] = findAllInstances({
3735
+ node,
3736
+ key: actionButtonGhostButton.key
3737
+ });
3738
+ const [fieldHeader] = findAllInstances({
3739
+ node,
3740
+ key: FIELD_KEYS.HEADER
3741
+ });
3742
+ const [fieldFooter] = findAllInstances({
3743
+ node,
3744
+ key: FIELD_KEYS.FOOTER
3745
+ });
3746
+ // maxGraphemeCount and required can't be props of FieldButton
3747
+ const { required: __required, ...headerProps } = props["Show Header#40606:8"].value && fieldHeader ? fieldHeaderHandler.transform(fieldHeader, traverse).props : {};
3748
+ const { maxGraphemeCount: __maxGraphemeCount, ...footerProps } = props["Show Footer#40606:9"].value && fieldFooter ? fieldFooterHandler.transform(fieldFooter, traverse).props : {};
3749
+ const [prefix] = findAllInstances({
3750
+ node: inputButton,
3751
+ key: INPUT_BUTTON_PREFIX_KEY
3752
+ });
3753
+ const [suffix] = findAllInstances({
3754
+ node: inputButton,
3755
+ key: INPUT_BUTTON_SUFFIX_KEY
3756
+ });
3757
+ const commonProps = {
3758
+ ...inputButton.componentProperties.State.value === "Disabled" && {
3759
+ disabled: true
3760
+ },
3761
+ ...(inputButton.componentProperties.State.value === "Error" || inputButton.componentProperties.State.value === "Error Pressed") && {
3762
+ invalid: true
3763
+ },
3764
+ ...clearButton && {
3765
+ showClearButton: true
3766
+ },
3767
+ ...inputButton.componentProperties["Has Prefix#32514:10"].value === true && prefix && prefix.componentProperties.Type.value === "Icon" && {
3768
+ prefixIcon: ctx.iconHandler.transform(prefix.componentProperties["Icon#34021:2"])
3769
+ },
3770
+ ...inputButton.componentProperties["Has Suffix#32865:68"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Icon" && {
3771
+ suffixIcon: ctx.iconHandler.transform(suffix.componentProperties["Icon#37963:0"])
3772
+ },
3773
+ ...inputButton.componentProperties["Has Suffix#32865:68"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Text" && {
3774
+ suffix: suffix.componentProperties["Suffix Text#34021:4"].value
3775
+ }
3776
+ };
3777
+ // these can be fragile but better than having 9 different handlers
3778
+ const placeholder = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("placeholder"));
3779
+ const value = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("value"));
3780
+ return createLocalSnippetElement$k("FieldButton", {
3781
+ ...headerProps,
3782
+ ...footerProps,
3783
+ ...commonProps
3784
+ }, props["Has Value"].value === "True" && value ? createLocalSnippetElement$k("FieldButtonValue", undefined, value.characters) : placeholder ? createLocalSnippetElement$k("FieldButtonPlaceholder", undefined, placeholder.characters) : undefined, {
3785
+ comment: "buttonProps를 통해 aria-label을 제공하세요."
3786
+ });
3787
+ });
3788
+ };
3789
+ // TODO: those 4 are basically the same
3790
+ const createSelectFieldHandler = (ctx)=>{
3791
+ const fieldButtonHandler = createFieldButtonHandler(ctx);
3792
+ return defineComponentHandler(templateSelectField.key, (node, traverse)=>{
3793
+ const [fieldButton] = findAllInstances({
3794
+ node,
3795
+ key: fieldButtonHandler.key
3796
+ });
3797
+ return fieldButtonHandler.transform(fieldButton, traverse);
3798
+ });
3799
+ };
3800
+ const createDatePickerFieldHandler = (ctx)=>{
3801
+ const fieldButtonHandler = createFieldButtonHandler(ctx);
3802
+ return defineComponentHandler(templateDatePickerField.key, (node, traverse)=>{
3803
+ const [fieldButton] = findAllInstances({
3804
+ node,
3805
+ key: fieldButtonHandler.key
3806
+ });
3807
+ return fieldButtonHandler.transform(fieldButton, traverse);
3808
+ });
3809
+ };
3810
+ const createTimePickerFieldHandler = (ctx)=>{
3811
+ const fieldButtonHandler = createFieldButtonHandler(ctx);
3812
+ return defineComponentHandler(templateTimePickerField.key, (node, traverse)=>{
3813
+ const [fieldButton] = findAllInstances({
3814
+ node,
3815
+ key: fieldButtonHandler.key
3816
+ });
3817
+ return fieldButtonHandler.transform(fieldButton, traverse);
3818
+ });
3819
+ };
3820
+ const createAddressFieldHandler = (ctx)=>{
3821
+ const fieldButtonHandler = createFieldButtonHandler(ctx);
3822
+ return defineComponentHandler(templateAddressPickerField.key, (node, traverse)=>{
3823
+ const [fieldButton] = findAllInstances({
3824
+ node,
3825
+ key: fieldButtonHandler.key
3826
+ });
3827
+ return fieldButtonHandler.transform(fieldButton, traverse);
3574
3828
  });
3575
3829
  };
3576
3830
 
@@ -3857,53 +4111,7 @@ const createMenuSheetHandler = (ctx)=>{
3857
4111
  });
3858
4112
  };
3859
4113
 
3860
- const { createLocalSnippetElement: createLocalSnippetElement$c } = createLocalSnippetHelper("text-field");
3861
- const createMultilineTextFieldHandler = (_ctx)=>defineComponentHandler(multilineTextField.key, ({ componentProperties: props })=>{
3862
- const { Size: { value: size }, State: { value: state }, Filled: { value: filled }, "Show Header#870:0": { value: showHeader }, "Label#15327:323": { value: label }, "Show Indicator#1259:0": { value: showIndicator }, "Indicator#15327:286": { value: indicator }, "Placeholder#958:0": { value: placeholder }, "Filled Text#1304:0": { value: defaultValue }, "Show Footer#958:25": { value: showFooter }, "Show Description#958:50": { value: showDescription }, "Description#15327:212": { value: description }, "Show Character count#958:75": { value: showCharacterCount }, "Character Count#15327:360": { value: _characterCount }, "Max Character Count#15327:175": { value: maxCharacterCount } } = props;
3863
- const states = state.split("-");
3864
- const commonProps = {
3865
- size: handleSizeProp(size),
3866
- // header
3867
- ...showHeader && {
3868
- label
3869
- },
3870
- ...showHeader && showIndicator && {
3871
- indicator
3872
- },
3873
- // input
3874
- ...filled === "True" && {
3875
- defaultValue
3876
- },
3877
- ...states.includes("Invalid") && {
3878
- invalid: true
3879
- },
3880
- ...states.includes("Disabled") && {
3881
- disabled: true
3882
- },
3883
- ...states.includes("Read Only") && {
3884
- readOnly: true
3885
- },
3886
- // footer
3887
- ...showFooter && showDescription && states.includes("Invalid") && {
3888
- // invalid인 경우 description을 error로 사용
3889
- errorMessage: description
3890
- },
3891
- ...showFooter && showDescription && !states.includes("Invalid") && {
3892
- // invalid가 아닌 경우 description을 description으로 사용
3893
- description
3894
- },
3895
- ...showFooter && showCharacterCount && {
3896
- maxGraphemeCount: Number(maxCharacterCount)
3897
- }
3898
- };
3899
- const inputProps = {
3900
- placeholder
3901
- };
3902
- const TextFieldChildren = createLocalSnippetElement$c("TextFieldTextarea", inputProps);
3903
- return createLocalSnippetElement$c("TextField", commonProps, TextFieldChildren);
3904
- });
3905
-
3906
- const { createLocalSnippetElement: createLocalSnippetElement$b } = createLocalSnippetHelper("page-banner");
4114
+ const { createLocalSnippetElement: createLocalSnippetElement$c } = createLocalSnippetHelper("page-banner");
3907
4115
  const SUFFIX_BUTTON_KEY = "7dce4e1242761ccd8e5da42278fc2d870918039c";
3908
4116
  const createPageBannerButtonHandler = (_ctx)=>defineComponentHandler(SUFFIX_BUTTON_KEY, (node)=>{
3909
4117
  return createElement("PageBannerButton", undefined, node.componentProperties["Label#39890:0"].value);
@@ -3937,7 +4145,7 @@ const createPageBannerHandler = (ctx)=>{
3937
4145
  })).exhaustive();
3938
4146
  const textNode = findOne(node, (child)=>child.type === "TEXT" && child.name === "Text");
3939
4147
  if (!textNode) {
3940
- return createLocalSnippetElement$b(tag, undefined, undefined, {
4148
+ return createLocalSnippetElement$c(tag, undefined, undefined, {
3941
4149
  comment: "내용을 제공해주세요."
3942
4150
  });
3943
4151
  }
@@ -3970,11 +4178,11 @@ const createPageBannerHandler = (ctx)=>{
3970
4178
  suffix
3971
4179
  }
3972
4180
  };
3973
- return createLocalSnippetElement$b(tag, commonProps);
4181
+ return createLocalSnippetElement$c(tag, commonProps);
3974
4182
  });
3975
4183
  };
3976
4184
 
3977
- const { createLocalSnippetElement: createLocalSnippetElement$a } = createLocalSnippetHelper("progress-circle");
4185
+ const { createLocalSnippetElement: createLocalSnippetElement$b } = createLocalSnippetHelper("progress-circle");
3978
4186
  const createProgressCircleHandler = (_ctx)=>defineComponentHandler(progressCircle.key, ({ componentProperties: props })=>{
3979
4187
  const { value, minValue, maxValue } = tsPattern.match(props.Value.value).with("Indeterminate", ()=>({
3980
4188
  value: undefined,
@@ -4006,10 +4214,10 @@ const createProgressCircleHandler = (_ctx)=>defineComponentHandler(progressCircl
4006
4214
  tone: changeCase.camelCase(props.Tone.value)
4007
4215
  }
4008
4216
  };
4009
- return createLocalSnippetElement$a("ProgressCircle", commonProps);
4217
+ return createLocalSnippetElement$b("ProgressCircle", commonProps);
4010
4218
  });
4011
4219
 
4012
- const { createLocalSnippetElement: createLocalSnippetElement$9 } = createLocalSnippetHelper("radio-group");
4220
+ const { createLocalSnippetElement: createLocalSnippetElement$a } = createLocalSnippetHelper("radio-group");
4013
4221
  const createRadioGroupItemHandler = (_ctx)=>defineComponentHandler(radio.key, ({ componentProperties: props })=>{
4014
4222
  const tone = tsPattern.match(props.Tone.value).with("Neutral", ()=>"neutral").with("🚫[Deprecated]Brand", ()=>"brand").exhaustive();
4015
4223
  const commonProps = {
@@ -4022,20 +4230,20 @@ const createRadioGroupItemHandler = (_ctx)=>defineComponentHandler(radio.key, ({
4022
4230
  tone,
4023
4231
  weight: changeCase.camelCase(props.Weight.value)
4024
4232
  };
4025
- return createLocalSnippetElement$9("RadioGroupItem", commonProps);
4233
+ return createLocalSnippetElement$a("RadioGroupItem", commonProps);
4026
4234
  });
4027
4235
 
4028
- const { createLocalSnippetElement: createLocalSnippetElement$8 } = createLocalSnippetHelper("radio-group");
4236
+ const { createLocalSnippetElement: createLocalSnippetElement$9 } = createLocalSnippetHelper("radio-group");
4029
4237
  const createRadioMarkHandler = (_ctx)=>defineComponentHandler(radioMark.key, ({ componentProperties: props })=>{
4030
4238
  const tone = tsPattern.match(props.Tone.value).with("Neutral", ()=>"neutral").with("🚫[Deprecated]Brand", ()=>"brand").exhaustive();
4031
4239
  const commonProps = {
4032
4240
  tone,
4033
4241
  size: handleSizeProp(props.Size.value)
4034
4242
  };
4035
- return createLocalSnippetElement$8("RadioMark", commonProps);
4243
+ return createLocalSnippetElement$9("RadioMark", commonProps);
4036
4244
  });
4037
4245
 
4038
- const { createLocalSnippetElement: createLocalSnippetElement$7 } = createLocalSnippetHelper("reaction-button");
4246
+ const { createLocalSnippetElement: createLocalSnippetElement$8 } = createLocalSnippetHelper("reaction-button");
4039
4247
  const createReactionButtonHandler = (ctx)=>defineComponentHandler(reactionButton.key, ({ componentProperties: props })=>{
4040
4248
  const commonProps = {
4041
4249
  size: handleSizeProp(props.Size.value),
@@ -4049,7 +4257,7 @@ const createReactionButtonHandler = (ctx)=>defineComponentHandler(reactionButton
4049
4257
  defaultPressed: true
4050
4258
  }
4051
4259
  };
4052
- return createLocalSnippetElement$7("ReactionButton", commonProps, [
4260
+ return createLocalSnippetElement$8("ReactionButton", commonProps, [
4053
4261
  createSeedReactElement("PrefixIcon", {
4054
4262
  svg: ctx.iconHandler.transform(props["Icon#12379:0"])
4055
4263
  }),
@@ -4058,7 +4266,7 @@ const createReactionButtonHandler = (ctx)=>defineComponentHandler(reactionButton
4058
4266
  ]);
4059
4267
  });
4060
4268
 
4061
- const { createLocalSnippetElement: createLocalSnippetElement$6 } = createLocalSnippetHelper("segmented-control");
4269
+ const { createLocalSnippetElement: createLocalSnippetElement$7 } = createLocalSnippetHelper("segmented-control");
4062
4270
  const SEGMENTED_CONTROL_ITEM_KEY = "9a7ba0d4c041ddbce84ee48881788434fd6bccc8";
4063
4271
  const createSegmentedControlItemHandler = (_ctx)=>defineComponentHandler(SEGMENTED_CONTROL_ITEM_KEY, ({ componentProperties: props })=>{
4064
4272
  const states = props.State.value.split("-");
@@ -4068,7 +4276,7 @@ const createSegmentedControlItemHandler = (_ctx)=>defineComponentHandler(SEGMENT
4068
4276
  disabled: true
4069
4277
  }
4070
4278
  };
4071
- return createLocalSnippetElement$6("SegmentedControlItem", commonProps, props["Label#11366:15"].value);
4279
+ return createLocalSnippetElement$7("SegmentedControlItem", commonProps, props["Label#11366:15"].value);
4072
4280
  });
4073
4281
  const createSegmentedControlHandler = (ctx)=>{
4074
4282
  const segmentedControlItemHandler = createSegmentedControlItemHandler();
@@ -4084,13 +4292,13 @@ const createSegmentedControlHandler = (ctx)=>{
4084
4292
  defaultValue: selectedSegment.componentProperties["Label#11366:15"].value
4085
4293
  }
4086
4294
  };
4087
- return createLocalSnippetElement$6("SegmentedControl", commonProps, segmentedControlChildren, {
4295
+ return createLocalSnippetElement$7("SegmentedControl", commonProps, segmentedControlChildren, {
4088
4296
  comment: "aria-label이나 aria-labelledby 중 하나를 제공해야 합니다."
4089
4297
  });
4090
4298
  });
4091
4299
  };
4092
4300
 
4093
- const { createLocalSnippetElement: createLocalSnippetElement$5 } = createLocalSnippetHelper("select-box");
4301
+ const { createLocalSnippetElement: createLocalSnippetElement$6 } = createLocalSnippetHelper("select-box");
4094
4302
  const createSelectBoxHandler = (_ctx)=>defineComponentHandler(selectBox.key, ({ componentProperties: props })=>{
4095
4303
  const tag = tsPattern.match(props.Control.value).with("Checkbox", ()=>"CheckSelectBox").with("Radio", ()=>"RadioSelectBoxItem").exhaustive();
4096
4304
  const commonProps = {
@@ -4105,7 +4313,7 @@ const createSelectBoxHandler = (_ctx)=>defineComponentHandler(selectBox.key, ({
4105
4313
  defaultChecked: true
4106
4314
  }
4107
4315
  };
4108
- return createLocalSnippetElement$5(tag, commonProps);
4316
+ return createLocalSnippetElement$6(tag, commonProps);
4109
4317
  });
4110
4318
  const createSelectBoxGroupHandler = (ctx)=>{
4111
4319
  const selectBoxHandler = createSelectBoxHandler();
@@ -4128,7 +4336,7 @@ const createSelectBoxGroupHandler = (ctx)=>{
4128
4336
  defaultValue: selectedSelectBox?.componentProperties["Label#3635:0"].value
4129
4337
  }
4130
4338
  };
4131
- return createLocalSnippetElement$5(tag, commonProps, stack);
4339
+ return createLocalSnippetElement$6(tag, commonProps, stack);
4132
4340
  });
4133
4341
  };
4134
4342
 
@@ -4142,6 +4350,90 @@ const createSkeletonHandler = (ctx)=>defineComponentHandler(skeleton.key, (node)
4142
4350
  return createSeedReactElement("Skeleton", commonProps);
4143
4351
  });
4144
4352
 
4353
+ const { createLocalSnippetElement: createLocalSnippetElement$5 } = createLocalSnippetHelper("slider");
4354
+ const SLIDER_TICK_KEY = "ace432ffb7a2af13bce549b19c932ac5f96a9a78";
4355
+ function getSliderComment(props) {
4356
+ return [
4357
+ "min, max, step 값을 적절히 조정해주세요.",
4358
+ props.markers && "markers 배열을 채워주세요.",
4359
+ props.ticks && "ticks 배열을 채워주세요."
4360
+ ].filter(Boolean).join(" ");
4361
+ }
4362
+ const createSliderFieldHandler = (ctx)=>{
4363
+ const sliderHandler = createSliderHandler();
4364
+ const fieldHeaderHandler = createFieldHeaderHandler();
4365
+ const fieldFooterHandler = createFieldFooterHandler();
4366
+ return defineComponentHandler(templateSliderField.key, (node, traverse)=>{
4367
+ const props = node.componentProperties;
4368
+ const [slider$1] = findAllInstances({
4369
+ node,
4370
+ key: slider.key
4371
+ });
4372
+ const [fieldHeader] = findAllInstances({
4373
+ node,
4374
+ key: FIELD_KEYS.HEADER
4375
+ });
4376
+ const [fieldFooter] = findAllInstances({
4377
+ node,
4378
+ key: FIELD_KEYS.FOOTER
4379
+ });
4380
+ const sliderProps = sliderHandler.transform(slider$1, traverse).props;
4381
+ // maxGraphemeCount and required can't be props of Slider
4382
+ const { required: __required, ...headerProps } = props["Show Header#40606:8"].value && fieldHeader ? fieldHeaderHandler.transform(fieldHeader, traverse).props : {};
4383
+ const { maxGraphemeCount: __maxGraphemeCount, ...footerProps } = props["Show Footer#40606:9"].value && fieldFooter ? fieldFooterHandler.transform(fieldFooter, traverse).props : {};
4384
+ const commonProps = {
4385
+ ...sliderProps,
4386
+ ...headerProps,
4387
+ ...footerProps
4388
+ };
4389
+ return createLocalSnippetElement$5("Slider", commonProps, undefined, {
4390
+ comment: getSliderComment(commonProps)
4391
+ });
4392
+ });
4393
+ };
4394
+ const createSliderHandler = (_ctx)=>{
4395
+ return defineComponentHandler(slider.key, (node)=>{
4396
+ const { componentProperties: props } = node;
4397
+ const { min, max, defaultValues } = tsPattern.match(props.Value.value).with("Single", ()=>({
4398
+ min: 0,
4399
+ max: 100,
4400
+ defaultValues: [
4401
+ 50
4402
+ ]
4403
+ })).with("Range", ()=>({
4404
+ min: 0,
4405
+ max: 100,
4406
+ defaultValues: [
4407
+ 0,
4408
+ 50
4409
+ ]
4410
+ })).exhaustive();
4411
+ const [ticks] = findAllInstances({
4412
+ node,
4413
+ key: SLIDER_TICK_KEY
4414
+ });
4415
+ const commonProps = {
4416
+ min,
4417
+ max,
4418
+ defaultValues,
4419
+ hideRange: props["Show Active Track#48156:0"].value === false,
4420
+ ...props["Show Markers#49596:0"].value === true && {
4421
+ markers: []
4422
+ },
4423
+ ...props["Has Tick Mark#47921:0"].value === true && ticks && {
4424
+ ticks: [],
4425
+ tickWeight: ticks.componentProperties.Type.value === "Discrete" ? "thick" : "thin"
4426
+ },
4427
+ ...props.State.value === "Disabled" && {
4428
+ disabled: true
4429
+ }
4430
+ };
4431
+ return createLocalSnippetElement$5("Slider", commonProps, undefined, {
4432
+ comment: getSliderComment(commonProps)
4433
+ });
4434
+ });
4435
+ };
4436
+
4145
4437
  const { createLocalSnippetElement: createLocalSnippetElement$4 } = createLocalSnippetHelper("snackbar");
4146
4438
  const createSnackbarHandler = (_ctx)=>defineComponentHandler(snackbar.key, ({ componentProperties: props })=>{
4147
4439
  const commonProps = {
@@ -4363,97 +4655,206 @@ const createLineTriggerFillHandler = (_ctx)=>defineComponentHandler(LINE_TRIGGER
4363
4655
  variant,
4364
4656
  defaultValue
4365
4657
  };
4366
- const tabsCarousel = createChipTabsLocalSnippetElement("ChipTabsCarousel", {
4367
- swipeable: false
4368
- }, triggers.map(({ value })=>createChipTabsLocalSnippetElement("ChipTabsContent", {
4369
- value
4370
- }, value)));
4371
- const tabsList = createChipTabsLocalSnippetElement("ChipTabsList", undefined, triggers.map(({ elementNode })=>elementNode));
4372
- return createChipTabsLocalSnippetElement("ChipTabsRoot", rootProps, [
4373
- tabsList,
4374
- tabsCarousel
4375
- ]);
4658
+ const tabsCarousel = createChipTabsLocalSnippetElement("ChipTabsCarousel", {
4659
+ swipeable: false
4660
+ }, triggers.map(({ value })=>createChipTabsLocalSnippetElement("ChipTabsContent", {
4661
+ value
4662
+ }, value)));
4663
+ const tabsList = createChipTabsLocalSnippetElement("ChipTabsList", undefined, triggers.map(({ elementNode })=>elementNode));
4664
+ return createChipTabsLocalSnippetElement("ChipTabsRoot", rootProps, [
4665
+ tabsList,
4666
+ tabsCarousel
4667
+ ]);
4668
+ });
4669
+ };
4670
+ const CHIP_TRIGGER_KEY = "95bf31a329f9e8bba0d9aa2299d1552f1d388148";
4671
+ const createChipTabsTriggerHandler = (_ctx)=>defineComponentHandler(CHIP_TRIGGER_KEY, (node)=>{
4672
+ const [chip$1] = findAllInstances({
4673
+ node,
4674
+ key: chip.key
4675
+ });
4676
+ if (!chip$1) throw new Error("Chip not found in ChipTabsTrigger");
4677
+ const props = node.componentProperties;
4678
+ const chipProps = chip$1.componentProperties;
4679
+ const commonProps = {
4680
+ value: chipProps["Label#7185:0"].value,
4681
+ ...chipProps.State.value === "Disabled" && {
4682
+ disabled: true
4683
+ },
4684
+ ...props["Has Notification"].value === "True" && {
4685
+ notification: true
4686
+ }
4687
+ };
4688
+ return createChipTabsLocalSnippetElement("ChipTabsTrigger", commonProps);
4689
+ });
4690
+
4691
+ const { createLocalSnippetElement: createLocalSnippetElement$1 } = createLocalSnippetHelper("text-field");
4692
+ const TEXT_INPUT_OUTLINE_KEY = "22eebd645d310c086d9f5f69d8f179ff5c7cf7ca";
4693
+ const TEXT_INPUT_OUTLINE_PREFIX_KEY = "1ab174dd51bc42a5efe530f52f1dd02255c50b18";
4694
+ const TEXT_INPUT_OUTLINE_SUFFIX_KEY = "555fee288d9053760e301791665bbac31d19c43f";
4695
+ const TEXT_INPUT_UNDERLINE_KEY = "16e9e343fc319190149369bd61076d6415e09a8a";
4696
+ const TEXT_INPUT_UNDERLINE_PREFIX_KEY = "a7ceae43b6daf4490e8ab408d2c29fb63b2eb891";
4697
+ const TEXT_INPUT_UNDERLINE_SUFFIX_KEY = "1b88368820be61f358e24a8aaa601e7f2a2ea101";
4698
+ const TEXTAREA_KEY = "22bb206483f00cd635188eea6ae8a6aac058b5d5";
4699
+ const createTextInputFieldHandler = (ctx)=>{
4700
+ const fieldHeaderHandler = createFieldHeaderHandler();
4701
+ const fieldFooterHandler = createFieldFooterHandler();
4702
+ return defineComponentHandler(templateTextField.key, (node, traverse)=>{
4703
+ const props = node.componentProperties;
4704
+ const [textInputOutline] = findAllInstances({
4705
+ node,
4706
+ key: TEXT_INPUT_OUTLINE_KEY
4707
+ });
4708
+ const [textInputUnderline] = findAllInstances({
4709
+ node,
4710
+ key: TEXT_INPUT_UNDERLINE_KEY
4711
+ });
4712
+ const [fieldHeader] = findAllInstances({
4713
+ node,
4714
+ key: FIELD_KEYS.HEADER
4715
+ });
4716
+ const [fieldFooter] = findAllInstances({
4717
+ node,
4718
+ key: FIELD_KEYS.FOOTER
4719
+ });
4720
+ const fieldProps = {
4721
+ ...props["Show Header#40606:8"].value && fieldHeader ? fieldHeaderHandler.transform(fieldHeader, traverse).props : {},
4722
+ ...props["Show Footer#40606:9"].value && fieldFooter ? fieldFooterHandler.transform(fieldFooter, traverse).props : {}
4723
+ };
4724
+ const commonProps = (()=>{
4725
+ if (textInputOutline) {
4726
+ const [prefix] = findAllInstances({
4727
+ node: textInputOutline,
4728
+ key: TEXT_INPUT_OUTLINE_PREFIX_KEY
4729
+ });
4730
+ const [suffix] = findAllInstances({
4731
+ node: textInputOutline,
4732
+ key: TEXT_INPUT_OUTLINE_SUFFIX_KEY
4733
+ });
4734
+ return {
4735
+ variant: "outline",
4736
+ ...textInputOutline.componentProperties.State.value === "Disabled" && {
4737
+ disabled: true
4738
+ },
4739
+ ...textInputOutline.componentProperties.State.value === "Read Only" && {
4740
+ readOnly: true
4741
+ },
4742
+ ...textInputOutline.componentProperties.State.value === "Error" && {
4743
+ invalid: true
4744
+ },
4745
+ ...textInputOutline.componentProperties.State.value === "Error Focused" && {
4746
+ invalid: true
4747
+ },
4748
+ ...textInputOutline.componentProperties["Has Prefix#32514:10"].value === true && prefix && prefix.componentProperties.Type.value === "Icon" && {
4749
+ prefixIcon: ctx.iconHandler.transform(prefix.componentProperties["Icon#34021:2"])
4750
+ },
4751
+ ...textInputOutline.componentProperties["Has Suffix#32865:68"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Icon" && {
4752
+ suffixIcon: ctx.iconHandler.transform(suffix.componentProperties["Icon#45391:0"])
4753
+ },
4754
+ ...textInputOutline.componentProperties["Has Suffix#32865:68"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Text" && {
4755
+ suffix: suffix.componentProperties["Suffix Text#34021:4"].value
4756
+ }
4757
+ };
4758
+ }
4759
+ if (textInputUnderline) {
4760
+ const [prefix] = findAllInstances({
4761
+ node: textInputUnderline,
4762
+ key: TEXT_INPUT_UNDERLINE_PREFIX_KEY
4763
+ });
4764
+ const [suffix] = findAllInstances({
4765
+ node: textInputUnderline,
4766
+ key: TEXT_INPUT_UNDERLINE_SUFFIX_KEY
4767
+ });
4768
+ return {
4769
+ variant: "underline",
4770
+ ...textInputUnderline.componentProperties.State.value === "Disabled" && {
4771
+ disabled: true
4772
+ },
4773
+ ...textInputUnderline.componentProperties.State.value === "Read Only" && {
4774
+ readOnly: true
4775
+ },
4776
+ ...textInputUnderline.componentProperties.State.value === "Error" && {
4777
+ invalid: true
4778
+ },
4779
+ ...textInputUnderline.componentProperties.State.value === "Error Focused" && {
4780
+ invalid: true
4781
+ },
4782
+ ...textInputUnderline.componentProperties["Has Prefix#34125:0"].value === true && prefix && prefix.componentProperties.Type.value === "Icon" && {
4783
+ prefixIcon: ctx.iconHandler.transform(prefix.componentProperties["Icon#34021:2"])
4784
+ },
4785
+ ...textInputUnderline.componentProperties["Has Suffix#34125:8"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Icon" && {
4786
+ suffixIcon: ctx.iconHandler.transform(suffix.componentProperties["Icon#45391:5"])
4787
+ },
4788
+ ...textInputUnderline.componentProperties["Has Suffix#34125:8"].value === true && suffix && suffix.componentProperties["Type (Figma Only)"].value === "Text" && {
4789
+ suffix: suffix.componentProperties["Suffix Text#34021:4"].value
4790
+ }
4791
+ };
4792
+ }
4793
+ return {};
4794
+ })();
4795
+ // these can be fragile but better than having 9 different handlers
4796
+ const placeholder = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("placeholder"));
4797
+ const value = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("value"));
4798
+ const inputProps = {
4799
+ ...placeholder && {
4800
+ placeholder: placeholder.characters
4801
+ }
4802
+ };
4803
+ return createLocalSnippetElement$1("TextField", {
4804
+ ...fieldProps,
4805
+ ...commonProps,
4806
+ ...value && {
4807
+ defaultValue: value.characters
4808
+ }
4809
+ }, createLocalSnippetElement$1("TextFieldInput", inputProps));
4376
4810
  });
4377
4811
  };
4378
- const CHIP_TRIGGER_KEY = "95bf31a329f9e8bba0d9aa2299d1552f1d388148";
4379
- const createChipTabsTriggerHandler = (_ctx)=>defineComponentHandler(CHIP_TRIGGER_KEY, (node)=>{
4380
- const [chip$1] = findAllInstances({
4812
+ const createTextareaFieldHandler = (ctx)=>{
4813
+ const fieldHeaderHandler = createFieldHeaderHandler();
4814
+ const fieldFooterHandler = createFieldFooterHandler();
4815
+ return defineComponentHandler(templateTextareaField.key, (node, traverse)=>{
4816
+ const [textarea] = findAllInstances({
4381
4817
  node,
4382
- key: chip.key
4818
+ key: TEXTAREA_KEY
4383
4819
  });
4384
- if (!chip$1) throw new Error("Chip not found in ChipTabsTrigger");
4385
- const props = node.componentProperties;
4386
- const chipProps = chip$1.componentProperties;
4387
- const commonProps = {
4388
- value: chipProps["Label#7185:0"].value,
4389
- ...chipProps.State.value === "Disabled" && {
4390
- disabled: true
4391
- },
4392
- ...props["Has Notification"].value === "True" && {
4393
- notification: true
4820
+ const [fieldHeader] = findAllInstances({
4821
+ node,
4822
+ key: FIELD_KEYS.HEADER
4823
+ });
4824
+ const [fieldFooter] = findAllInstances({
4825
+ node,
4826
+ key: FIELD_KEYS.FOOTER
4827
+ });
4828
+ const fieldProps = {
4829
+ ...fieldHeader ? fieldHeaderHandler.transform(fieldHeader, traverse).props : {},
4830
+ ...fieldFooter ? fieldFooterHandler.transform(fieldFooter, traverse).props : {}
4831
+ };
4832
+ // these can be fragile but better than having 9 different handlers
4833
+ const placeholder = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("placeholder"));
4834
+ const value = findOne(node, (node)=>node.type === "TEXT" && node.name.toLowerCase().includes("value"));
4835
+ const inputProps = {
4836
+ autoresize: textarea.componentProperties["Auto Size (Figma Only)"].value === "true",
4837
+ ...placeholder && {
4838
+ placeholder: placeholder.characters
4394
4839
  }
4395
4840
  };
4396
- return createChipTabsLocalSnippetElement("ChipTabsTrigger", commonProps);
4397
- });
4398
-
4399
- const { createLocalSnippetElement: createLocalSnippetElement$1 } = createLocalSnippetHelper("text-field");
4400
- const createTextFieldHandler = (ctx)=>defineComponentHandler(textField.key, ({ componentProperties: props })=>{
4401
- const { Size: { value: size }, State: { value: state }, Filled: { value: filled }, "Show Header#870:0": { value: showHeader }, "Label#14964:0": { value: label }, "Show Indicator#1259:0": { value: showIndicator }, "Indicator#15327:249": { value: indicator }, "Show Prefix#958:125": { value: showPrefix }, "Show Prefix Icon#1267:50": { value: showPrefixIcon }, "Prefix Icon#1267:25": prefixIcon, "Show Prefix Text#1267:0": { value: showPrefixText }, "Prefix Text#15327:101": { value: prefix }, "Placeholder#958:0": { value: placeholder }, "Filled Text#1304:0": { value: defaultValue }, "Show Suffix#958:100": { value: showSuffix }, "Show Suffix Icon#1267:75": { value: showSuffixIcon }, "Suffix Icon #1267:100": suffixIcon, "Show Suffix Text#1267:125": { value: showSuffixText }, "Suffix Text#15327:138": { value: suffix }, "Show Footer#958:25": { value: showFooter }, "Show Description#958:50": { value: showDescription }, "Description#12626:5": { value: description }, "Show Character Count#958:75": { value: showCharacterCount }, "Character Count#15327:64": { value: _characterCount }, "Max Character Count#15327:27": { value: maxCharacterCount } } = props;
4402
- const states = state.split("-");
4403
4841
  const commonProps = {
4404
- size: handleSizeProp(size),
4405
- // header
4406
- ...showHeader && {
4407
- label
4408
- },
4409
- ...showHeader && showIndicator && {
4410
- indicator
4411
- },
4412
- // input affixes
4413
- ...showPrefix && showPrefixIcon && {
4414
- prefixIcon: ctx.iconHandler.transform(prefixIcon)
4415
- },
4416
- ...showPrefix && showPrefixText && {
4417
- prefix
4418
- },
4419
- ...showSuffix && showSuffixIcon && {
4420
- suffixIcon: ctx.iconHandler.transform(suffixIcon)
4421
- },
4422
- ...showSuffix && showSuffixText && {
4423
- suffix
4424
- },
4425
- // input
4426
- ...filled === "True" && {
4427
- defaultValue
4428
- },
4429
- ...states.includes("Invalid") && {
4430
- invalid: true
4431
- },
4432
- ...states.includes("Disabled") && {
4842
+ ...textarea.componentProperties.State.value === "Disabled" && {
4433
4843
  disabled: true
4434
4844
  },
4435
- ...states.includes("Read Only") && {
4845
+ ...textarea.componentProperties.State.value === "Read Only" && {
4436
4846
  readOnly: true
4437
4847
  },
4438
- // footer
4439
- ...showFooter && showDescription && states.includes("Invalid") && {
4440
- // invalid인 경우 description을 error로 사용
4441
- errorMessage: description
4442
- },
4443
- ...showFooter && showDescription && !states.includes("Invalid") && {
4444
- // invalid가 아닌 경우 description을 description으로 사용
4445
- description
4446
- },
4447
- ...showFooter && showCharacterCount && {
4448
- maxGraphemeCount: Number(maxCharacterCount)
4848
+ ...value && {
4849
+ defaultValue: value.characters
4449
4850
  }
4450
4851
  };
4451
- const inputProps = {
4452
- placeholder
4453
- };
4454
- const TextFieldChildren = createLocalSnippetElement$1("TextFieldInput", inputProps);
4455
- return createLocalSnippetElement$1("TextField", commonProps, TextFieldChildren);
4852
+ return createLocalSnippetElement$1("TextField", {
4853
+ ...fieldProps,
4854
+ ...commonProps
4855
+ }, createLocalSnippetElement$1("TextFieldTextarea", inputProps));
4456
4856
  });
4857
+ };
4457
4858
 
4458
4859
  const { createLocalSnippetElement } = createLocalSnippetHelper("toggle-button");
4459
4860
  const createToggleButtonHandler = (ctx)=>defineComponentHandler(toggleButton.key, ({ componentProperties: props })=>{
@@ -4547,19 +4948,40 @@ function bindComponentHandler(unbound, deps) {
4547
4948
  const unboundSeedComponentHandlers = [
4548
4949
  createActionButtonGhostHandler,
4549
4950
  createActionButtonHandler,
4550
- createAlertDialogHandler,
4551
- createAppBarHandler,
4552
- createAvatarHandler,
4553
- createAvatarStackHandler,
4951
+ createTextInputFieldHandler,
4952
+ createTextareaFieldHandler,
4554
4953
  createBadgeHandler,
4555
- createBottomSheetHandler,
4954
+ createChipHandler,
4556
4955
  createCalloutHandler,
4956
+ createPageBannerHandler,
4557
4957
  createCheckboxHandler,
4558
4958
  createCheckmarkHandler,
4559
- createChipHandler,
4560
- createContextualFloatingButtonHandler,
4959
+ createRadioGroupItemHandler,
4960
+ createRadioMarkHandler,
4961
+ createSwitchHandler,
4962
+ createSwitchMarkHandler,
4963
+ createAlertDialogHandler,
4561
4964
  createDividerHandler,
4965
+ createAvatarHandler,
4966
+ createAvatarStackHandler,
4967
+ createSegmentedControlHandler,
4968
+ createSelectBoxGroupHandler,
4969
+ createSelectBoxHandler,
4970
+ createSliderHandler,
4971
+ createSliderFieldHandler,
4972
+ createTabsHandler,
4973
+ createTagGroupHandler,
4974
+ createTagGroupItemHandler,
4975
+ createToggleButtonHandler,
4976
+ createAppBarHandler,
4977
+ createBottomSheetHandler,
4978
+ createFieldButtonHandler,
4979
+ createAddressFieldHandler,
4980
+ createDatePickerFieldHandler,
4981
+ createSelectFieldHandler,
4982
+ createTimePickerFieldHandler,
4562
4983
  createErrorStateHandler,
4984
+ createContextualFloatingButtonHandler,
4563
4985
  createFloatingActionButtonHandler,
4564
4986
  createHelpBubbleHandler,
4565
4987
  createIdentityPlaceholderHandler,
@@ -4568,24 +4990,10 @@ const unboundSeedComponentHandlers = [
4568
4990
  createMannerTempBadgeHandler,
4569
4991
  createMannerTempHandler,
4570
4992
  createMenuSheetHandler,
4571
- createMultilineTextFieldHandler,
4572
- createPageBannerHandler,
4573
4993
  createProgressCircleHandler,
4574
- createRadioGroupItemHandler,
4575
- createRadioMarkHandler,
4576
4994
  createReactionButtonHandler,
4577
- createSegmentedControlHandler,
4578
- createSelectBoxGroupHandler,
4579
- createSelectBoxHandler,
4580
4995
  createSkeletonHandler,
4581
- createSnackbarHandler,
4582
- createSwitchHandler,
4583
- createSwitchMarkHandler,
4584
- createTabsHandler,
4585
- createTagGroupHandler,
4586
- createTagGroupItemHandler,
4587
- createTextFieldHandler,
4588
- createToggleButtonHandler
4996
+ createSnackbarHandler
4589
4997
  ];
4590
4998
 
4591
4999
  function createStaticIconRepository(iconRecord) {
@@ -5985,6 +6393,16 @@ const FIGMA_ICONS = {
5985
6393
  "type": "monochrome",
5986
6394
  "weight": "Line"
5987
6395
  },
6396
+ "8c85104333ba7cc69fc866b41770316a6bd226d9": {
6397
+ "name": "icon_grid_dot5",
6398
+ "type": "monochrome",
6399
+ "weight": "Fill"
6400
+ },
6401
+ "29482f6a02c7c0fe2d714271ca540c197e2c5e9a": {
6402
+ "name": "icon_grid_dot5",
6403
+ "type": "monochrome",
6404
+ "weight": "Line"
6405
+ },
5988
6406
  "94396773c3208ff19b7650bb7f48de6600492c83": {
5989
6407
  "name": "icon_grid_heart",
5990
6408
  "type": "monochrome",
@@ -6375,6 +6793,16 @@ const FIGMA_ICONS = {
6375
6793
  "type": "monochrome",
6376
6794
  "weight": "Line"
6377
6795
  },
6796
+ "af40e22f4795e41a24778fae19232b7ffe8d0b95": {
6797
+ "name": "icon_midcut_square",
6798
+ "type": "monochrome",
6799
+ "weight": "Fill"
6800
+ },
6801
+ "7c104076f1c7d9bbe9e14f5957012f2c7a5710d7": {
6802
+ "name": "icon_midcut_square",
6803
+ "type": "monochrome",
6804
+ "weight": "Line"
6805
+ },
6378
6806
  "5fa174f09a36f25f6af68e8a7b268e1d9a7f4752": {
6379
6807
  "name": "icon_minus_circle",
6380
6808
  "type": "monochrome",
@@ -7777,6 +8205,10 @@ const FIGMA_ICONS = {
7777
8205
  "name": "icon_gift",
7778
8206
  "type": "multicolor"
7779
8207
  },
8208
+ "e44bf2ccec8dd6a9b720e15f1660854234aeb9ca": {
8209
+ "name": "icon_grid_dot5",
8210
+ "type": "multicolor"
8211
+ },
7780
8212
  "9d3511905b35064003bf689e7f536f120e1fa5ad": {
7781
8213
  "name": "icon_horizline_viewfinder",
7782
8214
  "type": "multicolor"
@@ -7869,6 +8301,10 @@ const FIGMA_ICONS = {
7869
8301
  "name": "icon_sneaker_lifted_leftside",
7870
8302
  "type": "multicolor"
7871
8303
  },
8304
+ "e8eb13395b0696f63d148a8c31401b21382f03ef": {
8305
+ "name": "icon_sofa",
8306
+ "type": "multicolor"
8307
+ },
7872
8308
  "7fa76e36cb5397446a8ac3105d882ea685290c1b": {
7873
8309
  "name": "icon_sparkle2",
7874
8310
  "type": "multicolor"
@@ -7924,62 +8360,6 @@ const FIGMA_ICONS = {
7924
8360
  };
7925
8361
 
7926
8362
  const FIGMA_STYLES = [
7927
- {
7928
- "styleType": "FILL",
7929
- "key": "c1cee6b89c357c6a12d020654d73a4490cafdf51",
7930
- "name": "gradient/fade/layer-default/←(to-left)",
7931
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7932
- "remote": false
7933
- },
7934
- {
7935
- "styleType": "FILL",
7936
- "key": "ff436e73cf9477a1006e6f8a1f9d2c9dbe0e5edd",
7937
- "name": "gradient/fade/layer-default/→(to-right)",
7938
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7939
- "remote": false
7940
- },
7941
- {
7942
- "styleType": "FILL",
7943
- "key": "826457503b7ee3d472eab91581b1fcd499c47c00",
7944
- "name": "gradient/fade/layer-default/↑(to-top)",
7945
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7946
- "remote": false
7947
- },
7948
- {
7949
- "styleType": "FILL",
7950
- "key": "408cb970f1de672217f452152b0398a4bb4f4e12",
7951
- "name": "gradient/fade/layer-default/↓(to-bottom)",
7952
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7953
- "remote": false
7954
- },
7955
- {
7956
- "styleType": "FILL",
7957
- "key": "df22450a8f8e9c323baf40d8981920d1b6376cbf",
7958
- "name": "gradient/fade/layer-floating/←(to-left)",
7959
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7960
- "remote": false
7961
- },
7962
- {
7963
- "styleType": "FILL",
7964
- "key": "063c0dc05b438ac36499492e783520a722782d74",
7965
- "name": "gradient/fade/layer-floating/→(to-right)",
7966
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7967
- "remote": false
7968
- },
7969
- {
7970
- "styleType": "FILL",
7971
- "key": "46186d7dd037e8e54983ee6677cf7915790d84cc",
7972
- "name": "gradient/fade/layer-floating/↑(to-top)",
7973
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7974
- "remote": false
7975
- },
7976
- {
7977
- "styleType": "FILL",
7978
- "key": "b28d9c9adc816fdd4ecec3a0b3e25d8aec802b6a",
7979
- "name": "gradient/fade/layer-floating/↓(to-bottom)",
7980
- "description": "스크롤이 가능하도록 그라디언트로 특정 영역을 덮는 요소로 사용해요.",
7981
- "remote": false
7982
- },
7983
8363
  {
7984
8364
  "styleType": "FILL",
7985
8365
  "key": "353baa82e0440385eb121cd0ae98d2fcb1a70b18",
@@ -8270,10 +8650,10 @@ const FIGMA_VARIABLE_COLLECTIONS = {
8270
8650
  "VariableID:238:17662",
8271
8651
  "VariableID:17544:4057",
8272
8652
  "VariableID:1:171",
8273
- "VariableID:41186:6437",
8274
8653
  "VariableID:670:2700",
8275
- "VariableID:1:158",
8654
+ "VariableID:41186:6437",
8276
8655
  "VariableID:1:172",
8656
+ "VariableID:1:158",
8277
8657
  "VariableID:1:161",
8278
8658
  "VariableID:1:159",
8279
8659
  "VariableID:576:22878",
@@ -8321,8 +8701,8 @@ const FIGMA_VARIABLE_COLLECTIONS = {
8321
8701
  "VariableID:12479:23364",
8322
8702
  "VariableID:12479:23365",
8323
8703
  "VariableID:12479:23366",
8324
- "VariableID:1:7",
8325
8704
  "VariableID:12548:1437",
8705
+ "VariableID:1:7",
8326
8706
  "VariableID:12479:23367",
8327
8707
  "VariableID:12479:23368",
8328
8708
  "VariableID:12479:23371",
@@ -8457,14 +8837,12 @@ const FIGMA_VARIABLE_COLLECTIONS = {
8457
8837
  "VariableID:10181:34417",
8458
8838
  "VariableID:1:168",
8459
8839
  "VariableID:29913:8440",
8460
- "VariableID:29917:289",
8461
8840
  "VariableID:29917:362",
8462
- "VariableID:30009:40284",
8463
8841
  "VariableID:29917:5084",
8842
+ "VariableID:30009:40284",
8464
8843
  "VariableID:30009:40393",
8465
8844
  "VariableID:30021:1313",
8466
8845
  "VariableID:30023:1876",
8467
- "VariableID:30023:1877",
8468
8846
  "VariableID:30023:3032",
8469
8847
  "VariableID:30023:1878",
8470
8848
  "VariableID:30023:3347",
@@ -8485,7 +8863,12 @@ const FIGMA_VARIABLE_COLLECTIONS = {
8485
8863
  "VariableID:43290:12820",
8486
8864
  "VariableID:43290:12822",
8487
8865
  "VariableID:43290:12823",
8488
- "VariableID:43290:12824"
8866
+ "VariableID:43290:12824",
8867
+ "VariableID:49497:1643",
8868
+ "VariableID:49497:1644",
8869
+ "VariableID:49495:1861",
8870
+ "VariableID:49497:1645",
8871
+ "VariableID:49497:1646"
8489
8872
  ]
8490
8873
  },
8491
8874
  "VariableCollectionId:1:174": {
@@ -8611,9 +8994,9 @@ const FIGMA_VARIABLE_COLLECTIONS = {
8611
8994
  "VariableID:289:13772",
8612
8995
  "VariableID:1886:93038",
8613
8996
  "VariableID:289:13773",
8997
+ "VariableID:796:4448",
8614
8998
  "VariableID:15518:15916",
8615
8999
  "VariableID:19225:68732",
8616
- "VariableID:796:4448",
8617
9000
  "VariableID:17955:50606",
8618
9001
  "VariableID:514:13178",
8619
9002
  "VariableID:535:1747",
@@ -8704,6 +9087,136 @@ const FIGMA_VARIABLES = {
8704
9087
  ],
8705
9088
  "codeSyntax": {}
8706
9089
  },
9090
+ "VariableID:49495:1861": {
9091
+ "name": "_scroll-fog",
9092
+ "id": "VariableID:49495:1861",
9093
+ "remote": false,
9094
+ "key": "12f1d88d590090e396c9b283bb51d4e89d9016d2",
9095
+ "variableCollectionId": "VariableCollectionId:1:3",
9096
+ "resolvedType": "COLOR",
9097
+ "description": "",
9098
+ "hiddenFromPublishing": false,
9099
+ "valuesByMode": {
9100
+ "1928:7": {
9101
+ "type": "VARIABLE_ALIAS",
9102
+ "id": "VariableID:29453:35711"
9103
+ },
9104
+ "1928:8": {
9105
+ "r": 1,
9106
+ "g": 1,
9107
+ "b": 1,
9108
+ "a": 1
9109
+ }
9110
+ },
9111
+ "scopes": [
9112
+ "ALL_SCOPES"
9113
+ ],
9114
+ "codeSyntax": {}
9115
+ },
9116
+ "VariableID:49497:1643": {
9117
+ "name": "_scroll-fog/layer-default/0",
9118
+ "id": "VariableID:49497:1643",
9119
+ "remote": false,
9120
+ "key": "fae00f7e2fc2ee7cd4bef58de19f468255ca4c5c",
9121
+ "variableCollectionId": "VariableCollectionId:1:3",
9122
+ "resolvedType": "COLOR",
9123
+ "description": "",
9124
+ "hiddenFromPublishing": false,
9125
+ "valuesByMode": {
9126
+ "1928:7": {
9127
+ "type": "VARIABLE_ALIAS",
9128
+ "id": "VariableID:1:155"
9129
+ },
9130
+ "1928:8": {
9131
+ "type": "VARIABLE_ALIAS",
9132
+ "id": "VariableID:1:155"
9133
+ }
9134
+ },
9135
+ "scopes": [
9136
+ "ALL_SCOPES"
9137
+ ],
9138
+ "codeSyntax": {}
9139
+ },
9140
+ "VariableID:49497:1644": {
9141
+ "name": "_scroll-fog/layer-default/1",
9142
+ "id": "VariableID:49497:1644",
9143
+ "remote": false,
9144
+ "key": "fac0ada2e11c8d54997dce0fc72a723fce514a9f",
9145
+ "variableCollectionId": "VariableCollectionId:1:3",
9146
+ "resolvedType": "COLOR",
9147
+ "description": "",
9148
+ "hiddenFromPublishing": false,
9149
+ "valuesByMode": {
9150
+ "1928:7": {
9151
+ "r": 1,
9152
+ "g": 1,
9153
+ "b": 1,
9154
+ "a": 0
9155
+ },
9156
+ "1928:8": {
9157
+ "r": 0.08627451211214066,
9158
+ "g": 0.09019608050584793,
9159
+ "b": 0.10588235408067703,
9160
+ "a": 0
9161
+ }
9162
+ },
9163
+ "scopes": [
9164
+ "ALL_SCOPES"
9165
+ ],
9166
+ "codeSyntax": {}
9167
+ },
9168
+ "VariableID:49497:1645": {
9169
+ "name": "_scroll-fog/layer-floating/0",
9170
+ "id": "VariableID:49497:1645",
9171
+ "remote": false,
9172
+ "key": "334d485b6f54e6ed8dce767cd150b578f4323ad3",
9173
+ "variableCollectionId": "VariableCollectionId:1:3",
9174
+ "resolvedType": "COLOR",
9175
+ "description": "",
9176
+ "hiddenFromPublishing": false,
9177
+ "valuesByMode": {
9178
+ "1928:7": {
9179
+ "type": "VARIABLE_ALIAS",
9180
+ "id": "VariableID:238:17662"
9181
+ },
9182
+ "1928:8": {
9183
+ "type": "VARIABLE_ALIAS",
9184
+ "id": "VariableID:238:17662"
9185
+ }
9186
+ },
9187
+ "scopes": [
9188
+ "ALL_SCOPES"
9189
+ ],
9190
+ "codeSyntax": {}
9191
+ },
9192
+ "VariableID:49497:1646": {
9193
+ "name": "_scroll-fog/layer-floating/1",
9194
+ "id": "VariableID:49497:1646",
9195
+ "remote": false,
9196
+ "key": "3259bea6c3999bc3ad72999fd3123648544bd002",
9197
+ "variableCollectionId": "VariableCollectionId:1:3",
9198
+ "resolvedType": "COLOR",
9199
+ "description": "",
9200
+ "hiddenFromPublishing": false,
9201
+ "valuesByMode": {
9202
+ "1928:7": {
9203
+ "r": 1,
9204
+ "g": 1,
9205
+ "b": 1,
9206
+ "a": 0
9207
+ },
9208
+ "1928:8": {
9209
+ "r": 0.11555555462837219,
9210
+ "g": 0.12638889253139496,
9211
+ "b": 0.14444443583488464,
9212
+ "a": 0
9213
+ }
9214
+ },
9215
+ "scopes": [
9216
+ "ALL_SCOPES"
9217
+ ],
9218
+ "codeSyntax": {}
9219
+ },
8707
9220
  "VariableID:1:151": {
8708
9221
  "name": "bg/brand-solid",
8709
9222
  "id": "VariableID:1:151",