@blueshift-gg/ui-components 0.1.1 → 0.1.3

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 (209) hide show
  1. package/dist/Alert.d.mts +19 -0
  2. package/dist/Alert.d.ts +19 -0
  3. package/dist/Alert.js +99 -0
  4. package/dist/Alert.js.map +1 -0
  5. package/dist/Alert.mjs +93 -0
  6. package/dist/Alert.mjs.map +1 -0
  7. package/dist/Avatar.d.mts +2 -2
  8. package/dist/Avatar.d.ts +2 -2
  9. package/dist/Avatar.js +2 -2
  10. package/dist/Avatar.js.map +1 -1
  11. package/dist/Avatar.mjs +2 -2
  12. package/dist/Avatar.mjs.map +1 -1
  13. package/dist/Badge.d.mts +4 -4
  14. package/dist/Badge.d.ts +4 -4
  15. package/dist/Badge.js +3 -3
  16. package/dist/Badge.js.map +1 -1
  17. package/dist/Badge.mjs +3 -3
  18. package/dist/Badge.mjs.map +1 -1
  19. package/dist/Button.d.mts +1 -1
  20. package/dist/Button.d.ts +1 -1
  21. package/dist/Button.js.map +1 -1
  22. package/dist/Button.mjs.map +1 -1
  23. package/dist/Checkbox.js.map +1 -1
  24. package/dist/Checkbox.mjs.map +1 -1
  25. package/dist/Codeblock.js.map +1 -1
  26. package/dist/Codeblock.mjs.map +1 -1
  27. package/dist/CrossHair.js.map +1 -1
  28. package/dist/CrossHair.mjs.map +1 -1
  29. package/dist/DecryptText.js.map +1 -1
  30. package/dist/DecryptText.mjs.map +1 -1
  31. package/dist/Divider.js.map +1 -1
  32. package/dist/Divider.mjs.map +1 -1
  33. package/dist/Dropdown.d.mts +1 -1
  34. package/dist/Dropdown.d.ts +1 -1
  35. package/dist/Dropdown.js.map +1 -1
  36. package/dist/Dropdown.mjs.map +1 -1
  37. package/dist/GridLines.js +1 -1
  38. package/dist/GridLines.js.map +1 -1
  39. package/dist/GridLines.mjs +1 -1
  40. package/dist/GridLines.mjs.map +1 -1
  41. package/dist/HeadingReveal.d.mts +15 -0
  42. package/dist/HeadingReveal.d.ts +15 -0
  43. package/dist/HeadingReveal.js +68 -0
  44. package/dist/HeadingReveal.js.map +1 -0
  45. package/dist/HeadingReveal.mjs +62 -0
  46. package/dist/HeadingReveal.mjs.map +1 -0
  47. package/dist/Icon.d.mts +1 -1
  48. package/dist/Icon.d.ts +1 -1
  49. package/dist/Input.d.mts +1 -1
  50. package/dist/Input.d.ts +1 -1
  51. package/dist/Input.js.map +1 -1
  52. package/dist/Input.mjs.map +1 -1
  53. package/dist/Logo.js.map +1 -1
  54. package/dist/Logo.mjs.map +1 -1
  55. package/dist/Pagination.js.map +1 -1
  56. package/dist/Pagination.mjs.map +1 -1
  57. package/dist/Slider.d.mts +1 -1
  58. package/dist/Slider.d.ts +1 -1
  59. package/dist/Slider.js.map +1 -1
  60. package/dist/Slider.mjs.map +1 -1
  61. package/dist/Tabs.d.mts +1 -1
  62. package/dist/Tabs.d.ts +1 -1
  63. package/dist/Tabs.js.map +1 -1
  64. package/dist/Tabs.mjs.map +1 -1
  65. package/dist/Toast.d.mts +1 -1
  66. package/dist/Toast.d.ts +1 -1
  67. package/dist/Toast.js +2 -3
  68. package/dist/Toast.js.map +1 -1
  69. package/dist/Toast.mjs +2 -3
  70. package/dist/Toast.mjs.map +1 -1
  71. package/dist/Tooltip.js.map +1 -1
  72. package/dist/Tooltip.mjs.map +1 -1
  73. package/dist/icons/Anchor.d.mts +1 -1
  74. package/dist/icons/Anchor.d.ts +1 -1
  75. package/dist/icons/ArrowLeft.d.mts +1 -1
  76. package/dist/icons/ArrowLeft.d.ts +1 -1
  77. package/dist/icons/ArrowRight.d.mts +1 -1
  78. package/dist/icons/ArrowRight.d.ts +1 -1
  79. package/dist/icons/Assembly.d.mts +1 -1
  80. package/dist/icons/Assembly.d.ts +1 -1
  81. package/dist/icons/Challenge.d.mts +1 -1
  82. package/dist/icons/Challenge.d.ts +1 -1
  83. package/dist/icons/Chevron.d.mts +1 -1
  84. package/dist/icons/Chevron.d.ts +1 -1
  85. package/dist/icons/ChevronLeft.d.mts +1 -1
  86. package/dist/icons/ChevronLeft.d.ts +1 -1
  87. package/dist/icons/ChevronRight.d.mts +1 -1
  88. package/dist/icons/ChevronRight.d.ts +1 -1
  89. package/dist/icons/Claim.d.mts +1 -1
  90. package/dist/icons/Claim.d.ts +1 -1
  91. package/dist/icons/Claimed.d.mts +1 -1
  92. package/dist/icons/Claimed.d.ts +1 -1
  93. package/dist/icons/Close.d.mts +1 -1
  94. package/dist/icons/Close.d.ts +1 -1
  95. package/dist/icons/Code.d.mts +1 -1
  96. package/dist/icons/Code.d.ts +1 -1
  97. package/dist/icons/Copy.d.mts +1 -1
  98. package/dist/icons/Copy.d.ts +1 -1
  99. package/dist/icons/Developer.d.mts +1 -1
  100. package/dist/icons/Developer.d.ts +1 -1
  101. package/dist/icons/Difficulty.d.mts +1 -1
  102. package/dist/icons/Difficulty.d.ts +1 -1
  103. package/dist/icons/Discord.d.mts +1 -1
  104. package/dist/icons/Discord.d.ts +1 -1
  105. package/dist/icons/Dollar.d.mts +1 -1
  106. package/dist/icons/Dollar.d.ts +1 -1
  107. package/dist/icons/DoubleArrow.d.mts +1 -1
  108. package/dist/icons/DoubleArrow.d.ts +1 -1
  109. package/dist/icons/EVM.d.mts +1 -1
  110. package/dist/icons/EVM.d.ts +1 -1
  111. package/dist/icons/Email.d.mts +1 -1
  112. package/dist/icons/Email.d.ts +1 -1
  113. package/dist/icons/Error.d.mts +1 -1
  114. package/dist/icons/Error.d.ts +1 -1
  115. package/dist/icons/External.d.mts +1 -1
  116. package/dist/icons/External.d.ts +1 -1
  117. package/dist/icons/Filter.d.mts +1 -1
  118. package/dist/icons/Filter.d.ts +1 -1
  119. package/dist/icons/Firmware.d.mts +1 -1
  120. package/dist/icons/Firmware.d.ts +1 -1
  121. package/dist/icons/Flag.d.mts +1 -1
  122. package/dist/icons/Flag.d.ts +1 -1
  123. package/dist/icons/Flame.d.mts +1 -1
  124. package/dist/icons/Flame.d.ts +1 -1
  125. package/dist/icons/Flexible.d.mts +1 -1
  126. package/dist/icons/Flexible.d.ts +1 -1
  127. package/dist/icons/Free.d.mts +1 -1
  128. package/dist/icons/Free.d.ts +1 -1
  129. package/dist/icons/General.d.mts +1 -1
  130. package/dist/icons/General.d.ts +1 -1
  131. package/dist/icons/Github.d.mts +1 -1
  132. package/dist/icons/Github.d.ts +1 -1
  133. package/dist/icons/GridView.d.mts +1 -1
  134. package/dist/icons/GridView.d.ts +1 -1
  135. package/dist/icons/Heart.d.mts +1 -1
  136. package/dist/icons/Heart.d.ts +1 -1
  137. package/dist/icons/Info.d.mts +1 -1
  138. package/dist/icons/Info.d.ts +1 -1
  139. package/dist/icons/Language.d.mts +1 -1
  140. package/dist/icons/Language.d.ts +1 -1
  141. package/dist/icons/Lessons.d.mts +1 -1
  142. package/dist/icons/Lessons.d.ts +1 -1
  143. package/dist/icons/Link.d.mts +1 -1
  144. package/dist/icons/Link.d.ts +1 -1
  145. package/dist/icons/ListView.d.mts +1 -1
  146. package/dist/icons/ListView.d.ts +1 -1
  147. package/dist/icons/Loading.d.mts +1 -1
  148. package/dist/icons/Loading.d.ts +1 -1
  149. package/dist/icons/Locked.d.mts +1 -1
  150. package/dist/icons/Locked.d.ts +1 -1
  151. package/dist/icons/Mentor.d.mts +1 -1
  152. package/dist/icons/Mentor.d.ts +1 -1
  153. package/dist/icons/Modular.d.mts +1 -1
  154. package/dist/icons/Modular.d.ts +1 -1
  155. package/dist/icons/NFT.d.mts +1 -1
  156. package/dist/icons/NFT.d.ts +1 -1
  157. package/dist/icons/Online.d.mts +1 -1
  158. package/dist/icons/Online.d.ts +1 -1
  159. package/dist/icons/Password.d.mts +1 -1
  160. package/dist/icons/Password.d.ts +1 -1
  161. package/dist/icons/Product.d.mts +1 -1
  162. package/dist/icons/Product.d.ts +1 -1
  163. package/dist/icons/Progress.d.mts +1 -1
  164. package/dist/icons/Progress.d.ts +1 -1
  165. package/dist/icons/Protocol.d.mts +1 -1
  166. package/dist/icons/Protocol.d.ts +1 -1
  167. package/dist/icons/Rewards.d.mts +1 -1
  168. package/dist/icons/Rewards.d.ts +1 -1
  169. package/dist/icons/Rust.d.mts +1 -1
  170. package/dist/icons/Rust.d.ts +1 -1
  171. package/dist/icons/Search.d.mts +1 -1
  172. package/dist/icons/Search.d.ts +1 -1
  173. package/dist/icons/SmartContract.d.mts +1 -1
  174. package/dist/icons/SmartContract.d.ts +1 -1
  175. package/dist/icons/Solana.d.mts +1 -1
  176. package/dist/icons/Solana.d.ts +1 -1
  177. package/dist/icons/Success.d.mts +1 -1
  178. package/dist/icons/Success.d.ts +1 -1
  179. package/dist/icons/SuccessCircle.d.mts +1 -1
  180. package/dist/icons/SuccessCircle.d.ts +1 -1
  181. package/dist/icons/Table.d.mts +1 -1
  182. package/dist/icons/Table.d.ts +1 -1
  183. package/dist/icons/Target.d.mts +1 -1
  184. package/dist/icons/Target.d.ts +1 -1
  185. package/dist/icons/Training.d.mts +1 -1
  186. package/dist/icons/Training.d.ts +1 -1
  187. package/dist/icons/Typescript.d.mts +1 -1
  188. package/dist/icons/Typescript.d.ts +1 -1
  189. package/dist/icons/Unclaimed.d.mts +1 -1
  190. package/dist/icons/Unclaimed.d.ts +1 -1
  191. package/dist/icons/Upload.d.mts +1 -1
  192. package/dist/icons/Upload.d.ts +1 -1
  193. package/dist/icons/Wallet.d.mts +1 -1
  194. package/dist/icons/Wallet.d.ts +1 -1
  195. package/dist/icons/WalletSmall.d.mts +1 -1
  196. package/dist/icons/WalletSmall.d.ts +1 -1
  197. package/dist/icons/Warning.d.mts +1 -1
  198. package/dist/icons/Warning.d.ts +1 -1
  199. package/dist/icons/X.d.mts +1 -1
  200. package/dist/icons/X.d.ts +1 -1
  201. package/dist/icons/index.d.mts +1 -1
  202. package/dist/icons/index.d.ts +1 -1
  203. package/dist/index.d.mts +3 -1
  204. package/dist/index.d.ts +3 -1
  205. package/dist/index.js +10 -0
  206. package/dist/index.mjs +2 -0
  207. package/package.json +12 -10
  208. package/dist/{index-DWGhkMUQ.d.mts → Icon-CTxwWbdC.d.mts} +8 -8
  209. package/dist/{index-ekBNDG0H.d.ts → Icon-llWd6yMa.d.ts} +8 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Dropdown.tsx"],"names":[],"mappings":";;;;;;;;;;;;AA+EO,MAAM,eAAe,CAAC;AAAA,EAC3B,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,eAAA,GAAkB,UAAA;AAAA,EAClB,MAAA;AAAA,EACA;AACF,CAAA,KAAyB;AACvB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,kBAAA,GAAqB,OAAuB,IAAI,CAAA;AAGtD,EAAA,MAAM,iBAAiB,MAAM;AAE3B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,QAAO,CAAC,SACnB,IAAA,CAAK,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa;AAAA,OACxD;AAAA,IACF;AAGA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,GAAG;AAGH,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,MAAM,YAAY,kBAAA,CAAmB,OAAA;AACrC,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,YAAA,EAAa,GAAI,SAAA;AAClD,IAAA,MAAM,SAAA,GAAY,CAAA;AAClB,IAAA,MAAM,YAAA,GAAe,SAAA,GAAY,YAAA,IAAgB,YAAA,GAAe,SAAA;AAEhE,IAAA,aAAA,CAAc,YAAY,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAA,CAAc,MAAM,CAAC,CAAA;AAGjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,YAAY,kBAAA,CAAmB,OAAA;AACrC,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,MAAA,EAAQ;AAE3B,IAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,SAAA;AACvC,IAAA,MAAM,eAAe,YAAA,GAAe,YAAA;AAGpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,aAAA,CAAc,MAAM,CAAC,CAAA;AAGjC,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KAAkB;AACxC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OACE,KAAA,CAAM,QAAQ,YAAY,CAAA,IAC1B,aAAa,MAAA,GAAS,CAAA,IACtB,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA;AAAA,IAE/B;AACA,IAAA,OAAO,CAAC,CAAC,YAAA,IAAgB,YAAA,KAAiB,KAAA;AAAA,EAC5C,CAAA;AAGA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkB;AACzC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,mBAAmB,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,eAAe,EAAC;AAGvE,MAAA,IAAI,eAAc,EAAG;AACnB,QAAA,YAAA,CAAa,CAAC,KAAK,CAAC,CAAA;AAAA,MACtB,CAAA,MAAA,IAAW,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA,EAAG;AAE3C,QAAA,YAAA,CAAa,iBAAiB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,KAAS,KAAK,CAAC,CAAA;AAAA,MAChE,CAAA,MAAO;AAEL,QAAA,YAAA,CAAa,CAAC,GAAG,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAAA,MAC3C;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,YAAA,CAAa,MAAS,CAAA;AAAA,MACxB,CAAA,MAAO;AAEL,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAEA,MAAA,WAAA,GAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAM,mBAAmB,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,eAAe,EAAC;AACvE,IAAA,MAAM,SAAA,GAAY,aAAA,CACf,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,QAAQ,CAAA,CAC/B,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,KAAK,CAAA;AAE3B,IAAA,IAAI,gBAAA,CAAiB,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AAEhD,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IACjB,CAAA,MAAO;AAEL,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,YAAY,KAAK,YAAA,CAAa,MAAA,KAAW,GAAG,OAAO,KAAA;AACtE,IAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,KAAK,QAAQ,CAAA;AACrE,IAAA,OACE,eAAA,CAAgB,MAAA,GAAS,CAAA,IACzB,YAAA,CAAa,WAAW,eAAA,CAAgB,MAAA,IACxC,eAAA,CAAgB,KAAA,CAAM,CAAC,IAAA,KAAS,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,EAErE,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,mBACE,QAAA,EAAA,MAAA,oBACC,GAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,GAAA,EAAK,GAAG,GAAA,EAAI;AAAA,MAC1C,SAAS,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,MACtC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,KAAA,EAAM;AAAA,MACzC,MAAM,EAAE,OAAA,EAAS,GAAG,KAAA,EAAO,GAAA,EAAK,GAAG,EAAA,EAAG;AAAA,MACtC,SAAA,EAAW,UAAA;AAAA,QACT,4FAAA;AAAA,QAAA,CACC,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,KAAS,eAAA;AAAA,QACpC,oBAAoB,UAAA,IAAc,iBAAA;AAAA,QAClC,oBAAoB,YAAA,IAAgB,mBAAA;AAAA,QACpC,oBAAoB,WAAA,IAAe,kBAAA;AAAA,QACnC;AAAA,OACF;AAAA,MAEA,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,kBAAA;AAAA,UACL,QAAA,EAAU,YAAA;AAAA,UACV,SAAA,EAAW,UAAA;AAAA,YACT,uBAAA;AAAA,YACA,YAAA,IAAgB;AAAA,cACd,+BAAA;AAAA,cACA,CAAC,UAAA,IACC;AAAA;AACJ,WACF;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,QAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,eAAA;AAAA,kBACT,SAAA,EAAW,UAAA;AAAA,oBACT;AAAA,mBACF;AAAA,kBAEA,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAS,aAAA,EAAc,EAAG,CAAA;AAAA,oCACpC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAAyC,QAAA,EAAA,YAAA,EAEzD;AAAA;AAAA;AAAA,eACF;AAAA,8BACA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,YAAA,EAAa;AAAA,aAAA,EAClC,CAAA;AAAA,YAED,cAAc,MAAA,GAAS,CAAA,GACtB,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,qBACjB,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBAEC,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,IAAA,EACE,IAAA,CAAK,IAAA,EAAM,IAAA,GACP;AAAA,kBACE,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA;AAAA,kBAChB,SAAA,EAAW,KAAK,IAAA,CAAK,SAAA;AAAA,kBACrB,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA;AAAA,kBAChB,YAAA,EAAc,KAAK,IAAA,CAAK;AAAA,iBAC1B,GACA,MAAA;AAAA,gBAEN,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,gBACzC,UAAU,IAAA,CAAK,QAAA;AAAA,gBACf,UAAA,EAAY,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AAAA,gBACrC;AAAA,eAAA;AAAA,cAfK,IAAA,CAAK;AAAA,aAiBb,CAAA,mBAED,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AAEb,kBAAA,IAAI,aAAA,EAAe;AACjB,oBAAA,aAAA,EAAc;AAAA,kBAChB;AAAA,gBACF,CAAA;AAAA,gBACA,SAAA,EAAU,8IAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA;AAEJ;AAAA,GACF,EAEJ,CAAA;AAEJ;AAEO,MAAM,WAAW,CAAC;AAAA,EACvB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA,GAAQ,UAAA;AAAA,EACR,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,YAAA,GAAe,KAAA;AAAA,EACf,MAAA;AAAA,EACA;AACF,CAAA,KAAqB;AACnB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAG1C,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkB;AACzC,IAAA,IAAI,CAAC,QAAA,EAAU;AAEb,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,YAAA,CAAa,MAAS,CAAA;AAAA,MACxB,CAAA,MAAO;AAEL,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AAEvC,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAGA,EAAA,iBAAA,CAAkB,KAAqC,kBAAkB,CAAA;AAGzE,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GAAI,eAAe,EAAC;AACrE,MAAA,OAAO,KAAA,CAAM,OAAO,CAAC,IAAA,KAAS,eAAe,QAAA,CAAS,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IACnE,CAAA,MAAO;AACL,MAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,UAAU,YAAY,CAAA;AACjE,MAAA,OAAO,QAAA,GAAW,CAAC,QAAQ,CAAA,GAAI,EAAC;AAAA,IAClC;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,UAAA;AAAA,QACT,8CAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,gBAAA;AAAA,YACA,QAAA;AAAA,YACA,SAAA,EAAW,eAAA;AAAA,YACX,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,YAChC,eAAe,gBAAA,EAAiB;AAAA,YAChC,QAAA;AAAA,YACA,KAAA,EAAO,kBAAiB,CAAE,MAAA;AAAA,YAC1B,QAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBAEA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,QAAA;AAAA,YACA,aAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA;AAAA,YACA,WAAA,EAAa,eAAA;AAAA,YACb,YAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AAEO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAGhD,EAAA,MAAM,YAAA,GAAe,cAAc,MAAA,GAAS,CAAA;AAC5C,EAAA,MAAM,iBAAA,GAAoB,cAAc,MAAA,KAAW,CAAA;AACnD,EAAA,MAAM,mBAAA,GAAsB,cAAc,MAAA,GAAS,CAAA;AAGnD,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,WAAA;AAEJ,EAAA,IAAI,gBAAgB,iBAAA,EAAmB;AAErC,IAAA,MAAM,YAAA,GAAe,cAAc,CAAC,CAAA;AACpC,IAAA,UAAA,GAAa,aAAa,IAAA,GACtB;AAAA,MACE,IAAA,EAAM,aAAa,IAAA,CAAK,IAAA;AAAA,MACxB,SAAA,EAAW,YAAA,CAAa,IAAA,CAAK,SAAA,IAAa,EAAA;AAAA,MAC1C,IAAA,EAAM,YAAA,CAAa,IAAA,CAAK,IAAA,IAAQ,EAAA;AAAA,MAChC,YAAA,EAAc,aAAa,IAAA,CAAK;AAAA,KAClC,GACA,QAAA;AACJ,IAAA,WAAA,GAAc,YAAA,CAAa,KAAA;AAAA,EAC7B,CAAA,MAAA,IAAW,mBAAA,IAAuB,QAAA,IAAY,gBAAA,EAAkB;AAG9D,IAAA,MAAM,oBAAA,GAAuB,aAAA,CAC1B,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA,CACxC,OAAA,CAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,KAAM,YAAa,CAAA,CAC1C,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,EAAO,IAAA,KAAS,IAAA,CAAK,QAAQ,KAAK,CAAA,KAAM,KAAK,CAAA,CAC5D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAEvB,IAAA,UAAA,GAAa,QAAA,GACT;AAAA,MACE,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,SAAA,EAAW,SAAS,SAAA,IAAa,EAAA;AAAA,MACjC,IAAA,EAAM,SAAS,IAAA,IAAQ,EAAA;AAAA,MACvB,YAAA,EACE,oBAAA,CAAqB,MAAA,GAAS,CAAA,GAC1B,uBACA,QAAA,CAAS;AAAA,KACjB,GACA,MAAA;AACJ,IAAA,WAAA,GAAc,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAA;AAAA,EAC5C,CAAA,MAAO;AAEL,IAAA,UAAA,GAAa,QAAA;AACb,IAAA,WAAA,GAAc,KAAA;AAAA,EAChB;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO,WAAA;AAAA,MACP,QAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAQ,WAAA;AAAA,MACR,SAAA,EAAW,UAAA;AAAA,QACT,2CAAA;AAAA,QAAA,CACC,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,KAAS,uBAAA;AAAA,QACpC,SAAS,IAAA,IAAQ,aAAA;AAAA,QACjB;AAAA,OACF;AAAA,MACA,cAAA,EAAgB,KAAA;AAAA,MAChB,cAAA,EAAgB;AAAA,QACd,OAAA,EAAS,SAAA;AAAA,QACT,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,QACxB,QAAA,EAAU,CAAC,SAAA,GAAY,EAAA,GAAK,EAAA;AAAA,QAC5B,QAAA,EAAU,CAAC,SAAA,GAAY,EAAA,GAAK,EAAA;AAAA,QAC5B,iBAAA,EAAmB,GAAA;AAAA,QACnB,cAAA,EAAgB,CAAA;AAAA,QAChB,SAAA,EAAW;AAAA,OACb;AAAA,MACA,OAAA;AAAA,MACA,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MACrC,YAAA,EAAc,MAAM,YAAA,CAAa,KAAK;AAAA;AAAA,GACxC;AAEJ;AAEO,MAAM,eAAe,CAAC;AAAA,EAC3B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,KAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAW,UAAA;AAAA,QACT,qJAAA;AAAA,QACA,SAAS,IAAA,IAAQ,0BAAA;AAAA,QACjB,SAAS,IAAA,IAAQ,0BAAA;AAAA,QACjB,SAAS,IAAA,IAAQ,mCAAA;AAAA,QACjB,UAAA,IAAc;AAAA,OAChB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4DAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,CAAA;AAAA,YACN,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,YACxB,SAAA,EAAU,iBAAA;AAAA,YACV,cAAA,EAAgB,CAAA;AAAA,YAChB,iBAAA,EAAmB;AAAA;AAAA,SACrB,EACF,CAAA;AAAA,QAEC,IAAA,oBACC,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,SAAA,EAAW,UAAA,CAAW,eAAA,EAAiB,IAAA,CAAK,SAAS,CAAA;AAAA,YACrD,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,YACnB,cAAc,IAAA,CAAK;AAAA;AAAA,SACrB;AAAA,wBAEF,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,WAAW,gDAAgD,CAAA;AAAA,YAErE,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ","file":"Dropdown.mjs","sourcesContent":["import { IconName } from \"./icons\";\nimport { Button, ButtonProps } from \"./Button\";\nimport { useRef, useState, useEffect, useCallback } from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport classNames from \"classnames\";\nimport { crisp, glide, swift } from \"./utils/easings\";\nimport { Checkbox } from \"./Checkbox\";\nimport { Divider } from \"./Divider\";\nimport { Icon, type IconProps } from \"./Icon\";\nimport { useOnClickOutside } from \"usehooks-ts\";\nimport { CrosshairCorners } from \"./CrossHair\";\n\nexport type DropdownProps = {\n className?: string;\n items: {\n label: string;\n icon?: IconProps;\n value: string;\n disabled?: boolean;\n }[];\n selectedItem?: string | string[] | undefined;\n handleChange: (item: string | string[] | undefined) => void;\n multiple?: boolean;\n disabled?: boolean;\n label: string;\n multiSelectLabel?: string;\n buttonClassName?: string;\n menuClassName?: string;\n menuIcon?: IconProps;\n size?: \"sm\" | \"md\" | \"lg\";\n isScrollable?: boolean;\n animationOrigin?: \"top-left\" | \"top-center\" | \"top-right\";\n search?: string;\n onClearSearch?: () => void;\n};\n\nexport type DropdownButtonProps = {\n label: string;\n multiSelectLabel?: string;\n disabled?: boolean;\n className?: string;\n onClick: () => void;\n buttonClassName?: string;\n selectedItems?: DropdownProps[\"items\"];\n multiple?: boolean;\n count?: number;\n menuIcon?: IconProps;\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\nexport type DropdownItemProps = {\n label: string;\n icon?: IconProps;\n onClick: () => void;\n disabled?: boolean;\n isSelected?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\nexport type DropdownMenuProps = {\n items: {\n label: string;\n icon?: IconProps;\n value: string;\n disabled?: boolean;\n }[];\n selectedItem?: string | string[] | undefined;\n handleChange: (item: string | string[] | undefined) => void;\n multiple?: boolean;\n menuClassName?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n isOpen: boolean;\n onItemClick?: (value: string) => void;\n isScrollable?: boolean;\n animationOrigin?: \"top-left\" | \"top-center\" | \"top-right\";\n search?: string;\n onClearSearch?: () => void;\n};\n\nexport const DropdownMenu = ({\n items,\n selectedItem,\n handleChange,\n multiple = false,\n menuClassName,\n size = \"md\",\n isOpen,\n onItemClick,\n isScrollable = false,\n animationOrigin = \"top-left\",\n search,\n onClearSearch,\n}: DropdownMenuProps) => {\n const [isAtBottom, setIsAtBottom] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n // Filter items based on search term\n const filteredItems = (() => {\n // If search is provided, filter based on search\n if (search) {\n return items.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase())\n );\n }\n\n // Default: show all items\n return items;\n })();\n\n // Handle scroll detection\n const handleScroll = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const { scrollTop, scrollHeight, clientHeight } = container;\n const threshold = 5; // Small threshold to account for rounding\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - threshold;\n\n setIsAtBottom(isNearBottom);\n }, []);\n\n // Reset scroll state when items change or menu opens\n useEffect(() => {\n if (isOpen) {\n setIsAtBottom(false);\n }\n }, [isOpen, filteredItems.length]);\n\n // Check if content is actually scrollable\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container || !isOpen) return;\n\n const { scrollHeight, clientHeight } = container;\n const hasScrollbar = scrollHeight > clientHeight;\n\n // If no scrollbar (content fits), consider it \"at bottom\"\n if (!hasScrollbar) {\n setIsAtBottom(true);\n }\n }, [isOpen, filteredItems.length]);\n\n // Helper to check if an item is selected\n const isItemSelected = (value: string) => {\n if (multiple) {\n return (\n Array.isArray(selectedItem) &&\n selectedItem.length > 0 &&\n selectedItem.includes(value)\n );\n }\n return !!selectedItem && selectedItem === value;\n };\n\n // Handle item selection\n const handleItemClick = (value: string) => {\n if (multiple) {\n const currentSelection = Array.isArray(selectedItem) ? selectedItem : [];\n\n // If all items are selected, clicking any item should deselect all others\n if (isAllSelected()) {\n handleChange([value]);\n } else if (currentSelection.includes(value)) {\n // Remove from selection\n handleChange(currentSelection.filter((item) => item !== value));\n } else {\n // Add to selection\n handleChange([...currentSelection, value]);\n }\n } else {\n // Single select - if clicking the already selected item, deselect it\n if (selectedItem === value) {\n handleChange(undefined);\n } else {\n // Otherwise, select the new item\n handleChange(value);\n }\n // Call the optional callback for single select\n onItemClick?.(value);\n }\n };\n\n // Handle select all\n const handleSelectAll = () => {\n const currentSelection = Array.isArray(selectedItem) ? selectedItem : [];\n const allValues = filteredItems\n .filter((item) => !item.disabled)\n .map((item) => item.value);\n\n if (currentSelection.length === allValues.length) {\n // Deselect all\n handleChange([]);\n } else {\n // Select all\n handleChange(allValues);\n }\n };\n\n // Check if all items are selected\n const isAllSelected = () => {\n if (!Array.isArray(selectedItem) || selectedItem.length === 0) return false;\n const selectableItems = filteredItems.filter((item) => !item.disabled);\n return (\n selectableItems.length > 0 &&\n selectedItem.length === selectableItems.length &&\n selectableItems.every((item) => selectedItem.includes(item.value))\n );\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, scale: 0.8, y: -15 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n transition={{ duration: 0.1, ease: swift }}\n exit={{ opacity: 0, scale: 0.8, y: -5 }}\n className={classNames(\n \"absolute top-[calc(100%+6px)] p-1 bg-card-foreground gradient-border before:bg-card-border\",\n (size === \"lg\" || size === \"md\") && \"min-w-[200px]\",\n animationOrigin === \"top-left\" && \"origin-top-left\",\n animationOrigin === \"top-center\" && \"origin-top-center\",\n animationOrigin === \"top-right\" && \"origin-top-right\",\n menuClassName\n )}\n >\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className={classNames(\n \"flex flex-col gap-y-1\",\n isScrollable && [\n \"max-h-[250px] overflow-y-auto\",\n !isAtBottom &&\n \"[mask-image:linear-gradient(180deg,black,black_85%,transparent_100%)]\",\n ]\n )}\n >\n {multiple && (\n <div className=\"group flex flex-col gap-y-1\">\n <button\n onClick={handleSelectAll}\n className={classNames(\n \"py-3 pl-2.5 pr-3 flex items-center gap-x-2.5 outline-none bg-transparent transition-colors duration-100 ease-crisp hover:bg-border-light/50\"\n )}\n >\n <Checkbox checked={isAllSelected()} />\n <span className=\"text-sm text-shade-primary font-medium\">\n Select All\n </span>\n </button>\n <Divider direction=\"horizontal\" />\n </div>\n )}\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <DropdownItem\n key={item.value}\n label={item.label}\n icon={\n item.icon?.name\n ? {\n name: item.icon.name,\n className: item.icon.className,\n size: item.icon.size,\n difficulties: item.icon.difficulties,\n }\n : undefined\n }\n onClick={() => handleItemClick(item.value)}\n disabled={item.disabled}\n isSelected={isItemSelected(item.value)}\n size={size}\n />\n ))\n ) : (\n <button\n onClick={() => {\n // Clear search by calling the onClearSearch callback\n if (onClearSearch) {\n onClearSearch();\n }\n }}\n className=\"py-3 pl-2.5 pr-3 text-sm font-mono text-shade-tertiary hover:bg-border-light/50 transition-colors duration-100 ease-crisp w-full text-center\"\n >\n No options found\n </button>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n};\n\nexport const Dropdown = ({\n className,\n items,\n selectedItem,\n handleChange,\n label = \"View All\",\n multiSelectLabel,\n disabled,\n buttonClassName,\n menuClassName,\n multiple = false,\n menuIcon,\n size = \"md\",\n isScrollable = false,\n search,\n onClearSearch,\n}: DropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Handle item selection for single select (closes menu)\n const handleItemClick = (value: string) => {\n if (!multiple) {\n // Single select - if clicking the already selected item, deselect it\n if (selectedItem === value) {\n handleChange(undefined);\n } else {\n // Otherwise, select the new item\n handleChange(value);\n }\n setIsOpen(false);\n }\n };\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleClickOutside = () => {\n setIsOpen(false);\n };\n\n // Cast ref to RefObject<HTMLElement> to satisfy useOnClickOutside's expected type\n useOnClickOutside(ref as React.RefObject<HTMLElement>, handleClickOutside);\n\n // Get selected items for display in button\n const getSelectedItems = () => {\n if (multiple) {\n const selectedValues = Array.isArray(selectedItem) ? selectedItem : [];\n return items.filter((item) => selectedValues.includes(item.value));\n } else {\n const selected = items.find((item) => item.value === selectedItem);\n return selected ? [selected] : [];\n }\n };\n\n return (\n <div\n ref={ref}\n className={classNames(\n \"relative flex flex-col gap-y-1.5 items-start\",\n className\n )}\n >\n <DropdownButton\n label={label}\n multiSelectLabel={multiSelectLabel}\n disabled={disabled}\n className={buttonClassName}\n onClick={() => setIsOpen(!isOpen)}\n selectedItems={getSelectedItems()}\n multiple={multiple}\n count={getSelectedItems().length}\n menuIcon={menuIcon}\n size={size}\n />\n\n <DropdownMenu\n items={items}\n selectedItem={selectedItem}\n handleChange={handleChange}\n multiple={multiple}\n menuClassName={menuClassName}\n size={size}\n isOpen={isOpen}\n onItemClick={handleItemClick}\n isScrollable={isScrollable}\n search={search}\n onClearSearch={onClearSearch}\n />\n </div>\n );\n};\n\nexport const DropdownButton = ({\n label,\n multiSelectLabel,\n disabled,\n className,\n onClick,\n selectedItems = [],\n multiple = false,\n count = 0,\n menuIcon,\n size,\n}: DropdownButtonProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n // Determine what to display\n const hasSelection = selectedItems.length > 0;\n const isSingleSelection = selectedItems.length === 1;\n const isMultipleSelection = selectedItems.length > 1;\n\n // Compute icon and label based on selection state\n let buttonIcon: ButtonProps[\"icon\"] | undefined;\n let buttonLabel: string;\n\n if (hasSelection && isSingleSelection) {\n // Single selection: show selected item's icon and label\n const selectedItem = selectedItems[0];\n buttonIcon = selectedItem.icon\n ? {\n name: selectedItem.icon.name,\n className: selectedItem.icon.className || \"\",\n size: selectedItem.icon.size || 18,\n difficulties: selectedItem.icon.difficulties,\n }\n : menuIcon;\n buttonLabel = selectedItem.label;\n } else if (isMultipleSelection && multiple && multiSelectLabel) {\n // Multiple selections: show count and multiSelectLabel\n // Collect all difficulties from selected items\n const combinedDifficulties = selectedItems\n .filter((item) => item.icon?.difficulties)\n .flatMap((item) => item.icon!.difficulties!)\n .filter((value, index, self) => self.indexOf(value) === index) // Remove duplicates\n .sort((a, b) => a - b); // Sort in ascending order\n\n buttonIcon = menuIcon\n ? {\n name: menuIcon.name,\n className: menuIcon.className || \"\",\n size: menuIcon.size || 18,\n difficulties:\n combinedDifficulties.length > 0\n ? combinedDifficulties\n : menuIcon.difficulties,\n }\n : undefined;\n buttonLabel = `${count} ${multiSelectLabel}`;\n } else {\n // Default: no selection\n buttonIcon = menuIcon;\n buttonLabel = label;\n }\n\n return (\n <Button\n icon={buttonIcon}\n label={buttonLabel}\n disabled={disabled}\n size={size}\n variant=\"secondary\"\n className={classNames(\n \"!origin-bottom-left !justify-start w-full\",\n (size === \"md\" || size === \"lg\") && \"!pr-[18px] !pl-[12px]\",\n size === \"sm\" && \"!pr-4 !pl-3\",\n className\n )}\n useHoverEffect={false}\n crosshairProps={{\n variant: \"corners\",\n corners: [\"bottom-right\"],\n spacingX: !isHovered ? -6 : -4,\n spacingY: !isHovered ? -6 : -4,\n animationDuration: 0.5,\n animationDelay: 0,\n className: \"text-shade-mute group-hover:text-shade-primary\",\n }}\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n />\n );\n};\n\nexport const DropdownItem = ({\n label,\n icon,\n onClick,\n disabled,\n isSelected = false,\n size,\n}: DropdownItemProps) => {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={classNames(\n \"hover:bg-border-light/50 relative group/item disabled:opacity-40 flex items-center gap-x-2.5 outline-none transition-colors duration-100 ease-crisp\",\n size === \"lg\" && \"py-4 pl-3 pr-3 text-base\",\n size === \"md\" && \"py-3 pl-2.5 pr-3 text-sm\",\n size === \"sm\" && \"py-2 pl-2.5 pr-3 h-[36px] text-sm\",\n isSelected && \"bg-background/50\"\n )}\n >\n <div className=\"opacity-0 group-hover/item:!opacity-100 absolute inset-0.5\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n className=\"text-shade-mute\"\n animationDelay={0}\n animationDuration={0.5}\n />\n </div>\n\n {icon && (\n <Icon\n name={icon.name}\n className={classNames(\"flex-shrink-0\", icon.className)}\n size={icon.size || 18}\n difficulties={icon.difficulties}\n />\n )}\n <span\n className={classNames(\" text-shade-primary font-medium leading-[100%]\")}\n >\n {label}\n </span>\n </button>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/Dropdown.tsx"],"names":[],"mappings":"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","file":"Dropdown.mjs","sourcesContent":["\"use client\";\n\nimport { Button, ButtonProps } from \"./Button\";\nimport { useRef, useState, useEffect, useCallback } from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport classNames from \"classnames\";\nimport { swift } from \"./utils/easings\";\nimport { Checkbox } from \"./Checkbox\";\nimport { Divider } from \"./Divider\";\nimport { Icon, type IconProps } from \"./Icon\";\nimport { useOnClickOutside } from \"usehooks-ts\";\nimport { CrosshairCorners } from \"./CrossHair\";\n\nexport type DropdownProps = {\n className?: string;\n items: {\n label: string;\n icon?: IconProps;\n value: string;\n disabled?: boolean;\n }[];\n selectedItem?: string | string[] | undefined;\n handleChange: (item: string | string[] | undefined) => void;\n multiple?: boolean;\n disabled?: boolean;\n label: string;\n multiSelectLabel?: string;\n buttonClassName?: string;\n menuClassName?: string;\n menuIcon?: IconProps;\n size?: \"sm\" | \"md\" | \"lg\";\n isScrollable?: boolean;\n animationOrigin?: \"top-left\" | \"top-center\" | \"top-right\";\n search?: string;\n onClearSearch?: () => void;\n};\n\nexport type DropdownButtonProps = {\n label: string;\n multiSelectLabel?: string;\n disabled?: boolean;\n className?: string;\n onClick: () => void;\n buttonClassName?: string;\n selectedItems?: DropdownProps[\"items\"];\n multiple?: boolean;\n count?: number;\n menuIcon?: IconProps;\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\nexport type DropdownItemProps = {\n label: string;\n icon?: IconProps;\n onClick: () => void;\n disabled?: boolean;\n isSelected?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n};\n\nexport type DropdownMenuProps = {\n items: {\n label: string;\n icon?: IconProps;\n value: string;\n disabled?: boolean;\n }[];\n selectedItem?: string | string[] | undefined;\n handleChange: (item: string | string[] | undefined) => void;\n multiple?: boolean;\n menuClassName?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n isOpen: boolean;\n onItemClick?: (value: string) => void;\n isScrollable?: boolean;\n animationOrigin?: \"top-left\" | \"top-center\" | \"top-right\";\n search?: string;\n onClearSearch?: () => void;\n};\n\nexport const DropdownMenu = ({\n items,\n selectedItem,\n handleChange,\n multiple = false,\n menuClassName,\n size = \"md\",\n isOpen,\n onItemClick,\n isScrollable = false,\n animationOrigin = \"top-left\",\n search,\n onClearSearch,\n}: DropdownMenuProps) => {\n const [isAtBottom, setIsAtBottom] = useState(false);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n // Filter items based on search term\n const filteredItems = (() => {\n // If search is provided, filter based on search\n if (search) {\n return items.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase())\n );\n }\n\n // Default: show all items\n return items;\n })();\n\n // Handle scroll detection\n const handleScroll = useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n\n const { scrollTop, scrollHeight, clientHeight } = container;\n const threshold = 5; // Small threshold to account for rounding\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - threshold;\n\n setIsAtBottom(isNearBottom);\n }, []);\n\n // Reset scroll state when items change or menu opens\n useEffect(() => {\n if (isOpen) {\n setIsAtBottom(false);\n }\n }, [isOpen, filteredItems.length]);\n\n // Check if content is actually scrollable\n useEffect(() => {\n const container = scrollContainerRef.current;\n if (!container || !isOpen) return;\n\n const { scrollHeight, clientHeight } = container;\n const hasScrollbar = scrollHeight > clientHeight;\n\n // If no scrollbar (content fits), consider it \"at bottom\"\n if (!hasScrollbar) {\n setIsAtBottom(true);\n }\n }, [isOpen, filteredItems.length]);\n\n // Helper to check if an item is selected\n const isItemSelected = (value: string) => {\n if (multiple) {\n return (\n Array.isArray(selectedItem) &&\n selectedItem.length > 0 &&\n selectedItem.includes(value)\n );\n }\n return !!selectedItem && selectedItem === value;\n };\n\n // Handle item selection\n const handleItemClick = (value: string) => {\n if (multiple) {\n const currentSelection = Array.isArray(selectedItem) ? selectedItem : [];\n\n // If all items are selected, clicking any item should deselect all others\n if (isAllSelected()) {\n handleChange([value]);\n } else if (currentSelection.includes(value)) {\n // Remove from selection\n handleChange(currentSelection.filter((item) => item !== value));\n } else {\n // Add to selection\n handleChange([...currentSelection, value]);\n }\n } else {\n // Single select - if clicking the already selected item, deselect it\n if (selectedItem === value) {\n handleChange(undefined);\n } else {\n // Otherwise, select the new item\n handleChange(value);\n }\n // Call the optional callback for single select\n onItemClick?.(value);\n }\n };\n\n // Handle select all\n const handleSelectAll = () => {\n const currentSelection = Array.isArray(selectedItem) ? selectedItem : [];\n const allValues = filteredItems\n .filter((item) => !item.disabled)\n .map((item) => item.value);\n\n if (currentSelection.length === allValues.length) {\n // Deselect all\n handleChange([]);\n } else {\n // Select all\n handleChange(allValues);\n }\n };\n\n // Check if all items are selected\n const isAllSelected = () => {\n if (!Array.isArray(selectedItem) || selectedItem.length === 0) return false;\n const selectableItems = filteredItems.filter((item) => !item.disabled);\n return (\n selectableItems.length > 0 &&\n selectedItem.length === selectableItems.length &&\n selectableItems.every((item) => selectedItem.includes(item.value))\n );\n };\n\n return (\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, scale: 0.8, y: -15 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n transition={{ duration: 0.1, ease: swift }}\n exit={{ opacity: 0, scale: 0.8, y: -5 }}\n className={classNames(\n \"absolute top-[calc(100%+6px)] p-1 bg-card-foreground gradient-border before:bg-card-border\",\n (size === \"lg\" || size === \"md\") && \"min-w-[200px]\",\n animationOrigin === \"top-left\" && \"origin-top-left\",\n animationOrigin === \"top-center\" && \"origin-top-center\",\n animationOrigin === \"top-right\" && \"origin-top-right\",\n menuClassName\n )}\n >\n <div\n ref={scrollContainerRef}\n onScroll={handleScroll}\n className={classNames(\n \"flex flex-col gap-y-1\",\n isScrollable && [\n \"max-h-[250px] overflow-y-auto\",\n !isAtBottom &&\n \"[mask-image:linear-gradient(180deg,black,black_85%,transparent_100%)]\",\n ]\n )}\n >\n {multiple && (\n <div className=\"group flex flex-col gap-y-1\">\n <button\n onClick={handleSelectAll}\n className={classNames(\n \"py-3 pl-2.5 pr-3 flex items-center gap-x-2.5 outline-none bg-transparent transition-colors duration-100 ease-crisp hover:bg-border-light/50\"\n )}\n >\n <Checkbox checked={isAllSelected()} />\n <span className=\"text-sm text-shade-primary font-medium\">\n Select All\n </span>\n </button>\n <Divider direction=\"horizontal\" />\n </div>\n )}\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <DropdownItem\n key={item.value}\n label={item.label}\n icon={\n item.icon?.name\n ? {\n name: item.icon.name,\n className: item.icon.className,\n size: item.icon.size,\n difficulties: item.icon.difficulties,\n }\n : undefined\n }\n onClick={() => handleItemClick(item.value)}\n disabled={item.disabled}\n isSelected={isItemSelected(item.value)}\n size={size}\n />\n ))\n ) : (\n <button\n onClick={() => {\n // Clear search by calling the onClearSearch callback\n if (onClearSearch) {\n onClearSearch();\n }\n }}\n className=\"py-3 pl-2.5 pr-3 text-sm font-mono text-shade-tertiary hover:bg-border-light/50 transition-colors duration-100 ease-crisp w-full text-center\"\n >\n No options found\n </button>\n )}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n};\n\nexport const Dropdown = ({\n className,\n items,\n selectedItem,\n handleChange,\n label = \"View All\",\n multiSelectLabel,\n disabled,\n buttonClassName,\n menuClassName,\n multiple = false,\n menuIcon,\n size = \"md\",\n isScrollable = false,\n search,\n onClearSearch,\n}: DropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Handle item selection for single select (closes menu)\n const handleItemClick = (value: string) => {\n if (!multiple) {\n // Single select - if clicking the already selected item, deselect it\n if (selectedItem === value) {\n handleChange(undefined);\n } else {\n // Otherwise, select the new item\n handleChange(value);\n }\n setIsOpen(false);\n }\n };\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleClickOutside = () => {\n setIsOpen(false);\n };\n\n // Cast ref to RefObject<HTMLElement> to satisfy useOnClickOutside's expected type\n useOnClickOutside(ref as React.RefObject<HTMLElement>, handleClickOutside);\n\n // Get selected items for display in button\n const getSelectedItems = () => {\n if (multiple) {\n const selectedValues = Array.isArray(selectedItem) ? selectedItem : [];\n return items.filter((item) => selectedValues.includes(item.value));\n } else {\n const selected = items.find((item) => item.value === selectedItem);\n return selected ? [selected] : [];\n }\n };\n\n return (\n <div\n ref={ref}\n className={classNames(\n \"relative flex flex-col gap-y-1.5 items-start\",\n className\n )}\n >\n <DropdownButton\n label={label}\n multiSelectLabel={multiSelectLabel}\n disabled={disabled}\n className={buttonClassName}\n onClick={() => setIsOpen(!isOpen)}\n selectedItems={getSelectedItems()}\n multiple={multiple}\n count={getSelectedItems().length}\n menuIcon={menuIcon}\n size={size}\n />\n\n <DropdownMenu\n items={items}\n selectedItem={selectedItem}\n handleChange={handleChange}\n multiple={multiple}\n menuClassName={menuClassName}\n size={size}\n isOpen={isOpen}\n onItemClick={handleItemClick}\n isScrollable={isScrollable}\n search={search}\n onClearSearch={onClearSearch}\n />\n </div>\n );\n};\n\nexport const DropdownButton = ({\n label,\n multiSelectLabel,\n disabled,\n className,\n onClick,\n selectedItems = [],\n multiple = false,\n count = 0,\n menuIcon,\n size,\n}: DropdownButtonProps) => {\n const [isHovered, setIsHovered] = useState(false);\n\n // Determine what to display\n const hasSelection = selectedItems.length > 0;\n const isSingleSelection = selectedItems.length === 1;\n const isMultipleSelection = selectedItems.length > 1;\n\n // Compute icon and label based on selection state\n let buttonIcon: ButtonProps[\"icon\"] | undefined;\n let buttonLabel: string;\n\n if (hasSelection && isSingleSelection) {\n // Single selection: show selected item's icon and label\n const selectedItem = selectedItems[0];\n buttonIcon = selectedItem.icon\n ? {\n name: selectedItem.icon.name,\n className: selectedItem.icon.className || \"\",\n size: selectedItem.icon.size || 18,\n difficulties: selectedItem.icon.difficulties,\n }\n : menuIcon;\n buttonLabel = selectedItem.label;\n } else if (isMultipleSelection && multiple && multiSelectLabel) {\n // Multiple selections: show count and multiSelectLabel\n // Collect all difficulties from selected items\n const combinedDifficulties = selectedItems\n .filter((item) => item.icon?.difficulties)\n .flatMap((item) => item.icon!.difficulties!)\n .filter((value, index, self) => self.indexOf(value) === index) // Remove duplicates\n .sort((a, b) => a - b); // Sort in ascending order\n\n buttonIcon = menuIcon\n ? {\n name: menuIcon.name,\n className: menuIcon.className || \"\",\n size: menuIcon.size || 18,\n difficulties:\n combinedDifficulties.length > 0\n ? combinedDifficulties\n : menuIcon.difficulties,\n }\n : undefined;\n buttonLabel = `${count} ${multiSelectLabel}`;\n } else {\n // Default: no selection\n buttonIcon = menuIcon;\n buttonLabel = label;\n }\n\n return (\n <Button\n icon={buttonIcon}\n label={buttonLabel}\n disabled={disabled}\n size={size}\n variant=\"secondary\"\n className={classNames(\n \"!origin-bottom-left !justify-start w-full\",\n (size === \"md\" || size === \"lg\") && \"!pr-[18px] !pl-[12px]\",\n size === \"sm\" && \"!pr-4 !pl-3\",\n className\n )}\n useHoverEffect={false}\n crosshairProps={{\n variant: \"corners\",\n corners: [\"bottom-right\"],\n spacingX: !isHovered ? -6 : -4,\n spacingY: !isHovered ? -6 : -4,\n animationDuration: 0.5,\n animationDelay: 0,\n className: \"text-shade-mute group-hover:text-shade-primary\",\n }}\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n />\n );\n};\n\nexport const DropdownItem = ({\n label,\n icon,\n onClick,\n disabled,\n isSelected = false,\n size,\n}: DropdownItemProps) => {\n return (\n <button\n onClick={onClick}\n disabled={disabled}\n className={classNames(\n \"hover:bg-border-light/50 relative group/item disabled:opacity-40 flex items-center gap-x-2.5 outline-none transition-colors duration-100 ease-crisp\",\n size === \"lg\" && \"py-4 pl-3 pr-3 text-base\",\n size === \"md\" && \"py-3 pl-2.5 pr-3 text-sm\",\n size === \"sm\" && \"py-2 pl-2.5 pr-3 h-[36px] text-sm\",\n isSelected && \"bg-background/50\"\n )}\n >\n <div className=\"opacity-0 group-hover/item:!opacity-100 absolute inset-0.5\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n className=\"text-shade-mute\"\n animationDelay={0}\n animationDuration={0.5}\n />\n </div>\n\n {icon && (\n <Icon\n name={icon.name}\n className={classNames(\"flex-shrink-0\", icon.className)}\n size={icon.size || 18}\n difficulties={icon.difficulties}\n />\n )}\n <span\n className={classNames(\" text-shade-primary font-medium leading-[100%]\")}\n >\n {label}\n </span>\n </button>\n );\n};\n"]}
