@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,254 @@
1
+ /**
2
+ * Figma API Client
3
+ *
4
+ * Provides methods to interact with the Figma API for fetching files and exporting images.
5
+ * Implements error handling and retry logic for robust API interactions.
6
+ *
7
+ * Requirements: 2.1, 2.5
8
+ */
9
+ /**
10
+ * Figma API base URL
11
+ */
12
+ const FIGMA_API_BASE = 'https://api.figma.com/v1';
13
+ /**
14
+ * Default retry configuration
15
+ * 针对 Figma API 限速优化:
16
+ * - Starter/Pro 用户: Tier 1 限制 10次/分钟
17
+ * - Organization 用户: Tier 1 限制 15次/分钟
18
+ * - Enterprise 用户: Tier 1 限制 20次/分钟
19
+ */
20
+ const DEFAULT_RETRY_CONFIG = {
21
+ maxRetries: 5,
22
+ baseDelayMs: 2000,
23
+ maxDelayMs: 60000, // 最长等待 60 秒
24
+ };
25
+ /**
26
+ * Figma API error codes
27
+ */
28
+ export var FigmaErrorCode;
29
+ (function (FigmaErrorCode) {
30
+ FigmaErrorCode["INVALID_TOKEN"] = "FIGMA_INVALID_TOKEN";
31
+ FigmaErrorCode["RATE_LIMIT"] = "FIGMA_RATE_LIMIT";
32
+ FigmaErrorCode["FILE_NOT_FOUND"] = "FIGMA_FILE_NOT_FOUND";
33
+ FigmaErrorCode["NETWORK_ERROR"] = "FIGMA_NETWORK_ERROR";
34
+ FigmaErrorCode["UNKNOWN_ERROR"] = "FIGMA_UNKNOWN_ERROR";
35
+ })(FigmaErrorCode || (FigmaErrorCode = {}));
36
+ /**
37
+ * Custom error class for Figma API errors
38
+ */
39
+ export class FigmaApiError extends Error {
40
+ constructor(code, message, recoverable = false, suggestion, details) {
41
+ super(message);
42
+ this.code = code;
43
+ this.recoverable = recoverable;
44
+ this.suggestion = suggestion;
45
+ this.details = details;
46
+ this.name = 'FigmaApiError';
47
+ }
48
+ toErrorResponse() {
49
+ return {
50
+ code: this.code,
51
+ message: this.message,
52
+ recoverable: this.recoverable,
53
+ suggestion: this.suggestion,
54
+ details: this.details,
55
+ };
56
+ }
57
+ }
58
+ /**
59
+ * Figma API Client class
60
+ */
61
+ export class FigmaClient {
62
+ constructor(token, retryConfig = {}) {
63
+ if (!token) {
64
+ throw new FigmaApiError(FigmaErrorCode.INVALID_TOKEN, 'Figma API token is required', false, 'Please provide a valid Figma Personal Access Token');
65
+ }
66
+ this.token = token;
67
+ this.retryConfig = { ...DEFAULT_RETRY_CONFIG, ...retryConfig };
68
+ }
69
+ /**
70
+ * Makes an authenticated request to the Figma API with retry logic
71
+ * Properly handles Retry-After header for rate limiting
72
+ */
73
+ async fetchWithRetry(url, options = {}) {
74
+ let lastError = null;
75
+ let delay = this.retryConfig.baseDelayMs;
76
+ for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {
77
+ try {
78
+ const response = await fetch(url, {
79
+ ...options,
80
+ headers: {
81
+ 'X-Figma-Token': this.token,
82
+ ...options.headers,
83
+ },
84
+ });
85
+ if (response.ok) {
86
+ return (await response.json());
87
+ }
88
+ // Handle rate limiting with Retry-After header
89
+ if (response.status === 429) {
90
+ const retryAfter = response.headers.get('Retry-After');
91
+ if (retryAfter) {
92
+ // Retry-After is in seconds, convert to ms and add buffer
93
+ const waitTime = (parseInt(retryAfter, 10) + 1) * 1000;
94
+ console.log(`⏳ 限速中,等待 ${retryAfter} 秒后重试...`);
95
+ await this.sleep(waitTime);
96
+ // Don't count this as an attempt since we're respecting the server's request
97
+ attempt--;
98
+ continue;
99
+ }
100
+ }
101
+ // Handle specific HTTP errors
102
+ const errorBody = await response.text();
103
+ const error = this.handleHttpError(response.status, errorBody);
104
+ // Don't retry non-recoverable errors
105
+ if (!error.recoverable) {
106
+ throw error;
107
+ }
108
+ lastError = error;
109
+ }
110
+ catch (error) {
111
+ if (error instanceof FigmaApiError && !error.recoverable) {
112
+ throw error;
113
+ }
114
+ lastError =
115
+ error instanceof Error
116
+ ? error
117
+ : new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, 'Unknown error occurred', true);
118
+ }
119
+ // Wait before retrying (exponential backoff)
120
+ if (attempt < this.retryConfig.maxRetries) {
121
+ console.log(`⏳ 重试中 (${attempt + 1}/${this.retryConfig.maxRetries}),等待 ${Math.min(delay, this.retryConfig.maxDelayMs) / 1000} 秒...`);
122
+ await this.sleep(Math.min(delay, this.retryConfig.maxDelayMs));
123
+ delay *= 2;
124
+ }
125
+ }
126
+ throw (lastError ||
127
+ new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, 'Request failed after retries', false));
128
+ }
129
+ /**
130
+ * Handles HTTP error responses and converts them to FigmaApiError
131
+ */
132
+ handleHttpError(status, body) {
133
+ switch (status) {
134
+ case 401:
135
+ case 403:
136
+ 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');
137
+ case 404:
138
+ 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 });
139
+ case 429:
140
+ return new FigmaApiError(FigmaErrorCode.RATE_LIMIT, 'Figma API rate limit exceeded', true, 'The request will be retried automatically with exponential backoff');
141
+ default:
142
+ return new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, `Figma API error: HTTP ${status}`, status >= 500, // Server errors are recoverable
143
+ status >= 500
144
+ ? 'Server error, retrying...'
145
+ : 'Please check the request parameters', { status, responseBody: body });
146
+ }
147
+ }
148
+ /**
149
+ * Sleep utility for retry delays
150
+ */
151
+ sleep(ms) {
152
+ return new Promise((resolve) => setTimeout(resolve, ms));
153
+ }
154
+ /**
155
+ * Gets a Figma file by its key
156
+ *
157
+ * @param fileKey - The Figma file key
158
+ * @returns The file data including document structure and components
159
+ */
160
+ async getFile(fileKey) {
161
+ if (!fileKey) {
162
+ throw new FigmaApiError(FigmaErrorCode.FILE_NOT_FOUND, 'File key is required', false, 'Please provide a valid Figma file key');
163
+ }
164
+ const url = `${FIGMA_API_BASE}/files/${fileKey}`;
165
+ return this.fetchWithRetry(url);
166
+ }
167
+ /**
168
+ * Exports images for specified node IDs
169
+ *
170
+ * @param fileKey - The Figma file key
171
+ * @param nodeIds - Array of node IDs to export
172
+ * @param options - Export options (format, scale, etc.)
173
+ * @returns Map of node IDs to image URLs
174
+ */
175
+ async getImages(fileKey, nodeIds, options = { format: 'svg' }) {
176
+ if (!fileKey) {
177
+ throw new FigmaApiError(FigmaErrorCode.FILE_NOT_FOUND, 'File key is required', false, 'Please provide a valid Figma file key');
178
+ }
179
+ if (!nodeIds || nodeIds.length === 0) {
180
+ return {};
181
+ }
182
+ const params = new URLSearchParams({
183
+ ids: nodeIds.join(','),
184
+ format: options.format,
185
+ });
186
+ if (options.scale !== undefined) {
187
+ params.set('scale', options.scale.toString());
188
+ }
189
+ if (options.format === 'svg') {
190
+ if (options.svgIncludeId !== undefined) {
191
+ params.set('svg_include_id', options.svgIncludeId.toString());
192
+ }
193
+ if (options.svgSimplifyStroke !== undefined) {
194
+ params.set('svg_simplify_stroke', options.svgSimplifyStroke.toString());
195
+ }
196
+ }
197
+ const url = `${FIGMA_API_BASE}/images/${fileKey}?${params.toString()}`;
198
+ const response = await this.fetchWithRetry(url);
199
+ if (response.err) {
200
+ throw new FigmaApiError(FigmaErrorCode.UNKNOWN_ERROR, `Failed to export images: ${response.err}`, false, 'Please check the node IDs and try again');
201
+ }
202
+ return response.images;
203
+ }
204
+ /**
205
+ * Downloads SVG content from a URL
206
+ *
207
+ * @param url - The URL to download from
208
+ * @returns The SVG content as a string
209
+ */
210
+ async downloadSvg(url) {
211
+ let lastError = null;
212
+ let delay = this.retryConfig.baseDelayMs;
213
+ for (let attempt = 0; attempt <= this.retryConfig.maxRetries; attempt++) {
214
+ try {
215
+ const response = await fetch(url);
216
+ if (response.ok) {
217
+ return await response.text();
218
+ }
219
+ if (response.status >= 500) {
220
+ lastError = new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, `Failed to download SVG: HTTP ${response.status}`, true);
221
+ }
222
+ else {
223
+ throw new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, `Failed to download SVG: HTTP ${response.status}`, false);
224
+ }
225
+ }
226
+ catch (error) {
227
+ if (error instanceof FigmaApiError && !error.recoverable) {
228
+ throw error;
229
+ }
230
+ lastError =
231
+ error instanceof Error
232
+ ? error
233
+ : new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, 'Network error while downloading SVG', true);
234
+ }
235
+ if (attempt < this.retryConfig.maxRetries) {
236
+ await this.sleep(Math.min(delay, this.retryConfig.maxDelayMs));
237
+ delay *= 2;
238
+ }
239
+ }
240
+ throw (lastError ||
241
+ new FigmaApiError(FigmaErrorCode.NETWORK_ERROR, 'Failed to download SVG after retries', false));
242
+ }
243
+ }
244
+ /**
245
+ * Creates a new Figma client instance
246
+ *
247
+ * @param token - Figma Personal Access Token
248
+ * @param retryConfig - Optional retry configuration
249
+ * @returns A new FigmaClient instance
250
+ */
251
+ export function createFigmaClient(token, retryConfig) {
252
+ return new FigmaClient(token, retryConfig);
253
+ }
254
+ //# 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,268 @@
1
+ /**
2
+ * Icon Component Filtering Module
3
+ *
4
+ * Provides functions to filter and identify icon components from Figma file data.
5
+ * Filters components based on type and naming conventions.
6
+ *
7
+ * Requirements: 2.2
8
+ */
9
+ /**
10
+ * Default icon naming pattern - matches lowercase names with hyphens
11
+ * Examples: "arrow-right", "check-circle", "user-profile"
12
+ */
13
+ export const DEFAULT_ICON_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
14
+ /**
15
+ * Default filter configuration
16
+ */
17
+ export const DEFAULT_FILTER_CONFIG = {
18
+ namePattern: DEFAULT_ICON_NAME_PATTERN,
19
+ minSize: 8,
20
+ maxSize: 128,
21
+ };
22
+ /**
23
+ * Checks if a component matches the icon naming convention
24
+ *
25
+ * @param name - Component name to check
26
+ * @param config - Filter configuration
27
+ * @returns True if the name matches the icon naming convention
28
+ */
29
+ export function matchesIconNamingConvention(name, config = DEFAULT_FILTER_CONFIG) {
30
+ if (!name || typeof name !== 'string') {
31
+ return false;
32
+ }
33
+ // Check name pattern
34
+ if (!config.namePattern.test(name)) {
35
+ return false;
36
+ }
37
+ // Check prefix if specified
38
+ if (config.namePrefix && !name.startsWith(config.namePrefix)) {
39
+ return false;
40
+ }
41
+ // Check suffix if specified
42
+ if (config.nameSuffix && !name.endsWith(config.nameSuffix)) {
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ /**
48
+ * Checks if a component has valid icon dimensions
49
+ *
50
+ * @param width - Component width
51
+ * @param height - Component height
52
+ * @param config - Filter configuration
53
+ * @returns True if dimensions are within valid range
54
+ */
55
+ export function hasValidIconDimensions(width, height, config = DEFAULT_FILTER_CONFIG) {
56
+ if (typeof width !== 'number' || typeof height !== 'number') {
57
+ return false;
58
+ }
59
+ if (width <= 0 || height <= 0) {
60
+ return false;
61
+ }
62
+ if (config.minSize !== undefined) {
63
+ if (width < config.minSize || height < config.minSize) {
64
+ return false;
65
+ }
66
+ }
67
+ if (config.maxSize !== undefined) {
68
+ if (width > config.maxSize || height > config.maxSize) {
69
+ return false;
70
+ }
71
+ }
72
+ return true;
73
+ }
74
+ /**
75
+ * Checks if a Figma node is a COMPONENT or FRAME type (SVGs are imported as frames)
76
+ *
77
+ * @param node - Figma node or component to check
78
+ * @returns True if the node is a COMPONENT or FRAME type
79
+ */
80
+ export function isComponentType(node) {
81
+ return node && (node.type === 'COMPONENT' || node.type === 'FRAME');
82
+ }
83
+ /**
84
+ * Filters a single component to determine if it's a valid icon
85
+ *
86
+ * @param component - Figma component to check
87
+ * @param config - Filter configuration
88
+ * @returns Object with isIcon flag and reason if not an icon
89
+ */
90
+ export function filterIconComponent(component, config = DEFAULT_FILTER_CONFIG) {
91
+ // Check if it's a component type
92
+ if (!isComponentType(component)) {
93
+ return { isIcon: false, reason: 'Not a COMPONENT type' };
94
+ }
95
+ // Check naming convention
96
+ if (!matchesIconNamingConvention(component.name, config)) {
97
+ return {
98
+ isIcon: false,
99
+ reason: `Name "${component.name}" does not match icon naming convention`,
100
+ };
101
+ }
102
+ // Check dimensions
103
+ const { width, height } = component.absoluteBoundingBox || {
104
+ width: 0,
105
+ height: 0,
106
+ };
107
+ if (!hasValidIconDimensions(width, height, config)) {
108
+ return {
109
+ isIcon: false,
110
+ reason: `Dimensions ${width}x${height} are outside valid range`,
111
+ };
112
+ }
113
+ return { isIcon: true };
114
+ }
115
+ /**
116
+ * Filters icon components from a Figma file response
117
+ * Searches both the components map and the document tree for FRAME nodes (imported SVGs)
118
+ *
119
+ * @param fileResponse - Figma file API response
120
+ * @param config - Filter configuration
121
+ * @returns Filter result with icons and skipped components
122
+ */
123
+ export function filterIconComponents(fileResponse, config = DEFAULT_FILTER_CONFIG) {
124
+ const icons = [];
125
+ const skipped = [];
126
+ const processedIds = new Set();
127
+ // First, process components from the components map
128
+ const components = fileResponse.components || {};
129
+ const componentEntries = Object.entries(components);
130
+ for (const [id, component] of componentEntries) {
131
+ processedIds.add(id);
132
+ const result = filterIconComponent(component, config);
133
+ if (result.isIcon) {
134
+ const { width, height } = component.absoluteBoundingBox;
135
+ icons.push({
136
+ id,
137
+ name: component.name,
138
+ width,
139
+ height,
140
+ original: component,
141
+ });
142
+ }
143
+ else {
144
+ skipped.push({
145
+ id,
146
+ name: component.name,
147
+ reason: result.reason || 'Unknown reason',
148
+ });
149
+ }
150
+ }
151
+ // Then, traverse the document tree to find FRAME nodes (imported SVGs)
152
+ if (fileResponse.document) {
153
+ traverseForFrames(fileResponse.document, config, icons, skipped, processedIds);
154
+ }
155
+ return {
156
+ icons,
157
+ skipped,
158
+ totalProcessed: processedIds.size,
159
+ };
160
+ }
161
+ /**
162
+ * Recursively traverses the document tree to find FRAME nodes that could be icons
163
+ */
164
+ function traverseForFrames(node, config, icons, skipped, processedIds) {
165
+ // Skip if already processed
166
+ if (processedIds.has(node.id)) {
167
+ return;
168
+ }
169
+ // Check if this is a FRAME that could be an icon
170
+ if (node.type === 'FRAME' && node.absoluteBoundingBox) {
171
+ processedIds.add(node.id);
172
+ const { width, height } = node.absoluteBoundingBox;
173
+ // Check if dimensions are valid for an icon
174
+ if (hasValidIconDimensions(width, height, config)) {
175
+ // Check aspect ratio - icons should be roughly square
176
+ const aspectRatio = width / height;
177
+ if (aspectRatio >= 0.5 && aspectRatio <= 2) {
178
+ // Create a component-like object
179
+ const component = {
180
+ id: node.id,
181
+ name: node.name,
182
+ type: 'FRAME',
183
+ absoluteBoundingBox: { width, height },
184
+ };
185
+ // Use a more lenient name check for frames
186
+ const nameIsValid = config.namePattern.test(node.name) ||
187
+ /^[a-zA-Z][a-zA-Z0-9-_\s]*$/.test(node.name);
188
+ if (nameIsValid) {
189
+ icons.push({
190
+ id: node.id,
191
+ name: node.name,
192
+ width,
193
+ height,
194
+ original: component,
195
+ });
196
+ }
197
+ else {
198
+ skipped.push({
199
+ id: node.id,
200
+ name: node.name,
201
+ reason: `Name "${node.name}" does not match icon naming convention`,
202
+ });
203
+ }
204
+ }
205
+ }
206
+ }
207
+ // Recursively process children
208
+ if (node.children && Array.isArray(node.children)) {
209
+ for (const child of node.children) {
210
+ traverseForFrames(child, config, icons, skipped, processedIds);
211
+ }
212
+ }
213
+ }
214
+ /**
215
+ * Extracts component IDs from filtered icons
216
+ *
217
+ * @param icons - Array of filtered icon components
218
+ * @returns Array of component IDs
219
+ */
220
+ export function extractComponentIds(icons) {
221
+ return icons.map((icon) => icon.id);
222
+ }
223
+ /**
224
+ * Filters components from a mixed list of Figma nodes
225
+ * Recursively searches through the node tree to find COMPONENT nodes
226
+ *
227
+ * @param nodes - Array of Figma nodes
228
+ * @param config - Filter configuration
229
+ * @returns Array of filtered icon components
230
+ */
231
+ export function filterIconsFromNodes(nodes, config = DEFAULT_FILTER_CONFIG) {
232
+ const icons = [];
233
+ function traverse(node) {
234
+ if (node.type === 'COMPONENT') {
235
+ // Create a FigmaComponent-like object for filtering
236
+ const component = {
237
+ id: node.id,
238
+ name: node.name,
239
+ type: 'COMPONENT',
240
+ absoluteBoundingBox: {
241
+ width: 24, // Default size if not available
242
+ height: 24,
243
+ },
244
+ };
245
+ const result = filterIconComponent(component, config);
246
+ if (result.isIcon) {
247
+ icons.push({
248
+ id: node.id,
249
+ name: node.name,
250
+ width: component.absoluteBoundingBox.width,
251
+ height: component.absoluteBoundingBox.height,
252
+ original: component,
253
+ });
254
+ }
255
+ }
256
+ // Recursively process children
257
+ if (node.children && Array.isArray(node.children)) {
258
+ for (const child of node.children) {
259
+ traverse(child);
260
+ }
261
+ }
262
+ }
263
+ for (const node of nodes) {
264
+ traverse(node);
265
+ }
266
+ return icons;
267
+ }
268
+ //# 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,39 @@
1
+ /**
2
+ * Icon search/filter functionality
3
+ */
4
+ /**
5
+ * Filter icons by search query
6
+ * Returns only icons whose names contain the search query (case-insensitive)
7
+ *
8
+ * @param icons - Array of icon objects
9
+ * @param query - Search query string
10
+ * @returns Filtered icons matching the query
11
+ */
12
+ export function filterIcons(icons, query) {
13
+ if (!query || query.trim() === '') {
14
+ return icons;
15
+ }
16
+ const normalizedQuery = query.toLowerCase().trim();
17
+ return icons.filter((icon) => {
18
+ const name = (icon.name || '').toLowerCase();
19
+ const originalName = (icon.originalName || '').toLowerCase();
20
+ return (name.includes(normalizedQuery) || originalName.includes(normalizedQuery));
21
+ });
22
+ }
23
+ /**
24
+ * Check if an icon matches a search query
25
+ *
26
+ * @param icon - Icon object to check
27
+ * @param query - Search query string
28
+ * @returns True if icon matches the query
29
+ */
30
+ export function iconMatchesQuery(icon, query) {
31
+ if (!query || query.trim() === '') {
32
+ return true;
33
+ }
34
+ const normalizedQuery = query.toLowerCase().trim();
35
+ const name = (icon.name || '').toLowerCase();
36
+ const originalName = (icon.originalName || '').toLowerCase();
37
+ return (name.includes(normalizedQuery) || originalName.includes(normalizedQuery));
38
+ }
39
+ //# 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;AAaH;;;;;;;GAOG;AACH,MAAM,UAAU,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,MAAM,UAAU,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"}