@zleap-ai/icons 0.0.28

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 (455) hide show
  1. package/README.md +155 -0
  2. package/dist/cjs/changelog-generator.js +300 -0
  3. package/dist/cjs/changelog-generator.js.map +1 -0
  4. package/dist/cjs/component-generator.js +434 -0
  5. package/dist/cjs/component-generator.js.map +1 -0
  6. package/dist/cjs/figma-client.js +260 -0
  7. package/dist/cjs/figma-client.js.map +1 -0
  8. package/dist/cjs/icon-filter.js +278 -0
  9. package/dist/cjs/icon-filter.js.map +1 -0
  10. package/dist/cjs/icon-search.js +43 -0
  11. package/dist/cjs/icon-search.js.map +1 -0
  12. package/dist/cjs/icon-validator.js +369 -0
  13. package/dist/cjs/icon-validator.js.map +1 -0
  14. package/dist/cjs/icons/IconArrowRight.js +17 -0
  15. package/dist/cjs/icons/IconArrowRight.js.map +1 -0
  16. package/dist/cjs/icons/IconBack.js +17 -0
  17. package/dist/cjs/icons/IconBack.js.map +1 -0
  18. package/dist/cjs/icons/IconBack1.js +17 -0
  19. package/dist/cjs/icons/IconBack1.js.map +1 -0
  20. package/dist/cjs/icons/IconBangZhuShuoMing.js +17 -0
  21. package/dist/cjs/icons/IconBangZhuShuoMing.js.map +1 -0
  22. package/dist/cjs/icons/IconBaoGaoZhuShou.js +20 -0
  23. package/dist/cjs/icons/IconBaoGaoZhuShou.js.map +1 -0
  24. package/dist/cjs/icons/IconCheck.js +17 -0
  25. package/dist/cjs/icons/IconCheck.js.map +1 -0
  26. package/dist/cjs/icons/IconCheck1.js +17 -0
  27. package/dist/cjs/icons/IconCheck1.js.map +1 -0
  28. package/dist/cjs/icons/IconChengYuanGuanLi.js +20 -0
  29. package/dist/cjs/icons/IconChengYuanGuanLi.js.map +1 -0
  30. package/dist/cjs/icons/IconChongXinFaSong.js +17 -0
  31. package/dist/cjs/icons/IconChongXinFaSong.js.map +1 -0
  32. package/dist/cjs/icons/IconCloseCircle.js +17 -0
  33. package/dist/cjs/icons/IconCloseCircle.js.map +1 -0
  34. package/dist/cjs/icons/IconCuoWu.js +17 -0
  35. package/dist/cjs/icons/IconCuoWu.js.map +1 -0
  36. package/dist/cjs/icons/IconDingDing.js +17 -0
  37. package/dist/cjs/icons/IconDingDing.js.map +1 -0
  38. package/dist/cjs/icons/IconEdit03.js +17 -0
  39. package/dist/cjs/icons/IconEdit03.js.map +1 -0
  40. package/dist/cjs/icons/IconFanHui.js +17 -0
  41. package/dist/cjs/icons/IconFanHui.js.map +1 -0
  42. package/dist/cjs/icons/IconFangDa.js +17 -0
  43. package/dist/cjs/icons/IconFangDa.js.map +1 -0
  44. package/dist/cjs/icons/IconFrame.js +17 -0
  45. package/dist/cjs/icons/IconFrame.js.map +1 -0
  46. package/dist/cjs/icons/IconFrame1261156242.js +17 -0
  47. package/dist/cjs/icons/IconFrame1261156242.js.map +1 -0
  48. package/dist/cjs/icons/IconGuanBi.js +17 -0
  49. package/dist/cjs/icons/IconGuanBi.js.map +1 -0
  50. package/dist/cjs/icons/IconGuanBi1.js +17 -0
  51. package/dist/cjs/icons/IconGuanBi1.js.map +1 -0
  52. package/dist/cjs/icons/IconGuanBiXiao.js +17 -0
  53. package/dist/cjs/icons/IconGuanBiXiao.js.map +1 -0
  54. package/dist/cjs/icons/IconGuanBiXiao1.js +17 -0
  55. package/dist/cjs/icons/IconGuanBiXiao1.js.map +1 -0
  56. package/dist/cjs/icons/IconLianJie.js +17 -0
  57. package/dist/cjs/icons/IconLianJie.js.map +1 -0
  58. package/dist/cjs/icons/IconLianJie1.js +17 -0
  59. package/dist/cjs/icons/IconLianJie1.js.map +1 -0
  60. package/dist/cjs/icons/IconQiWeiJiQiRen.js +17 -0
  61. package/dist/cjs/icons/IconQiWeiJiQiRen.js.map +1 -0
  62. package/dist/cjs/icons/IconQiYeBan.js +20 -0
  63. package/dist/cjs/icons/IconQiYeBan.js.map +1 -0
  64. package/dist/cjs/icons/IconRss.js +17 -0
  65. package/dist/cjs/icons/IconRss.js.map +1 -0
  66. package/dist/cjs/icons/IconSearch.js +17 -0
  67. package/dist/cjs/icons/IconSearch.js.map +1 -0
  68. package/dist/cjs/icons/IconSearch1.js +17 -0
  69. package/dist/cjs/icons/IconSearch1.js.map +1 -0
  70. package/dist/cjs/icons/IconSheZhi.js +17 -0
  71. package/dist/cjs/icons/IconSheZhi.js.map +1 -0
  72. package/dist/cjs/icons/IconShengCheng.js +17 -0
  73. package/dist/cjs/icons/IconShengCheng.js.map +1 -0
  74. package/dist/cjs/icons/IconShiBai.js +17 -0
  75. package/dist/cjs/icons/IconShiBai.js.map +1 -0
  76. package/dist/cjs/icons/IconShouQi.js +17 -0
  77. package/dist/cjs/icons/IconShouQi.js.map +1 -0
  78. package/dist/cjs/icons/IconSouSuoZhuShou.js +20 -0
  79. package/dist/cjs/icons/IconSouSuoZhuShou.js.map +1 -0
  80. package/dist/cjs/icons/IconSuoXiao.js +17 -0
  81. package/dist/cjs/icons/IconSuoXiao.js.map +1 -0
  82. package/dist/cjs/icons/IconTianJia.js +17 -0
  83. package/dist/cjs/icons/IconTianJia.js.map +1 -0
  84. package/dist/cjs/icons/IconTongZhi.js +17 -0
  85. package/dist/cjs/icons/IconTongZhi.js.map +1 -0
  86. package/dist/cjs/icons/IconTongZhi1.js +17 -0
  87. package/dist/cjs/icons/IconTongZhi1.js.map +1 -0
  88. package/dist/cjs/icons/IconTuiChu.js +17 -0
  89. package/dist/cjs/icons/IconTuiChu.js.map +1 -0
  90. package/dist/cjs/icons/IconWangLuoJianSuo.js +17 -0
  91. package/dist/cjs/icons/IconWangLuoJianSuo.js.map +1 -0
  92. package/dist/cjs/icons/IconWangYeXiaZai.js +17 -0
  93. package/dist/cjs/icons/IconWangYeXiaZai.js.map +1 -0
  94. package/dist/cjs/icons/IconWeiBiaoTi1HuaBan11.js +17 -0
  95. package/dist/cjs/icons/IconWeiBiaoTi1HuaBan11.js.map +1 -0
  96. package/dist/cjs/icons/IconWenDaZhuShou.js +20 -0
  97. package/dist/cjs/icons/IconWenDaZhuShou.js.map +1 -0
  98. package/dist/cjs/icons/IconWenDang.js +17 -0
  99. package/dist/cjs/icons/IconWenDang.js.map +1 -0
  100. package/dist/cjs/icons/IconWenDang1.js +17 -0
  101. package/dist/cjs/icons/IconWenDang1.js.map +1 -0
  102. package/dist/cjs/icons/IconWenJian.js +17 -0
  103. package/dist/cjs/icons/IconWenJian.js.map +1 -0
  104. package/dist/cjs/icons/IconXiTongPeiZhi.js +20 -0
  105. package/dist/cjs/icons/IconXiTongPeiZhi.js.map +1 -0
  106. package/dist/cjs/icons/IconXiaZai.js +17 -0
  107. package/dist/cjs/icons/IconXiaZai.js.map +1 -0
  108. package/dist/cjs/icons/IconXiaZaiZhuShou.js +20 -0
  109. package/dist/cjs/icons/IconXiaZaiZhuShou.js.map +1 -0
  110. package/dist/cjs/icons/IconXiaoXi.js +17 -0
  111. package/dist/cjs/icons/IconXiaoXi.js.map +1 -0
  112. package/dist/cjs/icons/IconXinXiGuanLi.js +20 -0
  113. package/dist/cjs/icons/IconXinXiGuanLi.js.map +1 -0
  114. package/dist/cjs/icons/IconXinZeng.js +17 -0
  115. package/dist/cjs/icons/IconXinZeng.js.map +1 -0
  116. package/dist/cjs/icons/IconYanZhengMa.js +17 -0
  117. package/dist/cjs/icons/IconYanZhengMa.js.map +1 -0
  118. package/dist/cjs/icons/IconYunYingGuanLi.js +20 -0
  119. package/dist/cjs/icons/IconYunYingGuanLi.js.map +1 -0
  120. package/dist/cjs/icons/IconZengJia.js +17 -0
  121. package/dist/cjs/icons/IconZengJia.js.map +1 -0
  122. package/dist/cjs/icons/IconZhanKai.js +17 -0
  123. package/dist/cjs/icons/IconZhanKai.js.map +1 -0
  124. package/dist/cjs/icons/IconZhanKai1.js +17 -0
  125. package/dist/cjs/icons/IconZhanKai1.js.map +1 -0
  126. package/dist/cjs/icons/IconZhengQue.js +17 -0
  127. package/dist/cjs/icons/IconZhengQue.js.map +1 -0
  128. package/dist/cjs/icons/IconZhiShiKu.js +17 -0
  129. package/dist/cjs/icons/IconZhiShiKu.js.map +1 -0
  130. package/dist/cjs/icons/IconZhiShiKu1.js +17 -0
  131. package/dist/cjs/icons/IconZhiShiKu1.js.map +1 -0
  132. package/dist/cjs/index.js +95 -0
  133. package/dist/cjs/index.js.map +1 -0
  134. package/dist/cjs/manifest-generator.js +281 -0
  135. package/dist/cjs/manifest-generator.js.map +1 -0
  136. package/dist/cjs/multi-format-output.js +233 -0
  137. package/dist/cjs/multi-format-output.js.map +1 -0
  138. package/dist/cjs/svg-exporter.js +283 -0
  139. package/dist/cjs/svg-exporter.js.map +1 -0
  140. package/dist/cjs/svg-transformer.js +327 -0
  141. package/dist/cjs/svg-transformer.js.map +1 -0
  142. package/dist/cjs/types.js +3 -0
  143. package/dist/cjs/types.js.map +1 -0
  144. package/dist/cjs/version-manager.js +175 -0
  145. package/dist/cjs/version-manager.js.map +1 -0
  146. package/dist/esm/changelog-generator.js +288 -0
  147. package/dist/esm/changelog-generator.js.map +1 -0
  148. package/dist/esm/component-generator.js +426 -0
  149. package/dist/esm/component-generator.js.map +1 -0
  150. package/dist/esm/figma-client.js +254 -0
  151. package/dist/esm/figma-client.js.map +1 -0
  152. package/dist/esm/icon-filter.js +268 -0
  153. package/dist/esm/icon-filter.js.map +1 -0
  154. package/dist/esm/icon-search.js +39 -0
  155. package/dist/esm/icon-search.js.map +1 -0
  156. package/dist/esm/icon-validator.js +358 -0
  157. package/dist/esm/icon-validator.js.map +1 -0
  158. package/dist/esm/icons/IconArrowRight.js +14 -0
  159. package/dist/esm/icons/IconArrowRight.js.map +1 -0
  160. package/dist/esm/icons/IconBack.js +14 -0
  161. package/dist/esm/icons/IconBack.js.map +1 -0
  162. package/dist/esm/icons/IconBack1.js +14 -0
  163. package/dist/esm/icons/IconBack1.js.map +1 -0
  164. package/dist/esm/icons/IconBangZhuShuoMing.js +14 -0
  165. package/dist/esm/icons/IconBangZhuShuoMing.js.map +1 -0
  166. package/dist/esm/icons/IconBaoGaoZhuShou.js +17 -0
  167. package/dist/esm/icons/IconBaoGaoZhuShou.js.map +1 -0
  168. package/dist/esm/icons/IconCheck.js +14 -0
  169. package/dist/esm/icons/IconCheck.js.map +1 -0
  170. package/dist/esm/icons/IconCheck1.js +14 -0
  171. package/dist/esm/icons/IconCheck1.js.map +1 -0
  172. package/dist/esm/icons/IconChengYuanGuanLi.js +17 -0
  173. package/dist/esm/icons/IconChengYuanGuanLi.js.map +1 -0
  174. package/dist/esm/icons/IconChongXinFaSong.js +14 -0
  175. package/dist/esm/icons/IconChongXinFaSong.js.map +1 -0
  176. package/dist/esm/icons/IconCloseCircle.js +14 -0
  177. package/dist/esm/icons/IconCloseCircle.js.map +1 -0
  178. package/dist/esm/icons/IconCuoWu.js +14 -0
  179. package/dist/esm/icons/IconCuoWu.js.map +1 -0
  180. package/dist/esm/icons/IconDingDing.js +14 -0
  181. package/dist/esm/icons/IconDingDing.js.map +1 -0
  182. package/dist/esm/icons/IconEdit03.js +14 -0
  183. package/dist/esm/icons/IconEdit03.js.map +1 -0
  184. package/dist/esm/icons/IconFanHui.js +14 -0
  185. package/dist/esm/icons/IconFanHui.js.map +1 -0
  186. package/dist/esm/icons/IconFangDa.js +14 -0
  187. package/dist/esm/icons/IconFangDa.js.map +1 -0
  188. package/dist/esm/icons/IconFrame.js +14 -0
  189. package/dist/esm/icons/IconFrame.js.map +1 -0
  190. package/dist/esm/icons/IconFrame1261156242.js +14 -0
  191. package/dist/esm/icons/IconFrame1261156242.js.map +1 -0
  192. package/dist/esm/icons/IconGuanBi.js +14 -0
  193. package/dist/esm/icons/IconGuanBi.js.map +1 -0
  194. package/dist/esm/icons/IconGuanBi1.js +14 -0
  195. package/dist/esm/icons/IconGuanBi1.js.map +1 -0
  196. package/dist/esm/icons/IconGuanBiXiao.js +14 -0
  197. package/dist/esm/icons/IconGuanBiXiao.js.map +1 -0
  198. package/dist/esm/icons/IconGuanBiXiao1.js +14 -0
  199. package/dist/esm/icons/IconGuanBiXiao1.js.map +1 -0
  200. package/dist/esm/icons/IconLianJie.js +14 -0
  201. package/dist/esm/icons/IconLianJie.js.map +1 -0
  202. package/dist/esm/icons/IconLianJie1.js +14 -0
  203. package/dist/esm/icons/IconLianJie1.js.map +1 -0
  204. package/dist/esm/icons/IconQiWeiJiQiRen.js +14 -0
  205. package/dist/esm/icons/IconQiWeiJiQiRen.js.map +1 -0
  206. package/dist/esm/icons/IconQiYeBan.js +17 -0
  207. package/dist/esm/icons/IconQiYeBan.js.map +1 -0
  208. package/dist/esm/icons/IconRss.js +14 -0
  209. package/dist/esm/icons/IconRss.js.map +1 -0
  210. package/dist/esm/icons/IconSearch.js +14 -0
  211. package/dist/esm/icons/IconSearch.js.map +1 -0
  212. package/dist/esm/icons/IconSearch1.js +14 -0
  213. package/dist/esm/icons/IconSearch1.js.map +1 -0
  214. package/dist/esm/icons/IconSheZhi.js +14 -0
  215. package/dist/esm/icons/IconSheZhi.js.map +1 -0
  216. package/dist/esm/icons/IconShengCheng.js +14 -0
  217. package/dist/esm/icons/IconShengCheng.js.map +1 -0
  218. package/dist/esm/icons/IconShiBai.js +14 -0
  219. package/dist/esm/icons/IconShiBai.js.map +1 -0
  220. package/dist/esm/icons/IconShouQi.js +14 -0
  221. package/dist/esm/icons/IconShouQi.js.map +1 -0
  222. package/dist/esm/icons/IconSouSuoZhuShou.js +17 -0
  223. package/dist/esm/icons/IconSouSuoZhuShou.js.map +1 -0
  224. package/dist/esm/icons/IconSuoXiao.js +14 -0
  225. package/dist/esm/icons/IconSuoXiao.js.map +1 -0
  226. package/dist/esm/icons/IconTianJia.js +14 -0
  227. package/dist/esm/icons/IconTianJia.js.map +1 -0
  228. package/dist/esm/icons/IconTongZhi.js +14 -0
  229. package/dist/esm/icons/IconTongZhi.js.map +1 -0
  230. package/dist/esm/icons/IconTongZhi1.js +14 -0
  231. package/dist/esm/icons/IconTongZhi1.js.map +1 -0
  232. package/dist/esm/icons/IconTuiChu.js +14 -0
  233. package/dist/esm/icons/IconTuiChu.js.map +1 -0
  234. package/dist/esm/icons/IconWangLuoJianSuo.js +14 -0
  235. package/dist/esm/icons/IconWangLuoJianSuo.js.map +1 -0
  236. package/dist/esm/icons/IconWangYeXiaZai.js +14 -0
  237. package/dist/esm/icons/IconWangYeXiaZai.js.map +1 -0
  238. package/dist/esm/icons/IconWeiBiaoTi1HuaBan11.js +14 -0
  239. package/dist/esm/icons/IconWeiBiaoTi1HuaBan11.js.map +1 -0
  240. package/dist/esm/icons/IconWenDaZhuShou.js +17 -0
  241. package/dist/esm/icons/IconWenDaZhuShou.js.map +1 -0
  242. package/dist/esm/icons/IconWenDang.js +14 -0
  243. package/dist/esm/icons/IconWenDang.js.map +1 -0
  244. package/dist/esm/icons/IconWenDang1.js +14 -0
  245. package/dist/esm/icons/IconWenDang1.js.map +1 -0
  246. package/dist/esm/icons/IconWenJian.js +14 -0
  247. package/dist/esm/icons/IconWenJian.js.map +1 -0
  248. package/dist/esm/icons/IconXiTongPeiZhi.js +17 -0
  249. package/dist/esm/icons/IconXiTongPeiZhi.js.map +1 -0
  250. package/dist/esm/icons/IconXiaZai.js +14 -0
  251. package/dist/esm/icons/IconXiaZai.js.map +1 -0
  252. package/dist/esm/icons/IconXiaZaiZhuShou.js +17 -0
  253. package/dist/esm/icons/IconXiaZaiZhuShou.js.map +1 -0
  254. package/dist/esm/icons/IconXiaoXi.js +14 -0
  255. package/dist/esm/icons/IconXiaoXi.js.map +1 -0
  256. package/dist/esm/icons/IconXinXiGuanLi.js +17 -0
  257. package/dist/esm/icons/IconXinXiGuanLi.js.map +1 -0
  258. package/dist/esm/icons/IconXinZeng.js +14 -0
  259. package/dist/esm/icons/IconXinZeng.js.map +1 -0
  260. package/dist/esm/icons/IconYanZhengMa.js +14 -0
  261. package/dist/esm/icons/IconYanZhengMa.js.map +1 -0
  262. package/dist/esm/icons/IconYunYingGuanLi.js +17 -0
  263. package/dist/esm/icons/IconYunYingGuanLi.js.map +1 -0
  264. package/dist/esm/icons/IconZengJia.js +14 -0
  265. package/dist/esm/icons/IconZengJia.js.map +1 -0
  266. package/dist/esm/icons/IconZhanKai.js +14 -0
  267. package/dist/esm/icons/IconZhanKai.js.map +1 -0
  268. package/dist/esm/icons/IconZhanKai1.js +14 -0
  269. package/dist/esm/icons/IconZhanKai1.js.map +1 -0
  270. package/dist/esm/icons/IconZhengQue.js +14 -0
  271. package/dist/esm/icons/IconZhengQue.js.map +1 -0
  272. package/dist/esm/icons/IconZhiShiKu.js +14 -0
  273. package/dist/esm/icons/IconZhiShiKu.js.map +1 -0
  274. package/dist/esm/icons/IconZhiShiKu1.js +14 -0
  275. package/dist/esm/icons/IconZhiShiKu1.js.map +1 -0
  276. package/dist/esm/index.js +72 -0
  277. package/dist/esm/index.js.map +1 -0
  278. package/dist/esm/manifest-generator.js +267 -0
  279. package/dist/esm/manifest-generator.js.map +1 -0
  280. package/dist/esm/multi-format-output.js +221 -0
  281. package/dist/esm/multi-format-output.js.map +1 -0
  282. package/dist/esm/svg-exporter.js +244 -0
  283. package/dist/esm/svg-exporter.js.map +1 -0
  284. package/dist/esm/svg-transformer.js +314 -0
  285. package/dist/esm/svg-transformer.js.map +1 -0
  286. package/dist/esm/types.js +2 -0
  287. package/dist/esm/types.js.map +1 -0
  288. package/dist/esm/version-manager.js +167 -0
  289. package/dist/esm/version-manager.js.map +1 -0
  290. package/dist/types/changelog-generator.d.ts +112 -0
  291. package/dist/types/changelog-generator.d.ts.map +1 -0
  292. package/dist/types/component-generator.d.ts +88 -0
  293. package/dist/types/component-generator.d.ts.map +1 -0
  294. package/dist/types/figma-client.d.ts +107 -0
  295. package/dist/types/figma-client.d.ts.map +1 -0
  296. package/dist/types/icon-filter.d.ts +126 -0
  297. package/dist/types/icon-filter.d.ts.map +1 -0
  298. package/dist/types/icon-search.d.ts +31 -0
  299. package/dist/types/icon-search.d.ts.map +1 -0
  300. package/dist/types/icon-validator.d.ts +110 -0
  301. package/dist/types/icon-validator.d.ts.map +1 -0
  302. package/dist/types/icons/IconArrowRight.d.ts +17 -0
  303. package/dist/types/icons/IconArrowRight.d.ts.map +1 -0
  304. package/dist/types/icons/IconBack.d.ts +17 -0
  305. package/dist/types/icons/IconBack.d.ts.map +1 -0
  306. package/dist/types/icons/IconBack1.d.ts +17 -0
  307. package/dist/types/icons/IconBack1.d.ts.map +1 -0
  308. package/dist/types/icons/IconBangZhuShuoMing.d.ts +17 -0
  309. package/dist/types/icons/IconBangZhuShuoMing.d.ts.map +1 -0
  310. package/dist/types/icons/IconBaoGaoZhuShou.d.ts +17 -0
  311. package/dist/types/icons/IconBaoGaoZhuShou.d.ts.map +1 -0
  312. package/dist/types/icons/IconCheck.d.ts +17 -0
  313. package/dist/types/icons/IconCheck.d.ts.map +1 -0
  314. package/dist/types/icons/IconCheck1.d.ts +17 -0
  315. package/dist/types/icons/IconCheck1.d.ts.map +1 -0
  316. package/dist/types/icons/IconChengYuanGuanLi.d.ts +17 -0
  317. package/dist/types/icons/IconChengYuanGuanLi.d.ts.map +1 -0
  318. package/dist/types/icons/IconChongXinFaSong.d.ts +17 -0
  319. package/dist/types/icons/IconChongXinFaSong.d.ts.map +1 -0
  320. package/dist/types/icons/IconCloseCircle.d.ts +17 -0
  321. package/dist/types/icons/IconCloseCircle.d.ts.map +1 -0
  322. package/dist/types/icons/IconCuoWu.d.ts +17 -0
  323. package/dist/types/icons/IconCuoWu.d.ts.map +1 -0
  324. package/dist/types/icons/IconDingDing.d.ts +17 -0
  325. package/dist/types/icons/IconDingDing.d.ts.map +1 -0
  326. package/dist/types/icons/IconEdit03.d.ts +17 -0
  327. package/dist/types/icons/IconEdit03.d.ts.map +1 -0
  328. package/dist/types/icons/IconFanHui.d.ts +17 -0
  329. package/dist/types/icons/IconFanHui.d.ts.map +1 -0
  330. package/dist/types/icons/IconFangDa.d.ts +17 -0
  331. package/dist/types/icons/IconFangDa.d.ts.map +1 -0
  332. package/dist/types/icons/IconFrame.d.ts +17 -0
  333. package/dist/types/icons/IconFrame.d.ts.map +1 -0
  334. package/dist/types/icons/IconFrame1261156242.d.ts +17 -0
  335. package/dist/types/icons/IconFrame1261156242.d.ts.map +1 -0
  336. package/dist/types/icons/IconGuanBi.d.ts +17 -0
  337. package/dist/types/icons/IconGuanBi.d.ts.map +1 -0
  338. package/dist/types/icons/IconGuanBi1.d.ts +17 -0
  339. package/dist/types/icons/IconGuanBi1.d.ts.map +1 -0
  340. package/dist/types/icons/IconGuanBiXiao.d.ts +17 -0
  341. package/dist/types/icons/IconGuanBiXiao.d.ts.map +1 -0
  342. package/dist/types/icons/IconGuanBiXiao1.d.ts +17 -0
  343. package/dist/types/icons/IconGuanBiXiao1.d.ts.map +1 -0
  344. package/dist/types/icons/IconLianJie.d.ts +17 -0
  345. package/dist/types/icons/IconLianJie.d.ts.map +1 -0
  346. package/dist/types/icons/IconLianJie1.d.ts +17 -0
  347. package/dist/types/icons/IconLianJie1.d.ts.map +1 -0
  348. package/dist/types/icons/IconQiWeiJiQiRen.d.ts +17 -0
  349. package/dist/types/icons/IconQiWeiJiQiRen.d.ts.map +1 -0
  350. package/dist/types/icons/IconQiYeBan.d.ts +17 -0
  351. package/dist/types/icons/IconQiYeBan.d.ts.map +1 -0
  352. package/dist/types/icons/IconRss.d.ts +17 -0
  353. package/dist/types/icons/IconRss.d.ts.map +1 -0
  354. package/dist/types/icons/IconSearch.d.ts +17 -0
  355. package/dist/types/icons/IconSearch.d.ts.map +1 -0
  356. package/dist/types/icons/IconSearch1.d.ts +17 -0
  357. package/dist/types/icons/IconSearch1.d.ts.map +1 -0
  358. package/dist/types/icons/IconSheZhi.d.ts +17 -0
  359. package/dist/types/icons/IconSheZhi.d.ts.map +1 -0
  360. package/dist/types/icons/IconShengCheng.d.ts +17 -0
  361. package/dist/types/icons/IconShengCheng.d.ts.map +1 -0
  362. package/dist/types/icons/IconShiBai.d.ts +17 -0
  363. package/dist/types/icons/IconShiBai.d.ts.map +1 -0
  364. package/dist/types/icons/IconShouQi.d.ts +17 -0
  365. package/dist/types/icons/IconShouQi.d.ts.map +1 -0
  366. package/dist/types/icons/IconSouSuoZhuShou.d.ts +17 -0
  367. package/dist/types/icons/IconSouSuoZhuShou.d.ts.map +1 -0
  368. package/dist/types/icons/IconSuoXiao.d.ts +17 -0
  369. package/dist/types/icons/IconSuoXiao.d.ts.map +1 -0
  370. package/dist/types/icons/IconTianJia.d.ts +17 -0
  371. package/dist/types/icons/IconTianJia.d.ts.map +1 -0
  372. package/dist/types/icons/IconTongZhi.d.ts +17 -0
  373. package/dist/types/icons/IconTongZhi.d.ts.map +1 -0
  374. package/dist/types/icons/IconTongZhi1.d.ts +17 -0
  375. package/dist/types/icons/IconTongZhi1.d.ts.map +1 -0
  376. package/dist/types/icons/IconTuiChu.d.ts +17 -0
  377. package/dist/types/icons/IconTuiChu.d.ts.map +1 -0
  378. package/dist/types/icons/IconWangLuoJianSuo.d.ts +17 -0
  379. package/dist/types/icons/IconWangLuoJianSuo.d.ts.map +1 -0
  380. package/dist/types/icons/IconWangYeXiaZai.d.ts +17 -0
  381. package/dist/types/icons/IconWangYeXiaZai.d.ts.map +1 -0
  382. package/dist/types/icons/IconWeiBiaoTi1HuaBan11.d.ts +17 -0
  383. package/dist/types/icons/IconWeiBiaoTi1HuaBan11.d.ts.map +1 -0
  384. package/dist/types/icons/IconWenDaZhuShou.d.ts +17 -0
  385. package/dist/types/icons/IconWenDaZhuShou.d.ts.map +1 -0
  386. package/dist/types/icons/IconWenDang.d.ts +17 -0
  387. package/dist/types/icons/IconWenDang.d.ts.map +1 -0
  388. package/dist/types/icons/IconWenDang1.d.ts +17 -0
  389. package/dist/types/icons/IconWenDang1.d.ts.map +1 -0
  390. package/dist/types/icons/IconWenJian.d.ts +17 -0
  391. package/dist/types/icons/IconWenJian.d.ts.map +1 -0
  392. package/dist/types/icons/IconXiTongPeiZhi.d.ts +17 -0
  393. package/dist/types/icons/IconXiTongPeiZhi.d.ts.map +1 -0
  394. package/dist/types/icons/IconXiaZai.d.ts +17 -0
  395. package/dist/types/icons/IconXiaZai.d.ts.map +1 -0
  396. package/dist/types/icons/IconXiaZaiZhuShou.d.ts +17 -0
  397. package/dist/types/icons/IconXiaZaiZhuShou.d.ts.map +1 -0
  398. package/dist/types/icons/IconXiaoXi.d.ts +17 -0
  399. package/dist/types/icons/IconXiaoXi.d.ts.map +1 -0
  400. package/dist/types/icons/IconXinXiGuanLi.d.ts +17 -0
  401. package/dist/types/icons/IconXinXiGuanLi.d.ts.map +1 -0
  402. package/dist/types/icons/IconXinZeng.d.ts +17 -0
  403. package/dist/types/icons/IconXinZeng.d.ts.map +1 -0
  404. package/dist/types/icons/IconYanZhengMa.d.ts +17 -0
  405. package/dist/types/icons/IconYanZhengMa.d.ts.map +1 -0
  406. package/dist/types/icons/IconYunYingGuanLi.d.ts +17 -0
  407. package/dist/types/icons/IconYunYingGuanLi.d.ts.map +1 -0
  408. package/dist/types/icons/IconZengJia.d.ts +17 -0
  409. package/dist/types/icons/IconZengJia.d.ts.map +1 -0
  410. package/dist/types/icons/IconZhanKai.d.ts +17 -0
  411. package/dist/types/icons/IconZhanKai.d.ts.map +1 -0
  412. package/dist/types/icons/IconZhanKai1.d.ts +17 -0
  413. package/dist/types/icons/IconZhanKai1.d.ts.map +1 -0
  414. package/dist/types/icons/IconZhengQue.d.ts +17 -0
  415. package/dist/types/icons/IconZhengQue.d.ts.map +1 -0
  416. package/dist/types/icons/IconZhiShiKu.d.ts +17 -0
  417. package/dist/types/icons/IconZhiShiKu.d.ts.map +1 -0
  418. package/dist/types/icons/IconZhiShiKu1.d.ts +17 -0
  419. package/dist/types/icons/IconZhiShiKu1.d.ts.map +1 -0
  420. package/dist/types/index.d.ts +56 -0
  421. package/dist/types/index.d.ts.map +1 -0
  422. package/dist/types/manifest-generator.d.ts +113 -0
  423. package/dist/types/manifest-generator.d.ts.map +1 -0
  424. package/dist/types/multi-format-output.d.ts +151 -0
  425. package/dist/types/multi-format-output.d.ts.map +1 -0
  426. package/dist/types/svg-exporter.d.ts +103 -0
  427. package/dist/types/svg-exporter.d.ts.map +1 -0
  428. package/dist/types/svg-transformer.d.ts +103 -0
  429. package/dist/types/svg-transformer.d.ts.map +1 -0
  430. package/dist/types/types.d.ts +346 -0
  431. package/dist/types/types.d.ts.map +1 -0
  432. package/dist/types/version-manager.d.ts +82 -0
  433. package/dist/types/version-manager.d.ts.map +1 -0
  434. package/icons.json +227 -0
  435. package/package.json +66 -0
  436. package/svg/back.svg +1 -0
  437. package/svg/back1.svg +1 -0
  438. package/svg/check.svg +1 -0
  439. package/svg/check1.svg +1 -0
  440. package/svg/search.svg +1 -0
  441. package/svg/search1.svg +1 -0
  442. package/svg//345/205/263/351/227/255-/345/260/217.svg +1 -0
  443. package/svg//345/205/263/351/227/255-/345/260/2171.svg +1 -0
  444. package/svg//345/205/263/351/227/255.svg +1 -0
  445. package/svg//345/205/263/351/227/2551.svg +1 -0
  446. package/svg//345/261/225/345/274/200.svg +1 -0
  447. package/svg//345/261/225/345/274/2001.svg +1 -0
  448. package/svg//346/226/207/346/241/243.svg +1 -0
  449. package/svg//346/226/207/346/241/2431.svg +1 -0
  450. package/svg//347/237/245/350/257/206/345/272/223.svg +1 -0
  451. package/svg//347/237/245/350/257/206/345/272/2231.svg +1 -0
  452. package/svg//351/200/232/347/237/245.svg +1 -0
  453. package/svg//351/200/232/347/237/2451.svg +1 -0
  454. package/svg//351/223/276/346/216/245.svg +1 -0
  455. package/svg//351/223/276/346/216/2451.svg +1 -0
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /**
3
+ * Figma API Client
4
+ *
5
+ * Provides methods to interact with the Figma API for fetching files and exporting images.
6
+ * Implements error handling and retry logic for robust API interactions.
7
+ *
8
+ * Requirements: 2.1, 2.5
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.FigmaClient = exports.FigmaApiError = exports.FigmaErrorCode = void 0;
12
+ exports.createFigmaClient = createFigmaClient;
13
+ /**
14
+ * Figma API base URL
15
+ */
16
+ const FIGMA_API_BASE = 'https://api.figma.com/v1';
17
+ /**
18
+ * Default retry configuration
19
+ * 针对 Figma API 限速优化:
20
+ * - Starter/Pro 用户: Tier 1 限制 10次/分钟
21
+ * - Organization 用户: Tier 1 限制 15次/分钟
22
+ * - Enterprise 用户: Tier 1 限制 20次/分钟
23
+ */
24
+ const DEFAULT_RETRY_CONFIG = {
25
+ maxRetries: 5,
26
+ baseDelayMs: 2000,
27
+ maxDelayMs: 60000, // 最长等待 60 秒
28
+ };
29
+ /**
30
+ * Figma API error codes
31
+ */
32
+ var FigmaErrorCode;
33
+ (function (FigmaErrorCode) {
34
+ FigmaErrorCode["INVALID_TOKEN"] = "FIGMA_INVALID_TOKEN";
35
+ FigmaErrorCode["RATE_LIMIT"] = "FIGMA_RATE_LIMIT";
36
+ FigmaErrorCode["FILE_NOT_FOUND"] = "FIGMA_FILE_NOT_FOUND";
37
+ FigmaErrorCode["NETWORK_ERROR"] = "FIGMA_NETWORK_ERROR";
38
+ FigmaErrorCode["UNKNOWN_ERROR"] = "FIGMA_UNKNOWN_ERROR";
39
+ })(FigmaErrorCode || (exports.FigmaErrorCode = FigmaErrorCode = {}));
40
+ /**
41
+ * Custom error class for Figma API errors
42
+ */
43
+ class FigmaApiError extends Error {
44
+ constructor(code, message, recoverable = false, suggestion, details) {
45
+ super(message);
46
+ this.code = code;
47
+ this.recoverable = recoverable;
48
+ this.suggestion = suggestion;
49
+ this.details = details;
50
+ this.name = 'FigmaApiError';
51
+ }
52
+ toErrorResponse() {
53
+ return {
54
+ code: this.code,
55
+ message: this.message,
56
+ recoverable: this.recoverable,
57
+ suggestion: this.suggestion,
58
+ details: this.details,
59
+ };
60
+ }
61
+ }
62
+ exports.FigmaApiError = FigmaApiError;
63
+ /**
64
+ * Figma API Client class
65
+ */
66
+ class FigmaClient {
67
+ constructor(token, retryConfig = {}) {
68
+ if (!token) {
69
+ throw new FigmaApiError(FigmaErrorCode.INVALID_TOKEN, 'Figma API token is required', false, 'Please provide a valid Figma Personal Access Token');
70
+ }
71
+ this.token = token;
72
+ this.retryConfig = { ...DEFAULT_RETRY_CONFIG, ...retryConfig };
73
+ }
74
+ /**
75
+ * Makes an authenticated request to the Figma API with retry logic
76
+ * Properly handles Retry-After header for rate limiting
77
+ */
78
+ async fetchWithRetry(url, options = {}) {
79
+ let lastError = null;
80
+ let delay = this.retryConfig.baseDelayMs;
81
+ for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {
82
+ try {
83
+ const response = await fetch(url, {
84
+ ...options,
85
+ headers: {
86
+ 'X-Figma-Token': this.token,
87
+ ...options.headers,
88
+ },
89
+ });
90
+ if (response.ok) {
91
+ return (await response.json());
92
+ }
93
+ // Handle rate limiting with Retry-After header
94
+ if (response.status === 429) {
95
+ const retryAfter = response.headers.get('Retry-After');
96
+ if (retryAfter) {
97
+ // Retry-After is in seconds, convert to ms and add buffer
98
+ const waitTime = (parseInt(retryAfter, 10) + 1) * 1000;
99
+ console.log(`⏳ 限速中,等待 ${retryAfter} 秒后重试...`);
100
+ await this.sleep(waitTime);
101
+ // Don't count this as an attempt since we're respecting the server's request
102
+ attempt--;
103
+ continue;
104
+ }
105
+ }
106
+ // Handle specific HTTP errors
107
+ const errorBody = await response.text();
108
+ const error = this.handleHttpError(response.status, errorBody);
109
+ // Don't retry non-recoverable errors
110
+ if (!error.recoverable) {
111
+ throw error;
112
+ }
113
+ lastError = error;
114
+ }
115
+ catch (error) {
116
+ if (error instanceof FigmaApiError && !error.recoverable) {
117
+ throw error;
118
+ }
119
+ lastError =
120
+ error instanceof Error
121
+ ? error
122
+ : new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, 'Unknown error occurred', true);
123
+ }
124
+ // Wait before retrying (exponential backoff)
125
+ if (attempt < this.retryConfig.maxRetries) {
126
+ console.log(`⏳ 重试中 (${attempt + 1}/${this.retryConfig.maxRetries}),等待 ${Math.min(delay, this.retryConfig.maxDelayMs) / 1000} 秒...`);
127
+ await this.sleep(Math.min(delay, this.retryConfig.maxDelayMs));
128
+ delay *= 2;
129
+ }
130
+ }
131
+ throw (lastError ||
132
+ new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, 'Request failed after retries', false));
133
+ }
134
+ /**
135
+ * Handles HTTP error responses and converts them to FigmaApiError
136
+ */
137
+ handleHttpError(status, body) {
138
+ switch (status) {
139
+ case 401:
140
+ case 403:
141
+ return new FigmaApiError(FigmaErrorCode.INVALID_TOKEN, 'Invalid or expired Figma API token', false, 'Please check your Figma Personal Access Token and ensure it has the required permissions');
142
+ case 404:
143
+ return new FigmaApiError(FigmaErrorCode.FILE_NOT_FOUND, 'Figma file not found', false, 'Please verify the file key and ensure you have access to the file', { responseBody: body });
144
+ case 429:
145
+ return new FigmaApiError(FigmaErrorCode.RATE_LIMIT, 'Figma API rate limit exceeded', true, 'The request will be retried automatically with exponential backoff');
146
+ default:
147
+ return new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, `Figma API error: HTTP ${status}`, status >= 500, // Server errors are recoverable
148
+ status >= 500
149
+ ? 'Server error, retrying...'
150
+ : 'Please check the request parameters', { status, responseBody: body });
151
+ }
152
+ }
153
+ /**
154
+ * Sleep utility for retry delays
155
+ */
156
+ sleep(ms) {
157
+ return new Promise((resolve) => setTimeout(resolve, ms));
158
+ }
159
+ /**
160
+ * Gets a Figma file by its key
161
+ *
162
+ * @param fileKey - The Figma file key
163
+ * @returns The file data including document structure and components
164
+ */
165
+ async getFile(fileKey) {
166
+ if (!fileKey) {
167
+ throw new FigmaApiError(FigmaErrorCode.FILE_NOT_FOUND, 'File key is required', false, 'Please provide a valid Figma file key');
168
+ }
169
+ const url = `${FIGMA_API_BASE}/files/${fileKey}`;
170
+ return this.fetchWithRetry(url);
171
+ }
172
+ /**
173
+ * Exports images for specified node IDs
174
+ *
175
+ * @param fileKey - The Figma file key
176
+ * @param nodeIds - Array of node IDs to export
177
+ * @param options - Export options (format, scale, etc.)
178
+ * @returns Map of node IDs to image URLs
179
+ */
180
+ async getImages(fileKey, nodeIds, options = { format: 'svg' }) {
181
+ if (!fileKey) {
182
+ throw new FigmaApiError(FigmaErrorCode.FILE_NOT_FOUND, 'File key is required', false, 'Please provide a valid Figma file key');
183
+ }
184
+ if (!nodeIds || nodeIds.length === 0) {
185
+ return {};
186
+ }
187
+ const params = new URLSearchParams({
188
+ ids: nodeIds.join(','),
189
+ format: options.format,
190
+ });
191
+ if (options.scale !== undefined) {
192
+ params.set('scale', options.scale.toString());
193
+ }
194
+ if (options.format === 'svg') {
195
+ if (options.svgIncludeId !== undefined) {
196
+ params.set('svg_include_id', options.svgIncludeId.toString());
197
+ }
198
+ if (options.svgSimplifyStroke !== undefined) {
199
+ params.set('svg_simplify_stroke', options.svgSimplifyStroke.toString());
200
+ }
201
+ }
202
+ const url = `${FIGMA_API_BASE}/images/${fileKey}?${params.toString()}`;
203
+ const response = await this.fetchWithRetry(url);
204
+ if (response.err) {
205
+ throw new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, `Failed to export images: ${response.err}`, false, 'Please check the node IDs and try again');
206
+ }
207
+ return response.images;
208
+ }
209
+ /**
210
+ * Downloads SVG content from a URL
211
+ *
212
+ * @param url - The URL to download from
213
+ * @returns The SVG content as a string
214
+ */
215
+ async downloadSvg(url) {
216
+ let lastError = null;
217
+ let delay = this.retryConfig.baseDelayMs;
218
+ for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {
219
+ try {
220
+ const response = await fetch(url);
221
+ if (response.ok) {
222
+ return await response.text();
223
+ }
224
+ if (response.status >= 500) {
225
+ lastError = new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, `Failed to download SVG: HTTP ${response.status}`, true);
226
+ }
227
+ else {
228
+ throw new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, `Failed to download SVG: HTTP ${response.status}`, false);
229
+ }
230
+ }
231
+ catch (error) {
232
+ if (error instanceof FigmaApiError && !error.recoverable) {
233
+ throw error;
234
+ }
235
+ lastError =
236
+ error instanceof Error
237
+ ? error
238
+ : new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, 'Network error while downloading SVG', true);
239
+ }
240
+ if (attempt < this.retryConfig.maxRetries) {
241
+ await this.sleep(Math.min(delay, this.retryConfig.maxDelayMs));
242
+ delay *= 2;
243
+ }
244
+ }
245
+ throw (lastError ||
246
+ new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, 'Failed to download SVG after retries', false));
247
+ }
248
+ }
249
+ exports.FigmaClient = FigmaClient;
250
+ /**
251
+ * Creates a new Figma client instance
252
+ *
253
+ * @param token - Figma Personal Access Token
254
+ * @param retryConfig - Optional retry configuration
255
+ * @returns A new FigmaClient instance
256
+ */
257
+ function createFigmaClient(token, retryConfig) {
258
+ return new FigmaClient(token, retryConfig);
259
+ }
260
+ //# sourceMappingURL=figma-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma-client.js","sourceRoot":"","sources":["../../src/figma-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ /**
3
+ * Icon Component Filtering Module
4
+ *
5
+ * Provides functions to filter and identify icon components from Figma file data.
6
+ * Filters components based on type and naming conventions.
7
+ *
8
+ * Requirements: 2.2
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DEFAULT_FILTER_CONFIG = exports.DEFAULT_ICON_NAME_PATTERN = void 0;
12
+ exports.matchesIconNamingConvention = matchesIconNamingConvention;
13
+ exports.hasValidIconDimensions = hasValidIconDimensions;
14
+ exports.isComponentType = isComponentType;
15
+ exports.filterIconComponent = filterIconComponent;
16
+ exports.filterIconComponents = filterIconComponents;
17
+ exports.extractComponentIds = extractComponentIds;
18
+ exports.filterIconsFromNodes = filterIconsFromNodes;
19
+ /**
20
+ * Default icon naming pattern - matches lowercase names with hyphens
21
+ * Examples: "arrow-right", "check-circle", "user-profile"
22
+ */
23
+ exports.DEFAULT_ICON_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
24
+ /**
25
+ * Default filter configuration
26
+ */
27
+ exports.DEFAULT_FILTER_CONFIG = {
28
+ namePattern: exports.DEFAULT_ICON_NAME_PATTERN,
29
+ minSize: 8,
30
+ maxSize: 128,
31
+ };
32
+ /**
33
+ * Checks if a component matches the icon naming convention
34
+ *
35
+ * @param name - Component name to check
36
+ * @param config - Filter configuration
37
+ * @returns True if the name matches the icon naming convention
38
+ */
39
+ function matchesIconNamingConvention(name, config = exports.DEFAULT_FILTER_CONFIG) {
40
+ if (!name || typeof name !== 'string') {
41
+ return false;
42
+ }
43
+ // Check name pattern
44
+ if (!config.namePattern.test(name)) {
45
+ return false;
46
+ }
47
+ // Check prefix if specified
48
+ if (config.namePrefix && !name.startsWith(config.namePrefix)) {
49
+ return false;
50
+ }
51
+ // Check suffix if specified
52
+ if (config.nameSuffix && !name.endsWith(config.nameSuffix)) {
53
+ return false;
54
+ }
55
+ return true;
56
+ }
57
+ /**
58
+ * Checks if a component has valid icon dimensions
59
+ *
60
+ * @param width - Component width
61
+ * @param height - Component height
62
+ * @param config - Filter configuration
63
+ * @returns True if dimensions are within valid range
64
+ */
65
+ function hasValidIconDimensions(width, height, config = exports.DEFAULT_FILTER_CONFIG) {
66
+ if (typeof width !== 'number' || typeof height !== 'number') {
67
+ return false;
68
+ }
69
+ if (width <= 0 || height <= 0) {
70
+ return false;
71
+ }
72
+ if (config.minSize !== undefined) {
73
+ if (width < config.minSize || height < config.minSize) {
74
+ return false;
75
+ }
76
+ }
77
+ if (config.maxSize !== undefined) {
78
+ if (width > config.maxSize || height > config.maxSize) {
79
+ return false;
80
+ }
81
+ }
82
+ return true;
83
+ }
84
+ /**
85
+ * Checks if a Figma node is a COMPONENT or FRAME type (SVGs are imported as frames)
86
+ *
87
+ * @param node - Figma node or component to check
88
+ * @returns True if the node is a COMPONENT or FRAME type
89
+ */
90
+ function isComponentType(node) {
91
+ return node && (node.type === 'COMPONENT' || node.type === 'FRAME');
92
+ }
93
+ /**
94
+ * Filters a single component to determine if it's a valid icon
95
+ *
96
+ * @param component - Figma component to check
97
+ * @param config - Filter configuration
98
+ * @returns Object with isIcon flag and reason if not an icon
99
+ */
100
+ function filterIconComponent(component, config = exports.DEFAULT_FILTER_CONFIG) {
101
+ // Check if it's a component type
102
+ if (!isComponentType(component)) {
103
+ return { isIcon: false, reason: 'Not a COMPONENT type' };
104
+ }
105
+ // Check naming convention
106
+ if (!matchesIconNamingConvention(component.name, config)) {
107
+ return {
108
+ isIcon: false,
109
+ reason: `Name "${component.name}" does not match icon naming convention`,
110
+ };
111
+ }
112
+ // Check dimensions
113
+ const { width, height } = component.absoluteBoundingBox || {
114
+ width: 0,
115
+ height: 0,
116
+ };
117
+ if (!hasValidIconDimensions(width, height, config)) {
118
+ return {
119
+ isIcon: false,
120
+ reason: `Dimensions ${width}x${height} are outside valid range`,
121
+ };
122
+ }
123
+ return { isIcon: true };
124
+ }
125
+ /**
126
+ * Filters icon components from a Figma file response
127
+ * Searches both the components map and the document tree for FRAME nodes (imported SVGs)
128
+ *
129
+ * @param fileResponse - Figma file API response
130
+ * @param config - Filter configuration
131
+ * @returns Filter result with icons and skipped components
132
+ */
133
+ function filterIconComponents(fileResponse, config = exports.DEFAULT_FILTER_CONFIG) {
134
+ const icons = [];
135
+ const skipped = [];
136
+ const processedIds = new Set();
137
+ // First, process components from the components map
138
+ const components = fileResponse.components || {};
139
+ const componentEntries = Object.entries(components);
140
+ for (const [id, component] of componentEntries) {
141
+ processedIds.add(id);
142
+ const result = filterIconComponent(component, config);
143
+ if (result.isIcon) {
144
+ const { width, height } = component.absoluteBoundingBox;
145
+ icons.push({
146
+ id,
147
+ name: component.name,
148
+ width,
149
+ height,
150
+ original: component,
151
+ });
152
+ }
153
+ else {
154
+ skipped.push({
155
+ id,
156
+ name: component.name,
157
+ reason: result.reason || 'Unknown reason',
158
+ });
159
+ }
160
+ }
161
+ // Then, traverse the document tree to find FRAME nodes (imported SVGs)
162
+ if (fileResponse.document) {
163
+ traverseForFrames(fileResponse.document, config, icons, skipped, processedIds);
164
+ }
165
+ return {
166
+ icons,
167
+ skipped,
168
+ totalProcessed: processedIds.size,
169
+ };
170
+ }
171
+ /**
172
+ * Recursively traverses the document tree to find FRAME nodes that could be icons
173
+ */
174
+ function traverseForFrames(node, config, icons, skipped, processedIds) {
175
+ // Skip if already processed
176
+ if (processedIds.has(node.id)) {
177
+ return;
178
+ }
179
+ // Check if this is a FRAME that could be an icon
180
+ if (node.type === 'FRAME' && node.absoluteBoundingBox) {
181
+ processedIds.add(node.id);
182
+ const { width, height } = node.absoluteBoundingBox;
183
+ // Check if dimensions are valid for an icon
184
+ if (hasValidIconDimensions(width, height, config)) {
185
+ // Check aspect ratio - icons should be roughly square
186
+ const aspectRatio = width / height;
187
+ if (aspectRatio >= 0.5 && aspectRatio <= 2) {
188
+ // Create a component-like object
189
+ const component = {
190
+ id: node.id,
191
+ name: node.name,
192
+ type: 'FRAME',
193
+ absoluteBoundingBox: { width, height },
194
+ };
195
+ // Use a more lenient name check for frames
196
+ const nameIsValid = config.namePattern.test(node.name) ||
197
+ /^[a-zA-Z][a-zA-Z0-9-_\s]*$/.test(node.name);
198
+ if (nameIsValid) {
199
+ icons.push({
200
+ id: node.id,
201
+ name: node.name,
202
+ width,
203
+ height,
204
+ original: component,
205
+ });
206
+ }
207
+ else {
208
+ skipped.push({
209
+ id: node.id,
210
+ name: node.name,
211
+ reason: `Name "${node.name}" does not match icon naming convention`,
212
+ });
213
+ }
214
+ }
215
+ }
216
+ }
217
+ // Recursively process children
218
+ if (node.children && Array.isArray(node.children)) {
219
+ for (const child of node.children) {
220
+ traverseForFrames(child, config, icons, skipped, processedIds);
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * Extracts component IDs from filtered icons
226
+ *
227
+ * @param icons - Array of filtered icon components
228
+ * @returns Array of component IDs
229
+ */
230
+ function extractComponentIds(icons) {
231
+ return icons.map((icon) => icon.id);
232
+ }
233
+ /**
234
+ * Filters components from a mixed list of Figma nodes
235
+ * Recursively searches through the node tree to find COMPONENT nodes
236
+ *
237
+ * @param nodes - Array of Figma nodes
238
+ * @param config - Filter configuration
239
+ * @returns Array of filtered icon components
240
+ */
241
+ function filterIconsFromNodes(nodes, config = exports.DEFAULT_FILTER_CONFIG) {
242
+ const icons = [];
243
+ function traverse(node) {
244
+ if (node.type === 'COMPONENT') {
245
+ // Create a FigmaComponent-like object for filtering
246
+ const component = {
247
+ id: node.id,
248
+ name: node.name,
249
+ type: 'COMPONENT',
250
+ absoluteBoundingBox: {
251
+ width: 24, // Default size if not available
252
+ height: 24,
253
+ },
254
+ };
255
+ const result = filterIconComponent(component, config);
256
+ if (result.isIcon) {
257
+ icons.push({
258
+ id: node.id,
259
+ name: node.name,
260
+ width: component.absoluteBoundingBox.width,
261
+ height: component.absoluteBoundingBox.height,
262
+ original: component,
263
+ });
264
+ }
265
+ }
266
+ // Recursively process children
267
+ if (node.children && Array.isArray(node.children)) {
268
+ for (const child of node.children) {
269
+ traverse(child);
270
+ }
271
+ }
272
+ }
273
+ for (const node of nodes) {
274
+ traverse(node);
275
+ }
276
+ return icons;
277
+ }
278
+ //# sourceMappingURL=icon-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-filter.js","sourceRoot":"","sources":["../../src/icon-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * Icon search/filter functionality
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.filterIcons = filterIcons;
7
+ exports.iconMatchesQuery = iconMatchesQuery;
8
+ /**
9
+ * Filter icons by search query
10
+ * Returns only icons whose names contain the search query (case-insensitive)
11
+ *
12
+ * @param icons - Array of icon objects
13
+ * @param query - Search query string
14
+ * @returns Filtered icons matching the query
15
+ */
16
+ function filterIcons(icons, query) {
17
+ if (!query || query.trim() === '') {
18
+ return icons;
19
+ }
20
+ const normalizedQuery = query.toLowerCase().trim();
21
+ return icons.filter((icon) => {
22
+ const name = (icon.name || '').toLowerCase();
23
+ const originalName = (icon.originalName || '').toLowerCase();
24
+ return (name.includes(normalizedQuery) || originalName.includes(normalizedQuery));
25
+ });
26
+ }
27
+ /**
28
+ * Check if an icon matches a search query
29
+ *
30
+ * @param icon - Icon object to check
31
+ * @param query - Search query string
32
+ * @returns True if icon matches the query
33
+ */
34
+ function iconMatchesQuery(icon, query) {
35
+ if (!query || query.trim() === '') {
36
+ return true;
37
+ }
38
+ const normalizedQuery = query.toLowerCase().trim();
39
+ const name = (icon.name || '').toLowerCase();
40
+ const originalName = (icon.originalName || '').toLowerCase();
41
+ return (name.includes(normalizedQuery) || originalName.includes(normalizedQuery));
42
+ }
43
+ //# sourceMappingURL=icon-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-search.js","sourceRoot":"","sources":["../../src/icon-search.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAqBH,kCAcC;AASD,4CAYC;AA3CD;;;;;;;GAOG;AACH,SAAgB,WAAW,CAAC,KAAiB,EAAE,KAAa;IAC1D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAElD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5D,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CACzE,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,IAAc,EAAE,KAAa;IAC5D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAClD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5C,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAE5D,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CACzE,CAAA;AACH,CAAC"}