hakumi_components 0.1.3.pre

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 (1339) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +60 -0
  3. data/LICENSE +21 -0
  4. data/app/assets/icons/filled/account-book.svg +1 -0
  5. data/app/assets/icons/filled/alert.svg +1 -0
  6. data/app/assets/icons/filled/alipay-circle.svg +1 -0
  7. data/app/assets/icons/filled/alipay-square.svg +1 -0
  8. data/app/assets/icons/filled/aliwangwang.svg +1 -0
  9. data/app/assets/icons/filled/amazon-circle.svg +1 -0
  10. data/app/assets/icons/filled/amazon-square.svg +1 -0
  11. data/app/assets/icons/filled/android.svg +1 -0
  12. data/app/assets/icons/filled/api.svg +1 -0
  13. data/app/assets/icons/filled/apple.svg +1 -0
  14. data/app/assets/icons/filled/appstore.svg +1 -0
  15. data/app/assets/icons/filled/audio.svg +1 -0
  16. data/app/assets/icons/filled/backward.svg +1 -0
  17. data/app/assets/icons/filled/bank.svg +1 -0
  18. data/app/assets/icons/filled/behance-circle.svg +1 -0
  19. data/app/assets/icons/filled/behance-square.svg +1 -0
  20. data/app/assets/icons/filled/bell.svg +1 -0
  21. data/app/assets/icons/filled/bilibili.svg +1 -0
  22. data/app/assets/icons/filled/book.svg +1 -0
  23. data/app/assets/icons/filled/box-plot.svg +1 -0
  24. data/app/assets/icons/filled/bug.svg +1 -0
  25. data/app/assets/icons/filled/build.svg +1 -0
  26. data/app/assets/icons/filled/bulb.svg +1 -0
  27. data/app/assets/icons/filled/calculator.svg +1 -0
  28. data/app/assets/icons/filled/calendar.svg +1 -0
  29. data/app/assets/icons/filled/camera.svg +1 -0
  30. data/app/assets/icons/filled/car.svg +1 -0
  31. data/app/assets/icons/filled/caret-down.svg +1 -0
  32. data/app/assets/icons/filled/caret-left.svg +1 -0
  33. data/app/assets/icons/filled/caret-right.svg +1 -0
  34. data/app/assets/icons/filled/caret-up.svg +1 -0
  35. data/app/assets/icons/filled/carry-out.svg +1 -0
  36. data/app/assets/icons/filled/check-circle.svg +1 -0
  37. data/app/assets/icons/filled/check-square.svg +1 -0
  38. data/app/assets/icons/filled/chrome.svg +1 -0
  39. data/app/assets/icons/filled/ci-circle.svg +1 -0
  40. data/app/assets/icons/filled/clock-circle.svg +1 -0
  41. data/app/assets/icons/filled/close-circle.svg +1 -0
  42. data/app/assets/icons/filled/close-square.svg +1 -0
  43. data/app/assets/icons/filled/cloud.svg +1 -0
  44. data/app/assets/icons/filled/code-sandbox-circle.svg +1 -0
  45. data/app/assets/icons/filled/code-sandbox-square.svg +1 -0
  46. data/app/assets/icons/filled/code.svg +1 -0
  47. data/app/assets/icons/filled/codepen-circle.svg +1 -0
  48. data/app/assets/icons/filled/codepen-square.svg +1 -0
  49. data/app/assets/icons/filled/compass.svg +1 -0
  50. data/app/assets/icons/filled/contacts.svg +1 -0
  51. data/app/assets/icons/filled/container.svg +1 -0
  52. data/app/assets/icons/filled/control.svg +1 -0
  53. data/app/assets/icons/filled/copy.svg +1 -0
  54. data/app/assets/icons/filled/copyright-circle.svg +1 -0
  55. data/app/assets/icons/filled/credit-card.svg +1 -0
  56. data/app/assets/icons/filled/crown.svg +1 -0
  57. data/app/assets/icons/filled/customer-service.svg +1 -0
  58. data/app/assets/icons/filled/dashboard.svg +1 -0
  59. data/app/assets/icons/filled/database.svg +1 -0
  60. data/app/assets/icons/filled/delete.svg +1 -0
  61. data/app/assets/icons/filled/diff.svg +1 -0
  62. data/app/assets/icons/filled/dingtalk-circle.svg +1 -0
  63. data/app/assets/icons/filled/dingtalk-square.svg +1 -0
  64. data/app/assets/icons/filled/discord.svg +1 -0
  65. data/app/assets/icons/filled/dislike.svg +1 -0
  66. data/app/assets/icons/filled/dollar-circle.svg +1 -0
  67. data/app/assets/icons/filled/down-circle.svg +1 -0
  68. data/app/assets/icons/filled/down-square.svg +1 -0
  69. data/app/assets/icons/filled/dribbble-circle.svg +1 -0
  70. data/app/assets/icons/filled/dribbble-square.svg +1 -0
  71. data/app/assets/icons/filled/dropbox-circle.svg +1 -0
  72. data/app/assets/icons/filled/dropbox-square.svg +1 -0
  73. data/app/assets/icons/filled/edit.svg +1 -0
  74. data/app/assets/icons/filled/environment.svg +1 -0
  75. data/app/assets/icons/filled/euro-circle.svg +1 -0
  76. data/app/assets/icons/filled/exclamation-circle.svg +1 -0
  77. data/app/assets/icons/filled/experiment.svg +1 -0
  78. data/app/assets/icons/filled/eye-invisible.svg +1 -0
  79. data/app/assets/icons/filled/eye.svg +1 -0
  80. data/app/assets/icons/filled/facebook.svg +1 -0
  81. data/app/assets/icons/filled/fast-backward.svg +1 -0
  82. data/app/assets/icons/filled/fast-forward.svg +1 -0
  83. data/app/assets/icons/filled/file-add.svg +1 -0
  84. data/app/assets/icons/filled/file-excel.svg +1 -0
  85. data/app/assets/icons/filled/file-exclamation.svg +1 -0
  86. data/app/assets/icons/filled/file-image.svg +1 -0
  87. data/app/assets/icons/filled/file-markdown.svg +1 -0
  88. data/app/assets/icons/filled/file-pdf.svg +1 -0
  89. data/app/assets/icons/filled/file-ppt.svg +1 -0
  90. data/app/assets/icons/filled/file-text.svg +1 -0
  91. data/app/assets/icons/filled/file-unknown.svg +1 -0
  92. data/app/assets/icons/filled/file-word.svg +1 -0
  93. data/app/assets/icons/filled/file-zip.svg +1 -0
  94. data/app/assets/icons/filled/file.svg +1 -0
  95. data/app/assets/icons/filled/filter.svg +1 -0
  96. data/app/assets/icons/filled/fire.svg +1 -0
  97. data/app/assets/icons/filled/flag.svg +1 -0
  98. data/app/assets/icons/filled/folder-add.svg +1 -0
  99. data/app/assets/icons/filled/folder-open.svg +1 -0
  100. data/app/assets/icons/filled/folder.svg +1 -0
  101. data/app/assets/icons/filled/format-painter.svg +1 -0
  102. data/app/assets/icons/filled/forward.svg +1 -0
  103. data/app/assets/icons/filled/frown.svg +1 -0
  104. data/app/assets/icons/filled/fund.svg +1 -0
  105. data/app/assets/icons/filled/funnel-plot.svg +1 -0
  106. data/app/assets/icons/filled/gift.svg +1 -0
  107. data/app/assets/icons/filled/github.svg +1 -0
  108. data/app/assets/icons/filled/gitlab.svg +1 -0
  109. data/app/assets/icons/filled/gold.svg +1 -0
  110. data/app/assets/icons/filled/golden.svg +1 -0
  111. data/app/assets/icons/filled/google-circle.svg +1 -0
  112. data/app/assets/icons/filled/google-plus-circle.svg +1 -0
  113. data/app/assets/icons/filled/google-plus-square.svg +1 -0
  114. data/app/assets/icons/filled/google-square.svg +1 -0
  115. data/app/assets/icons/filled/hdd.svg +1 -0
  116. data/app/assets/icons/filled/heart.svg +1 -0
  117. data/app/assets/icons/filled/highlight.svg +1 -0
  118. data/app/assets/icons/filled/home.svg +1 -0
  119. data/app/assets/icons/filled/hourglass.svg +1 -0
  120. data/app/assets/icons/filled/html5.svg +1 -0
  121. data/app/assets/icons/filled/idcard.svg +1 -0
  122. data/app/assets/icons/filled/ie-circle.svg +1 -0
  123. data/app/assets/icons/filled/ie-square.svg +1 -0
  124. data/app/assets/icons/filled/info-circle.svg +1 -0
  125. data/app/assets/icons/filled/instagram.svg +1 -0
  126. data/app/assets/icons/filled/insurance.svg +1 -0
  127. data/app/assets/icons/filled/interaction.svg +1 -0
  128. data/app/assets/icons/filled/layout.svg +1 -0
  129. data/app/assets/icons/filled/left-circle.svg +1 -0
  130. data/app/assets/icons/filled/left-square.svg +1 -0
  131. data/app/assets/icons/filled/like.svg +1 -0
  132. data/app/assets/icons/filled/linkedin.svg +1 -0
  133. data/app/assets/icons/filled/lock.svg +1 -0
  134. data/app/assets/icons/filled/mac-command.svg +1 -0
  135. data/app/assets/icons/filled/mail.svg +1 -0
  136. data/app/assets/icons/filled/medicine-box.svg +1 -0
  137. data/app/assets/icons/filled/medium-circle.svg +1 -0
  138. data/app/assets/icons/filled/medium-square.svg +1 -0
  139. data/app/assets/icons/filled/meh.svg +1 -0
  140. data/app/assets/icons/filled/merge.svg +1 -0
  141. data/app/assets/icons/filled/message.svg +1 -0
  142. data/app/assets/icons/filled/minus-circle.svg +1 -0
  143. data/app/assets/icons/filled/minus-square.svg +1 -0
  144. data/app/assets/icons/filled/mobile.svg +1 -0
  145. data/app/assets/icons/filled/money-collect.svg +1 -0
  146. data/app/assets/icons/filled/moon.svg +1 -0
  147. data/app/assets/icons/filled/muted.svg +1 -0
  148. data/app/assets/icons/filled/notification.svg +1 -0
  149. data/app/assets/icons/filled/open-a-i.svg +1 -0
  150. data/app/assets/icons/filled/pause-circle.svg +1 -0
  151. data/app/assets/icons/filled/pay-circle.svg +1 -0
  152. data/app/assets/icons/filled/phone.svg +1 -0
  153. data/app/assets/icons/filled/picture.svg +1 -0
  154. data/app/assets/icons/filled/pie-chart.svg +1 -0
  155. data/app/assets/icons/filled/pinterest.svg +1 -0
  156. data/app/assets/icons/filled/play-circle.svg +1 -0
  157. data/app/assets/icons/filled/play-square.svg +1 -0
  158. data/app/assets/icons/filled/plus-circle.svg +1 -0
  159. data/app/assets/icons/filled/plus-square.svg +1 -0
  160. data/app/assets/icons/filled/pound-circle.svg +1 -0
  161. data/app/assets/icons/filled/printer.svg +1 -0
  162. data/app/assets/icons/filled/product.svg +1 -0
  163. data/app/assets/icons/filled/profile.svg +1 -0
  164. data/app/assets/icons/filled/project.svg +1 -0
  165. data/app/assets/icons/filled/property-safety.svg +1 -0
  166. data/app/assets/icons/filled/pushpin.svg +1 -0
  167. data/app/assets/icons/filled/qq-circle.svg +1 -0
  168. data/app/assets/icons/filled/qq-square.svg +1 -0
  169. data/app/assets/icons/filled/question-circle.svg +1 -0
  170. data/app/assets/icons/filled/read.svg +1 -0
  171. data/app/assets/icons/filled/reconciliation.svg +1 -0
  172. data/app/assets/icons/filled/red-envelope.svg +1 -0
  173. data/app/assets/icons/filled/reddit-circle.svg +1 -0
  174. data/app/assets/icons/filled/reddit-square.svg +1 -0
  175. data/app/assets/icons/filled/rest.svg +1 -0
  176. data/app/assets/icons/filled/right-circle.svg +1 -0
  177. data/app/assets/icons/filled/right-square.svg +1 -0
  178. data/app/assets/icons/filled/robot.svg +1 -0
  179. data/app/assets/icons/filled/rocket.svg +1 -0
  180. data/app/assets/icons/filled/safety-certificate.svg +1 -0
  181. data/app/assets/icons/filled/save.svg +1 -0
  182. data/app/assets/icons/filled/schedule.svg +1 -0
  183. data/app/assets/icons/filled/security-scan.svg +1 -0
  184. data/app/assets/icons/filled/setting.svg +1 -0
  185. data/app/assets/icons/filled/shop.svg +1 -0
  186. data/app/assets/icons/filled/shopping.svg +1 -0
  187. data/app/assets/icons/filled/signal.svg +1 -0
  188. data/app/assets/icons/filled/signature.svg +1 -0
  189. data/app/assets/icons/filled/sketch-circle.svg +1 -0
  190. data/app/assets/icons/filled/sketch-square.svg +1 -0
  191. data/app/assets/icons/filled/skin.svg +1 -0
  192. data/app/assets/icons/filled/skype.svg +1 -0
  193. data/app/assets/icons/filled/slack-circle.svg +1 -0
  194. data/app/assets/icons/filled/slack-square.svg +1 -0
  195. data/app/assets/icons/filled/sliders.svg +1 -0
  196. data/app/assets/icons/filled/smile.svg +1 -0
  197. data/app/assets/icons/filled/snippets.svg +1 -0
  198. data/app/assets/icons/filled/sound.svg +1 -0
  199. data/app/assets/icons/filled/spotify.svg +1 -0
  200. data/app/assets/icons/filled/star.svg +1 -0
  201. data/app/assets/icons/filled/step-backward.svg +1 -0
  202. data/app/assets/icons/filled/step-forward.svg +1 -0
  203. data/app/assets/icons/filled/stop.svg +1 -0
  204. data/app/assets/icons/filled/sun.svg +1 -0
  205. data/app/assets/icons/filled/switcher.svg +1 -0
  206. data/app/assets/icons/filled/tablet.svg +1 -0
  207. data/app/assets/icons/filled/tag.svg +1 -0
  208. data/app/assets/icons/filled/tags.svg +1 -0
  209. data/app/assets/icons/filled/taobao-circle.svg +1 -0
  210. data/app/assets/icons/filled/taobao-square.svg +1 -0
  211. data/app/assets/icons/filled/thunderbolt.svg +1 -0
  212. data/app/assets/icons/filled/tik-tok.svg +1 -0
  213. data/app/assets/icons/filled/tool.svg +1 -0
  214. data/app/assets/icons/filled/trademark-circle.svg +1 -0
  215. data/app/assets/icons/filled/trophy.svg +1 -0
  216. data/app/assets/icons/filled/truck.svg +1 -0
  217. data/app/assets/icons/filled/twitch.svg +1 -0
  218. data/app/assets/icons/filled/twitter-circle.svg +1 -0
  219. data/app/assets/icons/filled/twitter-square.svg +1 -0
  220. data/app/assets/icons/filled/unlock.svg +1 -0
  221. data/app/assets/icons/filled/up-circle.svg +1 -0
  222. data/app/assets/icons/filled/up-square.svg +1 -0
  223. data/app/assets/icons/filled/usb.svg +1 -0
  224. data/app/assets/icons/filled/video-camera.svg +1 -0
  225. data/app/assets/icons/filled/wallet.svg +1 -0
  226. data/app/assets/icons/filled/warning.svg +1 -0
  227. data/app/assets/icons/filled/wechat-work.svg +1 -0
  228. data/app/assets/icons/filled/wechat.svg +1 -0
  229. data/app/assets/icons/filled/weibo-circle.svg +1 -0
  230. data/app/assets/icons/filled/weibo-square.svg +1 -0
  231. data/app/assets/icons/filled/windows.svg +1 -0
  232. data/app/assets/icons/filled/x.svg +1 -0
  233. data/app/assets/icons/filled/yahoo.svg +1 -0
  234. data/app/assets/icons/filled/youtube.svg +1 -0
  235. data/app/assets/icons/filled/yuque.svg +1 -0
  236. data/app/assets/icons/filled/zhihu-circle.svg +1 -0
  237. data/app/assets/icons/filled/zhihu-square.svg +1 -0
  238. data/app/assets/icons/outlined/account-book.svg +1 -0
  239. data/app/assets/icons/outlined/aim.svg +1 -0
  240. data/app/assets/icons/outlined/alert.svg +1 -0
  241. data/app/assets/icons/outlined/alibaba.svg +1 -0
  242. data/app/assets/icons/outlined/align-center.svg +1 -0
  243. data/app/assets/icons/outlined/align-left.svg +1 -0
  244. data/app/assets/icons/outlined/align-right.svg +1 -0
  245. data/app/assets/icons/outlined/alipay-circle.svg +1 -0
  246. data/app/assets/icons/outlined/alipay.svg +1 -0
  247. data/app/assets/icons/outlined/aliwangwang.svg +1 -0
  248. data/app/assets/icons/outlined/aliyun.svg +1 -0
  249. data/app/assets/icons/outlined/amazon.svg +1 -0
  250. data/app/assets/icons/outlined/android.svg +1 -0
  251. data/app/assets/icons/outlined/ant-cloud.svg +1 -0
  252. data/app/assets/icons/outlined/ant-design.svg +1 -0
  253. data/app/assets/icons/outlined/apartment.svg +1 -0
  254. data/app/assets/icons/outlined/api.svg +1 -0
  255. data/app/assets/icons/outlined/apple.svg +1 -0
  256. data/app/assets/icons/outlined/appstore-add.svg +1 -0
  257. data/app/assets/icons/outlined/appstore.svg +1 -0
  258. data/app/assets/icons/outlined/area-chart.svg +1 -0
  259. data/app/assets/icons/outlined/arrow-down.svg +1 -0
  260. data/app/assets/icons/outlined/arrow-left.svg +1 -0
  261. data/app/assets/icons/outlined/arrow-right.svg +1 -0
  262. data/app/assets/icons/outlined/arrow-up.svg +1 -0
  263. data/app/assets/icons/outlined/arrows-alt.svg +1 -0
  264. data/app/assets/icons/outlined/audio-muted.svg +1 -0
  265. data/app/assets/icons/outlined/audio.svg +1 -0
  266. data/app/assets/icons/outlined/audit.svg +1 -0
  267. data/app/assets/icons/outlined/backward.svg +1 -0
  268. data/app/assets/icons/outlined/baidu.svg +1 -0
  269. data/app/assets/icons/outlined/bank.svg +1 -0
  270. data/app/assets/icons/outlined/bar-chart.svg +1 -0
  271. data/app/assets/icons/outlined/barcode.svg +1 -0
  272. data/app/assets/icons/outlined/bars.svg +1 -0
  273. data/app/assets/icons/outlined/behance-square.svg +1 -0
  274. data/app/assets/icons/outlined/behance.svg +1 -0
  275. data/app/assets/icons/outlined/bell.svg +1 -0
  276. data/app/assets/icons/outlined/bg-colors.svg +1 -0
  277. data/app/assets/icons/outlined/bilibili.svg +1 -0
  278. data/app/assets/icons/outlined/block.svg +1 -0
  279. data/app/assets/icons/outlined/bold.svg +1 -0
  280. data/app/assets/icons/outlined/book.svg +1 -0
  281. data/app/assets/icons/outlined/border-bottom.svg +1 -0
  282. data/app/assets/icons/outlined/border-horizontal.svg +1 -0
  283. data/app/assets/icons/outlined/border-inner.svg +1 -0
  284. data/app/assets/icons/outlined/border-left.svg +1 -0
  285. data/app/assets/icons/outlined/border-outer.svg +1 -0
  286. data/app/assets/icons/outlined/border-right.svg +1 -0
  287. data/app/assets/icons/outlined/border-top.svg +1 -0
  288. data/app/assets/icons/outlined/border-verticle.svg +1 -0
  289. data/app/assets/icons/outlined/border.svg +1 -0
  290. data/app/assets/icons/outlined/borderless-table.svg +1 -0
  291. data/app/assets/icons/outlined/box-plot.svg +1 -0
  292. data/app/assets/icons/outlined/branches.svg +1 -0
  293. data/app/assets/icons/outlined/bug.svg +1 -0
  294. data/app/assets/icons/outlined/build.svg +1 -0
  295. data/app/assets/icons/outlined/bulb.svg +1 -0
  296. data/app/assets/icons/outlined/calculator.svg +1 -0
  297. data/app/assets/icons/outlined/calendar.svg +1 -0
  298. data/app/assets/icons/outlined/camera.svg +1 -0
  299. data/app/assets/icons/outlined/car.svg +1 -0
  300. data/app/assets/icons/outlined/caret-down.svg +1 -0
  301. data/app/assets/icons/outlined/caret-left.svg +1 -0
  302. data/app/assets/icons/outlined/caret-right.svg +1 -0
  303. data/app/assets/icons/outlined/caret-up.svg +1 -0
  304. data/app/assets/icons/outlined/carry-out.svg +1 -0
  305. data/app/assets/icons/outlined/check-circle.svg +1 -0
  306. data/app/assets/icons/outlined/check-square.svg +1 -0
  307. data/app/assets/icons/outlined/check.svg +1 -0
  308. data/app/assets/icons/outlined/chrome.svg +1 -0
  309. data/app/assets/icons/outlined/ci-circle.svg +1 -0
  310. data/app/assets/icons/outlined/ci.svg +1 -0
  311. data/app/assets/icons/outlined/clear.svg +1 -0
  312. data/app/assets/icons/outlined/clock-circle.svg +1 -0
  313. data/app/assets/icons/outlined/close-circle.svg +1 -0
  314. data/app/assets/icons/outlined/close-square.svg +1 -0
  315. data/app/assets/icons/outlined/close.svg +1 -0
  316. data/app/assets/icons/outlined/cloud-download.svg +1 -0
  317. data/app/assets/icons/outlined/cloud-server.svg +1 -0
  318. data/app/assets/icons/outlined/cloud-sync.svg +1 -0
  319. data/app/assets/icons/outlined/cloud-upload.svg +1 -0
  320. data/app/assets/icons/outlined/cloud.svg +1 -0
  321. data/app/assets/icons/outlined/cluster.svg +1 -0
  322. data/app/assets/icons/outlined/code-sandbox.svg +1 -0
  323. data/app/assets/icons/outlined/code.svg +1 -0
  324. data/app/assets/icons/outlined/codepen-circle.svg +1 -0
  325. data/app/assets/icons/outlined/codepen.svg +1 -0
  326. data/app/assets/icons/outlined/coffee.svg +1 -0
  327. data/app/assets/icons/outlined/column-height.svg +1 -0
  328. data/app/assets/icons/outlined/column-width.svg +1 -0
  329. data/app/assets/icons/outlined/comment.svg +1 -0
  330. data/app/assets/icons/outlined/compass.svg +1 -0
  331. data/app/assets/icons/outlined/compress.svg +1 -0
  332. data/app/assets/icons/outlined/console-sql.svg +1 -0
  333. data/app/assets/icons/outlined/contacts.svg +1 -0
  334. data/app/assets/icons/outlined/container.svg +1 -0
  335. data/app/assets/icons/outlined/control.svg +1 -0
  336. data/app/assets/icons/outlined/copy.svg +1 -0
  337. data/app/assets/icons/outlined/copyright-circle.svg +1 -0
  338. data/app/assets/icons/outlined/copyright.svg +1 -0
  339. data/app/assets/icons/outlined/credit-card.svg +1 -0
  340. data/app/assets/icons/outlined/crown.svg +1 -0
  341. data/app/assets/icons/outlined/customer-service.svg +1 -0
  342. data/app/assets/icons/outlined/dash.svg +1 -0
  343. data/app/assets/icons/outlined/dashboard.svg +1 -0
  344. data/app/assets/icons/outlined/database.svg +1 -0
  345. data/app/assets/icons/outlined/delete-column.svg +1 -0
  346. data/app/assets/icons/outlined/delete-row.svg +1 -0
  347. data/app/assets/icons/outlined/delete.svg +1 -0
  348. data/app/assets/icons/outlined/delivered-procedure.svg +1 -0
  349. data/app/assets/icons/outlined/deployment-unit.svg +1 -0
  350. data/app/assets/icons/outlined/desktop.svg +1 -0
  351. data/app/assets/icons/outlined/diff.svg +1 -0
  352. data/app/assets/icons/outlined/dingding.svg +1 -0
  353. data/app/assets/icons/outlined/dingtalk.svg +1 -0
  354. data/app/assets/icons/outlined/disconnect.svg +1 -0
  355. data/app/assets/icons/outlined/discord.svg +1 -0
  356. data/app/assets/icons/outlined/dislike.svg +1 -0
  357. data/app/assets/icons/outlined/docker.svg +1 -0
  358. data/app/assets/icons/outlined/dollar-circle.svg +1 -0
  359. data/app/assets/icons/outlined/dollar.svg +1 -0
  360. data/app/assets/icons/outlined/dot-chart.svg +1 -0
  361. data/app/assets/icons/outlined/dot-net.svg +1 -0
  362. data/app/assets/icons/outlined/double-left.svg +1 -0
  363. data/app/assets/icons/outlined/double-right.svg +1 -0
  364. data/app/assets/icons/outlined/down-circle.svg +1 -0
  365. data/app/assets/icons/outlined/down-square.svg +1 -0
  366. data/app/assets/icons/outlined/down.svg +1 -0
  367. data/app/assets/icons/outlined/download.svg +1 -0
  368. data/app/assets/icons/outlined/drag.svg +1 -0
  369. data/app/assets/icons/outlined/dribbble-square.svg +1 -0
  370. data/app/assets/icons/outlined/dribbble.svg +1 -0
  371. data/app/assets/icons/outlined/dropbox.svg +1 -0
  372. data/app/assets/icons/outlined/edit.svg +1 -0
  373. data/app/assets/icons/outlined/ellipsis.svg +1 -0
  374. data/app/assets/icons/outlined/enter.svg +1 -0
  375. data/app/assets/icons/outlined/environment.svg +1 -0
  376. data/app/assets/icons/outlined/euro-circle.svg +1 -0
  377. data/app/assets/icons/outlined/euro.svg +1 -0
  378. data/app/assets/icons/outlined/exception.svg +1 -0
  379. data/app/assets/icons/outlined/exclamation-circle.svg +1 -0
  380. data/app/assets/icons/outlined/exclamation.svg +1 -0
  381. data/app/assets/icons/outlined/expand-alt.svg +1 -0
  382. data/app/assets/icons/outlined/expand.svg +1 -0
  383. data/app/assets/icons/outlined/experiment.svg +1 -0
  384. data/app/assets/icons/outlined/export.svg +1 -0
  385. data/app/assets/icons/outlined/eye-invisible.svg +1 -0
  386. data/app/assets/icons/outlined/eye.svg +1 -0
  387. data/app/assets/icons/outlined/facebook.svg +1 -0
  388. data/app/assets/icons/outlined/fall.svg +1 -0
  389. data/app/assets/icons/outlined/fast-backward.svg +1 -0
  390. data/app/assets/icons/outlined/fast-forward.svg +1 -0
  391. data/app/assets/icons/outlined/field-binary.svg +1 -0
  392. data/app/assets/icons/outlined/field-number.svg +1 -0
  393. data/app/assets/icons/outlined/field-string.svg +1 -0
  394. data/app/assets/icons/outlined/field-time.svg +1 -0
  395. data/app/assets/icons/outlined/file-add.svg +1 -0
  396. data/app/assets/icons/outlined/file-done.svg +1 -0
  397. data/app/assets/icons/outlined/file-excel.svg +1 -0
  398. data/app/assets/icons/outlined/file-exclamation.svg +1 -0
  399. data/app/assets/icons/outlined/file-gif.svg +1 -0
  400. data/app/assets/icons/outlined/file-image.svg +1 -0
  401. data/app/assets/icons/outlined/file-jpg.svg +1 -0
  402. data/app/assets/icons/outlined/file-markdown.svg +1 -0
  403. data/app/assets/icons/outlined/file-pdf.svg +1 -0
  404. data/app/assets/icons/outlined/file-ppt.svg +1 -0
  405. data/app/assets/icons/outlined/file-protect.svg +1 -0
  406. data/app/assets/icons/outlined/file-search.svg +1 -0
  407. data/app/assets/icons/outlined/file-sync.svg +1 -0
  408. data/app/assets/icons/outlined/file-text.svg +1 -0
  409. data/app/assets/icons/outlined/file-unknown.svg +1 -0
  410. data/app/assets/icons/outlined/file-word.svg +1 -0
  411. data/app/assets/icons/outlined/file-zip.svg +1 -0
  412. data/app/assets/icons/outlined/file.svg +1 -0
  413. data/app/assets/icons/outlined/filter.svg +1 -0
  414. data/app/assets/icons/outlined/fire.svg +1 -0
  415. data/app/assets/icons/outlined/flag.svg +1 -0
  416. data/app/assets/icons/outlined/folder-add.svg +1 -0
  417. data/app/assets/icons/outlined/folder-open.svg +1 -0
  418. data/app/assets/icons/outlined/folder-view.svg +1 -0
  419. data/app/assets/icons/outlined/folder.svg +1 -0
  420. data/app/assets/icons/outlined/font-colors.svg +1 -0
  421. data/app/assets/icons/outlined/font-size.svg +1 -0
  422. data/app/assets/icons/outlined/fork.svg +1 -0
  423. data/app/assets/icons/outlined/form.svg +1 -0
  424. data/app/assets/icons/outlined/format-painter.svg +1 -0
  425. data/app/assets/icons/outlined/forward.svg +1 -0
  426. data/app/assets/icons/outlined/frown.svg +1 -0
  427. data/app/assets/icons/outlined/fullscreen-exit.svg +1 -0
  428. data/app/assets/icons/outlined/fullscreen.svg +1 -0
  429. data/app/assets/icons/outlined/function.svg +1 -0
  430. data/app/assets/icons/outlined/fund-projection-screen.svg +1 -0
  431. data/app/assets/icons/outlined/fund-view.svg +1 -0
  432. data/app/assets/icons/outlined/fund.svg +1 -0
  433. data/app/assets/icons/outlined/funnel-plot.svg +1 -0
  434. data/app/assets/icons/outlined/gateway.svg +1 -0
  435. data/app/assets/icons/outlined/gif.svg +1 -0
  436. data/app/assets/icons/outlined/gift.svg +1 -0
  437. data/app/assets/icons/outlined/github.svg +1 -0
  438. data/app/assets/icons/outlined/gitlab.svg +1 -0
  439. data/app/assets/icons/outlined/global.svg +1 -0
  440. data/app/assets/icons/outlined/gold.svg +1 -0
  441. data/app/assets/icons/outlined/google-plus.svg +1 -0
  442. data/app/assets/icons/outlined/google.svg +1 -0
  443. data/app/assets/icons/outlined/group.svg +1 -0
  444. data/app/assets/icons/outlined/harmony-o-s.svg +1 -0
  445. data/app/assets/icons/outlined/hdd.svg +1 -0
  446. data/app/assets/icons/outlined/heart.svg +1 -0
  447. data/app/assets/icons/outlined/heat-map.svg +1 -0
  448. data/app/assets/icons/outlined/highlight.svg +1 -0
  449. data/app/assets/icons/outlined/history.svg +1 -0
  450. data/app/assets/icons/outlined/holder.svg +1 -0
  451. data/app/assets/icons/outlined/home.svg +1 -0
  452. data/app/assets/icons/outlined/hourglass.svg +1 -0
  453. data/app/assets/icons/outlined/html5.svg +1 -0
  454. data/app/assets/icons/outlined/idcard.svg +1 -0
  455. data/app/assets/icons/outlined/ie.svg +1 -0
  456. data/app/assets/icons/outlined/import.svg +1 -0
  457. data/app/assets/icons/outlined/inbox.svg +1 -0
  458. data/app/assets/icons/outlined/info-circle.svg +1 -0
  459. data/app/assets/icons/outlined/info.svg +1 -0
  460. data/app/assets/icons/outlined/insert-row-above.svg +1 -0
  461. data/app/assets/icons/outlined/insert-row-below.svg +1 -0
  462. data/app/assets/icons/outlined/insert-row-left.svg +1 -0
  463. data/app/assets/icons/outlined/insert-row-right.svg +1 -0
  464. data/app/assets/icons/outlined/instagram.svg +1 -0
  465. data/app/assets/icons/outlined/insurance.svg +1 -0
  466. data/app/assets/icons/outlined/interaction.svg +1 -0
  467. data/app/assets/icons/outlined/issues-close.svg +1 -0
  468. data/app/assets/icons/outlined/italic.svg +1 -0
  469. data/app/assets/icons/outlined/java-script.svg +1 -0
  470. data/app/assets/icons/outlined/java.svg +1 -0
  471. data/app/assets/icons/outlined/key.svg +1 -0
  472. data/app/assets/icons/outlined/kubernetes.svg +1 -0
  473. data/app/assets/icons/outlined/laptop.svg +1 -0
  474. data/app/assets/icons/outlined/layout.svg +1 -0
  475. data/app/assets/icons/outlined/left-circle.svg +1 -0
  476. data/app/assets/icons/outlined/left-square.svg +1 -0
  477. data/app/assets/icons/outlined/left.svg +1 -0
  478. data/app/assets/icons/outlined/like.svg +1 -0
  479. data/app/assets/icons/outlined/line-chart.svg +1 -0
  480. data/app/assets/icons/outlined/line-height.svg +1 -0
  481. data/app/assets/icons/outlined/line.svg +1 -0
  482. data/app/assets/icons/outlined/link.svg +1 -0
  483. data/app/assets/icons/outlined/linkedin.svg +1 -0
  484. data/app/assets/icons/outlined/linux.svg +1 -0
  485. data/app/assets/icons/outlined/loading-3-quarters.svg +1 -0
  486. data/app/assets/icons/outlined/loading.svg +1 -0
  487. data/app/assets/icons/outlined/lock.svg +1 -0
  488. data/app/assets/icons/outlined/login.svg +1 -0
  489. data/app/assets/icons/outlined/logout.svg +1 -0
  490. data/app/assets/icons/outlined/mac-command.svg +1 -0
  491. data/app/assets/icons/outlined/mail.svg +1 -0
  492. data/app/assets/icons/outlined/man.svg +1 -0
  493. data/app/assets/icons/outlined/medicine-box.svg +1 -0
  494. data/app/assets/icons/outlined/medium-workmark.svg +1 -0
  495. data/app/assets/icons/outlined/medium.svg +1 -0
  496. data/app/assets/icons/outlined/meh.svg +1 -0
  497. data/app/assets/icons/outlined/menu-fold.svg +1 -0
  498. data/app/assets/icons/outlined/menu-unfold.svg +1 -0
  499. data/app/assets/icons/outlined/menu.svg +1 -0
  500. data/app/assets/icons/outlined/merge-cells.svg +1 -0
  501. data/app/assets/icons/outlined/merge.svg +1 -0
  502. data/app/assets/icons/outlined/message.svg +1 -0
  503. data/app/assets/icons/outlined/minus-circle.svg +1 -0
  504. data/app/assets/icons/outlined/minus-square.svg +1 -0
  505. data/app/assets/icons/outlined/minus.svg +1 -0
  506. data/app/assets/icons/outlined/mobile.svg +1 -0
  507. data/app/assets/icons/outlined/money-collect.svg +1 -0
  508. data/app/assets/icons/outlined/monitor.svg +1 -0
  509. data/app/assets/icons/outlined/moon.svg +1 -0
  510. data/app/assets/icons/outlined/more.svg +1 -0
  511. data/app/assets/icons/outlined/muted.svg +1 -0
  512. data/app/assets/icons/outlined/node-collapse.svg +1 -0
  513. data/app/assets/icons/outlined/node-expand.svg +1 -0
  514. data/app/assets/icons/outlined/node-index.svg +1 -0
  515. data/app/assets/icons/outlined/notification.svg +1 -0
  516. data/app/assets/icons/outlined/number.svg +1 -0
  517. data/app/assets/icons/outlined/one-to-one.svg +1 -0
  518. data/app/assets/icons/outlined/open-a-i.svg +1 -0
  519. data/app/assets/icons/outlined/ordered-list.svg +1 -0
  520. data/app/assets/icons/outlined/paper-clip.svg +1 -0
  521. data/app/assets/icons/outlined/partition.svg +1 -0
  522. data/app/assets/icons/outlined/pause-circle.svg +1 -0
  523. data/app/assets/icons/outlined/pause.svg +1 -0
  524. data/app/assets/icons/outlined/pay-circle.svg +1 -0
  525. data/app/assets/icons/outlined/percentage.svg +1 -0
  526. data/app/assets/icons/outlined/phone.svg +1 -0
  527. data/app/assets/icons/outlined/pic-center.svg +1 -0
  528. data/app/assets/icons/outlined/pic-left.svg +1 -0
  529. data/app/assets/icons/outlined/pic-right.svg +1 -0
  530. data/app/assets/icons/outlined/picture.svg +1 -0
  531. data/app/assets/icons/outlined/pie-chart.svg +1 -0
  532. data/app/assets/icons/outlined/pinterest.svg +1 -0
  533. data/app/assets/icons/outlined/play-circle.svg +1 -0
  534. data/app/assets/icons/outlined/play-square.svg +1 -0
  535. data/app/assets/icons/outlined/plus-circle.svg +1 -0
  536. data/app/assets/icons/outlined/plus-square.svg +1 -0
  537. data/app/assets/icons/outlined/plus.svg +1 -0
  538. data/app/assets/icons/outlined/pound-circle.svg +1 -0
  539. data/app/assets/icons/outlined/pound.svg +1 -0
  540. data/app/assets/icons/outlined/poweroff.svg +1 -0
  541. data/app/assets/icons/outlined/printer.svg +1 -0
  542. data/app/assets/icons/outlined/product.svg +1 -0
  543. data/app/assets/icons/outlined/profile.svg +1 -0
  544. data/app/assets/icons/outlined/project.svg +1 -0
  545. data/app/assets/icons/outlined/property-safety.svg +1 -0
  546. data/app/assets/icons/outlined/pull-request.svg +1 -0
  547. data/app/assets/icons/outlined/pushpin.svg +1 -0
  548. data/app/assets/icons/outlined/python.svg +1 -0
  549. data/app/assets/icons/outlined/qq.svg +1 -0
  550. data/app/assets/icons/outlined/qrcode.svg +1 -0
  551. data/app/assets/icons/outlined/question-circle.svg +1 -0
  552. data/app/assets/icons/outlined/question.svg +1 -0
  553. data/app/assets/icons/outlined/radar-chart.svg +1 -0
  554. data/app/assets/icons/outlined/radius-bottomleft.svg +1 -0
  555. data/app/assets/icons/outlined/radius-bottomright.svg +1 -0
  556. data/app/assets/icons/outlined/radius-setting.svg +1 -0
  557. data/app/assets/icons/outlined/radius-upleft.svg +1 -0
  558. data/app/assets/icons/outlined/radius-upright.svg +1 -0
  559. data/app/assets/icons/outlined/read.svg +1 -0
  560. data/app/assets/icons/outlined/reconciliation.svg +1 -0
  561. data/app/assets/icons/outlined/red-envelope.svg +1 -0
  562. data/app/assets/icons/outlined/reddit.svg +1 -0
  563. data/app/assets/icons/outlined/redo.svg +1 -0
  564. data/app/assets/icons/outlined/reload.svg +1 -0
  565. data/app/assets/icons/outlined/rest.svg +1 -0
  566. data/app/assets/icons/outlined/retweet.svg +1 -0
  567. data/app/assets/icons/outlined/right-circle.svg +1 -0
  568. data/app/assets/icons/outlined/right-square.svg +1 -0
  569. data/app/assets/icons/outlined/right.svg +1 -0
  570. data/app/assets/icons/outlined/rise.svg +1 -0
  571. data/app/assets/icons/outlined/robot.svg +1 -0
  572. data/app/assets/icons/outlined/rocket.svg +1 -0
  573. data/app/assets/icons/outlined/rollback.svg +1 -0
  574. data/app/assets/icons/outlined/rotate-left.svg +1 -0
  575. data/app/assets/icons/outlined/rotate-right.svg +1 -0
  576. data/app/assets/icons/outlined/ruby.svg +1 -0
  577. data/app/assets/icons/outlined/safety-certificate.svg +1 -0
  578. data/app/assets/icons/outlined/safety.svg +1 -0
  579. data/app/assets/icons/outlined/save.svg +1 -0
  580. data/app/assets/icons/outlined/scan.svg +1 -0
  581. data/app/assets/icons/outlined/schedule.svg +1 -0
  582. data/app/assets/icons/outlined/scissor.svg +1 -0
  583. data/app/assets/icons/outlined/search.svg +1 -0
  584. data/app/assets/icons/outlined/security-scan.svg +1 -0
  585. data/app/assets/icons/outlined/select.svg +1 -0
  586. data/app/assets/icons/outlined/send.svg +1 -0
  587. data/app/assets/icons/outlined/setting.svg +1 -0
  588. data/app/assets/icons/outlined/shake.svg +1 -0
  589. data/app/assets/icons/outlined/share-alt.svg +1 -0
  590. data/app/assets/icons/outlined/shop.svg +1 -0
  591. data/app/assets/icons/outlined/shopping-cart.svg +1 -0
  592. data/app/assets/icons/outlined/shopping.svg +1 -0
  593. data/app/assets/icons/outlined/shrink.svg +1 -0
  594. data/app/assets/icons/outlined/signature.svg +1 -0
  595. data/app/assets/icons/outlined/sisternode.svg +1 -0
  596. data/app/assets/icons/outlined/sketch.svg +1 -0
  597. data/app/assets/icons/outlined/skin.svg +1 -0
  598. data/app/assets/icons/outlined/skype.svg +1 -0
  599. data/app/assets/icons/outlined/slack-square.svg +1 -0
  600. data/app/assets/icons/outlined/slack.svg +1 -0
  601. data/app/assets/icons/outlined/sliders.svg +1 -0
  602. data/app/assets/icons/outlined/small-dash.svg +1 -0
  603. data/app/assets/icons/outlined/smile.svg +1 -0
  604. data/app/assets/icons/outlined/snippets.svg +1 -0
  605. data/app/assets/icons/outlined/solution.svg +1 -0
  606. data/app/assets/icons/outlined/sort-ascending.svg +1 -0
  607. data/app/assets/icons/outlined/sort-descending.svg +1 -0
  608. data/app/assets/icons/outlined/sound.svg +1 -0
  609. data/app/assets/icons/outlined/split-cells.svg +1 -0
  610. data/app/assets/icons/outlined/spotify.svg +1 -0
  611. data/app/assets/icons/outlined/star.svg +1 -0
  612. data/app/assets/icons/outlined/step-backward.svg +1 -0
  613. data/app/assets/icons/outlined/step-forward.svg +1 -0
  614. data/app/assets/icons/outlined/stock.svg +1 -0
  615. data/app/assets/icons/outlined/stop.svg +1 -0
  616. data/app/assets/icons/outlined/strikethrough.svg +1 -0
  617. data/app/assets/icons/outlined/subnode.svg +1 -0
  618. data/app/assets/icons/outlined/sun.svg +1 -0
  619. data/app/assets/icons/outlined/swap-left.svg +1 -0
  620. data/app/assets/icons/outlined/swap-right.svg +1 -0
  621. data/app/assets/icons/outlined/swap.svg +1 -0
  622. data/app/assets/icons/outlined/switcher.svg +1 -0
  623. data/app/assets/icons/outlined/sync.svg +1 -0
  624. data/app/assets/icons/outlined/table.svg +1 -0
  625. data/app/assets/icons/outlined/tablet.svg +1 -0
  626. data/app/assets/icons/outlined/tag.svg +1 -0
  627. data/app/assets/icons/outlined/tags.svg +1 -0
  628. data/app/assets/icons/outlined/taobao-circle.svg +1 -0
  629. data/app/assets/icons/outlined/taobao.svg +1 -0
  630. data/app/assets/icons/outlined/team.svg +1 -0
  631. data/app/assets/icons/outlined/thunderbolt.svg +1 -0
  632. data/app/assets/icons/outlined/tik-tok.svg +1 -0
  633. data/app/assets/icons/outlined/to-top.svg +1 -0
  634. data/app/assets/icons/outlined/tool.svg +1 -0
  635. data/app/assets/icons/outlined/trademark-circle.svg +1 -0
  636. data/app/assets/icons/outlined/trademark.svg +1 -0
  637. data/app/assets/icons/outlined/transaction.svg +1 -0
  638. data/app/assets/icons/outlined/translation.svg +1 -0
  639. data/app/assets/icons/outlined/trophy.svg +1 -0
  640. data/app/assets/icons/outlined/truck.svg +1 -0
  641. data/app/assets/icons/outlined/twitch.svg +1 -0
  642. data/app/assets/icons/outlined/twitter.svg +1 -0
  643. data/app/assets/icons/outlined/underline.svg +1 -0
  644. data/app/assets/icons/outlined/undo.svg +1 -0
  645. data/app/assets/icons/outlined/ungroup.svg +1 -0
  646. data/app/assets/icons/outlined/unlock.svg +1 -0
  647. data/app/assets/icons/outlined/unordered-list.svg +1 -0
  648. data/app/assets/icons/outlined/up-circle.svg +1 -0
  649. data/app/assets/icons/outlined/up-square.svg +1 -0
  650. data/app/assets/icons/outlined/up.svg +1 -0
  651. data/app/assets/icons/outlined/upload.svg +1 -0
  652. data/app/assets/icons/outlined/usb.svg +1 -0
  653. data/app/assets/icons/outlined/user-add.svg +1 -0
  654. data/app/assets/icons/outlined/user-delete.svg +1 -0
  655. data/app/assets/icons/outlined/user-switch.svg +1 -0
  656. data/app/assets/icons/outlined/user.svg +1 -0
  657. data/app/assets/icons/outlined/usergroup-add.svg +1 -0
  658. data/app/assets/icons/outlined/usergroup-delete.svg +1 -0
  659. data/app/assets/icons/outlined/verified.svg +1 -0
  660. data/app/assets/icons/outlined/vertical-align-bottom.svg +1 -0
  661. data/app/assets/icons/outlined/vertical-align-middle.svg +1 -0
  662. data/app/assets/icons/outlined/vertical-align-top.svg +1 -0
  663. data/app/assets/icons/outlined/vertical-left.svg +1 -0
  664. data/app/assets/icons/outlined/vertical-right.svg +1 -0
  665. data/app/assets/icons/outlined/video-camera-add.svg +1 -0
  666. data/app/assets/icons/outlined/video-camera.svg +1 -0
  667. data/app/assets/icons/outlined/wallet.svg +1 -0
  668. data/app/assets/icons/outlined/warning.svg +1 -0
  669. data/app/assets/icons/outlined/wechat-work.svg +1 -0
  670. data/app/assets/icons/outlined/wechat.svg +1 -0
  671. data/app/assets/icons/outlined/weibo-circle.svg +1 -0
  672. data/app/assets/icons/outlined/weibo-square.svg +1 -0
  673. data/app/assets/icons/outlined/weibo.svg +1 -0
  674. data/app/assets/icons/outlined/whats-app.svg +1 -0
  675. data/app/assets/icons/outlined/wifi.svg +1 -0
  676. data/app/assets/icons/outlined/windows.svg +1 -0
  677. data/app/assets/icons/outlined/woman.svg +1 -0
  678. data/app/assets/icons/outlined/x.svg +1 -0
  679. data/app/assets/icons/outlined/yahoo.svg +1 -0
  680. data/app/assets/icons/outlined/youtube.svg +1 -0
  681. data/app/assets/icons/outlined/yuque.svg +1 -0
  682. data/app/assets/icons/outlined/zhihu.svg +1 -0
  683. data/app/assets/icons/outlined/zoom-in.svg +1 -0
  684. data/app/assets/icons/outlined/zoom-out.svg +1 -0
  685. data/app/assets/icons/twotone/account-book.svg +1 -0
  686. data/app/assets/icons/twotone/alert.svg +1 -0
  687. data/app/assets/icons/twotone/api.svg +1 -0
  688. data/app/assets/icons/twotone/appstore.svg +1 -0
  689. data/app/assets/icons/twotone/audio.svg +1 -0
  690. data/app/assets/icons/twotone/bank.svg +1 -0
  691. data/app/assets/icons/twotone/bell.svg +1 -0
  692. data/app/assets/icons/twotone/book.svg +1 -0
  693. data/app/assets/icons/twotone/box-plot.svg +1 -0
  694. data/app/assets/icons/twotone/bug.svg +1 -0
  695. data/app/assets/icons/twotone/build.svg +1 -0
  696. data/app/assets/icons/twotone/bulb.svg +1 -0
  697. data/app/assets/icons/twotone/calculator.svg +1 -0
  698. data/app/assets/icons/twotone/calendar.svg +1 -0
  699. data/app/assets/icons/twotone/camera.svg +1 -0
  700. data/app/assets/icons/twotone/car.svg +1 -0
  701. data/app/assets/icons/twotone/carry-out.svg +1 -0
  702. data/app/assets/icons/twotone/check-circle.svg +1 -0
  703. data/app/assets/icons/twotone/check-square.svg +1 -0
  704. data/app/assets/icons/twotone/ci-circle.svg +1 -0
  705. data/app/assets/icons/twotone/ci.svg +1 -0
  706. data/app/assets/icons/twotone/clock-circle.svg +1 -0
  707. data/app/assets/icons/twotone/close-circle.svg +1 -0
  708. data/app/assets/icons/twotone/close-square.svg +1 -0
  709. data/app/assets/icons/twotone/cloud.svg +1 -0
  710. data/app/assets/icons/twotone/code.svg +1 -0
  711. data/app/assets/icons/twotone/compass.svg +1 -0
  712. data/app/assets/icons/twotone/contacts.svg +1 -0
  713. data/app/assets/icons/twotone/container.svg +1 -0
  714. data/app/assets/icons/twotone/control.svg +1 -0
  715. data/app/assets/icons/twotone/copy.svg +1 -0
  716. data/app/assets/icons/twotone/copyright-circle.svg +1 -0
  717. data/app/assets/icons/twotone/copyright.svg +1 -0
  718. data/app/assets/icons/twotone/credit-card.svg +1 -0
  719. data/app/assets/icons/twotone/crown.svg +1 -0
  720. data/app/assets/icons/twotone/customer-service.svg +1 -0
  721. data/app/assets/icons/twotone/dashboard.svg +1 -0
  722. data/app/assets/icons/twotone/database.svg +1 -0
  723. data/app/assets/icons/twotone/delete.svg +1 -0
  724. data/app/assets/icons/twotone/diff.svg +1 -0
  725. data/app/assets/icons/twotone/dislike.svg +1 -0
  726. data/app/assets/icons/twotone/dollar-circle.svg +1 -0
  727. data/app/assets/icons/twotone/dollar.svg +1 -0
  728. data/app/assets/icons/twotone/down-circle.svg +1 -0
  729. data/app/assets/icons/twotone/down-square.svg +1 -0
  730. data/app/assets/icons/twotone/edit.svg +1 -0
  731. data/app/assets/icons/twotone/environment.svg +1 -0
  732. data/app/assets/icons/twotone/euro-circle.svg +1 -0
  733. data/app/assets/icons/twotone/euro.svg +1 -0
  734. data/app/assets/icons/twotone/exclamation-circle.svg +1 -0
  735. data/app/assets/icons/twotone/experiment.svg +1 -0
  736. data/app/assets/icons/twotone/eye-invisible.svg +1 -0
  737. data/app/assets/icons/twotone/eye.svg +1 -0
  738. data/app/assets/icons/twotone/file-add.svg +1 -0
  739. data/app/assets/icons/twotone/file-excel.svg +1 -0
  740. data/app/assets/icons/twotone/file-exclamation.svg +1 -0
  741. data/app/assets/icons/twotone/file-image.svg +1 -0
  742. data/app/assets/icons/twotone/file-markdown.svg +1 -0
  743. data/app/assets/icons/twotone/file-pdf.svg +1 -0
  744. data/app/assets/icons/twotone/file-ppt.svg +1 -0
  745. data/app/assets/icons/twotone/file-text.svg +1 -0
  746. data/app/assets/icons/twotone/file-unknown.svg +1 -0
  747. data/app/assets/icons/twotone/file-word.svg +1 -0
  748. data/app/assets/icons/twotone/file-zip.svg +1 -0
  749. data/app/assets/icons/twotone/file.svg +1 -0
  750. data/app/assets/icons/twotone/filter.svg +1 -0
  751. data/app/assets/icons/twotone/fire.svg +1 -0
  752. data/app/assets/icons/twotone/flag.svg +1 -0
  753. data/app/assets/icons/twotone/folder-add.svg +1 -0
  754. data/app/assets/icons/twotone/folder-open.svg +1 -0
  755. data/app/assets/icons/twotone/folder.svg +1 -0
  756. data/app/assets/icons/twotone/frown.svg +1 -0
  757. data/app/assets/icons/twotone/fund.svg +1 -0
  758. data/app/assets/icons/twotone/funnel-plot.svg +1 -0
  759. data/app/assets/icons/twotone/gift.svg +1 -0
  760. data/app/assets/icons/twotone/gold.svg +1 -0
  761. data/app/assets/icons/twotone/hdd.svg +1 -0
  762. data/app/assets/icons/twotone/heart.svg +1 -0
  763. data/app/assets/icons/twotone/highlight.svg +1 -0
  764. data/app/assets/icons/twotone/home.svg +1 -0
  765. data/app/assets/icons/twotone/hourglass.svg +1 -0
  766. data/app/assets/icons/twotone/html5.svg +1 -0
  767. data/app/assets/icons/twotone/idcard.svg +1 -0
  768. data/app/assets/icons/twotone/info-circle.svg +1 -0
  769. data/app/assets/icons/twotone/insurance.svg +1 -0
  770. data/app/assets/icons/twotone/interaction.svg +1 -0
  771. data/app/assets/icons/twotone/layout.svg +1 -0
  772. data/app/assets/icons/twotone/left-circle.svg +1 -0
  773. data/app/assets/icons/twotone/left-square.svg +1 -0
  774. data/app/assets/icons/twotone/like.svg +1 -0
  775. data/app/assets/icons/twotone/lock.svg +1 -0
  776. data/app/assets/icons/twotone/mail.svg +1 -0
  777. data/app/assets/icons/twotone/medicine-box.svg +1 -0
  778. data/app/assets/icons/twotone/meh.svg +1 -0
  779. data/app/assets/icons/twotone/message.svg +1 -0
  780. data/app/assets/icons/twotone/minus-circle.svg +1 -0
  781. data/app/assets/icons/twotone/minus-square.svg +1 -0
  782. data/app/assets/icons/twotone/mobile.svg +1 -0
  783. data/app/assets/icons/twotone/money-collect.svg +1 -0
  784. data/app/assets/icons/twotone/notification.svg +1 -0
  785. data/app/assets/icons/twotone/pause-circle.svg +1 -0
  786. data/app/assets/icons/twotone/phone.svg +1 -0
  787. data/app/assets/icons/twotone/picture.svg +1 -0
  788. data/app/assets/icons/twotone/pie-chart.svg +1 -0
  789. data/app/assets/icons/twotone/play-circle.svg +1 -0
  790. data/app/assets/icons/twotone/play-square.svg +1 -0
  791. data/app/assets/icons/twotone/plus-circle.svg +1 -0
  792. data/app/assets/icons/twotone/plus-square.svg +1 -0
  793. data/app/assets/icons/twotone/pound-circle.svg +1 -0
  794. data/app/assets/icons/twotone/printer.svg +1 -0
  795. data/app/assets/icons/twotone/profile.svg +1 -0
  796. data/app/assets/icons/twotone/project.svg +1 -0
  797. data/app/assets/icons/twotone/property-safety.svg +1 -0
  798. data/app/assets/icons/twotone/pushpin.svg +1 -0
  799. data/app/assets/icons/twotone/question-circle.svg +1 -0
  800. data/app/assets/icons/twotone/reconciliation.svg +1 -0
  801. data/app/assets/icons/twotone/red-envelope.svg +1 -0
  802. data/app/assets/icons/twotone/rest.svg +1 -0
  803. data/app/assets/icons/twotone/right-circle.svg +1 -0
  804. data/app/assets/icons/twotone/right-square.svg +1 -0
  805. data/app/assets/icons/twotone/rocket.svg +1 -0
  806. data/app/assets/icons/twotone/safety-certificate.svg +1 -0
  807. data/app/assets/icons/twotone/save.svg +1 -0
  808. data/app/assets/icons/twotone/schedule.svg +1 -0
  809. data/app/assets/icons/twotone/security-scan.svg +1 -0
  810. data/app/assets/icons/twotone/setting.svg +1 -0
  811. data/app/assets/icons/twotone/shop.svg +1 -0
  812. data/app/assets/icons/twotone/shopping.svg +1 -0
  813. data/app/assets/icons/twotone/skin.svg +1 -0
  814. data/app/assets/icons/twotone/sliders.svg +1 -0
  815. data/app/assets/icons/twotone/smile.svg +1 -0
  816. data/app/assets/icons/twotone/snippets.svg +1 -0
  817. data/app/assets/icons/twotone/sound.svg +1 -0
  818. data/app/assets/icons/twotone/star.svg +1 -0
  819. data/app/assets/icons/twotone/stop.svg +1 -0
  820. data/app/assets/icons/twotone/switcher.svg +1 -0
  821. data/app/assets/icons/twotone/tablet.svg +1 -0
  822. data/app/assets/icons/twotone/tag.svg +1 -0
  823. data/app/assets/icons/twotone/tags.svg +1 -0
  824. data/app/assets/icons/twotone/thunderbolt.svg +1 -0
  825. data/app/assets/icons/twotone/tool.svg +1 -0
  826. data/app/assets/icons/twotone/trademark-circle.svg +1 -0
  827. data/app/assets/icons/twotone/trophy.svg +1 -0
  828. data/app/assets/icons/twotone/unlock.svg +1 -0
  829. data/app/assets/icons/twotone/up-circle.svg +1 -0
  830. data/app/assets/icons/twotone/up-square.svg +1 -0
  831. data/app/assets/icons/twotone/usb.svg +1 -0
  832. data/app/assets/icons/twotone/video-camera.svg +1 -0
  833. data/app/assets/icons/twotone/wallet.svg +1 -0
  834. data/app/assets/icons/twotone/warning.svg +1 -0
  835. data/app/assets/illustrations/success.svg +1 -0
  836. data/app/assets/javascripts/hakumi_components.js +1 -0
  837. data/app/assets/stylesheets/hakumi/alert.scss +1 -0
  838. data/app/assets/stylesheets/hakumi_components.css +1 -0
  839. data/app/components/hakumi/admin_panel/component.html.erb +61 -0
  840. data/app/components/hakumi/admin_panel/component.rb +40 -0
  841. data/app/components/hakumi/affix/component.html.erb +7 -0
  842. data/app/components/hakumi/affix/component.rb +88 -0
  843. data/app/components/hakumi/alert/component.html.erb +30 -0
  844. data/app/components/hakumi/alert/component.rb +128 -0
  845. data/app/components/hakumi/anchor/component.html.erb +8 -0
  846. data/app/components/hakumi/anchor/component.rb +80 -0
  847. data/app/components/hakumi/anchor/link/component.html.erb +12 -0
  848. data/app/components/hakumi/anchor/link/component.rb +34 -0
  849. data/app/components/hakumi/autocomplete/component.html.erb +74 -0
  850. data/app/components/hakumi/autocomplete/component.rb +202 -0
  851. data/app/components/hakumi/avatar/component.rb +91 -0
  852. data/app/components/hakumi/badge/component.rb +85 -0
  853. data/app/components/hakumi/base_component.rb +179 -0
  854. data/app/components/hakumi/breadcrumb/component.html.erb +12 -0
  855. data/app/components/hakumi/breadcrumb/component.rb +27 -0
  856. data/app/components/hakumi/breadcrumb/item/component.html.erb +17 -0
  857. data/app/components/hakumi/breadcrumb/item/component.rb +35 -0
  858. data/app/components/hakumi/button/component.rb +121 -0
  859. data/app/components/hakumi/calendar/component.html.erb +163 -0
  860. data/app/components/hakumi/calendar/component.rb +448 -0
  861. data/app/components/hakumi/card/component.html.erb +65 -0
  862. data/app/components/hakumi/card/component.rb +87 -0
  863. data/app/components/hakumi/card/grid/component.html.erb +3 -0
  864. data/app/components/hakumi/card/grid/component.rb +37 -0
  865. data/app/components/hakumi/card/meta/component.html.erb +23 -0
  866. data/app/components/hakumi/card/meta/component.rb +46 -0
  867. data/app/components/hakumi/carousel/component.html.erb +56 -0
  868. data/app/components/hakumi/carousel/component.rb +147 -0
  869. data/app/components/hakumi/cascader/component.html.erb +41 -0
  870. data/app/components/hakumi/cascader/component.rb +119 -0
  871. data/app/components/hakumi/checkbox/component.html.erb +21 -0
  872. data/app/components/hakumi/checkbox/component.rb +54 -0
  873. data/app/components/hakumi/checkbox/group/component.html.erb +12 -0
  874. data/app/components/hakumi/checkbox/group/component.rb +64 -0
  875. data/app/components/hakumi/collapse/component.html.erb +31 -0
  876. data/app/components/hakumi/collapse/component.rb +117 -0
  877. data/app/components/hakumi/collapse/panel/component.rb +56 -0
  878. data/app/components/hakumi/color_picker/component.html.erb +166 -0
  879. data/app/components/hakumi/color_picker/component.rb +173 -0
  880. data/app/components/hakumi/concerns/form_field.rb +135 -0
  881. data/app/components/hakumi/container/component.rb +76 -0
  882. data/app/components/hakumi/date_picker/component.html.erb +80 -0
  883. data/app/components/hakumi/date_picker/component.rb +140 -0
  884. data/app/components/hakumi/date_picker/range_picker.html.erb +54 -0
  885. data/app/components/hakumi/date_picker/range_picker.rb +136 -0
  886. data/app/components/hakumi/date_picker/shared_rendering.rb +199 -0
  887. data/app/components/hakumi/descriptions/component.html.erb +52 -0
  888. data/app/components/hakumi/descriptions/component.rb +182 -0
  889. data/app/components/hakumi/descriptions/item/component.rb +28 -0
  890. data/app/components/hakumi/divider/component.rb +66 -0
  891. data/app/components/hakumi/drawer/component.html.erb +44 -0
  892. data/app/components/hakumi/drawer/component.rb +115 -0
  893. data/app/components/hakumi/dropdown/component.html.erb +20 -0
  894. data/app/components/hakumi/dropdown/component.rb +97 -0
  895. data/app/components/hakumi/dropdown/divider/component.rb +13 -0
  896. data/app/components/hakumi/dropdown/item/component.html.erb +17 -0
  897. data/app/components/hakumi/dropdown/item/component.rb +47 -0
  898. data/app/components/hakumi/empty/component.rb +110 -0
  899. data/app/components/hakumi/flex/component.rb +78 -0
  900. data/app/components/hakumi/float_button/back_top/component.rb +79 -0
  901. data/app/components/hakumi/float_button/component.rb +203 -0
  902. data/app/components/hakumi/float_button/group/component.rb +227 -0
  903. data/app/components/hakumi/float_button/group_cluster/component.rb +141 -0
  904. data/app/components/hakumi/form/item/component.rb +114 -0
  905. data/app/components/hakumi/grid/col/component.rb +98 -0
  906. data/app/components/hakumi/grid/row/component.rb +79 -0
  907. data/app/components/hakumi/icon/component.html.erb +3 -0
  908. data/app/components/hakumi/icon/component.rb +167 -0
  909. data/app/components/hakumi/image/component.html.erb +81 -0
  910. data/app/components/hakumi/image/component.rb +112 -0
  911. data/app/components/hakumi/image/preview_group/component.html.erb +83 -0
  912. data/app/components/hakumi/image/preview_group/component.rb +70 -0
  913. data/app/components/hakumi/input/component.html.erb +27 -0
  914. data/app/components/hakumi/input/component.rb +187 -0
  915. data/app/components/hakumi/input/password/component.rb +95 -0
  916. data/app/components/hakumi/input/text_area/component.html.erb +21 -0
  917. data/app/components/hakumi/input/text_area/component.rb +133 -0
  918. data/app/components/hakumi/input_number/component.html.erb +73 -0
  919. data/app/components/hakumi/input_number/component.rb +199 -0
  920. data/app/components/hakumi/layout/component.html.erb +1 -0
  921. data/app/components/hakumi/layout/component.rb +21 -0
  922. data/app/components/hakumi/layout/content/component.html.erb +1 -0
  923. data/app/components/hakumi/layout/content/component.rb +19 -0
  924. data/app/components/hakumi/layout/footer/component.html.erb +1 -0
  925. data/app/components/hakumi/layout/footer/component.rb +19 -0
  926. data/app/components/hakumi/layout/header/component.html.erb +1 -0
  927. data/app/components/hakumi/layout/header/component.rb +19 -0
  928. data/app/components/hakumi/layout/sider/component.html.erb +1 -0
  929. data/app/components/hakumi/layout/sider/component.rb +56 -0
  930. data/app/components/hakumi/mentions/component.html.erb +51 -0
  931. data/app/components/hakumi/mentions/component.rb +166 -0
  932. data/app/components/hakumi/menu/component.html.erb +5 -0
  933. data/app/components/hakumi/menu/component.rb +126 -0
  934. data/app/components/hakumi/menu/divider/component.rb +13 -0
  935. data/app/components/hakumi/menu/group/component.html.erb +8 -0
  936. data/app/components/hakumi/menu/group/component.rb +47 -0
  937. data/app/components/hakumi/menu/item/component.html.erb +22 -0
  938. data/app/components/hakumi/menu/item/component.rb +47 -0
  939. data/app/components/hakumi/menu/sub_menu/component.html.erb +23 -0
  940. data/app/components/hakumi/menu/sub_menu/component.rb +92 -0
  941. data/app/components/hakumi/message/component.html.erb +1 -0
  942. data/app/components/hakumi/message/component.rb +106 -0
  943. data/app/components/hakumi/modal/component.rb +177 -0
  944. data/app/components/hakumi/modal/confirm/component.rb +64 -0
  945. data/app/components/hakumi/modal/error/component.rb +50 -0
  946. data/app/components/hakumi/modal/info/component.rb +50 -0
  947. data/app/components/hakumi/modal/success/component.rb +50 -0
  948. data/app/components/hakumi/modal/warning/component.rb +51 -0
  949. data/app/components/hakumi/notification/component.rb +126 -0
  950. data/app/components/hakumi/pagination/component.html.erb +115 -0
  951. data/app/components/hakumi/pagination/component.rb +205 -0
  952. data/app/components/hakumi/popconfirm/component.html.erb +55 -0
  953. data/app/components/hakumi/popconfirm/component.rb +88 -0
  954. data/app/components/hakumi/popover/component.html.erb +25 -0
  955. data/app/components/hakumi/popover/component.rb +132 -0
  956. data/app/components/hakumi/progress/component.html.erb +81 -0
  957. data/app/components/hakumi/progress/component.rb +565 -0
  958. data/app/components/hakumi/qr_code/component.html.erb +15 -0
  959. data/app/components/hakumi/qr_code/component.rb +339 -0
  960. data/app/components/hakumi/radio/component.html.erb +43 -0
  961. data/app/components/hakumi/radio/component.rb +80 -0
  962. data/app/components/hakumi/radio/group/component.html.erb +49 -0
  963. data/app/components/hakumi/radio/group/component.rb +132 -0
  964. data/app/components/hakumi/rate/component.html.erb +48 -0
  965. data/app/components/hakumi/rate/component.rb +132 -0
  966. data/app/components/hakumi/result/component.html.erb +23 -0
  967. data/app/components/hakumi/result/component.rb +125 -0
  968. data/app/components/hakumi/segmented/component.html.erb +17 -0
  969. data/app/components/hakumi/segmented/component.rb +273 -0
  970. data/app/components/hakumi/select/component.html.erb +103 -0
  971. data/app/components/hakumi/select/component.rb +125 -0
  972. data/app/components/hakumi/skeleton/avatar/component.html.erb +3 -0
  973. data/app/components/hakumi/skeleton/avatar/component.rb +66 -0
  974. data/app/components/hakumi/skeleton/button/component.html.erb +3 -0
  975. data/app/components/hakumi/skeleton/button/component.rb +59 -0
  976. data/app/components/hakumi/skeleton/component.html.erb +25 -0
  977. data/app/components/hakumi/skeleton/component.rb +200 -0
  978. data/app/components/hakumi/skeleton/image/component.html.erb +5 -0
  979. data/app/components/hakumi/skeleton/image/component.rb +80 -0
  980. data/app/components/hakumi/skeleton/input/component.html.erb +3 -0
  981. data/app/components/hakumi/skeleton/input/component.rb +51 -0
  982. data/app/components/hakumi/skeleton/node/component.html.erb +5 -0
  983. data/app/components/hakumi/skeleton/node/component.rb +43 -0
  984. data/app/components/hakumi/slider/component.html.erb +67 -0
  985. data/app/components/hakumi/slider/component.rb +232 -0
  986. data/app/components/hakumi/space/compact/component.html.erb +3 -0
  987. data/app/components/hakumi/space/compact/component.rb +36 -0
  988. data/app/components/hakumi/space/component.html.erb +12 -0
  989. data/app/components/hakumi/space/component.rb +73 -0
  990. data/app/components/hakumi/spin/component.html.erb +13 -0
  991. data/app/components/hakumi/spin/component.rb +209 -0
  992. data/app/components/hakumi/splitter/component.html.erb +3 -0
  993. data/app/components/hakumi/splitter/component.rb +38 -0
  994. data/app/components/hakumi/splitter/panel/component.html.erb +3 -0
  995. data/app/components/hakumi/splitter/panel/component.rb +73 -0
  996. data/app/components/hakumi/statistic/component.html.erb +16 -0
  997. data/app/components/hakumi/statistic/component.rb +291 -0
  998. data/app/components/hakumi/steps/component.html.erb +57 -0
  999. data/app/components/hakumi/steps/component.rb +145 -0
  1000. data/app/components/hakumi/steps/item/component.html.erb +1 -0
  1001. data/app/components/hakumi/steps/item/component.rb +91 -0
  1002. data/app/components/hakumi/switch/component.html.erb +28 -0
  1003. data/app/components/hakumi/switch/component.rb +125 -0
  1004. data/app/components/hakumi/table/column/component.rb +80 -0
  1005. data/app/components/hakumi/table/column_group/component.rb +78 -0
  1006. data/app/components/hakumi/table/component.html.erb +196 -0
  1007. data/app/components/hakumi/table/component.rb +957 -0
  1008. data/app/components/hakumi/table/concerns/columns.rb +219 -0
  1009. data/app/components/hakumi/tabs/component.html.erb +84 -0
  1010. data/app/components/hakumi/tabs/component.rb +196 -0
  1011. data/app/components/hakumi/tabs/item/component.rb +87 -0
  1012. data/app/components/hakumi/tag/component.rb +187 -0
  1013. data/app/components/hakumi/tag/group/component.rb +48 -0
  1014. data/app/components/hakumi/time_picker/component.html.erb +63 -0
  1015. data/app/components/hakumi/time_picker/component.rb +159 -0
  1016. data/app/components/hakumi/timeline/component.html.erb +7 -0
  1017. data/app/components/hakumi/timeline/component.rb +168 -0
  1018. data/app/components/hakumi/timeline/item/component.html.erb +19 -0
  1019. data/app/components/hakumi/timeline/item/component.rb +137 -0
  1020. data/app/components/hakumi/tooltip/component.html.erb +20 -0
  1021. data/app/components/hakumi/tooltip/component.rb +121 -0
  1022. data/app/components/hakumi/tour/component.html.erb +66 -0
  1023. data/app/components/hakumi/tour/component.rb +158 -0
  1024. data/app/components/hakumi/transfer/component.html.erb +173 -0
  1025. data/app/components/hakumi/transfer/component.rb +249 -0
  1026. data/app/components/hakumi/tree/component.html.erb +23 -0
  1027. data/app/components/hakumi/tree/component.rb +523 -0
  1028. data/app/components/hakumi/tree_select/component.html.erb +76 -0
  1029. data/app/components/hakumi/tree_select/component.rb +261 -0
  1030. data/app/components/hakumi/typography/base_component.rb +109 -0
  1031. data/app/components/hakumi/typography/link/component.rb +34 -0
  1032. data/app/components/hakumi/typography/paragraph/component.rb +13 -0
  1033. data/app/components/hakumi/typography/text/component.rb +8 -0
  1034. data/app/components/hakumi/typography/title/component.rb +29 -0
  1035. data/app/components/hakumi/upload/component.html.erb +117 -0
  1036. data/app/components/hakumi/upload/component.rb +193 -0
  1037. data/app/controllers/hakumi_components/components_controller.rb +27 -0
  1038. data/app/form_builders/hakumi/form_builder.rb +440 -0
  1039. data/app/javascript/hakumi_components/boot.js +8 -0
  1040. data/app/javascript/hakumi_components/controllers/base/registry_controller.js +101 -0
  1041. data/app/javascript/hakumi_components/controllers/hakumi/admin_panel_controller.js +363 -0
  1042. data/app/javascript/hakumi_components/controllers/hakumi/affix_controller.js +206 -0
  1043. data/app/javascript/hakumi_components/controllers/hakumi/alert_controller.js +46 -0
  1044. data/app/javascript/hakumi_components/controllers/hakumi/anchor_controller.js +212 -0
  1045. data/app/javascript/hakumi_components/controllers/hakumi/autocomplete_controller.js +357 -0
  1046. data/app/javascript/hakumi_components/controllers/hakumi/avatar_text_controller.js +48 -0
  1047. data/app/javascript/hakumi_components/controllers/hakumi/back_top_controller.js +83 -0
  1048. data/app/javascript/hakumi_components/controllers/hakumi/button_controller.js +65 -0
  1049. data/app/javascript/hakumi_components/controllers/hakumi/calendar_controller.js +1101 -0
  1050. data/app/javascript/hakumi_components/controllers/hakumi/carousel_controller.js +348 -0
  1051. data/app/javascript/hakumi_components/controllers/hakumi/cascader_controller.js +287 -0
  1052. data/app/javascript/hakumi_components/controllers/hakumi/checkbox_controller.js +84 -0
  1053. data/app/javascript/hakumi_components/controllers/hakumi/checkbox_group_controller.js +132 -0
  1054. data/app/javascript/hakumi_components/controllers/hakumi/collapse_controller.js +181 -0
  1055. data/app/javascript/hakumi_components/controllers/hakumi/color_picker_controller.js +735 -0
  1056. data/app/javascript/hakumi_components/controllers/hakumi/date_picker_controller.js +906 -0
  1057. data/app/javascript/hakumi_components/controllers/hakumi/drawer_controller.js +126 -0
  1058. data/app/javascript/hakumi_components/controllers/hakumi/dropdown_controller.js +103 -0
  1059. data/app/javascript/hakumi_components/controllers/hakumi/float_button_group_controller.js +52 -0
  1060. data/app/javascript/hakumi_components/controllers/hakumi/form_item_controller.js +348 -0
  1061. data/app/javascript/hakumi_components/controllers/hakumi/image_controller.js +437 -0
  1062. data/app/javascript/hakumi_components/controllers/hakumi/input_controller.js +84 -0
  1063. data/app/javascript/hakumi_components/controllers/hakumi/input_number_controller.js +302 -0
  1064. data/app/javascript/hakumi_components/controllers/hakumi/input_password_controller.js +112 -0
  1065. data/app/javascript/hakumi_components/controllers/hakumi/input_textarea_controller.js +102 -0
  1066. data/app/javascript/hakumi_components/controllers/hakumi/mentions_controller.js +412 -0
  1067. data/app/javascript/hakumi_components/controllers/hakumi/menu_controller.js +485 -0
  1068. data/app/javascript/hakumi_components/controllers/hakumi/message_controller.js +344 -0
  1069. data/app/javascript/hakumi_components/controllers/hakumi/modal_controller.js +167 -0
  1070. data/app/javascript/hakumi_components/controllers/hakumi/modal_trigger_controller.js +53 -0
  1071. data/app/javascript/hakumi_components/controllers/hakumi/notification_controller.js +433 -0
  1072. data/app/javascript/hakumi_components/controllers/hakumi/pagination_controller.js +406 -0
  1073. data/app/javascript/hakumi_components/controllers/hakumi/popconfirm_controller.js +357 -0
  1074. data/app/javascript/hakumi_components/controllers/hakumi/popover_controller.js +473 -0
  1075. data/app/javascript/hakumi_components/controllers/hakumi/progress_controller.js +185 -0
  1076. data/app/javascript/hakumi_components/controllers/hakumi/qr_code_controller.js +315 -0
  1077. data/app/javascript/hakumi_components/controllers/hakumi/radio_controller.js +86 -0
  1078. data/app/javascript/hakumi_components/controllers/hakumi/rate_controller.js +262 -0
  1079. data/app/javascript/hakumi_components/controllers/hakumi/segmented_controller.js +171 -0
  1080. data/app/javascript/hakumi_components/controllers/hakumi/select_controller.js +315 -0
  1081. data/app/javascript/hakumi_components/controllers/hakumi/slider_controller.js +471 -0
  1082. data/app/javascript/hakumi_components/controllers/hakumi/spin_controller.js +130 -0
  1083. data/app/javascript/hakumi_components/controllers/hakumi/splitter_controller.js +184 -0
  1084. data/app/javascript/hakumi_components/controllers/hakumi/statistic_controller.js +249 -0
  1085. data/app/javascript/hakumi_components/controllers/hakumi/steps_controller.js +125 -0
  1086. data/app/javascript/hakumi_components/controllers/hakumi/switch_controller.js +147 -0
  1087. data/app/javascript/hakumi_components/controllers/hakumi/table_controller.js +1198 -0
  1088. data/app/javascript/hakumi_components/controllers/hakumi/tabs_controller.js +567 -0
  1089. data/app/javascript/hakumi_components/controllers/hakumi/tag_controller.js +103 -0
  1090. data/app/javascript/hakumi_components/controllers/hakumi/tag_group_controller.js +94 -0
  1091. data/app/javascript/hakumi_components/controllers/hakumi/theme_controller.js +114 -0
  1092. data/app/javascript/hakumi_components/controllers/hakumi/time_picker_controller.js +291 -0
  1093. data/app/javascript/hakumi_components/controllers/hakumi/timeline_controller.js +88 -0
  1094. data/app/javascript/hakumi_components/controllers/hakumi/tooltip_controller.js +295 -0
  1095. data/app/javascript/hakumi_components/controllers/hakumi/tour_controller.js +508 -0
  1096. data/app/javascript/hakumi_components/controllers/hakumi/transfer_controller.js +315 -0
  1097. data/app/javascript/hakumi_components/controllers/hakumi/tree_controller.js +708 -0
  1098. data/app/javascript/hakumi_components/controllers/hakumi/tree_select_controller.js +281 -0
  1099. data/app/javascript/hakumi_components/controllers/hakumi/typography_controller.js +100 -0
  1100. data/app/javascript/hakumi_components/controllers/hakumi/upload_controller.js +1101 -0
  1101. data/app/javascript/hakumi_components/core/config.js +7 -0
  1102. data/app/javascript/hakumi_components/core/dom.js +27 -0
  1103. data/app/javascript/hakumi_components/core/persistence.js +132 -0
  1104. data/app/javascript/hakumi_components/core/registry.js +23 -0
  1105. data/app/javascript/hakumi_components/core/render_component.js +177 -0
  1106. data/app/javascript/hakumi_components/esbuild_loader.js +149 -0
  1107. data/app/javascript/hakumi_components/index.js +79 -0
  1108. data/app/javascript/hakumi_components/plugins/persisted_singletons.js +19 -0
  1109. data/app/javascript/hakumi_components/utils/date_helper.js +111 -0
  1110. data/app/javascript/lib/validation_manager.js +238 -0
  1111. data/app/javascript/stylesheets/_base.scss +63 -0
  1112. data/app/javascript/stylesheets/_hakumi_components.scss +83 -0
  1113. data/app/javascript/stylesheets/_theme-helpers.scss +53 -0
  1114. data/app/javascript/stylesheets/_theme-tokens.scss +270 -0
  1115. data/app/javascript/stylesheets/_variables.scss +229 -0
  1116. data/app/javascript/stylesheets/components/_admin_panel.scss +264 -0
  1117. data/app/javascript/stylesheets/components/_affix.scss +33 -0
  1118. data/app/javascript/stylesheets/components/_alert.scss +116 -0
  1119. data/app/javascript/stylesheets/components/_anchor.scss +132 -0
  1120. data/app/javascript/stylesheets/components/_autocomplete.scss +190 -0
  1121. data/app/javascript/stylesheets/components/_avatar.scss +99 -0
  1122. data/app/javascript/stylesheets/components/_badge.scss +121 -0
  1123. data/app/javascript/stylesheets/components/_breadcrumb.scss +77 -0
  1124. data/app/javascript/stylesheets/components/_button.scss +354 -0
  1125. data/app/javascript/stylesheets/components/_calendar.scss +859 -0
  1126. data/app/javascript/stylesheets/components/_card.scss +323 -0
  1127. data/app/javascript/stylesheets/components/_carousel.scss +180 -0
  1128. data/app/javascript/stylesheets/components/_cascader.scss +276 -0
  1129. data/app/javascript/stylesheets/components/_checkbox.scss +217 -0
  1130. data/app/javascript/stylesheets/components/_collapse.scss +148 -0
  1131. data/app/javascript/stylesheets/components/_color_picker.scss +387 -0
  1132. data/app/javascript/stylesheets/components/_container.scss +45 -0
  1133. data/app/javascript/stylesheets/components/_date_picker.scss +312 -0
  1134. data/app/javascript/stylesheets/components/_descriptions.scss +209 -0
  1135. data/app/javascript/stylesheets/components/_divider.scss +110 -0
  1136. data/app/javascript/stylesheets/components/_drawer.scss +168 -0
  1137. data/app/javascript/stylesheets/components/_dropdown.scss +162 -0
  1138. data/app/javascript/stylesheets/components/_empty.scss +151 -0
  1139. data/app/javascript/stylesheets/components/_flex.scss +70 -0
  1140. data/app/javascript/stylesheets/components/_float_button.scss +306 -0
  1141. data/app/javascript/stylesheets/components/_grid.scss +138 -0
  1142. data/app/javascript/stylesheets/components/_icon.scss +35 -0
  1143. data/app/javascript/stylesheets/components/_image.scss +373 -0
  1144. data/app/javascript/stylesheets/components/_input.scss +407 -0
  1145. data/app/javascript/stylesheets/components/_input_number.scss +266 -0
  1146. data/app/javascript/stylesheets/components/_layout.scss +198 -0
  1147. data/app/javascript/stylesheets/components/_mentions.scss +211 -0
  1148. data/app/javascript/stylesheets/components/_menu.scss +674 -0
  1149. data/app/javascript/stylesheets/components/_message.scss +127 -0
  1150. data/app/javascript/stylesheets/components/_modal.scss +210 -0
  1151. data/app/javascript/stylesheets/components/_notification.scss +245 -0
  1152. data/app/javascript/stylesheets/components/_pagination.scss +402 -0
  1153. data/app/javascript/stylesheets/components/_popconfirm.scss +125 -0
  1154. data/app/javascript/stylesheets/components/_popover.scss +162 -0
  1155. data/app/javascript/stylesheets/components/_progress.scss +197 -0
  1156. data/app/javascript/stylesheets/components/_qr_code.scss +121 -0
  1157. data/app/javascript/stylesheets/components/_radio.scss +316 -0
  1158. data/app/javascript/stylesheets/components/_rate.scss +96 -0
  1159. data/app/javascript/stylesheets/components/_result.scss +90 -0
  1160. data/app/javascript/stylesheets/components/_segmented.scss +163 -0
  1161. data/app/javascript/stylesheets/components/_select.scss +414 -0
  1162. data/app/javascript/stylesheets/components/_skeleton.scss +205 -0
  1163. data/app/javascript/stylesheets/components/_slider.scss +222 -0
  1164. data/app/javascript/stylesheets/components/_space.scss +161 -0
  1165. data/app/javascript/stylesheets/components/_spin.scss +185 -0
  1166. data/app/javascript/stylesheets/components/_splitter.scss +89 -0
  1167. data/app/javascript/stylesheets/components/_statistic.scss +78 -0
  1168. data/app/javascript/stylesheets/components/_steps.scss +1092 -0
  1169. data/app/javascript/stylesheets/components/_switch.scss +232 -0
  1170. data/app/javascript/stylesheets/components/_table.scss +493 -0
  1171. data/app/javascript/stylesheets/components/_tabs.scss +522 -0
  1172. data/app/javascript/stylesheets/components/_tag.scss +315 -0
  1173. data/app/javascript/stylesheets/components/_time_picker.scss +317 -0
  1174. data/app/javascript/stylesheets/components/_timeline.scss +361 -0
  1175. data/app/javascript/stylesheets/components/_tooltip.scss +331 -0
  1176. data/app/javascript/stylesheets/components/_tour.scss +196 -0
  1177. data/app/javascript/stylesheets/components/_transfer.scss +244 -0
  1178. data/app/javascript/stylesheets/components/_tree.scss +341 -0
  1179. data/app/javascript/stylesheets/components/_tree_select.scss +295 -0
  1180. data/app/javascript/stylesheets/components/_typography.scss +155 -0
  1181. data/app/javascript/stylesheets/components/_upload.scss +528 -0
  1182. data/app/services/hakumi/icon/loader.rb +95 -0
  1183. data/app/services/hakumi/illustrations/loader.rb +43 -0
  1184. data/app/services/hakumi_components/component_handler.rb +53 -0
  1185. data/app/views/hakumi/time_picker/_columns.html.erb +73 -0
  1186. data/app/views/hakumi_components/_admin_panel.html.erb +1 -0
  1187. data/app/views/hakumi_components/_affix.html.erb +1 -0
  1188. data/app/views/hakumi_components/_alert.html.erb +1 -0
  1189. data/app/views/hakumi_components/_confirm.html.erb +1 -0
  1190. data/app/views/hakumi_components/_drawer.html.erb +3 -0
  1191. data/app/views/hakumi_components/_message.html.erb +1 -0
  1192. data/app/views/hakumi_components/_modal.html.erb +3 -0
  1193. data/app/views/hakumi_components/_notification.html.erb +1 -0
  1194. data/app/views/hakumi_components/_popconfirm.html.erb +1 -0
  1195. data/app/views/hakumi_components/_popover.html.erb +1 -0
  1196. data/app/views/hakumi_components/_qr_code.html.erb +1 -0
  1197. data/app/views/hakumi_components/_result.html.erb +1 -0
  1198. data/app/views/hakumi_components/_segmented.html.erb +1 -0
  1199. data/app/views/hakumi_components/_skeleton.html.erb +1 -0
  1200. data/app/views/hakumi_components/_spin.html.erb +1 -0
  1201. data/app/views/hakumi_components/_statistic.html.erb +13 -0
  1202. data/app/views/hakumi_components/_table.html.erb +1 -0
  1203. data/app/views/hakumi_components/_tag.html.erb +3 -0
  1204. data/app/views/hakumi_components/_timeline.html.erb +16 -0
  1205. data/app/views/hakumi_components/_tree.html.erb +1 -0
  1206. data/lib/hakumi_components/engine.rb +29 -0
  1207. data/lib/hakumi_components/rails/attribute_introspection.rb +156 -0
  1208. data/lib/hakumi_components/rails/validation_introspection.rb +192 -0
  1209. data/lib/hakumi_components/rails.rb +9 -0
  1210. data/lib/hakumi_components/version.rb +5 -0
  1211. data/lib/hakumi_components.rb +26 -0
  1212. data/sig/action_view/tag_builder.rbs +24 -0
  1213. data/sig/active_support/concern_patch.rbs +7 -0
  1214. data/sig/hakumi/admin_panel/component.rbs +28 -0
  1215. data/sig/hakumi/affix/component.rbs +44 -0
  1216. data/sig/hakumi/alert/component.rbs +64 -0
  1217. data/sig/hakumi/anchor/component.rbs +45 -0
  1218. data/sig/hakumi/anchor/link/component.rbs +31 -0
  1219. data/sig/hakumi/autocomplete/component.rbs +68 -0
  1220. data/sig/hakumi/avatar/component.rbs +44 -0
  1221. data/sig/hakumi/badge/component.rbs +41 -0
  1222. data/sig/hakumi/base_component.rbs +77 -0
  1223. data/sig/hakumi/breadcrumb/component.rbs +21 -0
  1224. data/sig/hakumi/breadcrumb/item/component.rbs +36 -0
  1225. data/sig/hakumi/button/component.rbs +56 -0
  1226. data/sig/hakumi/calendar/component.rbs +41 -0
  1227. data/sig/hakumi/card/component.rbs +50 -0
  1228. data/sig/hakumi/card/grid/component.rbs +21 -0
  1229. data/sig/hakumi/card/meta/component.rbs +25 -0
  1230. data/sig/hakumi/carousel/component.rbs +88 -0
  1231. data/sig/hakumi/cascader/component.rbs +52 -0
  1232. data/sig/hakumi/checkbox/component.rbs +36 -0
  1233. data/sig/hakumi/checkbox/group/component.rbs +34 -0
  1234. data/sig/hakumi/collapse/component.rbs +57 -0
  1235. data/sig/hakumi/collapse/panel/component.rbs +47 -0
  1236. data/sig/hakumi/color_picker/component.rbs +81 -0
  1237. data/sig/hakumi/concerns/form_field.rbs +89 -0
  1238. data/sig/hakumi/container/component.rbs +37 -0
  1239. data/sig/hakumi/date_picker/component.rbs +72 -0
  1240. data/sig/hakumi/date_picker/range_picker.rbs +68 -0
  1241. data/sig/hakumi/date_picker/shared_rendering.rbs +41 -0
  1242. data/sig/hakumi/descriptions/component.rbs +59 -0
  1243. data/sig/hakumi/descriptions/item/component.rbs +31 -0
  1244. data/sig/hakumi/divider/component.rbs +39 -0
  1245. data/sig/hakumi/drawer/component.rbs +66 -0
  1246. data/sig/hakumi/dropdown/component.rbs +45 -0
  1247. data/sig/hakumi/dropdown/divider/component.rbs +11 -0
  1248. data/sig/hakumi/dropdown/item/component.rbs +45 -0
  1249. data/sig/hakumi/empty/component.rbs +40 -0
  1250. data/sig/hakumi/flex/component.rbs +47 -0
  1251. data/sig/hakumi/float_button/back_top/component.rbs +45 -0
  1252. data/sig/hakumi/float_button/component.rbs +80 -0
  1253. data/sig/hakumi/float_button/group/component.rbs +95 -0
  1254. data/sig/hakumi/float_button/group_cluster/component.rbs +60 -0
  1255. data/sig/hakumi/form/item/component.rbs +39 -0
  1256. data/sig/hakumi/grid/col/component.rbs +50 -0
  1257. data/sig/hakumi/grid/row/component.rbs +46 -0
  1258. data/sig/hakumi/icon/component.rbs +56 -0
  1259. data/sig/hakumi/image/component.rbs +56 -0
  1260. data/sig/hakumi/image/preview_group/component.rbs +28 -0
  1261. data/sig/hakumi/input/component.rbs +71 -0
  1262. data/sig/hakumi/input/password/component.rbs +27 -0
  1263. data/sig/hakumi/input/text_area/component.rbs +42 -0
  1264. data/sig/hakumi/input_number/component.rbs +85 -0
  1265. data/sig/hakumi/layout/component.rbs +21 -0
  1266. data/sig/hakumi/layout/content/component.rbs +19 -0
  1267. data/sig/hakumi/layout/footer/component.rbs +19 -0
  1268. data/sig/hakumi/layout/header/component.rbs +19 -0
  1269. data/sig/hakumi/layout/sider/component.rbs +19 -0
  1270. data/sig/hakumi/mentions/component.rbs +75 -0
  1271. data/sig/hakumi/menu/component.rbs +52 -0
  1272. data/sig/hakumi/menu/divider/component.rbs +11 -0
  1273. data/sig/hakumi/menu/group/component.rbs +20 -0
  1274. data/sig/hakumi/menu/item/component.rbs +42 -0
  1275. data/sig/hakumi/menu/sub_menu/component.rbs +37 -0
  1276. data/sig/hakumi/message/component.rbs +50 -0
  1277. data/sig/hakumi/modal/component.rbs +76 -0
  1278. data/sig/hakumi/modal/confirm/component.rbs +32 -0
  1279. data/sig/hakumi/modal/error/component.rbs +27 -0
  1280. data/sig/hakumi/modal/info/component.rbs +27 -0
  1281. data/sig/hakumi/modal/success/component.rbs +27 -0
  1282. data/sig/hakumi/modal/warning/component.rbs +27 -0
  1283. data/sig/hakumi/notification/component.rbs +64 -0
  1284. data/sig/hakumi/pagination/component.rbs +113 -0
  1285. data/sig/hakumi/popconfirm/component.rbs +52 -0
  1286. data/sig/hakumi/popover/component.rbs +66 -0
  1287. data/sig/hakumi/progress/component.rbs +201 -0
  1288. data/sig/hakumi/qr_code/component.rbs +111 -0
  1289. data/sig/hakumi/radio/component.rbs +55 -0
  1290. data/sig/hakumi/radio/group/component.rbs +71 -0
  1291. data/sig/hakumi/rate/component.rbs +56 -0
  1292. data/sig/hakumi/result/component.rbs +65 -0
  1293. data/sig/hakumi/segmented/component.rbs +73 -0
  1294. data/sig/hakumi/select/component.rbs +73 -0
  1295. data/sig/hakumi/skeleton/avatar/component.rbs +23 -0
  1296. data/sig/hakumi/skeleton/button/component.rbs +24 -0
  1297. data/sig/hakumi/skeleton/component.rbs +76 -0
  1298. data/sig/hakumi/skeleton/image/component.rbs +22 -0
  1299. data/sig/hakumi/skeleton/input/component.rbs +23 -0
  1300. data/sig/hakumi/skeleton/node/component.rbs +21 -0
  1301. data/sig/hakumi/slider/component.rbs +86 -0
  1302. data/sig/hakumi/space/compact/component.rbs +21 -0
  1303. data/sig/hakumi/space/component.rbs +47 -0
  1304. data/sig/hakumi/spin/component.rbs +77 -0
  1305. data/sig/hakumi/splitter/component.rbs +27 -0
  1306. data/sig/hakumi/splitter/panel/component.rbs +36 -0
  1307. data/sig/hakumi/statistic/component.rbs +99 -0
  1308. data/sig/hakumi/steps/component.rbs +82 -0
  1309. data/sig/hakumi/steps/item/component.rbs +29 -0
  1310. data/sig/hakumi/switch/component.rbs +52 -0
  1311. data/sig/hakumi/table/column/component.rbs +57 -0
  1312. data/sig/hakumi/table/column_group/component.rbs +20 -0
  1313. data/sig/hakumi/table/component.rbs +280 -0
  1314. data/sig/hakumi/table/concerns/columns.rbs +94 -0
  1315. data/sig/hakumi/tabs/component.rbs +66 -0
  1316. data/sig/hakumi/tabs/item/component.rbs +29 -0
  1317. data/sig/hakumi/tag/component.rbs +86 -0
  1318. data/sig/hakumi/tag/group/component.rbs +24 -0
  1319. data/sig/hakumi/time_picker/component.rbs +72 -0
  1320. data/sig/hakumi/timeline/component.rbs +61 -0
  1321. data/sig/hakumi/timeline/item/component.rbs +70 -0
  1322. data/sig/hakumi/tooltip/component.rbs +73 -0
  1323. data/sig/hakumi/tour/component.rbs +84 -0
  1324. data/sig/hakumi/transfer/component.rbs +76 -0
  1325. data/sig/hakumi/tree/component.rbs +126 -0
  1326. data/sig/hakumi/tree_select/component.rbs +122 -0
  1327. data/sig/hakumi/typography/base_component.rbs +57 -0
  1328. data/sig/hakumi/typography/link/component.rbs +28 -0
  1329. data/sig/hakumi/typography/paragraph/component.rbs +13 -0
  1330. data/sig/hakumi/typography/text/component.rbs +10 -0
  1331. data/sig/hakumi/typography/title/component.rbs +28 -0
  1332. data/sig/hakumi/upload/component.rbs +78 -0
  1333. data/sig/hakumi_components/rails/attribute_introspection.rbs +16 -0
  1334. data/sig/hakumi_components/rails/validation_introspection.rbs +18 -0
  1335. data/sig/hakumi_components/rails.rbs +6 -0
  1336. data/sig/hakumi_components.rbs +79 -0
  1337. data/sig/rails.rbs +18 -0
  1338. data/sig/view_component/base.rbs +28 -0
  1339. metadata +1439 -0
