hakumi_components 0.1.17.pre → 0.1.18.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 (373) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -1
  3. data/README.md +92 -70
  4. data/app/components/{hakumi → hakumi_components}/admin_panel/component.html.erb +2 -2
  5. data/app/components/{hakumi → hakumi_components}/admin_panel/component.rb +2 -2
  6. data/app/components/{hakumi → hakumi_components}/affix/component.rb +2 -2
  7. data/app/components/{hakumi → hakumi_components}/alert/component.html.erb +1 -1
  8. data/app/components/{hakumi → hakumi_components}/alert/component.rb +3 -3
  9. data/app/components/{hakumi → hakumi_components}/anchor/component.rb +3 -3
  10. data/app/components/{hakumi → hakumi_components}/anchor/link/component.rb +3 -3
  11. data/app/components/{hakumi → hakumi_components}/autocomplete/component.html.erb +1 -1
  12. data/app/components/{hakumi → hakumi_components}/autocomplete/component.rb +2 -2
  13. data/app/components/{hakumi → hakumi_components}/avatar/component.rb +3 -3
  14. data/app/components/{hakumi → hakumi_components}/badge/component.rb +3 -3
  15. data/app/components/{hakumi → hakumi_components}/base_component.rb +1 -1
  16. data/app/components/{hakumi → hakumi_components}/breadcrumb/component.rb +3 -3
  17. data/app/components/{hakumi → hakumi_components}/breadcrumb/item/component.html.erb +2 -2
  18. data/app/components/{hakumi → hakumi_components}/breadcrumb/item/component.rb +2 -2
  19. data/app/components/{hakumi → hakumi_components}/button/component.rb +4 -4
  20. data/app/components/{hakumi → hakumi_components}/calendar/component.html.erb +5 -5
  21. data/app/components/{hakumi → hakumi_components}/calendar/component.rb +4 -4
  22. data/app/components/{hakumi → hakumi_components}/card/component.rb +4 -4
  23. data/app/components/{hakumi → hakumi_components}/card/grid/component.rb +5 -5
  24. data/app/components/{hakumi → hakumi_components}/card/meta/component.rb +4 -4
  25. data/app/components/{hakumi → hakumi_components}/carousel/component.html.erb +2 -2
  26. data/app/components/{hakumi → hakumi_components}/carousel/component.rb +2 -2
  27. data/app/components/{hakumi → hakumi_components}/cascader/component.html.erb +2 -2
  28. data/app/components/{hakumi → hakumi_components}/cascader/component.rb +3 -3
  29. data/app/components/{hakumi → hakumi_components}/checkbox/component.rb +3 -3
  30. data/app/components/{hakumi → hakumi_components}/checkbox/group/component.html.erb +1 -1
  31. data/app/components/{hakumi → hakumi_components}/checkbox/group/component.rb +2 -2
  32. data/app/components/{hakumi → hakumi_components}/collapse/component.html.erb +1 -1
  33. data/app/components/{hakumi → hakumi_components}/collapse/component.rb +3 -3
  34. data/app/components/{hakumi → hakumi_components}/collapse/panel/component.rb +2 -2
  35. data/app/components/{hakumi → hakumi_components}/color_picker/component.rb +3 -3
  36. data/app/components/{hakumi → hakumi_components}/concerns/form_field.rb +1 -1
  37. data/app/components/{hakumi → hakumi_components}/container/component.rb +2 -2
  38. data/app/components/{hakumi → hakumi_components}/date_picker/component.html.erb +3 -3
  39. data/app/components/{hakumi → hakumi_components}/date_picker/component.rb +3 -3
  40. data/app/components/{hakumi → hakumi_components}/date_picker/range_picker.html.erb +4 -4
  41. data/app/components/{hakumi → hakumi_components}/date_picker/range_picker.rb +3 -3
  42. data/app/components/{hakumi → hakumi_components}/date_picker/shared_rendering.rb +1 -1
  43. data/app/components/{hakumi → hakumi_components}/descriptions/component.rb +3 -3
  44. data/app/components/{hakumi → hakumi_components}/descriptions/item/component.rb +2 -2
  45. data/app/components/{hakumi → hakumi_components}/divider/component.rb +2 -2
  46. data/app/components/{hakumi → hakumi_components}/drawer/component.html.erb +1 -1
  47. data/app/components/{hakumi → hakumi_components}/drawer/component.rb +2 -2
  48. data/app/components/{hakumi → hakumi_components}/dropdown/component.rb +4 -4
  49. data/app/components/{hakumi → hakumi_components}/dropdown/divider/component.rb +2 -2
  50. data/app/components/{hakumi → hakumi_components}/dropdown/item/component.rb +3 -3
  51. data/app/components/{hakumi → hakumi_components}/empty/component.rb +2 -2
  52. data/app/components/{hakumi → hakumi_components}/flex/component.rb +2 -2
  53. data/app/components/{hakumi → hakumi_components}/float_button/back_top/component.rb +3 -3
  54. data/app/components/{hakumi → hakumi_components}/float_button/component.rb +5 -5
  55. data/app/components/{hakumi → hakumi_components}/float_button/group/component.rb +7 -7
  56. data/app/components/{hakumi → hakumi_components}/float_button/group_cluster/component.rb +4 -4
  57. data/app/components/{hakumi → hakumi_components}/form/item/component.rb +6 -6
  58. data/app/components/{hakumi → hakumi_components}/grid/col/component.rb +2 -2
  59. data/app/components/{hakumi → hakumi_components}/grid/row/component.rb +2 -2
  60. data/app/components/{hakumi → hakumi_components}/icon/component.rb +8 -8
  61. data/app/components/{hakumi → hakumi_components}/image/component.html.erb +10 -10
  62. data/app/components/{hakumi → hakumi_components}/image/component.rb +2 -2
  63. data/app/components/{hakumi → hakumi_components}/image/preview_group/component.html.erb +9 -9
  64. data/app/components/{hakumi → hakumi_components}/image/preview_group/component.rb +3 -3
  65. data/app/components/{hakumi → hakumi_components}/input/component.rb +9 -9
  66. data/app/components/{hakumi → hakumi_components}/input/password/component.rb +5 -5
  67. data/app/components/{hakumi → hakumi_components}/input/text_area/component.rb +5 -5
  68. data/app/components/{hakumi → hakumi_components}/input_number/component.html.erb +4 -4
  69. data/app/components/{hakumi → hakumi_components}/input_number/component.rb +5 -5
  70. data/app/components/{hakumi → hakumi_components}/layout/component.rb +1 -1
  71. data/app/components/{hakumi → hakumi_components}/layout/content/component.rb +1 -1
  72. data/app/components/{hakumi → hakumi_components}/layout/footer/component.rb +1 -1
  73. data/app/components/{hakumi → hakumi_components}/layout/header/component.rb +1 -1
  74. data/app/components/{hakumi → hakumi_components}/layout/sider/component.rb +1 -1
  75. data/app/components/{hakumi → hakumi_components}/mentions/component.rb +3 -3
  76. data/app/components/{hakumi → hakumi_components}/menu/component.rb +6 -6
  77. data/app/components/{hakumi → hakumi_components}/menu/divider/component.rb +2 -2
  78. data/app/components/{hakumi → hakumi_components}/menu/group/component.rb +3 -3
  79. data/app/components/{hakumi → hakumi_components}/menu/item/component.rb +3 -3
  80. data/app/components/{hakumi → hakumi_components}/menu/sub_menu/component.rb +7 -7
  81. data/app/components/{hakumi → hakumi_components}/message/component.rb +2 -2
  82. data/app/components/{hakumi → hakumi_components}/modal/component.html.erb +1 -1
  83. data/app/components/{hakumi → hakumi_components}/modal/component.rb +2 -2
  84. data/app/components/hakumi_components/modal/confirm/component.html.erb +23 -0
  85. data/app/components/{hakumi → hakumi_components}/modal/confirm/component.rb +2 -2
  86. data/app/components/{hakumi → hakumi_components}/modal/error/component.rb +5 -5
  87. data/app/components/{hakumi → hakumi_components}/modal/info/component.rb +5 -5
  88. data/app/components/{hakumi → hakumi_components}/modal/success/component.rb +5 -5
  89. data/app/components/{hakumi → hakumi_components}/modal/warning/component.rb +6 -6
  90. data/app/components/{hakumi → hakumi_components}/notification/component.rb +2 -2
  91. data/app/components/{hakumi → hakumi_components}/pagination/component.html.erb +1 -1
  92. data/app/components/{hakumi → hakumi_components}/pagination/component.rb +7 -7
  93. data/app/components/{hakumi → hakumi_components}/popconfirm/component.html.erb +2 -2
  94. data/app/components/{hakumi → hakumi_components}/popconfirm/component.rb +3 -3
  95. data/app/components/{hakumi → hakumi_components}/popover/component.rb +2 -2
  96. data/app/components/{hakumi → hakumi_components}/progress/component.html.erb +1 -1
  97. data/app/components/{hakumi → hakumi_components}/progress/component.rb +2 -2
  98. data/app/components/{hakumi → hakumi_components}/qr_code/component.rb +4 -4
  99. data/app/components/{hakumi → hakumi_components}/radio/component.rb +3 -3
  100. data/app/components/{hakumi → hakumi_components}/radio/group/component.html.erb +1 -1
  101. data/app/components/{hakumi → hakumi_components}/radio/group/component.rb +3 -3
  102. data/app/components/{hakumi → hakumi_components}/rate/component.html.erb +1 -1
  103. data/app/components/{hakumi → hakumi_components}/rate/component.rb +3 -3
  104. data/app/components/{hakumi → hakumi_components}/result/component.rb +4 -4
  105. data/app/components/{hakumi → hakumi_components}/segmented/component.rb +3 -3
  106. data/app/components/{hakumi → hakumi_components}/select/component.html.erb +3 -3
  107. data/app/components/{hakumi → hakumi_components}/select/component.rb +3 -3
  108. data/app/components/{hakumi → hakumi_components}/skeleton/avatar/component.rb +2 -2
  109. data/app/components/{hakumi → hakumi_components}/skeleton/button/component.rb +2 -2
  110. data/app/components/{hakumi → hakumi_components}/skeleton/component.rb +2 -2
  111. data/app/components/{hakumi → hakumi_components}/skeleton/image/component.html.erb +1 -1
  112. data/app/components/{hakumi → hakumi_components}/skeleton/image/component.rb +2 -2
  113. data/app/components/{hakumi → hakumi_components}/skeleton/input/component.rb +2 -2
  114. data/app/components/{hakumi → hakumi_components}/skeleton/node/component.rb +2 -2
  115. data/app/components/{hakumi → hakumi_components}/slider/component.rb +3 -3
  116. data/app/components/{hakumi → hakumi_components}/space/compact/component.rb +1 -1
  117. data/app/components/{hakumi → hakumi_components}/space/component.rb +1 -1
  118. data/app/components/{hakumi → hakumi_components}/spin/component.rb +3 -3
  119. data/app/components/{hakumi → hakumi_components}/splitter/component.rb +2 -2
  120. data/app/components/{hakumi → hakumi_components}/splitter/panel/component.rb +1 -1
  121. data/app/components/{hakumi → hakumi_components}/statistic/component.rb +2 -2
  122. data/app/components/{hakumi → hakumi_components}/steps/component.html.erb +4 -4
  123. data/app/components/{hakumi → hakumi_components}/steps/component.rb +3 -3
  124. data/app/components/{hakumi → hakumi_components}/steps/item/component.rb +2 -2
  125. data/app/components/{hakumi → hakumi_components}/switch/component.rb +3 -3
  126. data/app/components/{hakumi → hakumi_components}/table/column/component.rb +2 -2
  127. data/app/components/{hakumi → hakumi_components}/table/column_group/component.rb +4 -4
  128. data/app/components/{hakumi → hakumi_components}/table/component.rb +7 -7
  129. data/app/components/{hakumi → hakumi_components}/table/concerns/columns.rb +8 -8
  130. data/app/components/{hakumi → hakumi_components}/table/concerns/editable.rb +1 -1
  131. data/app/components/{hakumi → hakumi_components}/table/concerns/ellipsis.rb +2 -2
  132. data/app/components/{hakumi → hakumi_components}/table/concerns/fixed_columns.rb +1 -1
  133. data/app/components/{hakumi → hakumi_components}/tabs/component.html.erb +4 -4
  134. data/app/components/{hakumi → hakumi_components}/tabs/component.rb +4 -4
  135. data/app/components/{hakumi → hakumi_components}/tabs/item/component.rb +2 -2
  136. data/app/components/{hakumi → hakumi_components}/tag/component.rb +3 -3
  137. data/app/components/{hakumi → hakumi_components}/tag/group/component.rb +2 -2
  138. data/app/components/{hakumi → hakumi_components}/time_picker/component.html.erb +2 -2
  139. data/app/components/{hakumi → hakumi_components}/time_picker/component.rb +3 -3
  140. data/app/components/{hakumi → hakumi_components}/timeline/component.rb +4 -4
  141. data/app/components/{hakumi → hakumi_components}/timeline/item/component.rb +3 -3
  142. data/app/components/{hakumi → hakumi_components}/tooltip/component.rb +2 -2
  143. data/app/components/{hakumi → hakumi_components}/tour/component.rb +2 -2
  144. data/app/components/{hakumi → hakumi_components}/transfer/component.html.erb +4 -4
  145. data/app/components/{hakumi → hakumi_components}/transfer/component.rb +2 -2
  146. data/app/components/{hakumi → hakumi_components}/tree/component.html.erb +1 -1
  147. data/app/components/{hakumi → hakumi_components}/tree/component.rb +10 -10
  148. data/app/components/{hakumi → hakumi_components}/tree_select/component.html.erb +5 -5
  149. data/app/components/{hakumi → hakumi_components}/tree_select/component.rb +3 -3
  150. data/app/components/{hakumi → hakumi_components}/typography/base_component.rb +3 -3
  151. data/app/components/{hakumi → hakumi_components}/typography/link/component.rb +1 -1
  152. data/app/components/{hakumi → hakumi_components}/typography/paragraph/component.rb +1 -1
  153. data/app/components/{hakumi → hakumi_components}/typography/text/component.rb +1 -1
  154. data/app/components/{hakumi → hakumi_components}/typography/title/component.rb +1 -1
  155. data/app/components/{hakumi → hakumi_components}/upload/component.html.erb +10 -10
  156. data/app/components/{hakumi → hakumi_components}/upload/component.rb +2 -2
  157. data/app/controllers/{hakumi → hakumi_components}/components_controller.rb +1 -1
  158. data/app/form_builders/{hakumi → hakumi_components}/form_builder.rb +31 -31
  159. data/app/helpers/{hakumi → hakumi_components}/form_helper.rb +4 -4
  160. data/app/services/hakumi_components/component_handler.rb +53 -0
  161. data/app/services/{hakumi → hakumi_components}/icon/loader.rb +4 -4
  162. data/app/services/{hakumi → hakumi_components}/illustrations/loader.rb +4 -4
  163. data/app/views/hakumi/_admin_panel.html.erb +1 -1
  164. data/app/views/hakumi/_affix.html.erb +1 -1
  165. data/app/views/hakumi/_alert.html.erb +1 -1
  166. data/app/views/hakumi/_confirm.html.erb +1 -1
  167. data/app/views/hakumi/_drawer.html.erb +1 -1
  168. data/app/views/hakumi/_message.html.erb +1 -1
  169. data/app/views/hakumi/_modal.html.erb +1 -1
  170. data/app/views/hakumi/_notification.html.erb +1 -1
  171. data/app/views/hakumi/_popconfirm.html.erb +1 -1
  172. data/app/views/hakumi/_popover.html.erb +1 -1
  173. data/app/views/hakumi/_qr_code.html.erb +1 -1
  174. data/app/views/hakumi/_result.html.erb +1 -1
  175. data/app/views/hakumi/_segmented.html.erb +1 -1
  176. data/app/views/hakumi/_skeleton.html.erb +1 -1
  177. data/app/views/hakumi/_spin.html.erb +1 -1
  178. data/app/views/hakumi/_statistic.html.erb +1 -1
  179. data/app/views/hakumi/_table.html.erb +1 -1
  180. data/app/views/hakumi/_tag.html.erb +1 -1
  181. data/app/views/hakumi/_timeline.html.erb +1 -1
  182. data/app/views/hakumi/_tree.html.erb +1 -1
  183. data/lib/generators/{hakumi → hakumi_components}/install_generator.rb +3 -3
  184. data/lib/hakumi_components/documentation.rb +6 -6
  185. data/lib/hakumi_components/engine.rb +9 -3
  186. data/lib/hakumi_components/rails/attribute_introspection.rb +1 -1
  187. data/lib/hakumi_components/rails/validation_introspection.rb +1 -1
  188. data/lib/hakumi_components/rails/validation_mapper.rb +1 -1
  189. data/lib/hakumi_components/rails.rb +1 -1
  190. data/lib/hakumi_components/version.rb +2 -2
  191. data/lib/hakumi_components.rb +3 -2
  192. data/sig/generators/{hakumi → hakumi_components}/install_generator.rbs +1 -1
  193. data/sig/{hakumi → hakumi_components}/admin_panel/component.rbs +2 -2
  194. data/sig/{hakumi → hakumi_components}/affix/component.rbs +2 -2
  195. data/sig/{hakumi → hakumi_components}/alert/component.rbs +2 -2
  196. data/sig/{hakumi → hakumi_components}/anchor/component.rbs +2 -2
  197. data/sig/{hakumi → hakumi_components}/anchor/link/component.rbs +2 -2
  198. data/sig/{hakumi → hakumi_components}/autocomplete/component.rbs +2 -2
  199. data/sig/{hakumi → hakumi_components}/avatar/component.rbs +2 -2
  200. data/sig/{hakumi → hakumi_components}/badge/component.rbs +2 -2
  201. data/sig/{hakumi → hakumi_components}/base_component.rbs +1 -1
  202. data/sig/{hakumi → hakumi_components}/breadcrumb/component.rbs +2 -2
  203. data/sig/{hakumi → hakumi_components}/breadcrumb/item/component.rbs +2 -2
  204. data/sig/{hakumi → hakumi_components}/button/component.rbs +2 -2
  205. data/sig/{hakumi → hakumi_components}/calendar/component.rbs +2 -2
  206. data/sig/{hakumi → hakumi_components}/card/component.rbs +2 -2
  207. data/sig/{hakumi → hakumi_components}/card/grid/component.rbs +2 -2
  208. data/sig/{hakumi → hakumi_components}/card/meta/component.rbs +2 -2
  209. data/sig/{hakumi → hakumi_components}/carousel/component.rbs +2 -2
  210. data/sig/{hakumi → hakumi_components}/cascader/component.rbs +2 -2
  211. data/sig/{hakumi → hakumi_components}/checkbox/component.rbs +3 -3
  212. data/sig/{hakumi → hakumi_components}/checkbox/group/component.rbs +2 -2
  213. data/sig/{hakumi → hakumi_components}/collapse/component.rbs +2 -2
  214. data/sig/{hakumi → hakumi_components}/collapse/panel/component.rbs +4 -4
  215. data/sig/{hakumi → hakumi_components}/color_picker/component.rbs +3 -3
  216. data/sig/{hakumi → hakumi_components}/concerns/form_field.rbs +1 -1
  217. data/sig/{hakumi → hakumi_components}/container/component.rbs +2 -2
  218. data/sig/{hakumi → hakumi_components}/date_picker/component.rbs +3 -3
  219. data/sig/{hakumi → hakumi_components}/date_picker/range_picker.rbs +3 -3
  220. data/sig/{hakumi → hakumi_components}/date_picker/shared_rendering.rbs +1 -1
  221. data/sig/{hakumi → hakumi_components}/descriptions/component.rbs +3 -3
  222. data/sig/{hakumi → hakumi_components}/descriptions/item/component.rbs +2 -2
  223. data/sig/{hakumi → hakumi_components}/divider/component.rbs +2 -2
  224. data/sig/{hakumi → hakumi_components}/drawer/component.rbs +2 -2
  225. data/sig/{hakumi → hakumi_components}/dropdown/component.rbs +2 -2
  226. data/sig/{hakumi → hakumi_components}/dropdown/divider/component.rbs +2 -2
  227. data/sig/{hakumi → hakumi_components}/dropdown/item/component.rbs +3 -3
  228. data/sig/{hakumi → hakumi_components}/empty/component.rbs +2 -2
  229. data/sig/{hakumi → hakumi_components}/flex/component.rbs +2 -2
  230. data/sig/{hakumi → hakumi_components}/float_button/back_top/component.rbs +6 -6
  231. data/sig/{hakumi → hakumi_components}/float_button/component.rbs +2 -2
  232. data/sig/{hakumi → hakumi_components}/float_button/group/component.rbs +13 -13
  233. data/sig/{hakumi → hakumi_components}/float_button/group_cluster/component.rbs +7 -7
  234. data/sig/{hakumi → hakumi_components}/form/item/component.rbs +2 -2
  235. data/sig/{hakumi → hakumi_components}/form_builder.rbs +1 -1
  236. data/sig/{hakumi → hakumi_components}/grid/col/component.rbs +2 -2
  237. data/sig/{hakumi → hakumi_components}/grid/row/component.rbs +2 -2
  238. data/sig/{hakumi → hakumi_components}/icon/component.rbs +2 -2
  239. data/sig/{hakumi → hakumi_components}/image/component.rbs +2 -2
  240. data/sig/{hakumi → hakumi_components}/image/preview_group/component.rbs +2 -2
  241. data/sig/{hakumi → hakumi_components}/input/component.rbs +3 -3
  242. data/sig/{hakumi → hakumi_components}/input/password/component.rbs +2 -2
  243. data/sig/{hakumi → hakumi_components}/input/text_area/component.rbs +2 -2
  244. data/sig/{hakumi → hakumi_components}/input_number/component.rbs +3 -3
  245. data/sig/{hakumi → hakumi_components}/layout/component.rbs +2 -2
  246. data/sig/{hakumi → hakumi_components}/layout/content/component.rbs +2 -2
  247. data/sig/{hakumi → hakumi_components}/layout/footer/component.rbs +2 -2
  248. data/sig/{hakumi → hakumi_components}/layout/header/component.rbs +2 -2
  249. data/sig/{hakumi → hakumi_components}/layout/sider/component.rbs +2 -2
  250. data/sig/{hakumi → hakumi_components}/mentions/component.rbs +3 -3
  251. data/sig/{hakumi → hakumi_components}/menu/component.rbs +2 -2
  252. data/sig/{hakumi → hakumi_components}/menu/divider/component.rbs +2 -2
  253. data/sig/{hakumi → hakumi_components}/menu/group/component.rbs +2 -2
  254. data/sig/{hakumi → hakumi_components}/menu/item/component.rbs +3 -3
  255. data/sig/{hakumi → hakumi_components}/menu/sub_menu/component.rbs +3 -3
  256. data/sig/{hakumi → hakumi_components}/message/component.rbs +2 -2
  257. data/sig/{hakumi → hakumi_components}/modal/component.rbs +2 -2
  258. data/sig/{hakumi → hakumi_components}/modal/confirm/component.rbs +2 -2
  259. data/sig/{hakumi → hakumi_components}/modal/error/component.rbs +2 -2
  260. data/sig/{hakumi → hakumi_components}/modal/info/component.rbs +2 -2
  261. data/sig/{hakumi → hakumi_components}/modal/success/component.rbs +2 -2
  262. data/sig/{hakumi → hakumi_components}/modal/warning/component.rbs +2 -2
  263. data/sig/{hakumi → hakumi_components}/notification/component.rbs +2 -2
  264. data/sig/{hakumi → hakumi_components}/pagination/component.rbs +7 -7
  265. data/sig/{hakumi → hakumi_components}/popconfirm/component.rbs +2 -2
  266. data/sig/{hakumi → hakumi_components}/popover/component.rbs +2 -2
  267. data/sig/{hakumi → hakumi_components}/progress/component.rbs +2 -2
  268. data/sig/{hakumi → hakumi_components}/qr_code/component.rbs +2 -2
  269. data/sig/{hakumi → hakumi_components}/radio/component.rbs +3 -3
  270. data/sig/{hakumi → hakumi_components}/radio/group/component.rbs +3 -3
  271. data/sig/{hakumi → hakumi_components}/rails/attribute_introspection.rbs +1 -1
  272. data/sig/{hakumi → hakumi_components}/rails/validation_introspection.rbs +1 -1
  273. data/sig/{hakumi → hakumi_components}/rails/validation_mapper.rbs +1 -1
  274. data/sig/{hakumi → hakumi_components}/rails.rbs +1 -1
  275. data/sig/{hakumi → hakumi_components}/rate/component.rbs +3 -3
  276. data/sig/{hakumi → hakumi_components}/result/component.rbs +3 -3
  277. data/sig/{hakumi → hakumi_components}/segmented/component.rbs +2 -2
  278. data/sig/{hakumi → hakumi_components}/select/component.rbs +3 -3
  279. data/sig/{hakumi → hakumi_components}/skeleton/avatar/component.rbs +2 -2
  280. data/sig/{hakumi → hakumi_components}/skeleton/button/component.rbs +2 -2
  281. data/sig/{hakumi → hakumi_components}/skeleton/component.rbs +2 -2
  282. data/sig/{hakumi → hakumi_components}/skeleton/image/component.rbs +2 -2
  283. data/sig/{hakumi → hakumi_components}/skeleton/input/component.rbs +2 -2
  284. data/sig/{hakumi → hakumi_components}/skeleton/node/component.rbs +2 -2
  285. data/sig/{hakumi → hakumi_components}/slider/component.rbs +3 -3
  286. data/sig/{hakumi → hakumi_components}/space/compact/component.rbs +1 -1
  287. data/sig/{hakumi → hakumi_components}/space/component.rbs +1 -1
  288. data/sig/{hakumi → hakumi_components}/spin/component.rbs +2 -2
  289. data/sig/{hakumi → hakumi_components}/splitter/component.rbs +2 -2
  290. data/sig/{hakumi → hakumi_components}/splitter/panel/component.rbs +1 -1
  291. data/sig/{hakumi → hakumi_components}/statistic/component.rbs +2 -2
  292. data/sig/{hakumi → hakumi_components}/steps/component.rbs +2 -2
  293. data/sig/{hakumi → hakumi_components}/steps/item/component.rbs +2 -2
  294. data/sig/{hakumi → hakumi_components}/switch/component.rbs +3 -3
  295. data/sig/{hakumi → hakumi_components}/table/column/component.rbs +2 -2
  296. data/sig/{hakumi → hakumi_components}/table/column_group/component.rbs +2 -2
  297. data/sig/{hakumi → hakumi_components}/table/component.rbs +2 -2
  298. data/sig/{hakumi → hakumi_components}/table/concerns/columns.rbs +1 -1
  299. data/sig/{hakumi → hakumi_components}/table/concerns/editable.rbs +1 -1
  300. data/sig/{hakumi → hakumi_components}/table/concerns/ellipsis.rbs +1 -1
  301. data/sig/{hakumi → hakumi_components}/table/concerns/fixed_columns.rbs +1 -1
  302. data/sig/{hakumi → hakumi_components}/tabs/component.rbs +2 -2
  303. data/sig/{hakumi → hakumi_components}/tabs/item/component.rbs +2 -2
  304. data/sig/{hakumi → hakumi_components}/tag/component.rbs +2 -2
  305. data/sig/{hakumi → hakumi_components}/tag/group/component.rbs +2 -2
  306. data/sig/{hakumi → hakumi_components}/time_picker/component.rbs +3 -3
  307. data/sig/{hakumi → hakumi_components}/timeline/component.rbs +2 -2
  308. data/sig/{hakumi → hakumi_components}/timeline/item/component.rbs +2 -2
  309. data/sig/{hakumi → hakumi_components}/tooltip/component.rbs +2 -2
  310. data/sig/{hakumi → hakumi_components}/tour/component.rbs +2 -2
  311. data/sig/{hakumi → hakumi_components}/transfer/component.rbs +2 -2
  312. data/sig/{hakumi → hakumi_components}/tree/component.rbs +2 -2
  313. data/sig/{hakumi → hakumi_components}/tree_select/component.rbs +3 -3
  314. data/sig/{hakumi → hakumi_components}/typography/base_component.rbs +2 -2
  315. data/sig/{hakumi → hakumi_components}/typography/link/component.rbs +1 -1
  316. data/sig/{hakumi → hakumi_components}/typography/paragraph/component.rbs +1 -1
  317. data/sig/{hakumi → hakumi_components}/typography/text/component.rbs +1 -1
  318. data/sig/{hakumi → hakumi_components}/typography/title/component.rbs +1 -1
  319. data/sig/{hakumi → hakumi_components}/upload/component.rbs +2 -2
  320. data/sig/{hakumi.rbs → hakumi_components.rbs} +3 -3
  321. metadata +340 -340
  322. data/app/components/hakumi/modal/confirm/component.html.erb +0 -23
  323. data/app/services/hakumi/component_handler.rb +0 -53
  324. /data/app/components/{hakumi → hakumi_components}/affix/component.html.erb +0 -0
  325. /data/app/components/{hakumi → hakumi_components}/anchor/component.html.erb +0 -0
  326. /data/app/components/{hakumi → hakumi_components}/anchor/link/component.html.erb +0 -0
  327. /data/app/components/{hakumi → hakumi_components}/breadcrumb/component.html.erb +0 -0
  328. /data/app/components/{hakumi → hakumi_components}/card/component.html.erb +0 -0
  329. /data/app/components/{hakumi → hakumi_components}/card/grid/component.html.erb +0 -0
  330. /data/app/components/{hakumi → hakumi_components}/card/meta/component.html.erb +0 -0
  331. /data/app/components/{hakumi → hakumi_components}/checkbox/component.html.erb +0 -0
  332. /data/app/components/{hakumi → hakumi_components}/color_picker/component.html.erb +0 -0
  333. /data/app/components/{hakumi → hakumi_components}/descriptions/component.html.erb +0 -0
  334. /data/app/components/{hakumi → hakumi_components}/dropdown/component.html.erb +0 -0
  335. /data/app/components/{hakumi → hakumi_components}/dropdown/item/component.html.erb +0 -0
  336. /data/app/components/{hakumi → hakumi_components}/icon/component.html.erb +0 -0
  337. /data/app/components/{hakumi → hakumi_components}/input/component.html.erb +0 -0
  338. /data/app/components/{hakumi → hakumi_components}/input/text_area/component.html.erb +0 -0
  339. /data/app/components/{hakumi → hakumi_components}/layout/component.html.erb +0 -0
  340. /data/app/components/{hakumi → hakumi_components}/layout/content/component.html.erb +0 -0
  341. /data/app/components/{hakumi → hakumi_components}/layout/footer/component.html.erb +0 -0
  342. /data/app/components/{hakumi → hakumi_components}/layout/header/component.html.erb +0 -0
  343. /data/app/components/{hakumi → hakumi_components}/layout/sider/component.html.erb +0 -0
  344. /data/app/components/{hakumi → hakumi_components}/mentions/component.html.erb +0 -0
  345. /data/app/components/{hakumi → hakumi_components}/menu/component.html.erb +0 -0
  346. /data/app/components/{hakumi → hakumi_components}/menu/group/component.html.erb +0 -0
  347. /data/app/components/{hakumi → hakumi_components}/menu/item/component.html.erb +0 -0
  348. /data/app/components/{hakumi → hakumi_components}/menu/sub_menu/component.html.erb +0 -0
  349. /data/app/components/{hakumi → hakumi_components}/message/component.html.erb +0 -0
  350. /data/app/components/{hakumi → hakumi_components}/popover/component.html.erb +0 -0
  351. /data/app/components/{hakumi → hakumi_components}/qr_code/component.html.erb +0 -0
  352. /data/app/components/{hakumi → hakumi_components}/radio/component.html.erb +0 -0
  353. /data/app/components/{hakumi → hakumi_components}/result/component.html.erb +0 -0
  354. /data/app/components/{hakumi → hakumi_components}/segmented/component.html.erb +0 -0
  355. /data/app/components/{hakumi → hakumi_components}/skeleton/avatar/component.html.erb +0 -0
  356. /data/app/components/{hakumi → hakumi_components}/skeleton/button/component.html.erb +0 -0
  357. /data/app/components/{hakumi → hakumi_components}/skeleton/component.html.erb +0 -0
  358. /data/app/components/{hakumi → hakumi_components}/skeleton/input/component.html.erb +0 -0
  359. /data/app/components/{hakumi → hakumi_components}/skeleton/node/component.html.erb +0 -0
  360. /data/app/components/{hakumi → hakumi_components}/slider/component.html.erb +0 -0
  361. /data/app/components/{hakumi → hakumi_components}/space/compact/component.html.erb +0 -0
  362. /data/app/components/{hakumi → hakumi_components}/space/component.html.erb +0 -0
  363. /data/app/components/{hakumi → hakumi_components}/spin/component.html.erb +0 -0
  364. /data/app/components/{hakumi → hakumi_components}/splitter/component.html.erb +0 -0
  365. /data/app/components/{hakumi → hakumi_components}/splitter/panel/component.html.erb +0 -0
  366. /data/app/components/{hakumi → hakumi_components}/statistic/component.html.erb +0 -0
  367. /data/app/components/{hakumi → hakumi_components}/steps/item/component.html.erb +0 -0
  368. /data/app/components/{hakumi → hakumi_components}/switch/component.html.erb +0 -0
  369. /data/app/components/{hakumi → hakumi_components}/table/component.html.erb +0 -0
  370. /data/app/components/{hakumi → hakumi_components}/timeline/component.html.erb +0 -0
  371. /data/app/components/{hakumi → hakumi_components}/timeline/item/component.html.erb +0 -0
  372. /data/app/components/{hakumi → hakumi_components}/tooltip/component.html.erb +0 -0
  373. /data/app/components/{hakumi → hakumi_components}/tour/component.html.erb +0 -0
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module TreeSelect
5
- class Component < Hakumi::BaseComponent
6
- include Hakumi::Concerns::FormField
5
+ class Component < HakumiComponents::BaseComponent
6
+ include HakumiComponents::Concerns::FormField
7
7
 