package/dist/GridLines.js CHANGED
@@ -11,7 +11,7 @@ var classNames__default = /*#__PURE__*/_interopDefault(classNames);
11
11
 
12
12
  const GridLines = ({
13
13
  gap = 8,
14
- animateLines = true,
14
+ animateLines = false,
15
15
  lines = ["top", "bottom", "left", "right"],
16
16
  className
17
17
  }) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridLines.tsx"],"names":["jsxs","classNames","jsx","motion","glide"],"mappings":";;;;;;;;;;;AAWO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA,GAAM,CAAA;AAAA,EACN,YAAA,GAAe,IAAA;AAAA,EACf,KAAA,GAAQ,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAO,CAAA;AAAA,EACzC;AACF,CAAA,KAAsB;AACpB,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,2BAAA,CAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MAC3C,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,GAAG,CAAA,EAAA,CAAA,EAAK;AAAA,MAE5B,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAMC,aAAA,EAAM;AAAA,YAC1C,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA;AAAA,cAC3B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,QAAA;AAAA,cAC5B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,GAAA,EAAI;AAAA,YACtD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAAA,cAC1B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA,SAC3B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AAAA,cAC7B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA;AAC3B;AAAA;AAAA,GACF;AAEJ","file":"GridLines.js","sourcesContent":["import { motion } from \"motion/react\";\nimport { breeze, glide } from \"./utils/easings\";\nimport classNames from \"classnames\";\n\nexport type GridLinesProps = {\n className?: string;\n animateLines?: boolean;\n gap?: number;\n lines?: (\"top\" | \"bottom\" | \"left\" | \"right\")[];\n};\n\nexport const GridLines = ({\n gap = 8,\n animateLines = true,\n lines = [\"top\", \"bottom\", \"left\", \"right\"],\n className,\n}: GridLinesProps) => {\n return (\n <div\n className={classNames(\"absolute\", className)}\n style={{ inset: `${-gap}px` }}\n >\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 100% 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide }}\n className={classNames(\n !lines.includes(\"left\") && \"hidden\",\n \"absolute w-px bg-border-light left-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(100% 0 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.05 }}\n className={classNames(\n !lines.includes(\"right\") && \"hidden\",\n \"absolute w-px bg-border-light right-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 100% 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.1 }}\n className={classNames(\n !lines.includes(\"top\") && \"hidden\",\n \"absolute h-px bg-border-light top-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 0 100%)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.15 }}\n className={classNames(\n !lines.includes(\"bottom\") && \"hidden\",\n \"absolute h-px bg-border-light bottom-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/GridLines.tsx"],"names":["jsxs","classNames","jsx","motion","glide"],"mappings":";;;;;;;;;;;AAaO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA,GAAM,CAAA;AAAA,EACN,YAAA,GAAe,KAAA;AAAA,EACf,KAAA,GAAQ,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAO,CAAA;AAAA,EACzC;AACF,CAAA,KAAsB;AACpB,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,2BAAA,CAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MAC3C,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,GAAG,CAAA,EAAA,CAAA,EAAK;AAAA,MAE5B,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAMC,aAAA,EAAM;AAAA,YAC1C,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA;AAAA,cAC3B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,QAAA;AAAA,cAC5B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,GAAA,EAAI;AAAA,YACtD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAAA,cAC1B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA,SAC3B;AAAA,wBACAC,cAAA;AAAA,UAACC,YAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAMC,aAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAWH,2BAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AAAA,cAC7B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA;AAC3B;AAAA;AAAA,GACF;AAEJ","file":"GridLines.js","sourcesContent":["\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { glide } from \"./utils/easings\";\nimport classNames from \"classnames\";\n\nexport type GridLinesProps = {\n className?: string;\n animateLines?: boolean;\n gap?: number;\n lines?: (\"top\" | \"bottom\" | \"left\" | \"right\")[];\n};\n\nexport const GridLines = ({\n gap = 8,\n animateLines = false,\n lines = [\"top\", \"bottom\", \"left\", \"right\"],\n className,\n}: GridLinesProps) => {\n return (\n <div\n className={classNames(\"absolute\", className)}\n style={{ inset: `${-gap}px` }}\n >\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 100% 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide }}\n className={classNames(\n !lines.includes(\"left\") && \"hidden\",\n \"absolute w-px bg-border-light left-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(100% 0 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.05 }}\n className={classNames(\n !lines.includes(\"right\") && \"hidden\",\n \"absolute w-px bg-border-light right-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 100% 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.1 }}\n className={classNames(\n !lines.includes(\"top\") && \"hidden\",\n \"absolute h-px bg-border-light top-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 0 100%)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.15 }}\n className={classNames(\n !lines.includes(\"bottom\") && \"hidden\",\n \"absolute h-px bg-border-light bottom-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n </div>\n );\n};\n"]}
