hakumi_components 0.1.18.pre → 0.1.19.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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -2
  3. data/README.md +208 -381
  4. data/app/assets/javascripts/hakumi_components.js +40 -34
  5. data/app/assets/stylesheets/hakumi_components.css +1 -1
  6. data/app/components/hakumi_components/admin_panel/component.rb +19 -9
  7. data/app/components/hakumi_components/affix/component.rb +54 -30
  8. data/app/components/hakumi_components/alert/component.html.erb +2 -2
  9. data/app/components/hakumi_components/alert/component.rb +68 -18
  10. data/app/components/hakumi_components/anchor/component.rb +35 -27
  11. data/app/components/hakumi_components/anchor/link/component.html.erb +1 -1
  12. data/app/components/hakumi_components/anchor/link/component.rb +28 -9
  13. data/app/components/hakumi_components/autocomplete/component.html.erb +86 -66
  14. data/app/components/hakumi_components/autocomplete/component.rb +115 -89
  15. data/app/components/hakumi_components/avatar/component.rb +45 -12
  16. data/app/components/hakumi_components/badge/component.rb +99 -45
  17. data/app/components/hakumi_components/base_component.rb +290 -91
  18. data/app/components/hakumi_components/breadcrumb/component.rb +16 -5
  19. data/app/components/hakumi_components/breadcrumb/item/component.html.erb +5 -5
  20. data/app/components/hakumi_components/breadcrumb/item/component.rb +56 -8
  21. data/app/components/hakumi_components/breadcrumb/item/menu_entry.rb +71 -0
  22. data/app/components/hakumi_components/button/component.rb +62 -20
  23. data/app/components/hakumi_components/calendar/component.html.erb +19 -19
  24. data/app/components/hakumi_components/calendar/component.rb +225 -202
  25. data/app/components/hakumi_components/calendar/day_cell.rb +62 -0
  26. data/app/components/hakumi_components/calendar/display_model.rb +237 -0
  27. data/app/components/hakumi_components/calendar/event_entry.rb +54 -0
  28. data/app/components/hakumi_components/calendar/locale_pack.rb +28 -0
  29. data/app/components/hakumi_components/calendar/panel_entry.rb +48 -0
  30. data/app/components/hakumi_components/calendar/week_row.rb +28 -0
  31. data/app/components/hakumi_components/card/component.html.erb +2 -2
  32. data/app/components/hakumi_components/card/component.rb +76 -49
  33. data/app/components/hakumi_components/card/grid/component.html.erb +1 -1
  34. data/app/components/hakumi_components/card/grid/component.rb +23 -17
  35. data/app/components/hakumi_components/card/meta/component.html.erb +8 -8
  36. data/app/components/hakumi_components/card/meta/component.rb +42 -24
  37. data/app/components/hakumi_components/carousel/autoplay_config.rb +27 -0
  38. data/app/components/hakumi_components/carousel/component.rb +85 -67
  39. data/app/components/hakumi_components/carousel/dots_config.rb +36 -0
  40. data/app/components/hakumi_components/cascader/component.html.erb +54 -36
  41. data/app/components/hakumi_components/cascader/component.rb +111 -62
  42. data/app/components/hakumi_components/checkbox/component.html.erb +5 -5
  43. data/app/components/hakumi_components/checkbox/component.rb +40 -6
  44. data/app/components/hakumi_components/checkbox/group/component.html.erb +4 -4
  45. data/app/components/hakumi_components/checkbox/group/component.rb +40 -13
  46. data/app/components/hakumi_components/checkbox/group/option.rb +34 -0
  47. data/app/components/hakumi_components/collapse/component.rb +64 -48
  48. data/app/components/hakumi_components/collapse/panel/component.rb +64 -21
  49. data/app/components/hakumi_components/color_picker/component.html.erb +21 -22
  50. data/app/components/hakumi_components/color_picker/component.rb +159 -49
  51. data/app/components/hakumi_components/color_picker/preset_group.rb +27 -0
  52. data/app/components/hakumi_components/concerns/form_field.rb +169 -68
  53. data/app/components/hakumi_components/concerns/form_field_contract.rb +57 -0
  54. data/app/components/hakumi_components/concerns/form_field_interface.rb +16 -0
  55. data/app/components/hakumi_components/concerns/input_control.rb +111 -0
  56. data/app/components/hakumi_components/concerns/input_control_contract.rb +47 -0
  57. data/app/components/hakumi_components/concerns/input_control_interface.rb +34 -0
  58. data/app/components/hakumi_components/concerns/selection_control.rb +122 -0
  59. data/app/components/hakumi_components/concerns/selection_control_contract.rb +47 -0
  60. data/app/components/hakumi_components/concerns/selection_control_interface.rb +34 -0
  61. data/app/components/hakumi_components/container/component.rb +29 -14
  62. data/app/components/hakumi_components/date_picker/component.html.erb +1 -3
  63. data/app/components/hakumi_components/date_picker/component.rb +130 -16
  64. data/app/components/hakumi_components/date_picker/range_picker.rb +159 -28
  65. data/app/components/hakumi_components/date_picker/shared_rendering.rb +151 -61
  66. data/app/components/hakumi_components/descriptions/component.html.erb +6 -6
  67. data/app/components/hakumi_components/descriptions/component.rb +98 -61
  68. data/app/components/hakumi_components/descriptions/item/component.rb +32 -8
  69. data/app/components/hakumi_components/divider/component.rb +36 -16
  70. data/app/components/hakumi_components/drawer/component.html.erb +2 -2
  71. data/app/components/hakumi_components/drawer/component.rb +112 -29
  72. data/app/components/hakumi_components/dropdown/component.rb +32 -35
  73. data/app/components/hakumi_components/dropdown/divider/component.rb +4 -0
  74. data/app/components/hakumi_components/dropdown/item/component.rb +42 -16
  75. data/app/components/hakumi_components/empty/component.rb +66 -31
  76. data/app/components/hakumi_components/flex/component.rb +39 -21
  77. data/app/components/hakumi_components/float_button/back_top/component.rb +35 -28
  78. data/app/components/hakumi_components/float_button/component.rb +161 -75
  79. data/app/components/hakumi_components/float_button/group/component.rb +85 -98
  80. data/app/components/hakumi_components/float_button/group_cluster/component.rb +46 -54
  81. data/app/components/hakumi_components/float_button/group_spec.rb +259 -0
  82. data/app/components/hakumi_components/float_button/item_spec.rb +115 -0
  83. data/app/components/hakumi_components/float_button/position_config.rb +68 -0
  84. data/app/components/hakumi_components/form/item/component.rb +34 -27
  85. data/app/components/hakumi_components/grid/col/component.rb +88 -17
  86. data/app/components/hakumi_components/grid/row/component.rb +35 -17
  87. data/app/components/hakumi_components/icon/component.rb +49 -49
  88. data/app/components/hakumi_components/image/component.html.erb +7 -7
  89. data/app/components/hakumi_components/image/component.rb +103 -40
  90. data/app/components/hakumi_components/image/preview_group/component.html.erb +1 -1
  91. data/app/components/hakumi_components/image/preview_group/component.rb +41 -36
  92. data/app/components/hakumi_components/image/preview_group/item.rb +48 -0
  93. data/app/components/hakumi_components/input/component.html.erb +1 -1
  94. data/app/components/hakumi_components/input/component.rb +142 -66
  95. data/app/components/hakumi_components/input/password/component.rb +30 -41
  96. data/app/components/hakumi_components/input/text_area/component.html.erb +2 -2
  97. data/app/components/hakumi_components/input/text_area/component.rb +89 -42
  98. data/app/components/hakumi_components/input_number/component.html.erb +5 -5
  99. data/app/components/hakumi_components/input_number/component.rb +137 -55
  100. data/app/components/hakumi_components/layout/component.html.erb +1 -1
  101. data/app/components/hakumi_components/layout/component.rb +23 -16
  102. data/app/components/hakumi_components/layout/content/component.html.erb +1 -1
  103. data/app/components/hakumi_components/layout/content/component.rb +24 -14
  104. data/app/components/hakumi_components/layout/footer/component.html.erb +1 -1
  105. data/app/components/hakumi_components/layout/footer/component.rb +24 -14
  106. data/app/components/hakumi_components/layout/header/component.html.erb +1 -1
  107. data/app/components/hakumi_components/layout/header/component.rb +24 -14
  108. data/app/components/hakumi_components/layout/sider/component.html.erb +1 -1
  109. data/app/components/hakumi_components/layout/sider/component.rb +83 -49
  110. data/app/components/hakumi_components/mentions/coercion.rb +46 -0
  111. data/app/components/hakumi_components/mentions/component.html.erb +6 -6
  112. data/app/components/hakumi_components/mentions/component.rb +131 -67
  113. data/app/components/hakumi_components/mentions/option.rb +30 -0
  114. data/app/components/hakumi_components/menu/component.rb +50 -59
  115. data/app/components/hakumi_components/menu/divider/component.rb +4 -0
  116. data/app/components/hakumi_components/menu/group/component.rb +16 -15
  117. data/app/components/hakumi_components/menu/item/component.rb +42 -19
  118. data/app/components/hakumi_components/menu/sub_menu/component.rb +49 -37
  119. data/app/components/hakumi_components/message/component.rb +62 -27
  120. data/app/components/hakumi_components/modal/component.html.erb +6 -6
  121. data/app/components/hakumi_components/modal/component.rb +93 -40
  122. data/app/components/hakumi_components/modal/confirm/component.html.erb +2 -2
  123. data/app/components/hakumi_components/modal/confirm/component.rb +49 -8
  124. data/app/components/hakumi_components/modal/error/component.rb +8 -39
  125. data/app/components/hakumi_components/modal/info/component.rb +6 -40
  126. data/app/components/hakumi_components/modal/status_component.rb +150 -0
  127. data/app/components/hakumi_components/modal/success/component.rb +6 -40
  128. data/app/components/hakumi_components/modal/warning/component.rb +14 -44
  129. data/app/components/hakumi_components/notification/component.rb +72 -38
  130. data/app/components/hakumi_components/pagination/component.html.erb +7 -11
  131. data/app/components/hakumi_components/pagination/component.rb +105 -72
  132. data/app/components/hakumi_components/pagination/page_item.rb +49 -0
  133. data/app/components/hakumi_components/popconfirm/component.rb +67 -19
  134. data/app/components/hakumi_components/popover/component.html.erb +2 -2
  135. data/app/components/hakumi_components/popover/component.rb +102 -38
  136. data/app/components/hakumi_components/progress/attribute_renderer.rb +354 -0
  137. data/app/components/hakumi_components/progress/circle_geometry.rb +76 -0
  138. data/app/components/hakumi_components/progress/component.html.erb +18 -17
  139. data/app/components/hakumi_components/progress/component.rb +230 -402
  140. data/app/components/hakumi_components/progress/controller_locals_parser.rb +130 -0
  141. data/app/components/hakumi_components/progress/info_tooltip_policy.rb +39 -0
  142. data/app/components/hakumi_components/progress/info_value.rb +75 -0
  143. data/app/components/hakumi_components/progress/status_state.rb +31 -0
  144. data/app/components/hakumi_components/progress/steps_renderer.rb +149 -0
  145. data/app/components/hakumi_components/progress/stroke_gradient_value.rb +90 -0
  146. data/app/components/hakumi_components/qr_code/component.rb +138 -72
  147. data/app/components/hakumi_components/radio/component.html.erb +3 -3
  148. data/app/components/hakumi_components/radio/component.rb +42 -9
  149. data/app/components/hakumi_components/radio/group/component.html.erb +9 -9
  150. data/app/components/hakumi_components/radio/group/component.rb +76 -27
  151. data/app/components/hakumi_components/radio/group/option.rb +43 -0
  152. data/app/components/hakumi_components/rate/component.html.erb +1 -1
  153. data/app/components/hakumi_components/rate/component.rb +55 -9
  154. data/app/components/hakumi_components/result/component.rb +87 -37
  155. data/app/components/hakumi_components/segmented/component.html.erb +1 -1
  156. data/app/components/hakumi_components/segmented/component.rb +81 -118
  157. data/app/components/hakumi_components/segmented/option.rb +191 -0
  158. data/app/components/hakumi_components/select/component.html.erb +19 -19
  159. data/app/components/hakumi_components/select/component.rb +88 -37
  160. data/app/components/hakumi_components/selection_control/coercion.rb +161 -0
  161. data/app/components/hakumi_components/selection_control/entry.rb +22 -0
  162. data/app/components/hakumi_components/selection_control/option.rb +42 -0
  163. data/app/components/hakumi_components/selection_control/option_group.rb +34 -0
  164. data/app/components/hakumi_components/selection_control/tree_node.rb +123 -0
  165. data/app/components/hakumi_components/skeleton/avatar/component.rb +36 -14
  166. data/app/components/hakumi_components/skeleton/avatar_config.rb +79 -0
  167. data/app/components/hakumi_components/skeleton/button/component.rb +32 -14
  168. data/app/components/hakumi_components/skeleton/component.rb +79 -93
  169. data/app/components/hakumi_components/skeleton/image/component.rb +46 -22
  170. data/app/components/hakumi_components/skeleton/input/component.rb +25 -10
  171. data/app/components/hakumi_components/skeleton/node/component.rb +23 -7
  172. data/app/components/hakumi_components/skeleton/paragraph_config.rb +92 -0
  173. data/app/components/hakumi_components/skeleton/title_config.rb +31 -0
  174. data/app/components/hakumi_components/slider/component.html.erb +11 -11
  175. data/app/components/hakumi_components/slider/component.rb +172 -53
  176. data/app/components/hakumi_components/slider/mark.rb +27 -0
  177. data/app/components/hakumi_components/space/compact/component.html.erb +1 -3
  178. data/app/components/hakumi_components/space/compact/component.rb +35 -19
  179. data/app/components/hakumi_components/space/component.html.erb +1 -1
  180. data/app/components/hakumi_components/space/component.rb +75 -39
  181. data/app/components/hakumi_components/spin/component.rb +92 -31
  182. data/app/components/hakumi_components/splitter/component.html.erb +9 -3
  183. data/app/components/hakumi_components/splitter/component.rb +55 -22
  184. data/app/components/hakumi_components/splitter/panel/component.html.erb +1 -3
  185. data/app/components/hakumi_components/splitter/panel/component.rb +64 -39
  186. data/app/components/hakumi_components/statistic/component.rb +143 -59
  187. data/app/components/hakumi_components/steps/component.rb +87 -55
  188. data/app/components/hakumi_components/steps/item/component.rb +59 -20
  189. data/app/components/hakumi_components/switch/component.html.erb +2 -3
  190. data/app/components/hakumi_components/switch/component.rb +62 -36
  191. data/app/components/hakumi_components/table/column/component.rb +80 -23
  192. data/app/components/hakumi_components/table/column_definition.rb +181 -0
  193. data/app/components/hakumi_components/table/column_group/component.rb +32 -21
  194. data/app/components/hakumi_components/table/component.html.erb +22 -31
  195. data/app/components/hakumi_components/table/component.rb +248 -509
  196. data/app/components/hakumi_components/table/concerns/attribute_helpers.rb +22 -0
  197. data/app/components/hakumi_components/table/concerns/cell_rendering.rb +277 -0
  198. data/app/components/hakumi_components/table/concerns/columns.rb +293 -91
  199. data/app/components/hakumi_components/table/concerns/editable.rb +36 -89
  200. data/app/components/hakumi_components/table/concerns/ellipsis.rb +31 -30
  201. data/app/components/hakumi_components/table/concerns/fixed_columns.rb +26 -19
  202. data/app/components/hakumi_components/table/concerns/surface_rendering.rb +365 -0
  203. data/app/components/hakumi_components/table/configs.rb +518 -0
  204. data/app/components/hakumi_components/table/definition_types.rb +40 -0
  205. data/app/components/hakumi_components/table/display_rows.rb +56 -0
  206. data/app/components/hakumi_components/table/ellipsis_config.rb +143 -0
  207. data/app/components/hakumi_components/table/fixed_offset.rb +36 -0
  208. data/app/components/hakumi_components/table/header_cell.rb +23 -0
  209. data/app/components/hakumi_components/table/row_record.rb +60 -0
  210. data/app/components/hakumi_components/table/row_render_state.rb +85 -0
  211. data/app/components/hakumi_components/tabs/component.html.erb +8 -8
  212. data/app/components/hakumi_components/tabs/component.rb +114 -64
  213. data/app/components/hakumi_components/tabs/indicator_config.rb +34 -0
  214. data/app/components/hakumi_components/tabs/item/component.rb +73 -13
  215. data/app/components/hakumi_components/tag/component.rb +142 -47
  216. data/app/components/hakumi_components/tag/group/component.rb +18 -6
  217. data/app/components/hakumi_components/time_picker/component.html.erb +8 -8
  218. data/app/components/hakumi_components/time_picker/component.rb +71 -17
  219. data/app/components/hakumi_components/timeline/component.html.erb +3 -2
  220. data/app/components/hakumi_components/timeline/component.rb +188 -55
  221. data/app/components/hakumi_components/timeline/item/component.html.erb +2 -2
  222. data/app/components/hakumi_components/timeline/item/component.rb +121 -60
  223. data/app/components/hakumi_components/tooltip/component.html.erb +1 -1
  224. data/app/components/hakumi_components/tooltip/component.rb +89 -64
  225. data/app/components/hakumi_components/tour/component.rb +74 -49
  226. data/app/components/hakumi_components/tour/step.rb +86 -0
  227. data/app/components/hakumi_components/transfer/coercion.rb +66 -0
  228. data/app/components/hakumi_components/transfer/component.html.erb +171 -140
  229. data/app/components/hakumi_components/transfer/component.rb +232 -82
  230. data/app/components/hakumi_components/transfer/item.rb +54 -0
  231. data/app/components/hakumi_components/transfer/operations.rb +31 -0
  232. data/app/components/hakumi_components/tree/component.rb +219 -400
  233. data/app/components/hakumi_components/tree/concerns/node_rendering.rb +365 -0
  234. data/app/components/hakumi_components/tree/node.rb +276 -0
  235. data/app/components/hakumi_components/tree_select/component.html.erb +23 -9
  236. data/app/components/hakumi_components/tree_select/component.rb +116 -107
  237. data/app/components/hakumi_components/typography/base_component.rb +69 -36
  238. data/app/components/hakumi_components/typography/link/component.rb +63 -6
  239. data/app/components/hakumi_components/typography/paragraph/component.rb +6 -0
  240. data/app/components/hakumi_components/typography/text/component.rb +4 -0
  241. data/app/components/hakumi_components/typography/title/component.rb +61 -6
  242. data/app/components/hakumi_components/upload/component.html.erb +106 -88
  243. data/app/components/hakumi_components/upload/component.rb +222 -48
  244. data/app/components/hakumi_components/upload/file_entry.rb +53 -0
  245. data/app/controllers/hakumi_components/components_controller.rb +2 -1
  246. data/app/form_builders/hakumi_components/form_builder/contracts.rb +55 -0
  247. data/app/form_builders/hakumi_components/form_builder/field_context.rb +43 -0
  248. data/app/form_builders/hakumi_components/form_builder/model_binding.rb +163 -0
  249. data/app/form_builders/hakumi_components/form_builder.rb +238 -317
  250. data/app/helpers/hakumi_components/form_helper.rb +27 -23
  251. data/app/javascript/hakumi_components/controllers/hakumi/admin_panel_controller.js +5 -7
  252. data/app/javascript/hakumi_components/controllers/hakumi/back_top_controller.js +1 -1
  253. data/app/javascript/hakumi_components/controllers/hakumi/button_controller.js +108 -2
  254. data/app/javascript/hakumi_components/controllers/hakumi/calendar_controller.js +183 -95
  255. data/app/javascript/hakumi_components/controllers/hakumi/color_picker_controller.js +23 -285
  256. data/app/javascript/hakumi_components/controllers/hakumi/date_picker_controller.js +274 -262
  257. data/app/javascript/hakumi_components/controllers/hakumi/float_button_group_controller.js +2 -2
  258. data/app/javascript/hakumi_components/controllers/hakumi/message_controller.js +4 -2
  259. data/app/javascript/hakumi_components/controllers/hakumi/modal_controller.js +119 -125
  260. data/app/javascript/hakumi_components/controllers/hakumi/table/editable.js +291 -0
  261. data/app/javascript/hakumi_components/controllers/hakumi/table_controller.js +166 -366
  262. data/app/javascript/hakumi_components/controllers/hakumi/tabs_controller.js +8 -2
  263. data/app/javascript/hakumi_components/controllers/hakumi/tag_controller.js +27 -25
  264. data/app/javascript/hakumi_components/controllers/hakumi/tag_group_controller.js +19 -18
  265. data/app/javascript/hakumi_components/controllers/hakumi/theme_controller.js +116 -117
  266. data/app/javascript/hakumi_components/controllers/hakumi/transfer_controller.js +17 -1
  267. data/app/javascript/hakumi_components/controllers/hakumi/tree_controller.js +363 -78
  268. data/app/javascript/hakumi_components/controllers/hakumi/typography_controller.js +3 -3
  269. data/app/javascript/hakumi_components/controllers/hakumi/upload_controller.js +320 -204
  270. data/app/javascript/hakumi_components/core/render_component.js +37 -11
  271. data/app/javascript/hakumi_components/utils/color_helper.js +262 -0
  272. data/app/javascript/stylesheets/_base.scss +9 -0
  273. data/app/javascript/stylesheets/_hakumi_components.scss +1 -0
  274. data/app/javascript/stylesheets/components/_breadcrumb.scss +2 -2
  275. data/app/javascript/stylesheets/components/_calendar.scss +13 -13
  276. data/app/javascript/stylesheets/components/_cascader.scss +5 -5
  277. data/app/javascript/stylesheets/components/_checkbox.scss +9 -11
  278. data/app/javascript/stylesheets/components/_color_picker.scss +11 -11
  279. data/app/javascript/stylesheets/components/_date_picker.scss +4 -4
  280. data/app/javascript/stylesheets/components/_descriptions.scss +2 -2
  281. data/app/javascript/stylesheets/components/_drawer.scss +3 -3
  282. data/app/javascript/stylesheets/components/_dropdown.scss +2 -2
  283. data/app/javascript/stylesheets/components/_flex.scss +1 -1
  284. data/app/javascript/stylesheets/components/_float_button.scss +5 -5
  285. data/app/javascript/stylesheets/components/_form_item.scss +92 -0
  286. data/app/javascript/stylesheets/components/_image.scss +15 -15
  287. data/app/javascript/stylesheets/components/_input.scss +23 -113
  288. data/app/javascript/stylesheets/components/_layout.scss +27 -26
  289. data/app/javascript/stylesheets/components/_menu.scss +15 -15
  290. data/app/javascript/stylesheets/components/_modal.scss +13 -13
  291. data/app/javascript/stylesheets/components/_notification.scss +3 -3
  292. data/app/javascript/stylesheets/components/_popover.scss +1 -1
  293. data/app/javascript/stylesheets/components/_segmented.scss +3 -3
  294. data/app/javascript/stylesheets/components/_select.scss +6 -6
  295. data/app/javascript/stylesheets/components/_slider.scss +1 -1
  296. data/app/javascript/stylesheets/components/_spin.scss +2 -2
  297. data/app/javascript/stylesheets/components/_steps.scss +10 -10
  298. data/app/javascript/stylesheets/components/_switch.scss +11 -10
  299. data/app/javascript/stylesheets/components/_table.scss +6 -6
  300. data/app/javascript/stylesheets/components/_tag.scss +2 -2
  301. data/app/javascript/stylesheets/components/_tooltip.scss +4 -4
  302. data/app/javascript/stylesheets/components/_tree_select.scss +3 -3
  303. data/app/javascript/stylesheets/components/_typography.scss +3 -3
  304. data/app/javascript/stylesheets/components/_upload.scss +4 -4
  305. data/app/services/hakumi_components/component_handler.rb +95 -24
  306. data/app/services/hakumi_components/icon/loader.rb +84 -67
  307. data/app/services/hakumi_components/illustrations/loader.rb +35 -27
  308. data/app/views/hakumi/_alert.html.erb +4 -1
  309. data/app/views/hakumi/_drawer.html.erb +1 -1
  310. data/app/views/hakumi/_statistic.html.erb +11 -11
  311. data/lib/generators/hakumi_components/install_generator.rb +14 -1
  312. data/lib/hakumi_components/documentation/models.rb +290 -0
  313. data/lib/hakumi_components/documentation/node.rb +73 -0
  314. data/lib/hakumi_components/documentation.rb +139 -62
  315. data/lib/hakumi_components/engine.rb +17 -11
  316. data/lib/hakumi_components/file_size_checker.rb +215 -0
  317. data/lib/hakumi_components/locales/en.yml +115 -0
  318. data/lib/hakumi_components/rails/attribute_introspection.rb +39 -107
  319. data/lib/hakumi_components/rails/model_reflection.rb +154 -0
  320. data/lib/hakumi_components/rails/validation_introspection.rb +25 -73
  321. data/lib/hakumi_components/rails/validation_mapper.rb +148 -201
  322. data/lib/hakumi_components/rails.rb +2 -0
  323. data/lib/hakumi_components/stylesheet_ownership_checker.rb +191 -0
  324. data/lib/hakumi_components/types/form_field.rb +24 -0
  325. data/lib/hakumi_components/types/html.rb +28 -0
  326. data/lib/hakumi_components/types/rendering.rb +10 -0
  327. data/lib/hakumi_components/types/stimulus.rb +19 -0
  328. data/lib/hakumi_components/types/validation.rb +22 -0
  329. data/lib/hakumi_components/types.rb +13 -0
  330. data/lib/hakumi_components/version.rb +2 -1
  331. data/lib/hakumi_components.rb +26 -6
  332. data/lib/tasks/coverage.rake +1 -0
  333. metadata +100 -136
  334. data/sig/action_view/tag_builder.rbs +0 -24
  335. data/sig/active_support/concern_patch.rbs +0 -7
  336. data/sig/generators/hakumi_components/install_generator.rbs +0 -11
  337. data/sig/hakumi_components/admin_panel/component.rbs +0 -28
  338. data/sig/hakumi_components/affix/component.rbs +0 -44
  339. data/sig/hakumi_components/alert/component.rbs +0 -64
  340. data/sig/hakumi_components/anchor/component.rbs +0 -45
  341. data/sig/hakumi_components/anchor/link/component.rbs +0 -31
  342. data/sig/hakumi_components/autocomplete/component.rbs +0 -68
  343. data/sig/hakumi_components/avatar/component.rbs +0 -44
  344. data/sig/hakumi_components/badge/component.rbs +0 -41
  345. data/sig/hakumi_components/base_component.rbs +0 -82
  346. data/sig/hakumi_components/breadcrumb/component.rbs +0 -21
  347. data/sig/hakumi_components/breadcrumb/item/component.rbs +0 -36
  348. data/sig/hakumi_components/button/component.rbs +0 -56
  349. data/sig/hakumi_components/calendar/component.rbs +0 -41
  350. data/sig/hakumi_components/card/component.rbs +0 -50
  351. data/sig/hakumi_components/card/grid/component.rbs +0 -21
  352. data/sig/hakumi_components/card/meta/component.rbs +0 -25
  353. data/sig/hakumi_components/carousel/component.rbs +0 -88
  354. data/sig/hakumi_components/cascader/component.rbs +0 -52
  355. data/sig/hakumi_components/checkbox/component.rbs +0 -46
  356. data/sig/hakumi_components/checkbox/group/component.rbs +0 -34
  357. data/sig/hakumi_components/collapse/component.rbs +0 -57
  358. data/sig/hakumi_components/collapse/panel/component.rbs +0 -47
  359. data/sig/hakumi_components/color_picker/component.rbs +0 -80
  360. data/sig/hakumi_components/concerns/form_field.rbs +0 -89
  361. data/sig/hakumi_components/container/component.rbs +0 -37
  362. data/sig/hakumi_components/date_picker/component.rbs +0 -72
  363. data/sig/hakumi_components/date_picker/range_picker.rbs +0 -68
  364. data/sig/hakumi_components/date_picker/shared_rendering.rbs +0 -41
  365. data/sig/hakumi_components/descriptions/component.rbs +0 -59
  366. data/sig/hakumi_components/descriptions/item/component.rbs +0 -31
  367. data/sig/hakumi_components/divider/component.rbs +0 -39
  368. data/sig/hakumi_components/drawer/component.rbs +0 -66
  369. data/sig/hakumi_components/dropdown/component.rbs +0 -45
  370. data/sig/hakumi_components/dropdown/divider/component.rbs +0 -11
  371. data/sig/hakumi_components/dropdown/item/component.rbs +0 -45
  372. data/sig/hakumi_components/empty/component.rbs +0 -40
  373. data/sig/hakumi_components/flex/component.rbs +0 -47
  374. data/sig/hakumi_components/float_button/back_top/component.rbs +0 -45
  375. data/sig/hakumi_components/float_button/component.rbs +0 -80
  376. data/sig/hakumi_components/float_button/group/component.rbs +0 -95
  377. data/sig/hakumi_components/float_button/group_cluster/component.rbs +0 -60
  378. data/sig/hakumi_components/form/item/component.rbs +0 -39
  379. data/sig/hakumi_components/form_builder.rbs +0 -37
  380. data/sig/hakumi_components/grid/col/component.rbs +0 -50
  381. data/sig/hakumi_components/grid/row/component.rbs +0 -46
  382. data/sig/hakumi_components/icon/component.rbs +0 -56
  383. data/sig/hakumi_components/image/component.rbs +0 -56
  384. data/sig/hakumi_components/image/preview_group/component.rbs +0 -28
  385. data/sig/hakumi_components/input/component.rbs +0 -71
  386. data/sig/hakumi_components/input/password/component.rbs +0 -27
  387. data/sig/hakumi_components/input/text_area/component.rbs +0 -42
  388. data/sig/hakumi_components/input_number/component.rbs +0 -85
  389. data/sig/hakumi_components/layout/component.rbs +0 -21
  390. data/sig/hakumi_components/layout/content/component.rbs +0 -19
  391. data/sig/hakumi_components/layout/footer/component.rbs +0 -19
  392. data/sig/hakumi_components/layout/header/component.rbs +0 -19
  393. data/sig/hakumi_components/layout/sider/component.rbs +0 -19
  394. data/sig/hakumi_components/mentions/component.rbs +0 -75
  395. data/sig/hakumi_components/menu/component.rbs +0 -52
  396. data/sig/hakumi_components/menu/divider/component.rbs +0 -11
  397. data/sig/hakumi_components/menu/group/component.rbs +0 -20
  398. data/sig/hakumi_components/menu/item/component.rbs +0 -42
  399. data/sig/hakumi_components/menu/sub_menu/component.rbs +0 -37
  400. data/sig/hakumi_components/message/component.rbs +0 -50
  401. data/sig/hakumi_components/modal/component.rbs +0 -76
  402. data/sig/hakumi_components/modal/confirm/component.rbs +0 -32
  403. data/sig/hakumi_components/modal/error/component.rbs +0 -27
  404. data/sig/hakumi_components/modal/info/component.rbs +0 -27
  405. data/sig/hakumi_components/modal/success/component.rbs +0 -27
  406. data/sig/hakumi_components/modal/warning/component.rbs +0 -27
  407. data/sig/hakumi_components/notification/component.rbs +0 -64
  408. data/sig/hakumi_components/pagination/component.rbs +0 -113
  409. data/sig/hakumi_components/popconfirm/component.rbs +0 -52
  410. data/sig/hakumi_components/popover/component.rbs +0 -66
  411. data/sig/hakumi_components/progress/component.rbs +0 -201
  412. data/sig/hakumi_components/qr_code/component.rbs +0 -111
  413. data/sig/hakumi_components/radio/component.rbs +0 -55
  414. data/sig/hakumi_components/radio/group/component.rbs +0 -71
  415. data/sig/hakumi_components/rails/attribute_introspection.rbs +0 -16
  416. data/sig/hakumi_components/rails/validation_introspection.rbs +0 -18
  417. data/sig/hakumi_components/rails/validation_mapper.rbs +0 -53
  418. data/sig/hakumi_components/rails.rbs +0 -6
  419. data/sig/hakumi_components/rate/component.rbs +0 -56
  420. data/sig/hakumi_components/result/component.rbs +0 -65
  421. data/sig/hakumi_components/segmented/component.rbs +0 -72
  422. data/sig/hakumi_components/select/component.rbs +0 -73
  423. data/sig/hakumi_components/skeleton/avatar/component.rbs +0 -23
  424. data/sig/hakumi_components/skeleton/button/component.rbs +0 -24
  425. data/sig/hakumi_components/skeleton/component.rbs +0 -76
  426. data/sig/hakumi_components/skeleton/image/component.rbs +0 -22
  427. data/sig/hakumi_components/skeleton/input/component.rbs +0 -23
  428. data/sig/hakumi_components/skeleton/node/component.rbs +0 -21
  429. data/sig/hakumi_components/slider/component.rbs +0 -85
  430. data/sig/hakumi_components/space/compact/component.rbs +0 -21
  431. data/sig/hakumi_components/space/component.rbs +0 -47
  432. data/sig/hakumi_components/spin/component.rbs +0 -77
  433. data/sig/hakumi_components/splitter/component.rbs +0 -27
  434. data/sig/hakumi_components/splitter/panel/component.rbs +0 -36
  435. data/sig/hakumi_components/statistic/component.rbs +0 -97
  436. data/sig/hakumi_components/steps/component.rbs +0 -82
  437. data/sig/hakumi_components/steps/item/component.rbs +0 -29
  438. data/sig/hakumi_components/switch/component.rbs +0 -52
  439. data/sig/hakumi_components/table/column/component.rbs +0 -57
  440. data/sig/hakumi_components/table/column_group/component.rbs +0 -20
  441. data/sig/hakumi_components/table/component.rbs +0 -279
  442. data/sig/hakumi_components/table/concerns/columns.rbs +0 -95
  443. data/sig/hakumi_components/table/concerns/editable.rbs +0 -40
  444. data/sig/hakumi_components/table/concerns/ellipsis.rbs +0 -27
  445. data/sig/hakumi_components/table/concerns/fixed_columns.rbs +0 -33
  446. data/sig/hakumi_components/tabs/component.rbs +0 -66
  447. data/sig/hakumi_components/tabs/item/component.rbs +0 -29
  448. data/sig/hakumi_components/tag/component.rbs +0 -86
  449. data/sig/hakumi_components/tag/group/component.rbs +0 -24
  450. data/sig/hakumi_components/time_picker/component.rbs +0 -72
  451. data/sig/hakumi_components/timeline/component.rbs +0 -61
  452. data/sig/hakumi_components/timeline/item/component.rbs +0 -70
  453. data/sig/hakumi_components/tooltip/component.rbs +0 -73
  454. data/sig/hakumi_components/tour/component.rbs +0 -84
  455. data/sig/hakumi_components/transfer/component.rbs +0 -75
  456. data/sig/hakumi_components/tree/component.rbs +0 -126
  457. data/sig/hakumi_components/tree_select/component.rbs +0 -122
  458. data/sig/hakumi_components/typography/base_component.rbs +0 -57
  459. data/sig/hakumi_components/typography/link/component.rbs +0 -28
  460. data/sig/hakumi_components/typography/paragraph/component.rbs +0 -13
  461. data/sig/hakumi_components/typography/text/component.rbs +0 -10
  462. data/sig/hakumi_components/typography/title/component.rbs +0 -28
  463. data/sig/hakumi_components/upload/component.rbs +0 -78
  464. data/sig/hakumi_components.rbs +0 -96
  465. data/sig/rails/active_model/validations/comparison_validator.rbs +0 -6
  466. data/sig/rails.rbs +0 -18
  467. data/sig/view_component/base.rbs +0 -28
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Statistic
5
- class Component < HakumiComponents::BaseComponent
6
- include ActionView::Helpers::NumberHelper
7
-
8
- DEFAULT_DURATION: Integer
9
- DEFAULT_COUNTDOWN_FORMAT: String
10
-
11
- @title: untyped
12
- @value: untyped
13
- @precision: Integer?
14
- @prefix: untyped
15
- @suffix: untyped
16
- @animated: bool
17
- @duration: (Integer | Float)
18
- @countdown: bool
19
- @format: String?
20
- @aria_label: String?
21
- @html_options: hakumi_html_options
22
- @numeric_value: (Integer | Float)?
23
-
24
- def self.extract_controller_locals: (untyped params) -> Hash[Symbol, untyped]
25
-
26
- def self.parse_value_param: (untyped value) -> (Numeric | untyped)?
27
-
28
- def self.parse_number: (untyped value) -> Numeric?
29
-
30
- def self.parse_integer: (untyped value) -> Integer?
31
-
32
- def self.truthy_param?: (untyped value) -> bool
33
-
34
- def initialize: (
35
- ?title: untyped,
36
- ?value: untyped,
37
- ?precision: Integer?,
38
- ?prefix: untyped,
39
- ?suffix: untyped,
40
- ?animated: bool,
41
- ?duration: (Integer | Float),
42
- ?countdown: bool,
43
- ?format: String?,
44
- ?aria_label: String?,
45
- **hakumi_html_options html_options
46
- ) -> void
47
-
48
- def wrapper_attributes: () -> hakumi_html_options
49
-
50
- def title_content: () -> untyped
51
-
52
- def prefix_content: () -> untyped
53
-
54
- def suffix_content: () -> untyped
55
-
56
- def display_value: () -> String?
57
-
58
- def countdown?: () -> bool
59
-
60
- def animated?: () -> bool
61
-
62
- def countdown_target_timestamp: () -> Integer?
63
-
64
- def countdown_format: () -> String?
65
-
66
- def numeric_value: () -> (Integer | Float)?
67
-
68
- private
69
-
70
- def validate_props!: () -> void
71
-
72
- def wrapper_classes: () -> String
73
-
74
- def data_attributes: () -> hakumi_html_options
75
-
76
- def formatted_numeric_value: () -> String
77
-
78
- def formatted_countdown_value: () -> String
79
-
80
- def countdown_remaining_ms: () -> Integer
81
-
82
- def numeric_value?: () -> (Integer | Float | bool | nil)
83
-
84
- def normalize_countdown_target: (untyped value) -> Time?
85
-
86
- def format_duration: ((Integer | Float) milliseconds, String format) -> String
87
-
88
- def normalize_precision: (untyped value) -> Integer?
89
-
90
- def normalize_duration: (untyped value) -> Numeric
91
-
92
- def normalize_format: (untyped value) -> String?
93
-
94
- def normalize_string: (untyped value) -> String?
95
- end
96
- end
97
- end
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Steps
5
- class Component < HakumiComponents::BaseComponent
6
- type steps_direction = :horizontal | :vertical
7
- type steps_type = :default | :navigation | :inline
8
- type steps_size = :default | :small
9
- type steps_status = :wait | :process | :finish | :error
10
- type steps_label_placement = :horizontal | :vertical
11
- type steps_variant = :filled | :outlined
12
-
13
- DIRECTIONS: Array[steps_direction]
14
- TYPES: Array[steps_type]
15
- SIZES: Array[steps_size]
16
- STATUSES: Array[steps_status]
17
- LABEL_PLACEMENTS: Array[steps_label_placement]
18
- VARIANTS: Array[steps_variant]
19
-
20
- @current: Integer
21
- @direction: steps_direction
22
- @type: steps_type
23
- @size: steps_size
24
- @status: steps_status
25
- @label_placement: steps_label_placement?
26
- @percent: Integer?
27
- @progress_dot: bool
28
- @responsive: bool
29
- @initial: Integer
30
- @clickable: bool
31
- @variant: steps_variant
32
- @html_options: hakumi_html_options
33
-
34
- def initialize: (
35
- ?current: Integer,
36
- ?direction: steps_direction,
37
- ?type: steps_type,
38
- ?size: steps_size,
39
- ?status: steps_status,
40
- ?label_placement: steps_label_placement?,
41
- ?percent: Integer?,
42
- ?progress_dot: bool,
43
- ?responsive: bool,
44
- ?initial: Integer,
45
- ?clickable: bool,
46
- ?variant: steps_variant,
47
- **hakumi_html_options html_options
48
- ) -> void
49
-
50
- attr_reader current: Integer
51
- attr_reader direction: steps_direction
52
- attr_reader type: steps_type
53
- attr_reader size: steps_size
54
- attr_reader status: steps_status
55
- attr_reader label_placement: steps_label_placement?
56
- attr_reader percent: Integer?
57
- attr_reader progress_dot: bool
58
- attr_reader responsive: bool
59
- attr_reader initial: Integer
60
- attr_reader clickable: bool
61
- attr_reader variant: steps_variant
62
-
63
- def steps_classes: () -> String
64
-
65
- def effective_label_placement: () -> steps_label_placement
66
-
67
- def wrapper_attributes: () -> hakumi_html_options
68
-
69
- def stimulus_controller: () -> String
70
-
71
- def stimulus_data: () -> Hash[(Symbol | String), untyped]
72
-
73
- def item_status: (Integer index) -> steps_status
74
-
75
- def item_clickable?: (Integer index) -> bool
76
-
77
- private
78
-
79
- def validate_props!: () -> void
80
- end
81
- end
82
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Steps
5
- module Item
6
- class Component < HakumiComponents::BaseComponent
7
- @title: String?
8
- @description: String?
9
- @status: Symbol?
10
- @icon: hakumi_icon?
11
- @disabled: bool
12
- @html_options: hakumi_html_options
13
-
14
- def initialize: (
15
- ?title: String?,
16
- ?description: String?,
17
- ?status: Symbol?,
18
- ?icon: hakumi_icon?,
19
- ?disabled: bool,
20
- **hakumi_html_options html_options
21
- ) -> void
22
-
23
- def call: () -> String
24
-
25
- def step_classes: () -> String
26
- end
27
- end
28
- end
29
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Switch
5
- class Component < HakumiComponents::BaseComponent
6
- include HakumiComponents::Concerns::FormField
7
-
8
- SIZES: Array[hakumi_size_standard]
9
-
10
- @name: String
11
- @label: String?
12
- @caption: String?
13
- @checked: bool
14
- @disabled: bool
15
- @loading: bool
16
- @size: hakumi_size_standard
17
- @checked_text: String?
18
- @unchecked_text: String?
19
- @standalone: bool
20
- @required: bool
21
- @errors: Array[String]
22
- @wrapper_class: String?
23
- @html_options: hakumi_html_options
24
-
25
- def initialize: (
26
- ?name: String?,
27
- ?label: String?,
28
- ?caption: String?,
29
- ?checked: bool?,
30
- ?default_checked: bool,
31
- ?disabled: bool,
32
- ?loading: bool,
33
- ?size: hakumi_size_standard,
34
- ?checked_text: String?,
35
- ?unchecked_text: String?,
36
- ?standalone: bool,
37
- ?required: bool,
38
- ?errors: (Array[String] | String),
39
- **hakumi_html_options html_options
40
- ) -> void
41
-
42
- private
43
-
44
- def validate_props!: () -> void
45
- def wrapper_classes: () -> String
46
- def wrapper_attributes: () -> hakumi_html_options
47
- def input_attributes: () -> hakumi_html_options
48
- def checked_content: () -> String?
49
- def unchecked_content: () -> String?
50
- end
51
- end
52
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Table
5
- module Column
6
- class Component < HakumiComponents::BaseComponent
7
- @title: String
8
- @data_index: (String | Symbol)?
9
- @key: (String | Symbol)?
10
- @align: (:left | :center | :right)?
11
- @width: (String | Integer)?
12
- @ellipsis: (bool | Hash[Symbol, untyped])
13
- @sorter: untyped # Proc or bool
14
- @sort_directions: (Array[Symbol] | nil)
15
- @sort_order: (Symbol | nil)
16
- @default_sort_order: (Symbol | nil)
17
- @filters: (Array[Hash[Symbol, untyped]] | nil)
18
- @filter_multiple: bool
19
- @filtered_value: (Array[untyped] | nil)
20
- @default_filtered_value: (Array[untyped] | nil)
21
- @filter_mode: (Symbol | nil)
22
- @filter_search: (bool | nil)
23
- @hidden: bool
24
- @on_cell: untyped # Proc or nil
25
- @class_name: (String | nil)
26
- @options: Hash[Symbol, untyped]
27
- @block: (Proc | nil)
28
-
29
- def initialize: (
30
- title: String,
31
- ?data_index: (String | Symbol)?,
32
- ?key: (String | Symbol)?,
33
- ?align: (:left | :center | :right)?,
34
- ?width: (String | Integer)?,
35
- ?ellipsis: (bool | Hash[Symbol, untyped]),
36
- ?sorter: untyped,
37
- ?sort_directions: (Array[Symbol] | nil),
38
- ?sort_order: (Symbol | nil),
39
- ?default_sort_order: (Symbol | nil),
40
- ?filters: (Array[Hash[Symbol, untyped]] | nil),
41
- ?filter_multiple: bool,
42
- ?filtered_value: (Array[untyped] | nil),
43
- ?default_filtered_value: (Array[untyped] | nil),
44
- ?filter_mode: (Symbol | nil),
45
- ?filter_search: (bool | nil),
46
- ?hidden: bool,
47
- ?on_cell: untyped,
48
- ?class_name: (String | nil),
49
- **untyped options
50
- ) { () -> untyped } -> void
51
-
52
- # Converts column component to hash for Table component consumption
53
- def to_h: () -> Hash[Symbol, untyped]
54
- end
55
- end
56
- end
57
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Table
5
- module ColumnGroup
6
- class Component < HakumiComponents::BaseComponent
7
- @title: String?
8
- # @children is not actually used - ViewComponent slots manage columns
9
- @html_options: hakumi_html_options
10
-
11
- def initialize: (?title: String?, **hakumi_html_options html_options) -> void
12
-
13
- def call: () -> String
14
-
15
- # Returns column group config hash with title, key, align, width, hidden, children
16
- def to_h: () -> Hash[Symbol, untyped]
17
- end
18
- end
19
- end
20
- end
@@ -1,279 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Table
5
- class Component < HakumiComponents::BaseComponent
6
- include Concerns::Columns
7
- include Concerns::Editable
8
- include Concerns::FixedColumns
9
- include Concerns::Ellipsis
10
-
11
- # Type aliases for Table component
12
- type table_size = :default | :middle | :small
13
- type row_selection_type = :checkbox | :radio
14
- type sort_direction = :ascend | :descend
15
- type fixed_side = :left | :right
16
- type responsive_breakpoint = :xs | :sm | :md | :lg | :xl | :xxl
17
- type editable_mode = :cell | :row
18
- type editable_trigger = :click | :dblclick
19
- type editable_input_type = :text | :number | :textarea | :select
20
- type row_button_action = :edit | :save | :cancel
21
-
22
- # Hash types for complex options
23
- type row_selection_options = {
24
- type: row_selection_type,
25
- selected_row_keys: Array[String | Integer],
26
- selectedRowKeys: Array[String | Integer],
27
- preserve_selected_row_keys: bool,
28
- preserveSelectedRowKeys: bool,
29
- selections: untyped
30
- }
31
-
32
- type expandable_options = {
33
- expanded_row_keys: Array[String | Integer],
34
- expandedRowKeys: Array[String | Integer],
35
- default_expanded_row_keys: Array[String | Integer],
36
- defaultExpandedRowKeys: Array[String | Integer],
37
- expanded_row_render: untyped, # Proc type
38
- show_expand_column: bool
39
- }
40
-
41
- type scroll_options = {
42
- x: (String | Integer | nil),
43
- y: (String | Integer | nil)
44
- }
45
-
46
- type editable_options = {
47
- mode: editable_mode,
48
- trigger: editable_trigger
49
- }
50
-
51
- type row_drag_options = {
52
- enabled: bool,
53
- handle: bool
54
- }
55
-
56
- # Column hash type - complex structure, using untyped for Proc fields
57
- type column_hash = {
58
- title: String,
59
- data_index: (String | Symbol)?,
60
- key: (String | Symbol)?,
61
- align: (:left | :center | :right)?,
62
- width: (String | Integer)?,
63
- ellipsis: (bool | Hash[Symbol, untyped])?,
64
- sorter: untyped, # Proc or bool
65
- sort_directions: Array[sort_direction]?,
66
- sort_order: sort_direction?,
67
- default_sort_order: sort_direction?,
68
- filters: Array[Hash[Symbol, untyped]]?,
69
- filter_multiple: bool?,
70
- filtered_value: Array[untyped]?,
71
- default_filtered_value: Array[untyped]?,
72
- filter_mode: Symbol?,
73
- filter_search: bool?,
74
- hidden: bool?,
75
- on_cell: untyped, # Proc returning Hash
76
- class_name: String?,
77
- render: untyped, # Proc for custom rendering
78
- children: Array[column_hash]?,
79
- fixed: fixed_side?,
80
- responsive: Array[responsive_breakpoint]?,
81
- editable: (bool | Hash[Symbol, untyped])?,
82
- should_cell_update: (String | Symbol)?,
83
- selection: bool?,
84
- expand: bool?,
85
- drag_handle: bool?,
86
- sort_value: untyped # Proc or Symbol
87
- }
88
-
89
- type pagination_options = {
90
- total: Integer,
91
- current: Integer,
92
- page_size: Integer,
93
- pageSize: Integer,
94
- page: Integer,
95
- href: String?,
96
- turbo_frame: String?,
97
- turbo_action: Symbol?,
98
- sort_field_param: String?,
99
- sort_order_param: String?,
100
- server_side: bool?,
101
- page_param: String?,
102
- per_page_param: String?,
103
- preserve_params: bool?,
104
- size: hakumi_size_standard?,
105
- align: (:left | :center | :right)?,
106
- simple: bool?,
107
- show_size_changer: bool?,
108
- show_quick_jumper: bool?,
109
- page_size_options: Array[Integer]?,
110
- show_total: (bool | untyped)?, # bool or Proc
111
- hide_on_single_page: bool?,
112
- prev_text: String?,
113
- next_text: String?
114
- }
115
-
116
- SIZES: Array[table_size]
117
- ROW_SELECTION_TYPES: Array[row_selection_type]
118
- SORT_DIRECTIONS: Array[sort_direction]
119
- FIXED_SIDES: Array[fixed_side]
120
- RESPONSIVE_BREAKPOINTS: Array[responsive_breakpoint]
121
- ROW_BUTTON_ACTIONS: Array[row_button_action]
122
-
123
- SELECTION_COLUMN: Symbol
124
- EXPAND_COLUMN: Symbol
125
-
126
- @columns_data: (Array[column_hash] | nil)
127
- @data_source: Array[untyped]
128
- @row_key: (Symbol | String | untyped) # Can be Proc
129
- @size: table_size
130
- @bordered: bool
131
- @title: (String | untyped)? # String or ViewComponent
132
- @footer: (String | untyped)? # String or ViewComponent
133
- @row_selection: (row_selection_options | Hash[Symbol, untyped])?
134
- @expandable: (expandable_options | Hash[Symbol, untyped])?
135
- @pagination: (pagination_options | Hash[Symbol, untyped] | untyped)? # Can be ViewComponent
136
- @summary: untyped # Proc or String
137
- @empty_text: (String | untyped)? # String, ViewComponent, or Proc
138
- @sort_directions: Array[sort_direction]
139
- @filter_on_close: bool
140
- @filter_mode: Symbol
141
- @filter_search: bool
142
- @children_column_name: Symbol
143
- @indent_size: Integer
144
- @scroll: (scroll_options | Hash[Symbol, untyped])?
145
- @scroll_x: (String | nil)
146
- @scroll_y: (String | nil)
147
- @sticky: bool
148
- @row_class_name: (String | untyped)? # String or Proc
149
- @editable: (editable_options | Hash[Symbol, untyped])?
150
- @row_drag: (row_drag_options | Hash[Symbol, untyped])?
151
- @column_drag: bool
152
- @data_url: String?
153
- @html_options: hakumi_html_options
154
- @selected_row_keys: Array[String]
155
- @row_selection_type: (row_selection_type | nil)
156
- @row_selection_preserve: bool
157
- @row_selection_selections: untyped
158
- @expanded_row_keys: Array[String]
159
- @header_rows: untyped
160
- @display_rows: Array[Hash[Symbol, untyped]]
161
- @leaf_columns: Array[column_hash]
162
- @normalized_columns: Array[column_hash]
163
- @first_data_column: (column_hash | nil)
164
- @fixed_offsets: Hash[Symbol, Hash[Symbol, untyped]]
165
-
166
- # Class methods
167
- def self.extract_controller_locals: (Hash[Symbol, untyped] params) -> Hash[Symbol, untyped]
168
- def self.parse_json_param: (untyped value) -> untyped
169
-
170
- def initialize: (
171
- ?columns: (Array[column_hash] | nil),
172
- ?data_source: Array[untyped],
173
- ?row_key: (Symbol | String | untyped),
174
- ?size: table_size,
175
- ?bordered: bool,
176
- ?title: (String | untyped)?,
177
- ?footer: (String | untyped)?,
178
- ?row_selection: (row_selection_options | Hash[Symbol, untyped])?,
179
- ?expandable: (expandable_options | Hash[Symbol, untyped])?,
180
- ?pagination: (pagination_options | Hash[Symbol, untyped] | untyped)?,
181
- ?summary: untyped,
182
- ?empty_text: (String | untyped)?,
183
- ?sort_directions: (Array[sort_direction] | sort_direction),
184
- ?filter_on_close: bool,
185
- ?filter_mode: Symbol,
186
- ?filter_search: bool,
187
- ?children_column_name: Symbol,
188
- ?indent_size: Integer,
189
- ?scroll: (scroll_options | Hash[Symbol, untyped])?,
190
- ?sticky: bool,
191
- ?row_class_name: (String | untyped)?,
192
- ?editable: (editable_options | Hash[Symbol, untyped])?,
193
- ?row_drag: (row_drag_options | Hash[Symbol, untyped])?,
194
- ?column_drag: bool,
195
- ?data_url: String?,
196
- **hakumi_html_options html_options
197
- ) -> void
198
-
199
- attr_reader row_selection: (row_selection_options | Hash[Symbol, untyped])?
200
- attr_reader expandable: (expandable_options | Hash[Symbol, untyped])?
201
- attr_reader pagination: (pagination_options | Hash[Symbol, untyped] | untyped)?
202
- attr_reader summary: untyped
203
-
204
- def table_classes: () -> String
205
- def table_container_attributes: () -> hakumi_html_options
206
- def table_attributes: () -> hakumi_html_options
207
- def container_classes: () -> String
208
- def wrapper_attributes: () -> hakumi_html_options
209
- def header_rows: () -> Array[Array[Hash[Symbol, untyped]]]
210
- def display_rows: () -> Array[Hash[Symbol, untyped]]
211
- def row_key_for: (untyped row, Integer index) -> (String | Integer | untyped)
212
- def row_selected?: (String row_key) -> bool
213
- def row_classes: (untyped row, Integer row_index, String row_key) -> String
214
- def cell_attributes: (column_hash column, untyped row, Integer row_index, Integer depth, ?String? row_key, ?untyped raw_value) -> hakumi_html_options
215
- def header_cell_attributes: (column_hash column, col_span: Integer, row_span: Integer) -> hakumi_html_options
216
- def cell_content: (column_hash column, untyped row, Integer row_index, ?untyped raw_value) -> untyped
217
- def render_cell_display: (column_hash column, untyped content, untyped raw_value, untyped row, Integer row_index) -> String
218
- def empty_state: () -> String
219
- def pagination_component: () -> untyped
220
- def ajax_pagination_component: () -> untyped
221
- def summary_content: () -> untyped
222
- def scroll_styles: () -> String
223
- def table_style: () -> String?
224
- def selection_column?: () -> bool
225
- def selection_actions?: () -> bool
226
- def selection_all_enabled?: () -> bool
227
- def expanded_row?: (String row_key) -> bool
228
- def expanded_row_content: (untyped row, Integer row_index) -> untyped
229
- def header_filter_options: (column_hash column) -> Array[untyped]
230
- def column_sortable?: (column_hash column) -> bool
231
- def column_filterable?: (column_hash column) -> bool
232
- def column_filter_multiple?: (column_hash column) -> bool
233
- def default_filtered_values: (column_hash column) -> Array[untyped]
234
- def default_sort_order: (column_hash column) -> (sort_direction | nil)
235
- def current_sort_state: () -> (Hash[Symbol, untyped] | nil)
236
- def header_cell_classes: (column_hash column) -> String
237
- def cell_classes: (column_hash column) -> String
238
- def selection_header_state: () -> Hash[Symbol, bool]
239
- def fixed_columns?: () -> bool
240
-
241
- private
242
-
243
- def normalize_row_selection!: () -> void
244
- def normalize_expandable!: () -> void
245
- def validate_props!: () -> void
246
- def normalize_scroll: (untyped value) -> (Hash[Symbol, String?] | nil)
247
- def fixed_offsets: () -> Hash[Symbol, Hash[Symbol, untyped]]
248
- def apply_fixed_column_attributes!: (Hash[Symbol, untyped] attrs, column_hash column, header: bool) -> void
249
- def apply_editable_attributes!: (Hash[Symbol, untyped] attrs, column_hash column) -> void
250
- def compute_fixed_offsets: (Array[column_hash] leaf_columns) -> void
251
- def fixed_column_width!: (column_hash column) -> Float
252
- def numeric_width: (untyped value) -> (Float | nil)
253
- def ellipsis_config: (column_hash column) -> (bool | Hash[Symbol, untyped] | nil)
254
- def normalize_ellipsis_option: (untyped option) -> (Hash[Symbol, untyped] | nil)
255
- def normalize_ellipsis_tooltip_option: (untyped option) -> (Hash[Symbol, untyped] | nil)
256
- def ellipsis_title: (untyped config, untyped raw_value, untyped content_fragment) -> (String | nil)
257
- def ellipsis_tooltip_component: (untyped config, untyped raw_value, untyped row, Integer row_index) -> untyped
258
- def responsive_classes: (column_hash column) -> Array[String]
259
- def extract_sort_value: (column_hash column, untyped row, untyped raw_value) -> untyped
260
- def normalize_responsive_breakpoints: (untyped value) -> (Array[responsive_breakpoint] | nil)
261
- def normalize_pagination_options: (Hash[Symbol, untyped] options) -> Hash[Symbol, untyped]
262
- def columns_data: () -> Array[column_hash]
263
- def build_display_rows: () -> Array[Hash[Symbol, untyped]]
264
- def flatten_tree: (Array[untyped] rows, ?Integer depth) -> Array[Hash[Symbol, untyped]]
265
- def apply_pagination: (Array[Hash[Symbol, untyped]] rows) -> Array[Hash[Symbol, untyped]]
266
- def value_from_row: (untyped row, (Symbol | String)? data_index) -> untyped
267
- def selection_cell: (untyped row, Integer row_index) -> Hash[Symbol, untyped]
268
- def expand_cell: (untyped row, Integer row_index) -> Hash[Symbol, untyped]
269
- def normalize_editable: (untyped value) -> (Hash[Symbol, untyped] | nil)
270
- def normalize_row_drag: (untyped value) -> (Hash[Symbol, untyped] | nil)
271
- def normalize_column_editable: (untyped value) -> (Hash[Symbol, untyped] | nil)
272
- def normalize_should_cell_update: (untyped value) -> (String | nil)
273
- def editable_config_json: () -> (String | nil)
274
- def columns_config_json: () -> String
275
- def cell_editable_payload: (column_hash column) -> (Hash[Symbol, untyped] | nil)
276
- def apply_should_cell_update_attributes!: (Hash[Symbol, untyped] attrs, column_hash column) -> void
277
- end
278
- end
279
- end