8
8
  SIZES = [ :small, :middle, :large ].freeze
9
9
  VARIANTS = [ :default, :borderless ].freeze
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module Typography
5
- class BaseComponent < Hakumi::BaseComponent
5
+ class BaseComponent < HakumiComponents::BaseComponent
6
6
  TYPES = [ :secondary, :success, :warning, :danger ].freeze
7
7
 
8
8
  def initialize(
@@ -101,7 +101,7 @@ module Hakumi
101
101
 
102
102
  def copy_icon
103
103
  tag.span(class: "hakumi-typography-copy", role: "button", "aria-label": "Copy") do
104
- render Hakumi::Icon::Component.new(name: :copy)
104
+ render HakumiComponents::Icon::Component.new(name: :copy)
105
105
  end
106
106
  end
107
107
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module Typography
5
5
  module Link
6
6
  class Component < BaseComponent
@@ -1,4 +1,4 @@
1
- module Hakumi
1
+ module HakumiComponents
2
2
  module Typography
3
3
  module Paragraph
4
4
  class Component < BaseComponent
@@ -1,4 +1,4 @@
1
- module Hakumi
1
+ module HakumiComponents
2
2
  module Typography
3
3
  module Text
4
4
  class Component < BaseComponent
@@ -1,4 +1,4 @@
1
- module Hakumi
1
+ module HakumiComponents
2
2
  module Typography
3
3
  module Title
4
4
  class Component < BaseComponent
@@ -3,14 +3,14 @@
3
3
 
4
4
  <% if list_type_avatar? %>
5
5
  <div class="hakumi-upload-avatar-wrapper" data-hakumi--upload-target="avatarWrapper" data-action="click->hakumi--upload#triggerInput">
6
- <%= render Hakumi::Avatar::Component.new(
6
+ <%= render HakumiComponents::Avatar::Component.new(
7
7
  icon: @avatar_icon,
8
8
  size: @avatar_size,
9
9
  shape: @avatar_shape,
10
10
  data: { hakumi__upload_target: "avatar" }
11
11
  ) %>
12
12
  <div class="hakumi-upload-avatar-overlay <%= avatar_overlay_class %>">
13
- <%= render Hakumi::Icon::Component.new(name: :camera, size: 20) %>
13
+ <%= render HakumiComponents::Icon::Component.new(name: :camera, size: 20) %>
14
14
  <span>Upload</span>
15
15
  </div>
16
16
  </div>
@@ -20,14 +20,14 @@
20
20
  data-action="click->hakumi--upload#triggerInput dragover->hakumi--upload#dragOver dragleave->hakumi--upload#dragLeave drop->hakumi--upload#drop">
21
21
  <div class="hakumi-upload-dragger-content">
22
22
  <div class="hakumi-upload-dragger-icon">
23
- <%= render Hakumi::Icon::Component.new(name: :upload) %>
23
+ <%= render HakumiComponents::Icon::Component.new(name: :upload) %>
24
24
  </div>
25
25
  <div class="hakumi-upload-dragger-title">Click or drag file to this area to upload</div>
26
26
  <div class="hakumi-upload-dragger-hint">Support for a single or bulk upload.</div>
27
27
  </div>
28
28
 
29
29
  <div class="hakumi-upload-dragger-action">
30
- <%= render Hakumi::Button::Component.new(
30
+ <%= render HakumiComponents::Button::Component.new(
31
31
  type: :primary,
32
32
  disabled: @disabled,
33
33
  data: { action: "click->hakumi--upload#triggerInput:stop" }
@@ -38,7 +38,7 @@
38
38
  </div>
39
39
  <% elsif !inline_trigger? %>
40
40
  <div class="hakumi-upload-select">
41
- <%= render Hakumi::Button::Component.new(
41
+ <%= render HakumiComponents::Button::Component.new(
42
42
  type: :primary,
43
43
  disabled: @disabled,
44
44
  data: { action: "click->hakumi--upload#triggerInput" }
@@ -67,14 +67,14 @@
67
67
  class="hakumi-upload-list-item-action hakumi-upload-list-item-view"
68
68
  data-action="click->hakumi--upload#previewFromEvent"
69
69
  data-uid="<%= file[:uid] %>">
70
- <%= render Hakumi::Icon::Component.new(name: :eye) %>
70
+ <%= render HakumiComponents::Icon::Component.new(name: :eye) %>
71
71
  </button>
72
72
  <% end %>
73
73
  <button type="button"
74
74
  class="hakumi-upload-list-item-action hakumi-upload-list-item-remove"
75
75
  data-action="click->hakumi--upload#removeFromEvent"
76
76
  data-uid="<%= file[:uid] %>">
77
- <%= render Hakumi::Icon::Component.new(name: :delete) %>
77
+ <%= render HakumiComponents::Icon::Component.new(name: :delete) %>
78
78
  </button>
79
79
  </div>
80
80
  <% end %>
@@ -88,14 +88,14 @@
88
88
  class="hakumi-upload-list-item-action hakumi-upload-list-item-view"
89
89
  data-action="click->hakumi--upload#previewFromEvent"
90
90
  data-uid="<%= file[:uid] %>">
91
- <%= render Hakumi::Icon::Component.new(name: :eye) %>
91
+ <%= render HakumiComponents::Icon::Component.new(name: :eye) %>
92
92
  </button>
93
93
  <% end %>
94
94
  <button type="button"
95
95
  class="hakumi-upload-list-item-action hakumi-upload-list-item-remove"
96
96
  data-action="click->hakumi--upload#removeFromEvent"
97
97
  data-uid="<%= file[:uid] %>">
98
- <%= render Hakumi::Icon::Component.new(name: :delete) %>
98
+ <%= render HakumiComponents::Icon::Component.new(name: :delete) %>
99
99
  </button>
100
100
  </div>
101
101
  <% end %>
@@ -108,7 +108,7 @@
108
108
 
109
109
  <% if inline_trigger? %>
110
110
  <li class="hakumi-upload-list-item-trigger" data-hakumi--upload-target="inlineTrigger" data-action="click->hakumi--upload#triggerInput">
111
- <%= render Hakumi::Icon::Component.new(name: :plus, size: 24) %>
111
+ <%= render HakumiComponents::Icon::Component.new(name: :plus, size: 24) %>
112
112
  <span>Upload</span>
113
113
  </li>
114
114
  <% end %>
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module Upload
5
5
  # Hakumi Upload component
6
6
  # Provides file selection, drag-and-drop, and upload list management.
7
- class Component < Hakumi::BaseComponent
7
+ class Component < HakumiComponents::BaseComponent
8
8
  LIST_TYPES = %i[text picture picture_card avatar].freeze
9
9
 
10
10
  def initialize(
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  class ComponentsController < ApplicationController
5
5
  COMPONENTS = %i[modal confirm alert drawer message admin_panel notification popconfirm popover result skeleton spin affix qr_code segmented statistic table tag timeline tree].freeze
6
6
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  # Custom FormBuilder that renders Hakumi components for form inputs.
5
5
  # Extends Rails' ActionView::Helpers::FormBuilder to integrate seamlessly with Rails forms.
6
6
  # Includes automatic detection of validations, I18n labels, and attribute introspection.
@@ -20,7 +20,7 @@ module Hakumi
20
20
  # @return [String] Rendered HTML
21
21
  def text_field(method, **options)
22
22
  enhance_options_with_introspection!(method, options)
23
- render_form_field(Hakumi::Input::Component, method, **options)
23
+ render_form_field(HakumiComponents::Input::Component, method, **options)
24
24
  end
25
25
 
26
26
  # Renders a Hakumi password input field with visibility toggle
@@ -30,7 +30,7 @@ module Hakumi
30
30
  # @return [String] Rendered HTML
31
31
  def password_field(method, **options)
32
32
  enhance_options_with_introspection!(method, options)
33
- render_form_field(Hakumi::Input::Password::Component, method, **options)
33
+ render_form_field(HakumiComponents::Input::Password::Component, method, **options)
34
34
  end
35
35
 
36
36
  # Renders a Hakumi textarea field
@@ -40,7 +40,7 @@ module Hakumi
40
40
  # @return [String] Rendered HTML
41
41
  def text_area(method, **options)
42
42
  enhance_options_with_introspection!(method, options)
43
- render_form_field(Hakumi::Input::TextArea::Component, method, **options)
43
+ render_form_field(HakumiComponents::Input::TextArea::Component, method, **options)
44
44
  end
45
45
 
46
46
  # Renders a Hakumi number input field
@@ -50,7 +50,7 @@ module Hakumi
50
50
  # @return [String] Rendered HTML
51
51
  def number_field(method, **options)
52
52
  enhance_options_with_introspection!(method, options)
53
- render_form_field(Hakumi::InputNumber::Component, method, **options)
53
+ render_form_field(HakumiComponents::InputNumber::Component, method, **options)
54
54
  end
55
55
 
56
56
  # Renders a Hakumi select field
@@ -64,7 +64,7 @@ module Hakumi
64
64
  enhance_options_with_introspection!(method, options)
65
65
 
66
66
  render_form_field(
67
- Hakumi::Select::Component,
67
+ HakumiComponents::Select::Component,
68
68
  method,
69
69
  **options.merge(options: choices)
70
70
  )
@@ -81,7 +81,7 @@ module Hakumi
81
81
  enhance_options_with_introspection!(method, options)
82
82
 
83
83
  render_form_field(
84
- Hakumi::TreeSelect::Component,
84
+ HakumiComponents::TreeSelect::Component,
85
85
  method,
86
86
  **options.merge(options: choices)
87
87
  )
@@ -109,7 +109,7 @@ module Hakumi
109
109
  config[:checked] = checked
110
110
 
111
111
  render_form_field(
112
- Hakumi::Radio::Component,
112
+ HakumiComponents::Radio::Component,
113
113
  method,
114
114
  config_overrides: config,
115
115
  **options
@@ -136,7 +136,7 @@ module Hakumi
136
136
  end
137
137
 
138
138
  render_form_field(
139
- Hakumi::Radio::Group::Component,
139
+ HakumiComponents::Radio::Group::Component,
140
140
  method,
141
141
  **options.merge(options: radio_options)
142
142
  )
@@ -155,7 +155,7 @@ module Hakumi
155
155
  checked = value ? true : false
156
156
 
157
157
  render_form_field(
158
- Hakumi::Switch::Component,
158
+ HakumiComponents::Switch::Component,
159
159
  method,
160
160
  config_overrides: { checked: checked },
161
161
  **options
@@ -169,7 +169,7 @@ module Hakumi
169
169
  # @return [String] Rendered HTML
170
170
  def rate_field(method, **options)
171
171
  enhance_options_with_introspection!(method, options)
172
- render_form_field(Hakumi::Rate::Component, method, **options)
172
+ render_form_field(HakumiComponents::Rate::Component, method, **options)
173
173
  end
174
174
 
175
175
  # Renders a Hakumi slider field
@@ -183,7 +183,7 @@ module Hakumi
183
183
  config = field_configuration(method, options)
184
184
 
185
185
  render_form_field(
186
- Hakumi::Slider::Component,
186
+ HakumiComponents::Slider::Component,
187
187
  method,
188
188
  config_overrides: config,
189
189
  **options
@@ -197,7 +197,7 @@ module Hakumi
197
197
  # @return [String] Rendered HTML
198
198
  def date_picker(method, **options)
199
199
  enhance_options_with_introspection!(method, options)
200
- render_form_field(Hakumi::DatePicker::Component, method, **options)
200
+ render_form_field(HakumiComponents::DatePicker::Component, method, **options)
201
201
  end
202
202
 
203
203
  # Renders a Hakumi mentions field (textarea with @ mention suggestions)
@@ -216,7 +216,7 @@ module Hakumi
216
216
  mention_options = options.delete(:options) || []
217
217
 
218
218
  render_form_field(
219
- Hakumi::Mentions::Component,
219
+ HakumiComponents::Mentions::Component,
220
220
  method,
221
221
  **options.merge(options: mention_options)
222
222
  )
@@ -233,7 +233,7 @@ module Hakumi
233
233
  enhance_options_with_introspection!(method, options)
234
234
 
235
235
  render_form_field(
236
- Hakumi::Autocomplete::Component,
236
+ HakumiComponents::Autocomplete::Component,
237
237
  method,
238
238
  **options.merge(options: choices)
239
239
  )
@@ -250,7 +250,7 @@ module Hakumi
250
250
  enhance_options_with_introspection!(method, options)
251
251
 
252
252
  render_form_field(
253
- Hakumi::Cascader::Component,
253
+ HakumiComponents::Cascader::Component,
254
254
  method,
255
255
  **options.merge(options: choices)
256
256
  )
@@ -269,7 +269,7 @@ module Hakumi
269
269
  checked = value ? true : false
270
270
 
271
271
  render_form_field(
272
- Hakumi::Checkbox::Component,
272
+ HakumiComponents::Checkbox::Component,
273
273
  method,
274
274
  config_overrides: { checked: checked },
275
275
  **options
@@ -283,7 +283,7 @@ module Hakumi
283
283
  # @return [String] Rendered HTML
284
284
  def color_picker_field(method, **options)
285
285
  enhance_options_with_introspection!(method, options)
286
- render_form_field(Hakumi::ColorPicker::Component, method, **options)
286
+ render_form_field(HakumiComponents::ColorPicker::Component, method, **options)
287
287
  end
288
288
 
289
289
  # Renders a Hakumi time picker field
@@ -293,7 +293,7 @@ module Hakumi
293
293
  # @return [String] Rendered HTML
294
294
  def time_picker_field(method, **options)
295
295
  enhance_options_with_introspection!(method, options)
296
- render_form_field(Hakumi::TimePicker::Component, method, **options)
296
+ render_form_field(HakumiComponents::TimePicker::Component, method, **options)
297
297
  end
298
298
 
299
299
  # Renders a Hakumi transfer field (dual list box)
@@ -307,7 +307,7 @@ module Hakumi
307
307
  enhance_options_with_introspection!(method, options)
308
308
 
309
309
  render_form_field(
310
- Hakumi::Transfer::Component,
310
+ HakumiComponents::Transfer::Component,
311
311
  method,
312
312
  **options.merge(data_source: data_source)
313
313
  )
@@ -325,7 +325,7 @@ module Hakumi
325
325
  # Upload requires action parameter
326
326
  raise ArgumentError, "action parameter is required for upload_field" unless options[:action]
327
327
 
328
- render_form_field(Hakumi::Upload::Component, method, **options)
328
+ render_form_field(HakumiComponents::Upload::Component, method, **options)
329
329
  end
330
330
 
331
331
  # Renders a Hakumi submit button
@@ -343,7 +343,7 @@ module Hakumi
343
343
  loading = options.delete(:loading) || false
344
344
  danger = options.delete(:danger) || false
345
345
 
346
- @template.render(Hakumi::Button::Component.new(
346
+ @template.render(HakumiComponents::Button::Component.new(
347
347
  type: button_type,
348
348
  size: button_size,
349
349
  html_type: :submit,
@@ -389,50 +389,50 @@ module Hakumi
389
389
 
390
390
  # Auto-detect label from I18n (if not provided)
391
391
  if options[:label].nil?
392
- detected_label = Hakumi::Rails::AttributeIntrospection.human_attribute_name(@object, method)
392
+ detected_label = HakumiComponents::Rails::AttributeIntrospection.human_attribute_name(@object, method)
393
393
  options[:label] = detected_label if detected_label
394
394
  end
395
395
 
396
396
  # Auto-detect required for UI purposes (asterisk display) - NOT for HTML5 validation
397
397
  if options[:required].nil?
398
- options[:required] = Hakumi::Rails::ValidationIntrospection.required?(@object, method)
398
+ options[:required] = HakumiComponents::Rails::ValidationIntrospection.required?(@object, method)
399
399
  end
400
400
 
401
401
  # Auto-detect placeholder from I18n (if not provided)
402
402
  if options[:placeholder].nil?
403
- detected_placeholder = Hakumi::Rails::AttributeIntrospection.placeholder(@object, method)
403
+ detected_placeholder = HakumiComponents::Rails::AttributeIntrospection.placeholder(@object, method)
404
404
  options[:placeholder] = detected_placeholder if detected_placeholder
405
405
  end
406
406
 
407
407
  # Auto-detect caption (hint) from I18n (if not provided)
408
408
  if options[:caption].nil?
409
- detected_hint = Hakumi::Rails::AttributeIntrospection.hint(@object, method)
409
+ detected_hint = HakumiComponents::Rails::AttributeIntrospection.hint(@object, method)
410
410
  options[:caption] = detected_hint if detected_hint
411
411
  end
412
412
 
413
413
  # Auto-generate frontend validation rules from Rails validations
414
414
  # If manual rules are provided, merge them with auto-detected rules
415
415
  # Manual rules take priority over auto-detected ones for the same validation type
416
- detected_rules = Hakumi::Rails::ValidationMapper.to_frontend_rules(@object, method)
416
+ detected_rules = HakumiComponents::Rails::ValidationMapper.to_frontend_rules(@object, method)
417
417
  manual_rules = options[:rules]
418
418
 
419
419
  if manual_rules.nil?
420
420
  options[:rules] = detected_rules unless detected_rules.empty?
421
421
  elsif !detected_rules.empty?
422
422
  # Merge manual and auto-detected rules, with manual rules taking priority
423
- options[:rules] = Hakumi::Rails::ValidationMapper.merge_rules(manual_rules, detected_rules)
423
+ options[:rules] = HakumiComponents::Rails::ValidationMapper.merge_rules(manual_rules, detected_rules)
424
424
  end
425
425
  # If manual_rules is present but detected_rules is empty, keep manual_rules as-is
426
426
 
427
427
  # Auto-detect input type based on attribute name and validations (if not provided)
428
428
  if options[:type].nil?
429
- if Hakumi::Rails::ValidationIntrospection.email_field?(@object, method)
429
+ if HakumiComponents::Rails::ValidationIntrospection.email_field?(@object, method)
430
430
  options[:type] = :email
431
- elsif Hakumi::Rails::ValidationIntrospection.url_field?(@object, method)
431
+ elsif HakumiComponents::Rails::ValidationIntrospection.url_field?(@object, method)
432
432
  options[:type] = :url
433
433
  else
434
434
  # Fallback to column type
435
- detected_type = Hakumi::Rails::AttributeIntrospection.input_type_from_column(@object, method)
435
+ detected_type = HakumiComponents::Rails::AttributeIntrospection.input_type_from_column(@object, method)
436
436
  options[:type] = detected_type if detected_type && detected_type != :text
437
437
  end
438
438
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module FormHelper
5
5
  # Creates a form that uses Hakumi components.
6
- # This is a wrapper around Rails' form_with that automatically sets the Hakumi::FormBuilder.
6
+ # This is a wrapper around Rails' form_with that automatically sets the HakumiComponents::FormBuilder.
7
7
  #
8
8
  # @example Basic usage
9
9
  # <%= hakumi_form_with(model: @user) do |f| %>
@@ -20,11 +20,11 @@ module Hakumi
20
20
  # @option options [Object] :model Model object for the form
21
21
  # @option options [String] :url URL to submit the form to
22
22
  # @option options [Symbol] :method HTTP method (:get, :post, :patch, :delete)
23
- # @option options [Class] :builder Custom form builder (defaults to Hakumi::FormBuilder)
23
+ # @option options [Class] :builder Custom form builder (defaults to HakumiComponents::FormBuilder)
24
24
  # @option options [Symbol] :layout Form layout (:horizontal, :vertical, :inline)
25
25
  # @return [String] HTML form
26
26
  def hakumi_form_with(**options, &block)
27
- options[:builder] ||= Hakumi::FormBuilder
27
+ options[:builder] ||= HakumiComponents::FormBuilder
28
28
 
29
29
  layout = options.delete(:layout)
30
30
  if layout
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HakumiComponents
4
+ class ComponentHandler
5
+ def initialize(component, params)
6
+ @component = component.to_sym
7
+ @params = params
8
+ end
9
+
10
+ def locals
11
+ base_locals.merge(specific_locals)
12
+ end
13
+
14
+ private
15
+
16
+ def base_locals
17
+ {
18
+ id: @params[:id].presence || "hakumi-#{@component}-#{SecureRandom.hex(4)}"
19
+ }
20
+ end
21
+
22
+ def specific_locals
23
+ component_class = resolve_component_class
24
+ return {} unless component_class.respond_to?(:extract_controller_locals)
25
+
26
+ component_class.extract_controller_locals(@params)
27
+ end
28
+
29
+ def resolve_component_class
30
+ case @component
31
+ when :modal then HakumiComponents::Modal::Component
32
+ when :confirm then HakumiComponents::Modal::Confirm::Component
33
+ when :alert then HakumiComponents::Alert::Component
34
+ when :drawer then HakumiComponents::Drawer::Component
35
+ when :message then HakumiComponents::Message::Component
36
+ when :notification then HakumiComponents::Notification::Component
37
+ when :popover then HakumiComponents::Popover::Component
38
+ when :progress then HakumiComponents::Progress::Component
39
+ when :result then HakumiComponents::Result::Component
40
+ when :skeleton then HakumiComponents::Skeleton::Component
41
+ when :spin then HakumiComponents::Spin::Component
42
+ when :qr_code then HakumiComponents::QrCode::Component
43
+ when :affix then HakumiComponents::Affix::Component
44
+ when :segmented then HakumiComponents::Segmented::Component
45
+ when :statistic then HakumiComponents::Statistic::Component
46
+ when :tag then HakumiComponents::Tag::Component
47
+ when :timeline then HakumiComponents::Timeline::Component
48
+ when :tree then HakumiComponents::Tree::Component
49
+ else nil
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module Icon
5
5
  # Loads Ant Design icons from lib/hakumi_components/app/assets/icons
6
6
  class Loader
7
- ICONS_BASE_PATH = if defined?(Hakumi::Engine)
8
- Hakumi::Engine.root.join("app", "assets", "icons")
7
+ ICONS_BASE_PATH = if defined?(HakumiComponents::Engine)
8
+ HakumiComponents::Engine.root.join("app", "assets", "icons")
9
9
  else
10
10
  Rails.root.join("app", "assets", "icons")
11
11
  end
@@ -92,4 +92,4 @@ module Hakumi
92
92
  end
93
93
  end
94
94
  end
95
- HakumiIconLoader = Hakumi::Icon::Loader unless defined?(HakumiIconLoader)
95
+ HakumiIconLoader = HakumiComponents::Icon::Loader unless defined?(HakumiIconLoader)
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Hakumi
3
+ module HakumiComponents
4
4
  module Illustrations
5
5
  # Loads SVG illustrations stored under lib/hakumi_components/app/assets/illustrations
6
6
  class Loader
7
- ILLUSTRATIONS_PATH = if defined?(Hakumi::Engine)
8
- Hakumi::Engine.root.join("app", "assets", "illustrations")
7
+ ILLUSTRATIONS_PATH = if defined?(HakumiComponents::Engine)
8
+ HakumiComponents::Engine.root.join("app", "assets", "illustrations")
9
9
  else
10
10
  Rails.root.join("lib", "hakumi_components", "app", "assets", "illustrations")
11
11
  end
@@ -40,4 +40,4 @@ module Hakumi
40
40
  end
41
41
  end
42
42
  end
43
- HakumiIllustrationLoader = Hakumi::Illustrations::Loader unless defined?(HakumiIllustrationLoader)
43
+ HakumiIllustrationLoader = HakumiComponents::Illustrations::Loader unless defined?(HakumiIllustrationLoader)
@@ -1 +1 @@
1
- <%= render Hakumi::AdminPanel::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::AdminPanel::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Affix::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Affix::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Alert::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Alert::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Modal::Confirm::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Modal::Confirm::Component.new(**local_assigns) %>
@@ -1,4 +1,4 @@
1
- <%= render Hakumi::Drawer::Component.new(
1
+ <%= render HakumiComponents::Drawer::Component.new(
2
2
  id: local_assigns[:id],
3
3
  open: local_assigns[:open],
4
4
  placement: local_assigns[:placement] || :right,
@@ -1 +1 @@
1
- <%= render Hakumi::Message::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Message::Component.new(**local_assigns) %>
@@ -7,7 +7,7 @@
7
7
  component_params = local_assigns.except(:title, :message).compact
8
8
  %>
9
9
 
10
- <%= render(Hakumi::Modal::Component.new(**component_params)) do |modal| %>
10
+ <%= render(HakumiComponents::Modal::Component.new(**component_params)) do |modal| %>
11
11
  <% if title.present? %>
12
12
  <% modal.with_header { title } %>
13
13
  <% end %>
@@ -1 +1 @@
1
- <%= render Hakumi::Notification::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Notification::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Popconfirm::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Popconfirm::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Popover::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Popover::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::QrCode::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::QrCode::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Result::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Result::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Segmented::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Segmented::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Skeleton::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Skeleton::Component.new(**local_assigns) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Spin::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Spin::Component.new(**local_assigns) %>
@@ -1,4 +1,4 @@
1
- <%= render Hakumi::Statistic::Component.new(
1
+ <%= render HakumiComponents::Statistic::Component.new(
2
2
  id: id,
3
3
  title: title,
4
4
  value: value,
@@ -1 +1 @@
1
- <%= render Hakumi::Table::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Table::Component.new(**local_assigns) %>
@@ -1,3 +1,3 @@
1
- <%= render Hakumi::Tag::Component.new(**local_assigns.except(:content)) do %>
1
+ <%= render HakumiComponents::Tag::Component.new(**local_assigns.except(:content)) do %>
2
2
  <%= local_assigns[:content] %>
3
3
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <% timeline_locals = local_assigns.except(:items) %>
2
2
  <% timeline_items = Array(local_assigns[:items]) %>
3
3
 
4
- <%= render Hakumi::Timeline::Component.new(**timeline_locals) do |timeline| %>
4
+ <%= render HakumiComponents::Timeline::Component.new(**timeline_locals) do |timeline| %>
5
5
  <% timeline_items.each do |item| %>
6
6
  <% item = item.with_indifferent_access %>
7
7
  <% content = item.delete(:content) || item.delete(:body) %>
@@ -1 +1 @@
1
- <%= render Hakumi::Tree::Component.new(**local_assigns) %>
1
+ <%= render HakumiComponents::Tree::Component.new(**local_assigns) %>