@@ -5,7 +5,7 @@ import classNames from 'classnames';
5
5
 
6
6
  const GridLines = ({
7
7
  gap = 8,
8
- animateLines = true,
8
+ animateLines = false,
9
9
  lines = ["top", "bottom", "left", "right"],
10
10
  className
11
11
  }) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridLines.tsx"],"names":[],"mappings":";;;;;AAWO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA,GAAM,CAAA;AAAA,EACN,YAAA,GAAe,IAAA;AAAA,EACf,KAAA,GAAQ,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAO,CAAA;AAAA,EACzC;AACF,CAAA,KAAsB;AACpB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MAC3C,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,GAAG,CAAA,EAAA,CAAA,EAAK;AAAA,MAE5B,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,YAC1C,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA;AAAA,cAC3B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,QAAA;AAAA,cAC5B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,GAAA,EAAI;AAAA,YACtD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAAA,cAC1B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA,SAC3B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AAAA,cAC7B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA;AAC3B;AAAA;AAAA,GACF;AAEJ","file":"GridLines.mjs","sourcesContent":["import { motion } from \"motion/react\";\nimport { breeze, glide } from \"./utils/easings\";\nimport classNames from \"classnames\";\n\nexport type GridLinesProps = {\n className?: string;\n animateLines?: boolean;\n gap?: number;\n lines?: (\"top\" | \"bottom\" | \"left\" | \"right\")[];\n};\n\nexport const GridLines = ({\n gap = 8,\n animateLines = true,\n lines = [\"top\", \"bottom\", \"left\", \"right\"],\n className,\n}: GridLinesProps) => {\n return (\n <div\n className={classNames(\"absolute\", className)}\n style={{ inset: `${-gap}px` }}\n >\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 100% 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide }}\n className={classNames(\n !lines.includes(\"left\") && \"hidden\",\n \"absolute w-px bg-border-light left-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(100% 0 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.05 }}\n className={classNames(\n !lines.includes(\"right\") && \"hidden\",\n \"absolute w-px bg-border-light right-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 100% 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.1 }}\n className={classNames(\n !lines.includes(\"top\") && \"hidden\",\n \"absolute h-px bg-border-light top-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 0 100%)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.15 }}\n className={classNames(\n !lines.includes(\"bottom\") && \"hidden\",\n \"absolute h-px bg-border-light bottom-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/GridLines.tsx"],"names":[],"mappings":";;;;;AAaO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA,GAAM,CAAA;AAAA,EACN,YAAA,GAAe,KAAA;AAAA,EACf,KAAA,GAAQ,CAAC,KAAA,EAAO,QAAA,EAAU,QAAQ,OAAO,CAAA;AAAA,EACzC;AACF,CAAA,KAAsB;AACpB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,UAAA,EAAY,SAAS,CAAA;AAAA,MAC3C,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,GAAG,CAAA,EAAA,CAAA,EAAK;AAAA,MAE5B,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,YAC1C,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA;AAAA,cAC3B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,IAAK,QAAA;AAAA,cAC5B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA;AAAS;AAAA,SAC5B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,GAAA,EAAI;AAAA,YACtD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA;AAAA,cAC1B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA,SAC3B;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS;AAAA,cACP,QAAA,EAAU,eAAe,mBAAA,GAAsB;AAAA,aACjD;AAAA,YACA,OAAA,EAAS,EAAE,QAAA,EAAU,gBAAA,EAAiB;AAAA,YACtC,YAAY,EAAE,QAAA,EAAU,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,IAAA,EAAK;AAAA,YACvD,SAAA,EAAW,UAAA;AAAA,cACT,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AAAA,cAC7B;AAAA,aACF;AAAA,YACA,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA;AAAS;AAAA;AAC3B;AAAA;AAAA,GACF;AAEJ","file":"GridLines.mjs","sourcesContent":["\"use client\";\n\nimport { motion } from \"motion/react\";\nimport { glide } from \"./utils/easings\";\nimport classNames from \"classnames\";\n\nexport type GridLinesProps = {\n className?: string;\n animateLines?: boolean;\n gap?: number;\n lines?: (\"top\" | \"bottom\" | \"left\" | \"right\")[];\n};\n\nexport const GridLines = ({\n gap = 8,\n animateLines = false,\n lines = [\"top\", \"bottom\", \"left\", \"right\"],\n className,\n}: GridLinesProps) => {\n return (\n <div\n className={classNames(\"absolute\", className)}\n style={{ inset: `${-gap}px` }}\n >\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 100% 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide }}\n className={classNames(\n !lines.includes(\"left\") && \"hidden\",\n \"absolute w-px bg-border-light left-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(100% 0 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.05 }}\n className={classNames(\n !lines.includes(\"right\") && \"hidden\",\n \"absolute w-px bg-border-light right-0 top-1/2 -translate-y-1/2\"\n )}\n style={{ height: \"100dvh\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 100% 0 0)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.1 }}\n className={classNames(\n !lines.includes(\"top\") && \"hidden\",\n \"absolute h-px bg-border-light top-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n <motion.div\n initial={{\n clipPath: animateLines ? \"inset(0 0 0 100%)\" : \"inset(0 0 0 0)\",\n }}\n animate={{ clipPath: \"inset(0 0 0 0)\" }}\n transition={{ duration: 0.25, ease: glide, delay: 0.15 }}\n className={classNames(\n !lines.includes(\"bottom\") && \"hidden\",\n \"absolute h-px bg-border-light bottom-0 left-1/2 -translate-x-1/2\"\n )}\n style={{ width: \"100dvw\" }}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type HeadingRevealProps = {
4
+ text: string;
5
+ headingLevel: "h1" | "h2" | "h3";
6
+ className?: string;
7
+ color?: string;
8
+ cursorColor?: string;
9
+ baseDelay?: number;
10
+ splitBy?: "words" | "chars";
11
+ speed?: number;
12
+ };
13
+ declare const HeadingReveal: ({ text, headingLevel, className, color, cursorColor, baseDelay, splitBy, speed, }: HeadingRevealProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ export { HeadingReveal, type HeadingRevealProps };
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ type HeadingRevealProps = {
4
+ text: string;
5
+ headingLevel: "h1" | "h2" | "h3";
6
+ className?: string;
7
+ color?: string;
8
+ cursorColor?: string;
9
+ baseDelay?: number;
10
+ splitBy?: "words" | "chars";
11
+ speed?: number;
12
+ };
13
+ declare const HeadingReveal: ({ text, headingLevel, className, color, cursorColor, baseDelay, splitBy, speed, }: HeadingRevealProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ export { HeadingReveal, type HeadingRevealProps };
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var motion = require('motion');
5
+ var motionPlus = require('motion-plus');
6
+ var react = require('react');
7
+ var classNames = require('classnames');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var classNames__default = /*#__PURE__*/_interopDefault(classNames);
12
+
13
+ const HeadingReveal = ({
14
+ text,
15
+ headingLevel,
16
+ className,
17
+ color = "#EFF1F6",
18
+ cursorColor = "#00FFFF",
19
+ baseDelay = 0,
20
+ splitBy = "words",
21
+ speed = 0.25
22
+ }) => {
23
+ const containerRef = react.useRef(null);
24
+ react.useEffect(() => {
25
+ document.fonts.ready.then(() => {
26
+ if (!containerRef.current) return;
27
+ containerRef.current.style.visibility = "visible";
28
+ const { words, chars } = motionPlus.splitText(
29
+ containerRef.current.querySelector(headingLevel)
30
+ );
31
+ motion.animate(
32
+ splitBy === "words" ? words : chars,
33
+ {
34
+ backgroundColor: [
35
+ "rgba(255,255,255,0)",
36
+ "rgba(255,255,255,0)",
37
+ cursorColor,
38
+ cursorColor,
39
+ cursorColor,
40
+ "rgba(255,255,255,0)"
41
+ ],
42
+ color: [
43
+ "rgba(255,255,255,0)",
44
+ "rgba(255,255,255,0)",
45
+ cursorColor,
46
+ cursorColor,
47
+ cursorColor,
48
+ color
49
+ ]
50
+ },
51
+ {
52
+ ease: motion.anticipate,
53
+ duration: speed,
54
+ delay: motion.stagger(speed / 2, { startDelay: baseDelay })
55
+ }
56
+ );
57
+ });
58
+ }, []);
59
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, children: [
60
+ headingLevel === "h1" && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: classNames__default.default("h1", className), children: text }),
61
+ headingLevel === "h2" && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: classNames__default.default("h2", className), children: text }),
62
+ headingLevel === "h3" && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: classNames__default.default("h3", className), children: text })
63
+ ] });
64
+ };
65
+
66
+ exports.HeadingReveal = HeadingReveal;
67
+ //# sourceMappingURL=HeadingReveal.js.map
68
+ //# sourceMappingURL=HeadingReveal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/HeadingReveal.tsx"],"names":["useRef","useEffect","splitText","animate","anticipate","stagger","jsxs","classNames","jsx"],"mappings":";;;;;;;;;;;;AAiBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,WAAA,GAAc,SAAA;AAAA,EACd,SAAA,GAAY,CAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,KAAA,GAAQ;AACV,CAAA,KAA0B;AACxB,EAAA,MAAM,YAAA,GAAeA,aAAuB,IAAI,CAAA;AAEhD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAM;AAC9B,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAG3B,MAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,UAAA,GAAa,SAAA;AAExC,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAIC,oBAAA;AAAA,QACvB,YAAA,CAAa,OAAA,CAAQ,aAAA,CAAc,YAAY;AAAA,OACjD;AAGA,MAAAC,cAAA;AAAA,QACE,OAAA,KAAY,UAAU,KAAA,GAAQ,KAAA;AAAA,QAC9B;AAAA,UACE,eAAA,EAAiB;AAAA,YACf,qBAAA;AAAA,YACA,qBAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,qBAAA;AAAA,YACA,qBAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAMC,iBAAA;AAAA,UACN,QAAA,EAAU,KAAA;AAAA,UACV,OAAOC,cAAA,CAAQ,KAAA,GAAQ,GAAG,EAAE,UAAA,EAAY,WAAW;AAAA;AACrD,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EACP,QAAA,EAAA;AAAA,IAAA,YAAA,KAAiB,IAAA,mCACf,IAAA,EAAA,EAAG,SAAA,EAAWC,4BAAW,IAAA,EAAM,SAAS,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAEnD,YAAA,KAAiB,wBAChBC,cAAA,CAAC,IAAA,EAAA,EAAG,WAAWD,2BAAA,CAAW,IAAA,EAAM,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAEnD,YAAA,KAAiB,wBAChBC,cAAA,CAAC,IAAA,EAAA,EAAG,WAAWD,2BAAA,CAAW,IAAA,EAAM,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK;AAAA,GAAA,EAEtD,CAAA;AAEJ","file":"HeadingReveal.js","sourcesContent":["\"use client\";\n\nimport { animate, stagger, anticipate } from \"motion\";\nimport { splitText } from \"motion-plus\";\nimport { useEffect, useRef } from \"react\";\nimport classNames from \"classnames\";\n\nexport type HeadingRevealProps = {\n text: string;\n headingLevel: \"h1\" | \"h2\" | \"h3\";\n className?: string;\n color?: string;\n cursorColor?: string;\n baseDelay?: number;\n splitBy?: \"words\" | \"chars\";\n speed?: number;\n};\nexport const HeadingReveal = ({\n text,\n headingLevel,\n className,\n color = \"#EFF1F6\",\n cursorColor = \"#00FFFF\",\n baseDelay = 0,\n splitBy = \"words\",\n speed = 0.25,\n}: HeadingRevealProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n document.fonts.ready.then(() => {\n if (!containerRef.current) return;\n\n // Hide the container until the fonts are loaded\n containerRef.current.style.visibility = \"visible\";\n\n const { words, chars } = splitText(\n containerRef.current.querySelector(headingLevel)!\n );\n\n // Animate the words in the h1\n animate(\n splitBy === \"words\" ? words : chars,\n {\n backgroundColor: [\n \"rgba(255,255,255,0)\",\n \"rgba(255,255,255,0)\",\n cursorColor,\n cursorColor,\n cursorColor,\n \"rgba(255,255,255,0)\",\n ],\n color: [\n \"rgba(255,255,255,0)\",\n \"rgba(255,255,255,0)\",\n cursorColor,\n cursorColor,\n cursorColor,\n color,\n ],\n },\n {\n ease: anticipate,\n duration: speed,\n delay: stagger(speed / 2, { startDelay: baseDelay }),\n }\n );\n });\n }, []);\n\n return (\n <div ref={containerRef}>\n {headingLevel === \"h1\" && (\n <h1 className={classNames(\"h1\", className)}>{text}</h1>\n )}\n {headingLevel === \"h2\" && (\n <h2 className={classNames(\"h2\", className)}>{text}</h2>\n )}\n {headingLevel === \"h3\" && (\n <h3 className={classNames(\"h3\", className)}>{text}</h3>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,62 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { animate, stagger, anticipate } from 'motion';
3
+ import { splitText } from 'motion-plus';
4
+ import { useRef, useEffect } from 'react';
5
+ import classNames from 'classnames';
6
+
7
+ const HeadingReveal = ({
8
+ text,
9
+ headingLevel,
10
+ className,
11
+ color = "#EFF1F6",
12
+ cursorColor = "#00FFFF",
13
+ baseDelay = 0,
14
+ splitBy = "words",
15
+ speed = 0.25
16
+ }) => {
17
+ const containerRef = useRef(null);
18
+ useEffect(() => {
19
+ document.fonts.ready.then(() => {
20
+ if (!containerRef.current) return;
21
+ containerRef.current.style.visibility = "visible";
22
+ const { words, chars } = splitText(
23
+ containerRef.current.querySelector(headingLevel)
24
+ );
25
+ animate(
26
+ splitBy === "words" ? words : chars,
27
+ {
28
+ backgroundColor: [
29
+ "rgba(255,255,255,0)",
30
+ "rgba(255,255,255,0)",
31
+ cursorColor,
32
+ cursorColor,
33
+ cursorColor,
34
+ "rgba(255,255,255,0)"
35
+ ],
36
+ color: [
37
+ "rgba(255,255,255,0)",
38
+ "rgba(255,255,255,0)",
39
+ cursorColor,
40
+ cursorColor,
41
+ cursorColor,
42
+ color
43
+ ]
44
+ },
45
+ {
46
+ ease: anticipate,
47
+ duration: speed,
48
+ delay: stagger(speed / 2, { startDelay: baseDelay })
49
+ }
50
+ );
51
+ });
52
+ }, []);
53
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, children: [
54
+ headingLevel === "h1" && /* @__PURE__ */ jsx("h1", { className: classNames("h1", className), children: text }),
55
+ headingLevel === "h2" && /* @__PURE__ */ jsx("h2", { className: classNames("h2", className), children: text }),
56
+ headingLevel === "h3" && /* @__PURE__ */ jsx("h3", { className: classNames("h3", className), children: text })
57
+ ] });
58
+ };
59
+
60
+ export { HeadingReveal };
61
+ //# sourceMappingURL=HeadingReveal.mjs.map
62
+ //# sourceMappingURL=HeadingReveal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/HeadingReveal.tsx"],"names":[],"mappings":";;;;;;AAiBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,WAAA,GAAc,SAAA;AAAA,EACd,SAAA,GAAY,CAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,KAAA,GAAQ;AACV,CAAA,KAA0B;AACxB,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,MAAM;AAC9B,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAG3B,MAAA,YAAA,CAAa,OAAA,CAAQ,MAAM,UAAA,GAAa,SAAA;AAExC,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,SAAA;AAAA,QACvB,YAAA,CAAa,OAAA,CAAQ,aAAA,CAAc,YAAY;AAAA,OACjD;AAGA,MAAA,OAAA;AAAA,QACE,OAAA,KAAY,UAAU,KAAA,GAAQ,KAAA;AAAA,QAC9B;AAAA,UACE,eAAA,EAAiB;AAAA,YACf,qBAAA;AAAA,YACA,qBAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,qBAAA;AAAA,YACA,qBAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU,KAAA;AAAA,UACV,OAAO,OAAA,CAAQ,KAAA,GAAQ,GAAG,EAAE,UAAA,EAAY,WAAW;AAAA;AACrD,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EACP,QAAA,EAAA;AAAA,IAAA,YAAA,KAAiB,IAAA,wBACf,IAAA,EAAA,EAAG,SAAA,EAAW,WAAW,IAAA,EAAM,SAAS,GAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAEnD,YAAA,KAAiB,wBAChB,GAAA,CAAC,IAAA,EAAA,EAAG,WAAW,UAAA,CAAW,IAAA,EAAM,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAEnD,YAAA,KAAiB,wBAChB,GAAA,CAAC,IAAA,EAAA,EAAG,WAAW,UAAA,CAAW,IAAA,EAAM,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK;AAAA,GAAA,EAEtD,CAAA;AAEJ","file":"HeadingReveal.mjs","sourcesContent":["\"use client\";\n\nimport { animate, stagger, anticipate } from \"motion\";\nimport { splitText } from \"motion-plus\";\nimport { useEffect, useRef } from \"react\";\nimport classNames from \"classnames\";\n\nexport type HeadingRevealProps = {\n text: string;\n headingLevel: \"h1\" | \"h2\" | \"h3\";\n className?: string;\n color?: string;\n cursorColor?: string;\n baseDelay?: number;\n splitBy?: \"words\" | \"chars\";\n speed?: number;\n};\nexport const HeadingReveal = ({\n text,\n headingLevel,\n className,\n color = \"#EFF1F6\",\n cursorColor = \"#00FFFF\",\n baseDelay = 0,\n splitBy = \"words\",\n speed = 0.25,\n}: HeadingRevealProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n document.fonts.ready.then(() => {\n if (!containerRef.current) return;\n\n // Hide the container until the fonts are loaded\n containerRef.current.style.visibility = \"visible\";\n\n const { words, chars } = splitText(\n containerRef.current.querySelector(headingLevel)!\n );\n\n // Animate the words in the h1\n animate(\n splitBy === \"words\" ? words : chars,\n {\n backgroundColor: [\n \"rgba(255,255,255,0)\",\n \"rgba(255,255,255,0)\",\n cursorColor,\n cursorColor,\n cursorColor,\n \"rgba(255,255,255,0)\",\n ],\n color: [\n \"rgba(255,255,255,0)\",\n \"rgba(255,255,255,0)\",\n cursorColor,\n cursorColor,\n cursorColor,\n color,\n ],\n },\n {\n ease: anticipate,\n duration: speed,\n delay: stagger(speed / 2, { startDelay: baseDelay }),\n }\n );\n });\n }, []);\n\n return (\n <div ref={containerRef}>\n {headingLevel === \"h1\" && (\n <h1 className={classNames(\"h1\", className)}>{text}</h1>\n )}\n {headingLevel === \"h2\" && (\n <h2 className={classNames(\"h2\", className)}>{text}</h2>\n )}\n {headingLevel === \"h3\" && (\n <h3 className={classNames(\"h3\", className)}>{text}</h3>\n )}\n </div>\n );\n};\n"]}
package/dist/Icon.d.mts CHANGED
@@ -1,3 +1,3 @@
1
1
  import 'react/jsx-runtime';