@@ -0,0 +1,202 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ module Autocomplete
5
+ # Hakumi Autocomplete component
6
+ # Text input with dropdown suggestions, built on top of Ant Design styles.
7
+ class Component < Hakumi::BaseComponent
8
+ SIZES = %i[small middle large].freeze
9
+ VARIANTS = %i[outlined filled borderless underlined].freeze
10
+ STATUSES = %i[error warning].freeze
11
+ FILTER_MODES = %i[contains starts_with].freeze
12
+
13
+ # @param name [String, Symbol] input name/id
14
+ # @param options [Array] list of options or groups
15
+ # - "label" (String) -> label & value are the same
16
+ # - [label, value]
17
+ # - { label:, value: }
18
+ # - { label:, options: [...] } for grouped options
19
+ def initialize(
20
+ name:,
21
+ options: [],
22
+ value: nil,
23
+ placeholder: nil,
24
+ size: :middle,
25
+ variant: :outlined,
26
+ status: nil,
27
+ disabled: false,
28
+ allow_clear: false,
29
+ clear_icon: :close_circle,
30
+ input_renderer: nil,
31
+ case_sensitive: false,
32
+ filter_mode: :contains,
33
+ not_found_content: "No options",
34
+ **html_options
35
+ )
36
+ @name = name
37
+ @options = options
38
+ @value = value
39
+ @placeholder = placeholder
40
+ @size = size
41
+ @variant = variant
42
+ @status = status
43
+ @disabled = disabled
44
+ @allow_clear = allow_clear
45
+ @clear_icon = clear_icon
46
+ @input_renderer = input_renderer
47
+ @case_sensitive = case_sensitive
48
+ @filter_mode = filter_mode
49
+ @not_found_content = not_found_content
50
+ @html_options = html_options
51
+
52
+ validate_props!
53
+ end
54
+
55
+ private
56
+
57
+ def validate_props!
58
+ validate_inclusion!(:size, SIZES)
59
+ validate_inclusion!(:variant, VARIANTS)
60
+ validate_inclusion!(:filter_mode, FILTER_MODES)
61
+ validate_inclusion!(:status, STATUSES) if @status
62
+ end
63
+
64
+ def wrapper_classes
65
+ class_names(
66
+ "auto-complete",
67
+ {
68
+ @size => (@size != :middle),
69
+ "status-error": @status == :error,
70
+ "status-warning": @status == :warning,
71
+ "varihakumi-outlined": @variant == :outlined,
72
+ "varihakumi-filled": @variant == :filled,
73
+ "varihakumi-borderless": @variant == :borderless,
74
+ "varihakumi-underlined": @variant == :underlined,
75
+ disabled: @disabled
76
+ },
77
+ [ @html_options[:class] ]
78
+ )
79
+ end
80
+
81
+ def wrapper_attributes
82
+ base_attrs = {
83
+ class: wrapper_classes,
84
+ data: {
85
+ controller: "hakumi--autocomplete",
86
+ "hakumi--autocomplete-case-sensitive-value": @case_sensitive ? "true" : "false",
87
+ "hakumi--autocomplete-filter-mode-value": @filter_mode.to_s
88
+ }
89
+ }
90
+
91
+ extra = @html_options.except(:class)
92
+ merge_attributes(base_attrs, extra)
93
+ end
94
+
95
+ def input_attributes
96
+ attrs = {
97
+ type: "text",
98
+ name: @name,
99
+ id: @html_options[:id] || @name,
100
+ value: @value,
101
+ placeholder: @placeholder,
102
+ disabled: (@disabled ? true : nil),
103
+ autocomplete: "off",
104
+ spellcheck: "false",
105
+ aria: {
106
+ autocomplete: "list",
107
+ controls: dropdown_id,
108
+ expanded: "false"
109
+ },
110
+ data: {
111
+ action: "input->hakumi--autocomplete#onInput keydown->hakumi--autocomplete#onKeydown focus->hakumi--autocomplete#open blur->hakumi--autocomplete#onBlur",
112
+ "hakumi--autocomplete-target": "input"
113
+ }
114
+ }
115
+
116
+ attrs[:class] = input_classes unless custom_input_renderer?
117
+ attrs[:aria].compact!
118
+ attrs
119
+ end
120
+
121
+ def input_classes
122
+ classes = [ "hakumi-input" ]
123
+ classes << "hakumi-input-#{@size}" if @size != :middle
124
+ classes.join(" ")
125
+ end
126
+
127
+ def dropdown_id
128
+ @dropdown_id ||= "#{@name}_autocomplete_dropdown"
129
+ end
130
+
131
+ def allow_clear?
132
+ @allow_clear
133
+ end
134
+
135
+ def custom_input_renderer?
136
+ @input_renderer.respond_to?(:call)
137
+ end
138
+
139
+ def input_renderer
140
+ @input_renderer
141
+ end
142
+
143
+ def disabled?
144
+ @disabled
145
+ end
146
+
147
+ def clear_icon
148
+ @clear_icon
149
+ end
150
+
151
+ def not_found_content
152
+ @not_found_content
153
+ end
154
+
155
+ def normalized_items
156
+ @normalized_items ||= begin
157
+ Array(@options).flat_map do |opt|
158
+ if opt.is_a?(Hash) && opt[:options]
159
+ {
160
+ type: :group,
161
+ label: opt[:label].to_s,
162
+ options: normalize_group_options(opt[:options])
163
+ }
164
+ else
165
+ normalize_simple_option(opt)
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ def normalize_group_options(options)
172
+ Array(options).map { |opt| normalize_simple_option(opt) }.compact
173
+ end
174
+
175
+ def normalize_simple_option(opt)
176
+ case opt
177
+ when nil
178
+ nil
179
+ when Hash
180
+ {
181
+ type: :option,
182
+ label: opt[:label].to_s,
183
+ value: (opt[:value] || opt[:label]).to_s
184
+ }
185
+ when Array
186
+ label, value = opt
187
+ {
188
+ type: :option,
189
+ label: label.to_s,
190
+ value: (value || label).to_s
191
+ }
192
+ else
193
+ {
194
+ type: :option,
195
+ label: opt.to_s,
196
+ value: opt.to_s
197
+ }
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ module Avatar
5
+ class Component < Hakumi::BaseComponent
6
+ SHAPES = [ :circle, :square ].freeze
7
+ SIZES = [ :small, :default, :large ].freeze
8
+
9
+ def initialize(
10
+ shape: :circle,
11
+ size: :default,
12
+ src: nil,
13
+ icon: nil,
14
+ alt: nil,
15
+ **html_options
16
+ )
17
+ @shape = shape
18
+ @size = size
19
+ @src = src
20
+ @icon = icon
21
+ @alt = alt
22
+ @html_options = html_options
23
+
24
+ validate_props!
25
+ end
26
+
27
+ def call
28
+ content_tag(:span, content_wrapper, wrapper_attributes)
29
+ end
30
+
31
+ private
32
+
33
+ def validate_props!
34
+ validate_inclusion!(:shape, SHAPES)
35
+ validate_inclusion!(:size, SIZES) unless @size.is_a?(Integer)
36
+ end
37
+
38
+ def wrapper_classes
39
+ class_names(
40
+ "avatar",
41
+ {
42
+ @shape => true,
43
+ lg: @size == :large,
44
+ sm: @size == :small,
45
+ icon: @icon.present?,
46
+ image: @src.present?
47
+ },
48
+ [ @html_options[:class] ]
49
+ )
50
+ end
51
+
52
+ def content_wrapper
53
+ if @src
54
+ image_tag(@src, alt: @alt, width: avatar_size, height: avatar_size)
55
+ elsif @icon
56
+ # Pass size: nil to allow icon to inherit font-size from avatar
57
+ render Hakumi::Icon::Component.new(name: @icon, size: nil)
58
+ else
59
+ tag.span(content, data: { hakumi__avatar_text_target: "text" })
60
+ end
61
+ end
62
+
63
+ def avatar_size
64
+ case @size
65
+ when :large then 40
66
+ when :small then 24
67
+ when Integer then @size
68
+ else 32
69
+ end
70
+ end
71
+
72
+ def wrapper_attributes
73
+ attrs = {
74
+ class: wrapper_classes
75
+ }
76
+
77
+ if @size.is_a?(Integer)
78
+ attrs[:style] = "width: #{@size}px; height: #{@size}px; font-size: #{@size / 2}px;"
79
+ end
80
+
81
+ # Add controller for text avatars
82
+ unless @src || @icon
83
+ attrs[:data] ||= {}
84
+ attrs[:data][:controller] = "hakumi--avatar-text"
85
+ end
86
+
87
+ merge_attributes(attrs, @html_options.except(:class))
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ module Badge
5
+ class Component < Hakumi::BaseComponent
6
+ def initialize(count: nil, dot: false, overflow_count: 99, status: nil, text: nil, color: nil, show_zero: false, icon: nil, **html_options)
7
+ @count = count
8
+ @dot = dot
9
+ @overflow_count = overflow_count
10
+ @status = status
11
+ @text = text
12
+ @color = color
13
+ @show_zero = show_zero
14
+ @icon = icon
15
+ @html_options = html_options
16
+ end
17
+
18
+ def call
19
+ # Direct rendering to ensure class is present
20
+ classes = [ "hakumi-badge", @html_options[:class] ].compact.join(" ")
21
+
22
+ if @status || @text
23
+ classes += " hakumi-badge-status"
24
+ elsif content.blank?
25
+ classes += " hakumi-badge-not-a-wrapper"
26
+ end
27
+
28
+ content_tag(:span, class: classes, **@html_options.except(:class)) do
29
+ safe_join([
30
+ content,
31
+ badge_element,
32
+ status_text_element
33
+ ].compact)
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def badge_element
40
+ if @status || @text
41
+ styles = []
42
+ styles << "background: #{@color}" if @color
43
+
44
+ classes = [ "hakumi-badge-status-dot" ]
45
+ classes << "hakumi-badge-status-#{@status}" if @status
46
+
47
+ tag.span(class: classes.join(" "), style: (styles.join(";") if styles.any?))
48
+ elsif @dot
49
+ tag.sup(class: "hakumi-badge-dot", style: ("background: #{@color}" if @color))
50
+ elsif @count || @icon || @show_zero
51
+ # Show if count is present (and valid) OR icon is present OR show_zero is true
52
+ should_show = @icon.present? || @show_zero || (@count && (@count.is_a?(String) || @count > 0))
53
+
54
+ if should_show
55
+ classes = [ "hakumi-badge-count" ]
56
+ classes << "hakumi-badge-custom-component" if @icon
57
+
58
+ styles = []
59
+ styles << "background: #{@color}" if @color && !@icon
60
+ styles << "color: #{@color}" if @color && @icon
61
+
62
+ tag.sup(class: classes.join(" "), title: @count, style: (styles.join("; ") if styles.any?)) do
63
+ if @icon
64
+ render Hakumi::Icon::Component.new(name: @icon)
65
+ else
66
+ display_count.to_s
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def status_text_element
74
+ return unless @text
75
+ tag.span(@text, class: "hakumi-badge-status-text")
76
+ end
77
+
78
+ def display_count
79
+ return @count if @count.is_a?(String)
80
+ return "#{@overflow_count}+" if @count > @overflow_count
81
+ @count
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,179 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ # Base class for all Hakumi components
5
+ # Provides shared utilities and helpers
6
+ class BaseComponent < ViewComponent::Base
7
+ # Generate class names with the hakumi- prefix
8
+ # @param base [String] Base class name (e.g., 'btn', 'icon')
9
+ # @param modifiers [Hash] Hash of modifier keys and their values
10
+ # @param extras [Array<String>] Additional classes to append
11
+ # @return [String] Combined class string
12
+ #
13
+ # Example:
14
+ # class_names('button', { type: :primary, size: :large }, ['custom-class'])
15
+ # # => "hakumi-button hakumi-button-primary hakumi-button-large custom-class"
16
+ def class_names(base, modifiers = {}, extras = [])
17
+ classes = [ "hakumi-#{base}" ]
18
+
19
+ modifiers.each do |key, value|
20
+ next if value.nil? || value == false
21
+
22
+ if value == true
23
+ classes << "hakumi-#{base}-#{key}"
24
+ else
25
+ classes << "hakumi-#{base}-#{key}-#{value}"
26
+ end
27
+ end
28
+
29
+ classes.concat(Array(extras).compact)
30
+ classes.join(" ")
31
+ end
32
+
33
+ # Merge HTML attributes with defaults
34
+ # @param defaults [Hash] Default attributes
35
+ # @param overrides [Hash] User-provided attributes
36
+ # @return [Hash] Merged attributes
37
+ def merge_attributes(defaults = {}, overrides = {})
38
+ merged = defaults.deep_dup
39
+
40
+ # Special handling for class attribute
41
+ if defaults[:class] && overrides[:class]
42
+ merged[:class] = [ defaults[:class], overrides[:class] ].join(" ")
43
+ elsif overrides[:class]
44
+ merged[:class] = overrides[:class]
45
+ end
46
+
47
+ # Special handling for style attribute
48
+ if defaults[:style] && overrides[:style]
49
+ merged[:style] = [ defaults[:style].to_s.chomp(";"), overrides[:style] ].join("; ")
50
+ elsif overrides[:style]
51
+ merged[:style] = overrides[:style]
52
+ end
53
+
54
+ # Merge data attributes
55
+ if overrides[:data]
56
+ merged[:data] = (defaults[:data] || {}).merge(overrides[:data])
57
+ elsif defaults[:data]
58
+ merged[:data] = defaults[:data]
59
+ end
60
+
61
+ # Merge other attributes
62
+ merged.merge!(overrides.except(:class, :data, :style))
63
+
64
+ ensure_dom_id!(merged)
65
+
66
+ merged
67
+ end
68
+
69
+ # Internal helper to check presence without clobbering ActiveSupport#present?
70
+ # @param value [Object] Value to check
71
+ # @return [Boolean]
72
+ def value_present?(value)
73
+ !value.nil? && value != false && (value.respond_to?(:empty?) ? !value.empty? : true)
74
+ end
75
+
76
+ # Validate required props
77
+ # @param props [Array<Symbol>] List of required prop names
78
+ # @raise [ArgumentError] if any prop is missing
79
+ def validate_required!(*props)
80
+ props.each do |prop|
81
+ value = instance_variable_get("@#{prop}")
82
+ raise ArgumentError, "#{prop} is required" unless value_present?(value)
83
+ end
84
+ end
85
+
86
+ # Validate prop is one of allowed values
87
+ # @param prop [Symbol] Prop name
88
+ # @param allowed [Array] Allowed values
89
+ # @raise [ArgumentError] if value is not allowed
90
+ def validate_inclusion!(prop, allowed)
91
+ value = instance_variable_get("@#{prop}")
92
+ return if value.nil?
93
+ return if allowed.include?(value)
94
+
95
+ raise ArgumentError, "#{prop} must be one of #{allowed.inspect}, got #{value.inspect}"
96
+ end
97
+
98
+ def ensure_dom_id!(attrs)
99
+ controllers = attrs.dig(:data, :controller)
100
+ return unless value_present?(controllers)
101
+ return if value_present?(attrs[:id])
102
+
103
+ attrs[:id] = generate_id("hakumi-component")
104
+ end
105
+
106
+ # Generate a unique ID with a prefix
107
+ # @param prefix [String] Prefix for the ID
108
+ # @param length [Integer] Length of the random hex (default: 4)
109
+ # @return [String] Generated ID
110
+ #
111
+ # Example:
112
+ # generate_id("radio") # => "radio_a3f8"
113
+ # generate_id("select", 6) # => "select_a3f8b2"
114
+ def generate_id(prefix, length: 4)
115
+ "#{prefix}_#{SecureRandom.hex(length)}"
116
+ end
117
+
118
+ # Render a value that can be a String, ViewComponent, or other object
119
+ # @param value [Object] Value to render
120
+ # @return [String, nil] Rendered value
121
+ def render_value(value)
122
+ return nil unless value.present?
123
+ return value if value.is_a?(String) || value.is_a?(ActiveSupport::SafeBuffer)
124
+ return render(value) if value.respond_to?(:render_in)
125
+
126
+ value
127
+ end
128
+
129
+ # Convert size string/symbol to integer pixels
130
+ # Useful for components that accept both symbolic (:small, :large) and numeric sizes
131
+ # @param size [Symbol, Integer] Size value
132
+ # @param mapping [Hash] Size to pixel mapping
133
+ # @return [Integer] Size in pixels
134
+ def size_to_pixels(size, mapping = {})
135
+ return size if size.is_a?(Integer)
136
+ mapping[size] || size
137
+ end
138
+
139
+ # Convert dimension value to CSS string
140
+ # @param value [Numeric, String, nil] Dimension value
141
+ # @return [String, nil] CSS dimension string
142
+ #
143
+ # Examples:
144
+ # dimension_to_css(100) # => "100px"
145
+ # dimension_to_css("50%") # => "50%"
146
+ # dimension_to_css("2rem") # => "2rem"
147
+ # dimension_to_css(nil) # => nil
148
+ def dimension_to_css(value)
149
+ return nil if value.nil?
150
+ return value if value.is_a?(String) && value.strip.present?
151
+ return "#{value}px" if value.is_a?(Numeric)
152
+
153
+ string = value.to_s.strip
154
+ string.empty? ? nil : string
155
+ end
156
+
157
+ # Build inline style string from array or hash
158
+ # @param styles [Array<String>, Hash] Styles as array of CSS strings or hash of property => value
159
+ # @return [String, nil] Combined style string
160
+ #
161
+ # Example with array:
162
+ # build_inline_style(["color: red", "font-size: 14px"]) # => "color: red; font-size: 14px"
163
+ #
164
+ # Example with hash:
165
+ # build_inline_style(color: "red", "font-size": "14px") # => "color: red; font-size: 14px"
166
+ def build_inline_style(styles)
167
+ return nil if styles.blank?
168
+
169
+ style_array = if styles.is_a?(Hash)
170
+ styles.compact.map { |key, value| "#{key}: #{value}" }
171
+ else
172
+ Array(styles).compact
173
+ end
174
+
175
+ return nil if style_array.empty?
176
+ style_array.join("; ")
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,12 @@
1
+ <nav <%= tag.attributes(wrapper_attributes) %>>
2
+ <ol class="hakumi-breadcrumb-list">
3
+ <% items.each_with_index do |item, index| %>
4
+ <li class="hakumi-breadcrumb-item">
5
+ <%= item %>
6
+ <% unless index == items.size - 1 %>
7
+ <span class="hakumi-breadcrumb-separator"><%= separator %></span>
8
+ <% end %>
9
+ </li>
10
+ <% end %>
11
+ </ol>
12
+ </nav>
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ module Breadcrumb
5
+ class Component < Hakumi::BaseComponent
6
+ renders_many :items, ->(title: nil, href: nil, target: nil, **options, &block) do
7
+ Hakumi::Breadcrumb::Item::Component.new(title: title, href: href, target: target, **options, &block)
8
+ end
9
+
10
+ def initialize(separator: "/", **html_options)
11
+ @separator = separator
12
+ @html_options = html_options
13
+ end
14
+
15
+ attr_reader :separator
16
+
17
+ def breadcrumb_classes
18
+ "hakumi-breadcrumb"
19
+ end
20
+
21
+ def wrapper_attributes
22
+ base_attrs = { class: breadcrumb_classes }
23
+ merge_attributes(base_attrs, @html_options)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ <% if menu? %>
2
+ <%= render Hakumi::Dropdown::Component.new do |dropdown| %>
3
+ <% dropdown.with_trigger do %>
4
+ <span class="hakumi-breadcrumb-link hakumi-breadcrumb-link-dropdown">
5
+ <%= display_title %>
6
+ <%= render Hakumi::Icon::Component.new(name: :down, size: 10) %>
7
+ </span>
8
+ <% end %>
9
+ <% menu.each do |item| %>
10
+ <% dropdown.with_item(key: item[:key] || item[:title], label: item[:title], href: item[:href], target: item[:target]) %>
11
+ <% end %>
12
+ <% end %>
13
+ <% elsif link? %>
14
+ <a class="<%= item_classes %>" href="<%= href %>"<% if target.present? %> target="<%= target %>"<% end %>><%= display_title %></a>
15
+ <% else %>
16
+ <span class="<%= item_classes %>"><%= display_title %></span>
17
+ <% end %>
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hakumi
4
+ module Breadcrumb
5
+ module Item
6
+ class Component < Hakumi::BaseComponent
7
+ def initialize(title: nil, href: nil, target: nil, menu: nil, **html_options)
8
+ @title = title
9
+ @href = href
10
+ @target = target
11
+ @menu = menu
12
+ @html_options = html_options
13
+ end
14
+
15
+ attr_reader :title, :href, :target, :menu
16
+
17
+ def item_classes
18
+ "hakumi-breadcrumb-link"
19
+ end
20
+
21
+ def link?
22
+ href.present?
23
+ end
24
+
25
+ def menu?
26
+ menu.present? && menu.is_a?(Array) && menu.any?
27
+ end
28
+
29
+ def display_title
30
+ content.presence || title
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end