2
2
  import './utils/colours.mjs';
3
- export { I as Icon, b as IconComponents, c as IconName, a as IconProps, i as iconMetadata } from './index-DWGhkMUQ.mjs';
3
+ export { I as Icon, b as IconComponents, c as IconName, a as IconProps, i as iconMetadata } from './Icon-CTxwWbdC.mjs';
package/dist/Icon.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import 'react/jsx-runtime';
2
2
  import './utils/colours.js';
3
- export { I as Icon, b as IconComponents, c as IconName, a as IconProps, i as iconMetadata } from './index-ekBNDG0H.js';
3
+ export { I as Icon, b as IconComponents, c as IconName, a as IconProps, i as iconMetadata } from './Icon-llWd6yMa.js';
package/dist/Input.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { MotionProps } from 'motion/react';
3
- import { c as IconName } from './index-DWGhkMUQ.mjs';
3
+ import { c as IconName } from './Icon-CTxwWbdC.mjs';
4
4
  import { BadgeProps } from './Badge.mjs';
5
5
  import { TooltipProps } from './Tooltip.mjs';
6
6
  import './utils/colours.mjs';
package/dist/Input.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { MotionProps } from 'motion/react';
3
- import { c as IconName } from './index-ekBNDG0H.js';
3
+ import { c as IconName } from './Icon-llWd6yMa.js';
4
4
  import { BadgeProps } from './Badge.js';
5
5
  import { TooltipProps } from './Tooltip.js';
6
6
  import './utils/colours.js';
package/dist/Input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Input.tsx"],"names":["useState","jsxs","motion","classNames","jsx","Tooltip","Icon","CrosshairCorners","Badge","Button","AnimatePresence","crisp"],"mappings":"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","file":"Input.js","sourcesContent":["import { AnimatePresence, motion, MotionProps } from \"motion/react\";\nimport { Icon, IconName, IconProps } from \"./Icon\";\nimport classNames from \"classnames\";\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport { crisp } from \"./utils/easings\";\nimport { CrosshairCorners } from \"./CrossHair\";\nimport { Tooltip, TooltipProps } from \"./Tooltip\";\nimport { useState } from \"react\";\n\nexport type InputProps = {\n title: string;\n value: string;\n className?: string;\n onChange?: (value: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onClear?: () => void;\n badge?: BadgeProps;\n message?: string;\n hasMessage?: boolean;\n disabled?: boolean;\n placeholder?: string;\n isValid?: boolean;\n type?: \"generic\" | \"value\";\n balance?: {\n amount: string;\n unit: string;\n icon?: IconName;\n };\n action?: {\n label: string;\n onClick: () => void;\n };\n animation?: MotionProps;\n tooltip?: TooltipProps;\n};\n\nexport const Input = ({\n title,\n value,\n className,\n onChange,\n onFocus,\n onBlur,\n onClear,\n badge,\n type,\n message,\n hasMessage = true,\n disabled,\n placeholder,\n isValid = true,\n balance,\n action,\n animation,\n tooltip,\n}: InputProps) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n return (\n <motion.div\n {...animation}\n className={classNames(\n \"flex flex-col gap-y-2.5 w-full relative group/input\",\n className\n )}\n >\n <div className=\"px-1 flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-x-1.5\">\n <span className=\"font-medium text-shade-primary leading-[100%]\">\n {title}\n </span>\n {tooltip && (\n <div\n className=\"h-[14px] w-[14px] relative\"\n onMouseEnter={() => setIsTooltipOpen(true)}\n onMouseLeave={() => setIsTooltipOpen(false)}\n >\n <Tooltip\n isOpen={isTooltipOpen}\n position={tooltip.position}\n description={tooltip.description}\n />\n <Icon name=\"Info\" size={14} className=\"text-shade-tertiary\" />\n </div>\n )}\n </div>\n {balance && (\n <div className=\"flex items-center gap-x-1.5\">\n <Icon\n name={balance.icon as IconName}\n size={12}\n className=\"text-shade-tertiary\"\n />\n <span className=\"font-medium text-shade-primary leading-[100%] text-sm font-mono\">\n {balance.amount} {balance.unit}\n </span>\n </div>\n )}\n </div>\n <div\n className={classNames(\n \"min-h-[44px] relative h-full py-1.5 flex items-center justify-between group/input bg-background border text-shade-tertiary border-border focus-within:border-current/20 focus-within:bg-current/2 focus-within:shadow-[inset_0px_0px_12px] focus-within:shadow-current/10 transition-colors duration-100 ease-crisp\",\n !isValid && \"border-state-error/20 text-state-error\",\n !!badge && \"pl-1.5 pr-[10px]\",\n !badge && \"pl-3 pr-4\"\n )}\n >\n {onFocus && (\n <div className=\"pointer-events-none absolute inset-1.5 text-shade-mute group-hover/input:text-shade-primary group-focus-within/input:inset-0.5 group-focus-within/input:text-shade-primary transition-all duration-50 ease-glide\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n animationDelay={0}\n animationDuration={0.75}\n />\n </div>\n )}\n <div\n className={classNames(\n \"flex w-full items-center gap-x-3 text-shade-primary\"\n )}\n >\n {badge && <Badge {...badge} />}\n <input\n className={classNames(\n \"h-full w-full flex-shrink font-medium focus:outline-none bg-transparent placeholder:text-shade-mute\",\n type === \"value\" && \"text-2xl font-mono text-right\",\n // Hide buttons\n \"[-moz-appearance:_textfield] [&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none\"\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n type={type === \"value\" ? \"number\" : \"text\"}\n />\n {onClear && value && (\n <button\n onClick={onClear}\n className=\"absolute right-2 p-2 hover:bg-border-light/50 transition-colors duration-100 ease-crisp\"\n type=\"button\"\n >\n <Icon\n name=\"Close\"\n size={12}\n className=\"text-shade-tertiary hover:text-shade-primary transition-colors duration-100 ease-crisp\"\n />\n </button>\n )}\n {action && (\n <Button\n label={action.label}\n onClick={action.onClick}\n variant=\"secondary\"\n size=\"xs\"\n useHoverEffect={false}\n />\n )}\n </div>\n </div>\n {hasMessage && (\n <div className=\"h-[14px] ml-auto px-1\">\n <AnimatePresence>\n {message && (\n <motion.span\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n transition={{ duration: 0.1, ease: crisp }}\n className={classNames(\n \"text-sm text-shade-secondary font-medium leading-[100%]\",\n !isValid && \"text-state-error\"\n )}\n >\n {message}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n )}\n </motion.div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/Input.tsx"],"names":["useState","jsxs","motion","classNames","jsx","Tooltip","Icon","CrosshairCorners","Badge","Button","AnimatePresence","crisp"],"mappings":";;;;;;;;;;;;;;;;;AAuCO,MAAM,QAAQ,CAAC;AAAA,EACpB,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAkB;AAChB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,eAAS,KAAK,CAAA;AACxD,EAAA,uBACEC,eAAA;AAAA,IAACC,cAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAWC,2BAAA;AAAA,QACT,qDAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAF,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EACb,QAAA,EAAA;AAAA,4BAAAG,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YACC,OAAA,oBACCH,eAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,4BAAA;AAAA,gBACV,YAAA,EAAc,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAAA,gBACzC,YAAA,EAAc,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,gBAE1C,QAAA,EAAA;AAAA,kCAAAG,cAAA;AAAA,oBAACC,eAAA;AAAA,oBAAA;AAAA,sBACC,MAAA,EAAQ,aAAA;AAAA,sBACR,UAAU,OAAA,CAAQ,QAAA;AAAA,sBAClB,aAAa,OAAA,CAAQ;AAAA;AAAA,mBACvB;AAAA,iDACCC,SAAA,EAAA,EAAK,IAAA,EAAK,QAAO,IAAA,EAAM,EAAA,EAAI,WAAU,qBAAA,EAAsB;AAAA;AAAA;AAAA;AAC9D,WAAA,EAEJ,CAAA;AAAA,UACC,OAAA,oBACCL,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,4BAAAG,cAAA;AAAA,cAACE,SAAA;AAAA,cAAA;AAAA,gBACC,MAAM,OAAA,CAAQ,IAAA;AAAA,gBACd,IAAA,EAAM,EAAA;AAAA,gBACN,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACAL,eAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,cAAA,OAAA,CAAQ,MAAA;AAAA,cAAO,GAAA;AAAA,cAAE,OAAA,CAAQ;AAAA,aAAA,EAC5B;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACAA,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWE,2BAAA;AAAA,cACT,qTAAA;AAAA,cACA,CAAC,OAAA,IAAW,wCAAA;AAAA,cACZ,CAAC,CAAC,KAAA,IAAS,kBAAA;AAAA,cACX,CAAC,KAAA,IAAS;AAAA,aACZ;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kNAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,gBAACG,0BAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAM,CAAA;AAAA,kBACN,OAAA,EAAQ,SAAA;AAAA,kBACR,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,kBACxB,cAAA,EAAgB,CAAA;AAAA,kBAChB,iBAAA,EAAmB;AAAA;AAAA,eACrB,EACF,CAAA;AAAA,8BAEFN,eAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWE,2BAAA;AAAA,oBACT;AAAA,mBACF;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,KAAA,oBAASC,cAAA,CAACI,WAAA,EAAA,EAAO,GAAG,KAAA,EAAO,CAAA;AAAA,oCAC5BJ,cAAA;AAAA,sBAAC,OAAA;AAAA,sBAAA;AAAA,wBACC,SAAA,EAAWD,2BAAA;AAAA,0BACT,qGAAA;AAAA,0BACA,SAAS,OAAA,IAAW,+BAAA;AAAA;AAAA,0BAEpB;AAAA,yBACF;AAAA,wBACA,OAAA;AAAA,wBACA,MAAA;AAAA,wBACA,WAAA;AAAA,wBACA,KAAA;AAAA,wBACA,UAAU,CAAC,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,wBAC1C,QAAA;AAAA,wBACA,IAAA,EAAM,IAAA,KAAS,OAAA,GAAU,QAAA,GAAW;AAAA;AAAA,qBACtC;AAAA,oBACC,WAAW,KAAA,oBACVC,cAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAS,OAAA;AAAA,wBACT,SAAA,EAAU,yFAAA;AAAA,wBACV,IAAA,EAAK,QAAA;AAAA,wBAEL,QAAA,kBAAAA,cAAA;AAAA,0BAACE,SAAA;AAAA,0BAAA;AAAA,4BACC,IAAA,EAAK,OAAA;AAAA,4BACL,IAAA,EAAM,EAAA;AAAA,4BACN,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,qBACF;AAAA,oBAED,MAAA,oBACCF,cAAA;AAAA,sBAACK,aAAA;AAAA,sBAAA;AAAA,wBACC,OAAO,MAAA,CAAO,KAAA;AAAA,wBACd,SAAS,MAAA,CAAO,OAAA;AAAA,wBAChB,OAAA,EAAQ,WAAA;AAAA,wBACR,IAAA,EAAK,IAAA;AAAA,wBACL,cAAA,EAAgB;AAAA;AAAA;AAClB;AAAA;AAAA;AAEJ;AAAA;AAAA,SACF;AAAA,QACC,8BACCL,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACb,QAAA,kBAAAA,cAAA,CAACM,2BACE,QAAA,EAAA,OAAA,oBACCN,cAAA;AAAA,UAACF,cAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,YAC3C,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,YAC3C,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,YACxC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAMS,aAAA,EAAM;AAAA,YACzC,SAAA,EAAWR,2BAAA;AAAA,cACT,yDAAA;AAAA,cACA,CAAC,OAAA,IAAW;AAAA,aACd;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,WAGP,CAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ","file":"Input.js","sourcesContent":["\"use client\";\nimport { AnimatePresence, motion, MotionProps } from \"motion/react\";\nimport { Icon, IconName, IconProps } from \"./Icon\";\nimport classNames from \"classnames\";\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport { crisp } from \"./utils/easings\";\nimport { CrosshairCorners } from \"./CrossHair\";\nimport { Tooltip, TooltipProps } from \"./Tooltip\";\nimport { useState } from \"react\";\n\nexport type InputProps = {\n title: string;\n value: string;\n className?: string;\n onChange?: (value: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onClear?: () => void;\n badge?: BadgeProps;\n message?: string;\n hasMessage?: boolean;\n disabled?: boolean;\n placeholder?: string;\n isValid?: boolean;\n type?: \"generic\" | \"value\";\n balance?: {\n amount: string;\n unit: string;\n icon?: IconName;\n };\n action?: {\n label: string;\n onClick: () => void;\n };\n animation?: MotionProps;\n tooltip?: TooltipProps;\n};\n\nexport const Input = ({\n title,\n value,\n className,\n onChange,\n onFocus,\n onBlur,\n onClear,\n badge,\n type,\n message,\n hasMessage = true,\n disabled,\n placeholder,\n isValid = true,\n balance,\n action,\n animation,\n tooltip,\n}: InputProps) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n return (\n <motion.div\n {...animation}\n className={classNames(\n \"flex flex-col gap-y-2.5 w-full relative group/input\",\n className\n )}\n >\n <div className=\"px-1 flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-x-1.5\">\n <span className=\"font-medium text-shade-primary leading-[100%]\">\n {title}\n </span>\n {tooltip && (\n <div\n className=\"h-[14px] w-[14px] relative\"\n onMouseEnter={() => setIsTooltipOpen(true)}\n onMouseLeave={() => setIsTooltipOpen(false)}\n >\n <Tooltip\n isOpen={isTooltipOpen}\n position={tooltip.position}\n description={tooltip.description}\n />\n <Icon name=\"Info\" size={14} className=\"text-shade-tertiary\" />\n </div>\n )}\n </div>\n {balance && (\n <div className=\"flex items-center gap-x-1.5\">\n <Icon\n name={balance.icon as IconName}\n size={12}\n className=\"text-shade-tertiary\"\n />\n <span className=\"font-medium text-shade-primary leading-[100%] text-sm font-mono\">\n {balance.amount} {balance.unit}\n </span>\n </div>\n )}\n </div>\n <div\n className={classNames(\n \"min-h-[44px] relative h-full py-1.5 flex items-center justify-between group/input bg-background border text-shade-tertiary border-border focus-within:border-current/20 focus-within:bg-current/2 focus-within:shadow-[inset_0px_0px_12px] focus-within:shadow-current/10 transition-colors duration-100 ease-crisp\",\n !isValid && \"border-state-error/20 text-state-error\",\n !!badge && \"pl-1.5 pr-[10px]\",\n !badge && \"pl-3 pr-4\"\n )}\n >\n {onFocus && (\n <div className=\"pointer-events-none absolute inset-1.5 text-shade-mute group-hover/input:text-shade-primary group-focus-within/input:inset-0.5 group-focus-within/input:text-shade-primary transition-all duration-50 ease-glide\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n animationDelay={0}\n animationDuration={0.75}\n />\n </div>\n )}\n <div\n className={classNames(\n \"flex w-full items-center gap-x-3 text-shade-primary\"\n )}\n >\n {badge && <Badge {...badge} />}\n <input\n className={classNames(\n \"h-full w-full flex-shrink font-medium focus:outline-none bg-transparent placeholder:text-shade-mute\",\n type === \"value\" && \"text-2xl font-mono text-right\",\n // Hide buttons\n \"[-moz-appearance:_textfield] [&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none\"\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n type={type === \"value\" ? \"number\" : \"text\"}\n />\n {onClear && value && (\n <button\n onClick={onClear}\n className=\"absolute right-2 p-2 hover:bg-border-light/50 transition-colors duration-100 ease-crisp\"\n type=\"button\"\n >\n <Icon\n name=\"Close\"\n size={12}\n className=\"text-shade-tertiary hover:text-shade-primary transition-colors duration-100 ease-crisp\"\n />\n </button>\n )}\n {action && (\n <Button\n label={action.label}\n onClick={action.onClick}\n variant=\"secondary\"\n size=\"xs\"\n useHoverEffect={false}\n />\n )}\n </div>\n </div>\n {hasMessage && (\n <div className=\"h-[14px] ml-auto px-1\">\n <AnimatePresence>\n {message && (\n <motion.span\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n transition={{ duration: 0.1, ease: crisp }}\n className={classNames(\n \"text-sm text-shade-secondary font-medium leading-[100%]\",\n !isValid && \"text-state-error\"\n )}\n >\n {message}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n )}\n </motion.div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Input.tsx"],"names":[],"mappings":"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","file":"Input.mjs","sourcesContent":["import { AnimatePresence, motion, MotionProps } from \"motion/react\";\nimport { Icon, IconName, IconProps } from \"./Icon\";\nimport classNames from \"classnames\";\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport { crisp } from \"./utils/easings\";\nimport { CrosshairCorners } from \"./CrossHair\";\nimport { Tooltip, TooltipProps } from \"./Tooltip\";\nimport { useState } from \"react\";\n\nexport type InputProps = {\n title: string;\n value: string;\n className?: string;\n onChange?: (value: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onClear?: () => void;\n badge?: BadgeProps;\n message?: string;\n hasMessage?: boolean;\n disabled?: boolean;\n placeholder?: string;\n isValid?: boolean;\n type?: \"generic\" | \"value\";\n balance?: {\n amount: string;\n unit: string;\n icon?: IconName;\n };\n action?: {\n label: string;\n onClick: () => void;\n };\n animation?: MotionProps;\n tooltip?: TooltipProps;\n};\n\nexport const Input = ({\n title,\n value,\n className,\n onChange,\n onFocus,\n onBlur,\n onClear,\n badge,\n type,\n message,\n hasMessage = true,\n disabled,\n placeholder,\n isValid = true,\n balance,\n action,\n animation,\n tooltip,\n}: InputProps) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n return (\n <motion.div\n {...animation}\n className={classNames(\n \"flex flex-col gap-y-2.5 w-full relative group/input\",\n className\n )}\n >\n <div className=\"px-1 flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-x-1.5\">\n <span className=\"font-medium text-shade-primary leading-[100%]\">\n {title}\n </span>\n {tooltip && (\n <div\n className=\"h-[14px] w-[14px] relative\"\n onMouseEnter={() => setIsTooltipOpen(true)}\n onMouseLeave={() => setIsTooltipOpen(false)}\n >\n <Tooltip\n isOpen={isTooltipOpen}\n position={tooltip.position}\n description={tooltip.description}\n />\n <Icon name=\"Info\" size={14} className=\"text-shade-tertiary\" />\n </div>\n )}\n </div>\n {balance && (\n <div className=\"flex items-center gap-x-1.5\">\n <Icon\n name={balance.icon as IconName}\n size={12}\n className=\"text-shade-tertiary\"\n />\n <span className=\"font-medium text-shade-primary leading-[100%] text-sm font-mono\">\n {balance.amount} {balance.unit}\n </span>\n </div>\n )}\n </div>\n <div\n className={classNames(\n \"min-h-[44px] relative h-full py-1.5 flex items-center justify-between group/input bg-background border text-shade-tertiary border-border focus-within:border-current/20 focus-within:bg-current/2 focus-within:shadow-[inset_0px_0px_12px] focus-within:shadow-current/10 transition-colors duration-100 ease-crisp\",\n !isValid && \"border-state-error/20 text-state-error\",\n !!badge && \"pl-1.5 pr-[10px]\",\n !badge && \"pl-3 pr-4\"\n )}\n >\n {onFocus && (\n <div className=\"pointer-events-none absolute inset-1.5 text-shade-mute group-hover/input:text-shade-primary group-focus-within/input:inset-0.5 group-focus-within/input:text-shade-primary transition-all duration-50 ease-glide\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n animationDelay={0}\n animationDuration={0.75}\n />\n </div>\n )}\n <div\n className={classNames(\n \"flex w-full items-center gap-x-3 text-shade-primary\"\n )}\n >\n {badge && <Badge {...badge} />}\n <input\n className={classNames(\n \"h-full w-full flex-shrink font-medium focus:outline-none bg-transparent placeholder:text-shade-mute\",\n type === \"value\" && \"text-2xl font-mono text-right\",\n // Hide buttons\n \"[-moz-appearance:_textfield] [&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none\"\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n type={type === \"value\" ? \"number\" : \"text\"}\n />\n {onClear && value && (\n <button\n onClick={onClear}\n className=\"absolute right-2 p-2 hover:bg-border-light/50 transition-colors duration-100 ease-crisp\"\n type=\"button\"\n >\n <Icon\n name=\"Close\"\n size={12}\n className=\"text-shade-tertiary hover:text-shade-primary transition-colors duration-100 ease-crisp\"\n />\n </button>\n )}\n {action && (\n <Button\n label={action.label}\n onClick={action.onClick}\n variant=\"secondary\"\n size=\"xs\"\n useHoverEffect={false}\n />\n )}\n </div>\n </div>\n {hasMessage && (\n <div className=\"h-[14px] ml-auto px-1\">\n <AnimatePresence>\n {message && (\n <motion.span\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n transition={{ duration: 0.1, ease: crisp }}\n className={classNames(\n \"text-sm text-shade-secondary font-medium leading-[100%]\",\n !isValid && \"text-state-error\"\n )}\n >\n {message}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n )}\n </motion.div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/Input.tsx"],"names":[],"mappings":"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","file":"Input.mjs","sourcesContent":["\"use client\";\nimport { AnimatePresence, motion, MotionProps } from \"motion/react\";\nimport { Icon, IconName, IconProps } from \"./Icon\";\nimport classNames from \"classnames\";\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport { crisp } from \"./utils/easings\";\nimport { CrosshairCorners } from \"./CrossHair\";\nimport { Tooltip, TooltipProps } from \"./Tooltip\";\nimport { useState } from \"react\";\n\nexport type InputProps = {\n title: string;\n value: string;\n className?: string;\n onChange?: (value: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onClear?: () => void;\n badge?: BadgeProps;\n message?: string;\n hasMessage?: boolean;\n disabled?: boolean;\n placeholder?: string;\n isValid?: boolean;\n type?: \"generic\" | \"value\";\n balance?: {\n amount: string;\n unit: string;\n icon?: IconName;\n };\n action?: {\n label: string;\n onClick: () => void;\n };\n animation?: MotionProps;\n tooltip?: TooltipProps;\n};\n\nexport const Input = ({\n title,\n value,\n className,\n onChange,\n onFocus,\n onBlur,\n onClear,\n badge,\n type,\n message,\n hasMessage = true,\n disabled,\n placeholder,\n isValid = true,\n balance,\n action,\n animation,\n tooltip,\n}: InputProps) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n return (\n <motion.div\n {...animation}\n className={classNames(\n \"flex flex-col gap-y-2.5 w-full relative group/input\",\n className\n )}\n >\n <div className=\"px-1 flex items-center justify-between w-full\">\n <div className=\"flex items-center gap-x-1.5\">\n <span className=\"font-medium text-shade-primary leading-[100%]\">\n {title}\n </span>\n {tooltip && (\n <div\n className=\"h-[14px] w-[14px] relative\"\n onMouseEnter={() => setIsTooltipOpen(true)}\n onMouseLeave={() => setIsTooltipOpen(false)}\n >\n <Tooltip\n isOpen={isTooltipOpen}\n position={tooltip.position}\n description={tooltip.description}\n />\n <Icon name=\"Info\" size={14} className=\"text-shade-tertiary\" />\n </div>\n )}\n </div>\n {balance && (\n <div className=\"flex items-center gap-x-1.5\">\n <Icon\n name={balance.icon as IconName}\n size={12}\n className=\"text-shade-tertiary\"\n />\n <span className=\"font-medium text-shade-primary leading-[100%] text-sm font-mono\">\n {balance.amount} {balance.unit}\n </span>\n </div>\n )}\n </div>\n <div\n className={classNames(\n \"min-h-[44px] relative h-full py-1.5 flex items-center justify-between group/input bg-background border text-shade-tertiary border-border focus-within:border-current/20 focus-within:bg-current/2 focus-within:shadow-[inset_0px_0px_12px] focus-within:shadow-current/10 transition-colors duration-100 ease-crisp\",\n !isValid && \"border-state-error/20 text-state-error\",\n !!badge && \"pl-1.5 pr-[10px]\",\n !badge && \"pl-3 pr-4\"\n )}\n >\n {onFocus && (\n <div className=\"pointer-events-none absolute inset-1.5 text-shade-mute group-hover/input:text-shade-primary group-focus-within/input:inset-0.5 group-focus-within/input:text-shade-primary transition-all duration-50 ease-glide\">\n <CrosshairCorners\n size={6}\n variant=\"corners\"\n corners={[\"bottom-right\"]}\n animationDelay={0}\n animationDuration={0.75}\n />\n </div>\n )}\n <div\n className={classNames(\n \"flex w-full items-center gap-x-3 text-shade-primary\"\n )}\n >\n {badge && <Badge {...badge} />}\n <input\n className={classNames(\n \"h-full w-full flex-shrink font-medium focus:outline-none bg-transparent placeholder:text-shade-mute\",\n type === \"value\" && \"text-2xl font-mono text-right\",\n // Hide buttons\n \"[-moz-appearance:_textfield] [&::-webkit-inner-spin-button]:m-0 [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:m-0 [&::-webkit-outer-spin-button]:appearance-none\"\n )}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n value={value}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n type={type === \"value\" ? \"number\" : \"text\"}\n />\n {onClear && value && (\n <button\n onClick={onClear}\n className=\"absolute right-2 p-2 hover:bg-border-light/50 transition-colors duration-100 ease-crisp\"\n type=\"button\"\n >\n <Icon\n name=\"Close\"\n size={12}\n className=\"text-shade-tertiary hover:text-shade-primary transition-colors duration-100 ease-crisp\"\n />\n </button>\n )}\n {action && (\n <Button\n label={action.label}\n onClick={action.onClick}\n variant=\"secondary\"\n size=\"xs\"\n useHoverEffect={false}\n />\n )}\n </div>\n </div>\n {hasMessage && (\n <div className=\"h-[14px] ml-auto px-1\">\n <AnimatePresence>\n {message && (\n <motion.span\n initial={{ opacity: 0, filter: \"blur(4px)\" }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: \"blur(4px)\" }}\n transition={{ duration: 0.1, ease: crisp }}\n className={classNames(\n \"text-sm text-shade-secondary font-medium leading-[100%]\",\n !isValid && \"text-state-error\"\n )}\n >\n {message}\n </motion.span>\n )}\n </AnimatePresence>\n </div>\n )}\n </motion.div>\n );\n};\n"]}
package/dist/Logo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Logo.tsx"],"names":["nova","jsxs","motion","classNames","jsx","AnimatePresence","glide"],"mappings":";;;;;;;;;;;AAWO,MAAM,OAAO,CAAC;AAAA,EACnB,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa;AACf,CAAA,KAAiB;AACf,EAAA,SAAS,aAAa,KAAA,EAAe;AACnC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAC,CAAA,EAAG,MAAM,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,MAC/C,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,OAAO,KAAA,GAAQ,GAAA,EAAK,MAAMA,YAAA;AAAK,KAC9D;AAAA,EACF;AAEA,EAAA,uBACEC,eAAA;AAAA,IAACC,YAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,4BAAA;AAAA,MACN,SAAA,EAAWC,2BAAA;AAAA,QACT,eAAA;AAAA,QACA,UAAA,IAAc,QAAA;AAAA,QACd;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,MAAA,EAAA,EACC,yCAACC,qBAAA,EAAA,EAAgB,IAAA,EAAK,aACnB,QAAA,EAAA,QAAA,oBACCD,cAAA,CAAC,UAAA,EAAA,EAAS,EAAA,EAAG,WAAA,EACX,QAAA,kBAAAA,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,IAAA;AAAA,YACF,CAAA,EAAE,GAAA;AAAA,YACF,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,EAAI;AAAA,YACtB,OAAA,EAAS,EAAE,KAAA,EAAO,QAAA,GAAW,IAAI,GAAA,EAAI;AAAA,YACrC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAMI,aAAA;AAAM;AAAA,SAC5C,EACF,GAEJ,CAAA,EACF,CAAA;AAAA,wBACAF,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,qCAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,CAAC;AAAA;AAAA,SACpB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,iCAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,6CAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,qDAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,yCAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,2DAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,8BAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,mDAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,kBAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,GAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,mDAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,EAAA,EAAG,IAAA;AAAA,YACF,GAAG,aAAa,GAAG;AAAA;AAAA,SACtB;AAAA,wBACAE,cAAA;AAAA,UAACF,YAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,CAAA,EAAE,24IAAA;AAAA,YACF,IAAA,EAAK,SAAA;AAAA,YACL,QAAA,EAAS;AAAA;AAAA;AACX;AAAA,KAAA;AAAA,IAlFK,aAAa,UAAA,GAAa;AAAA,GAmFjC;AAEJ","file":"Logo.js","sourcesContent":["import { AnimatePresence, motion } from \"motion/react\";\nimport classNames from \"classnames\";\nimport { crisp, glide, nova } from \"./utils/easings\";\n\nexport type LogoProps = {\n width?: number;\n height?: number;\n hideText?: boolean;\n isScrolled?: boolean;\n};\n\nexport const Logo = ({\n width = 144,\n height = 20,\n hideText = false,\n isScrolled = false,\n}: LogoProps) => {\n function getAnimation(delay: number) {\n return {\n initial: { opacity: 0 },\n animate: { opacity: [0, 0.25, 0.5, 1, 0.75, 1] },\n transition: { duration: 0.3, delay: delay * 0.4, ease: nova },\n };\n }\n\n return (\n <motion.svg\n width={width}\n height={height}\n viewBox=\"0 0 144 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(\n \"relative z-10\",\n isScrolled && \"h-full\",\n \"overflow-visible\"\n )}\n key={isScrolled ? \"scrolled\" : \"no-scroll\"}\n >\n <defs>\n <AnimatePresence mode=\"popLayout\">\n {hideText && (\n <clipPath id=\"text-clip\">\n <motion.rect\n x=\"28\"\n y=\"0\"\n height=\"20\"\n initial={{ width: 116 }}\n animate={{ width: hideText ? 0 : 116 }}\n transition={{ duration: 0.15, ease: glide }}\n />\n </clipPath>\n )}\n </AnimatePresence>\n </defs>\n <motion.path\n d=\"M4 4.00013H0V0.000131835H4V4.00013Z\"\n fill=\"#00FFFF\"\n id=\"1\"\n {...getAnimation(0)}\n />\n <motion.path\n d=\"M15.9997 4H11.9997V0H15.9997V4Z\"\n fill=\"#00FFFF\"\n id=\"2\"\n {...getAnimation(0.6)}\n />\n <motion.path\n d=\"M7.99987 8.00013H4V4.00013H7.99987V8.00013Z\"\n fill=\"#00FFFF\"\n id=\"3\"\n {...getAnimation(0.9)}\n />\n <motion.path\n d=\"M19.9996 7.99987H15.9997V4H19.9997L19.9996 7.99987Z\"\n fill=\"#00FFFF\"\n id=\"4\"\n {...getAnimation(0.3)}\n />\n <motion.path\n d=\"M11.9999 12H7.99987V8.00013H11.9999V12Z\"\n fill=\"#00FFFF\"\n id=\"5\"\n {...getAnimation(0.2)}\n />\n <motion.path\n d=\"M23.9996 11.9999H19.9997L19.9996 7.99987H23.9996V11.9999Z\"\n fill=\"#00FFFF\"\n id=\"6\"\n {...getAnimation(0.1)}\n />\n <motion.path\n d=\"M7.99987 16H4V12H7.99987V16Z\"\n fill=\"#00FFFF\"\n id=\"7\"\n {...getAnimation(0.5)}\n />\n <motion.path\n d=\"M19.9997 15.9999H15.9997V11.9999H19.9997V15.9999Z\"\n fill=\"#00FFFF\"\n id=\"8\"\n {...getAnimation(0.7)}\n />\n <motion.path\n d=\"M4 20H0V16H4V20Z\"\n fill=\"#00FFFF\"\n id=\"9\"\n {...getAnimation(0.4)}\n />\n <motion.path\n d=\"M15.9997 19.9999H11.9997V15.9999H15.9997V19.9999Z\"\n fill=\"#00FFFF\"\n id=\"10\"\n {...getAnimation(0.6)}\n />\n <motion.path\n d=\"M42.3 6.06C41.3333 5.44667 40.1666 5.14667 38.8 5.14667C37.72 5.14667 36.7933 5.34667 36.0133 5.75333C35.2333 6.16 34.6333 6.74 34.2066 7.50667H34.1133V0H30.5666V16.1667H28.8066V20H32.4466V17.4267H33.4466C33.94 18.2533 34.6066 18.8867 35.4466 19.3333C36.2866 19.78 37.3066 20 38.4933 20C39.9666 20 41.2133 19.6933 42.22 19.0867C43.2266 18.4733 43.9933 17.6133 44.52 16.4933C45.0466 15.3733 45.3066 14.0667 45.3066 12.5733C45.3066 11.08 45.0466 9.75333 44.5333 8.64667C44.02 7.53333 43.2733 6.67333 42.3066 6.06667L42.3 6.06ZM40.7666 15.7733C40.1066 16.54 39.1333 16.9267 37.8466 16.9267C36.72 16.9267 35.8133 16.6067 35.1333 15.96C34.4533 15.32 34.1066 14.44 34.1066 13.3267V11.8C34.1066 10.6867 34.4466 9.81333 35.1333 9.16667C35.8133 8.52667 36.72 8.2 37.8466 8.2C39.1333 8.2 40.1066 8.58667 40.7666 9.35333C41.4266 10.1267 41.7533 11.1933 41.7533 12.5533C41.7533 13.9133 41.4266 14.9867 40.7666 15.7533V15.7733ZM47.5 0H51.0466V20H47.5V0ZM67.5933 5.45333H64.0466V13.4067C64.0466 14.5 63.7266 15.3533 63.0933 15.9533C62.46 16.5533 61.5466 16.86 60.3533 16.86C59.2266 16.86 58.38 16.58 57.8066 16.0133C57.2333 15.4467 56.9466 14.6133 56.9466 13.5V5.45333H53.4V14.2133C53.4 15.9933 53.9266 17.4 54.98 18.44C56.0333 19.48 57.54 20 59.4933 20C60.76 20 61.8133 19.78 62.6466 19.3467C63.48 18.9133 64.1733 18.28 64.7333 17.4533H65.7333V20H69.3733V16.1933H67.5866V5.45333H67.5933ZM80.94 5.98667C79.8933 5.42667 78.64 5.14 77.18 5.14C75.72 5.14 74.3866 5.44 73.2733 6.03333C72.16 6.62667 71.3066 7.48 70.7 8.58C70.0933 9.68 69.7933 11 69.7933 12.52C69.7933 14.04 70.1 15.3667 70.7066 16.4867C71.32 17.6067 72.1866 18.4733 73.3133 19.08C74.44 19.6933 75.7733 19.9933 77.3133 19.9933C79.14 19.9933 80.6466 19.5667 81.8466 18.72C83.0466 17.8733 83.8133 16.6933 84.1466 15.1867H80.5733C80.3533 15.84 79.9666 16.3267 79.42 16.6533C78.8733 16.98 78.16 17.14 77.2866 17.14C76.1133 17.14 75.1733 16.82 74.4666 16.1733C73.76 15.5333 73.34 14.6067 73.2133 13.4H84.2133V12.16C84.2133 10.7133 83.9266 9.46667 83.3533 8.41333C82.78 7.36 81.9733 6.54667 80.9266 5.98667H80.94ZM73.3 11C73.52 10.0333 73.9666 9.28667 74.6333 8.76C75.3 8.23333 76.1466 7.97333 77.18 7.97333C78.2133 7.97333 79.06 8.23333 79.68 8.74667C80.3 9.26 80.68 10.0133 80.82 11H73.2933H73.3ZM94.96 11.2867L91.7466 10.6667C91.16 10.5533 90.7333 10.3867 90.46 10.1667C90.1933 9.94667 90.0533 9.65333 90.0533 9.28667C90.0533 8.79333 90.2666 8.42 90.6933 8.16667C91.12 7.91333 91.74 7.78667 92.5533 7.78667C93.46 7.78667 94.1533 7.94667 94.64 8.27333C95.1266 8.6 95.4533 9.12 95.6266 9.83333H99.0533C98.9266 8.34 98.3133 7.18667 97.2066 6.36667C96.1 5.54667 94.6133 5.14 92.74 5.14C90.8666 5.14 89.4 5.54 88.3333 6.34C87.2666 7.14 86.74 8.22 86.74 9.56667C86.74 11.66 88.14 12.98 90.9333 13.52L94.0733 14.1133C94.7266 14.24 95.1866 14.42 95.4666 14.66C95.7466 14.9 95.88 15.2333 95.88 15.66C95.88 16.7267 94.9666 17.2533 93.14 17.2533C92.06 17.2533 91.2333 17.0733 90.6666 16.72C90.0933 16.36 89.7533 15.8133 89.64 15.0667H86.1866C86.28 16.62 86.9266 17.8333 88.1133 18.7C89.3066 19.5667 90.9333 20 92.9933 20C95.0533 20 96.5266 19.5933 97.5866 18.7867C98.6533 17.98 99.18 16.8533 99.18 15.4067C99.18 14.28 98.84 13.38 98.1533 12.7133C97.4733 12.0467 96.4 11.5733 94.94 11.2867H94.96ZM109.533 5.45333C108.453 5.45333 107.52 5.65333 106.727 6.06C105.933 6.46667 105.307 7.05333 104.847 7.83333H104.753V0H101.207V20H104.753V12.0467C104.753 10.92 105.053 10.06 105.66 9.47333C106.26 8.88667 107.147 8.59333 108.3 8.59333C109.453 8.59333 110.34 8.88667 110.94 9.47333C111.54 10.06 111.847 10.92 111.847 12.0467V20H115.393V11.38C115.393 9.58667 114.867 8.15333 113.813 7.07333C112.76 5.99333 111.333 5.45333 109.54 5.45333H109.533ZM119.2 0.14C118.647 0.14 118.173 0.333333 117.787 0.726667C117.4 1.11333 117.2 1.58667 117.2 2.14667C117.2 2.70667 117.393 3.17333 117.787 3.56667C118.173 3.95333 118.647 4.14667 119.2 4.14667C119.753 4.14667 120.227 3.95333 120.613 3.56667C121 3.18 121.2 2.70667 121.2 2.14667C121.2 1.58667 121.007 1.12 120.613 0.726667C120.227 0.34 119.753 0.14 119.2 0.14ZM117.44 5.71333H120.987V20H117.44V5.71333ZM126.287 0.713333C125.753 1.18667 125.487 1.92667 125.487 2.92667V5.71333H122.793V8.47333H125.46V20H129.007V8.47333H132.267V5.71333H128.96V2.76H132.553V0H128.507C127.553 0 126.813 0.24 126.28 0.713333H126.287ZM140.267 17.22V8.49333H143.667V5.73333H140.22V1.44667H136.747V5.72667H134.2V8.48667H136.72V17.12C136.72 18.0867 136.98 18.8067 137.493 19.2867C138.007 19.76 138.733 20 139.667 20H143.993V17.22H140.26H140.267Z\"\n fill=\"#EFF1F6\"\n clipPath=\"url(#text-clip)\"\n />\n </motion.svg>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/Logo.tsx"],"names":["nova","jsxs","motion","classNames","jsx","AnimatePresence","glide"],"mappings":"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","file":"Logo.js","sourcesContent":["\"use client\";\n\nimport { AnimatePresence, motion } from \"motion/react\";\nimport classNames from \"classnames\";\nimport { crisp, glide, nova } from \"./utils/easings\";\n\nexport type LogoProps = {\n width?: number;\n height?: number;\n hideText?: boolean;\n isScrolled?: boolean;\n};\n\nexport const Logo = ({\n width = 144,\n height = 20,\n hideText = false,\n isScrolled = false,\n}: LogoProps) => {\n function getAnimation(delay: number) {\n return {\n initial: { opacity: 0 },\n animate: { opacity: [0, 0.25, 0.5, 1, 0.75, 1] },\n transition: { duration: 0.3, delay: delay * 0.4, ease: nova },\n };\n }\n\n return (\n <motion.svg\n width={width}\n height={height}\n viewBox=\"0 0 144 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(\n \"relative z-10\",\n isScrolled && \"h-full\",\n \"overflow-visible\"\n )}\n key={isScrolled ? \"scrolled\" : \"no-scroll\"}\n >\n <defs>\n <AnimatePresence mode=\"popLayout\">\n {hideText && (\n <clipPath id=\"text-clip\">\n <motion.rect\n x=\"28\"\n y=\"0\"\n height=\"20\"\n initial={{ width: 116 }}\n animate={{ width: hideText ? 0 : 116 }}\n transition={{ duration: 0.15, ease: glide }}\n />\n </clipPath>\n )}\n </AnimatePresence>\n </defs>\n <motion.path\n d=\"M4 4.00013H0V0.000131835H4V4.00013Z\"\n fill=\"#00FFFF\"\n id=\"1\"\n {...getAnimation(0)}\n />\n <motion.path\n d=\"M15.9997 4H11.9997V0H15.9997V4Z\"\n fill=\"#00FFFF\"\n id=\"2\"\n {...getAnimation(0.6)}\n />\n <motion.path\n d=\"M7.99987 8.00013H4V4.00013H7.99987V8.00013Z\"\n fill=\"#00FFFF\"\n id=\"3\"\n {...getAnimation(0.9)}\n />\n <motion.path\n d=\"M19.9996 7.99987H15.9997V4H19.9997L19.9996 7.99987Z\"\n fill=\"#00FFFF\"\n id=\"4\"\n {...getAnimation(0.3)}\n />\n <motion.path\n d=\"M11.9999 12H7.99987V8.00013H11.9999V12Z\"\n fill=\"#00FFFF\"\n id=\"5\"\n {...getAnimation(0.2)}\n />\n <motion.path\n d=\"M23.9996 11.9999H19.9997L19.9996 7.99987H23.9996V11.9999Z\"\n fill=\"#00FFFF\"\n id=\"6\"\n {...getAnimation(0.1)}\n />\n <motion.path\n d=\"M7.99987 16H4V12H7.99987V16Z\"\n fill=\"#00FFFF\"\n id=\"7\"\n {...getAnimation(0.5)}\n />\n <motion.path\n d=\"M19.9997 15.9999H15.9997V11.9999H19.9997V15.9999Z\"\n fill=\"#00FFFF\"\n id=\"8\"\n {...getAnimation(0.7)}\n />\n <motion.path\n d=\"M4 20H0V16H4V20Z\"\n fill=\"#00FFFF\"\n id=\"9\"\n {...getAnimation(0.4)}\n />\n <motion.path\n d=\"M15.9997 19.9999H11.9997V15.9999H15.9997V19.9999Z\"\n fill=\"#00FFFF\"\n id=\"10\"\n {...getAnimation(0.6)}\n />\n <motion.path\n d=\"M42.3 6.06C41.3333 5.44667 40.1666 5.14667 38.8 5.14667C37.72 5.14667 36.7933 5.34667 36.0133 5.75333C35.2333 6.16 34.6333 6.74 34.2066 7.50667H34.1133V0H30.5666V16.1667H28.8066V20H32.4466V17.4267H33.4466C33.94 18.2533 34.6066 18.8867 35.4466 19.3333C36.2866 19.78 37.3066 20 38.4933 20C39.9666 20 41.2133 19.6933 42.22 19.0867C43.2266 18.4733 43.9933 17.6133 44.52 16.4933C45.0466 15.3733 45.3066 14.0667 45.3066 12.5733C45.3066 11.08 45.0466 9.75333 44.5333 8.64667C44.02 7.53333 43.2733 6.67333 42.3066 6.06667L42.3 6.06ZM40.7666 15.7733C40.1066 16.54 39.1333 16.9267 37.8466 16.9267C36.72 16.9267 35.8133 16.6067 35.1333 15.96C34.4533 15.32 34.1066 14.44 34.1066 13.3267V11.8C34.1066 10.6867 34.4466 9.81333 35.1333 9.16667C35.8133 8.52667 36.72 8.2 37.8466 8.2C39.1333 8.2 40.1066 8.58667 40.7666 9.35333C41.4266 10.1267 41.7533 11.1933 41.7533 12.5533C41.7533 13.9133 41.4266 14.9867 40.7666 15.7533V15.7733ZM47.5 0H51.0466V20H47.5V0ZM67.5933 5.45333H64.0466V13.4067C64.0466 14.5 63.7266 15.3533 63.0933 15.9533C62.46 16.5533 61.5466 16.86 60.3533 16.86C59.2266 16.86 58.38 16.58 57.8066 16.0133C57.2333 15.4467 56.9466 14.6133 56.9466 13.5V5.45333H53.4V14.2133C53.4 15.9933 53.9266 17.4 54.98 18.44C56.0333 19.48 57.54 20 59.4933 20C60.76 20 61.8133 19.78 62.6466 19.3467C63.48 18.9133 64.1733 18.28 64.7333 17.4533H65.7333V20H69.3733V16.1933H67.5866V5.45333H67.5933ZM80.94 5.98667C79.8933 5.42667 78.64 5.14 77.18 5.14C75.72 5.14 74.3866 5.44 73.2733 6.03333C72.16 6.62667 71.3066 7.48 70.7 8.58C70.0933 9.68 69.7933 11 69.7933 12.52C69.7933 14.04 70.1 15.3667 70.7066 16.4867C71.32 17.6067 72.1866 18.4733 73.3133 19.08C74.44 19.6933 75.7733 19.9933 77.3133 19.9933C79.14 19.9933 80.6466 19.5667 81.8466 18.72C83.0466 17.8733 83.8133 16.6933 84.1466 15.1867H80.5733C80.3533 15.84 79.9666 16.3267 79.42 16.6533C78.8733 16.98 78.16 17.14 77.2866 17.14C76.1133 17.14 75.1733 16.82 74.4666 16.1733C73.76 15.5333 73.34 14.6067 73.2133 13.4H84.2133V12.16C84.2133 10.7133 83.9266 9.46667 83.3533 8.41333C82.78 7.36 81.9733 6.54667 80.9266 5.98667H80.94ZM73.3 11C73.52 10.0333 73.9666 9.28667 74.6333 8.76C75.3 8.23333 76.1466 7.97333 77.18 7.97333C78.2133 7.97333 79.06 8.23333 79.68 8.74667C80.3 9.26 80.68 10.0133 80.82 11H73.2933H73.3ZM94.96 11.2867L91.7466 10.6667C91.16 10.5533 90.7333 10.3867 90.46 10.1667C90.1933 9.94667 90.0533 9.65333 90.0533 9.28667C90.0533 8.79333 90.2666 8.42 90.6933 8.16667C91.12 7.91333 91.74 7.78667 92.5533 7.78667C93.46 7.78667 94.1533 7.94667 94.64 8.27333C95.1266 8.6 95.4533 9.12 95.6266 9.83333H99.0533C98.9266 8.34 98.3133 7.18667 97.2066 6.36667C96.1 5.54667 94.6133 5.14 92.74 5.14C90.8666 5.14 89.4 5.54 88.3333 6.34C87.2666 7.14 86.74 8.22 86.74 9.56667C86.74 11.66 88.14 12.98 90.9333 13.52L94.0733 14.1133C94.7266 14.24 95.1866 14.42 95.4666 14.66C95.7466 14.9 95.88 15.2333 95.88 15.66C95.88 16.7267 94.9666 17.2533 93.14 17.2533C92.06 17.2533 91.2333 17.0733 90.6666 16.72C90.0933 16.36 89.7533 15.8133 89.64 15.0667H86.1866C86.28 16.62 86.9266 17.8333 88.1133 18.7C89.3066 19.5667 90.9333 20 92.9933 20C95.0533 20 96.5266 19.5933 97.5866 18.7867C98.6533 17.98 99.18 16.8533 99.18 15.4067C99.18 14.28 98.84 13.38 98.1533 12.7133C97.4733 12.0467 96.4 11.5733 94.94 11.2867H94.96ZM109.533 5.45333C108.453 5.45333 107.52 5.65333 106.727 6.06C105.933 6.46667 105.307 7.05333 104.847 7.83333H104.753V0H101.207V20H104.753V12.0467C104.753 10.92 105.053 10.06 105.66 9.47333C106.26 8.88667 107.147 8.59333 108.3 8.59333C109.453 8.59333 110.34 8.88667 110.94 9.47333C111.54 10.06 111.847 10.92 111.847 12.0467V20H115.393V11.38C115.393 9.58667 114.867 8.15333 113.813 7.07333C112.76 5.99333 111.333 5.45333 109.54 5.45333H109.533ZM119.2 0.14C118.647 0.14 118.173 0.333333 117.787 0.726667C117.4 1.11333 117.2 1.58667 117.2 2.14667C117.2 2.70667 117.393 3.17333 117.787 3.56667C118.173 3.95333 118.647 4.14667 119.2 4.14667C119.753 4.14667 120.227 3.95333 120.613 3.56667C121 3.18 121.2 2.70667 121.2 2.14667C121.2 1.58667 121.007 1.12 120.613 0.726667C120.227 0.34 119.753 0.14 119.2 0.14ZM117.44 5.71333H120.987V20H117.44V5.71333ZM126.287 0.713333C125.753 1.18667 125.487 1.92667 125.487 2.92667V5.71333H122.793V8.47333H125.46V20H129.007V8.47333H132.267V5.71333H128.96V2.76H132.553V0H128.507C127.553 0 126.813 0.24 126.28 0.713333H126.287ZM140.267 17.22V8.49333H143.667V5.73333H140.22V1.44667H136.747V5.72667H134.2V8.48667H136.72V17.12C136.72 18.0867 136.98 18.8067 137.493 19.2867C138.007 19.76 138.733 20 139.667 20H143.993V17.22H140.26H140.267Z\"\n fill=\"#EFF1F6\"\n clipPath=\"url(#text-clip)\"\n />\n </motion.svg>\n );\n};\n"]}