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,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Checkbox
5
- class Component < HakumiComponents::BaseComponent
6
- include HakumiComponents::Concerns::FormField
7
-
8
- @checked: bool
9
- @disabled: bool
10
- @indeterminate: bool
11
- @value: (String | Integer | Float)?
12
- @name: String?
13
- @id: String
14
- @auto_focus: bool
15
- @label: String?
16
- @caption: String?
17
- @standalone: bool
18
- @required: bool
19
- @errors: Array[String]
20
- @wrapper_id: String
21
- @html_options: hakumi_html_options
22
-
23
- def initialize: (
24
- ?checked: bool,
25
- ?disabled: bool,
26
- ?indeterminate: bool,
27
- ?value: (String | Integer | Float)?,
28
- ?name: String?,
29
- ?id: String?,
30
- ?auto_focus: bool,
31
- ?label: String?,
32
- ?caption: String?,
33
- ?standalone: bool,
34
- ?required: bool,
35
- ?errors: Array[String],
36
- **hakumi_html_options html_options
37
- ) -> void
38
-
39
- def wrapper_classes: () -> String
40
-
41
- def checkbox_classes: () -> String
42
-
43
- def data_controllers: () -> String
44
- end
45
- end
46
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Checkbox
5
- module Group
6
- class Component < HakumiComponents::BaseComponent
7
- type checkbox_option = { label: String, value: (String | Integer | Float) }
8
-
9
- @name: String
10
- @value: Array[String | Integer | Float]
11
- @options: Array[Hash[Symbol, untyped] | String]
12
- @disabled: bool
13
- @html_options: hakumi_html_options
14
-
15
- def initialize: (
16
- ?name: String?,
17
- ?value: Array[String | Integer | Float],
18
- ?default_value: Array[String | Integer | Float],
19
- ?options: Array[Hash[Symbol, untyped] | String],
20
- ?disabled: bool,
21
- **hakumi_html_options html_options
22
- ) -> void
23
-
24
- def wrapper_classes: () -> String
25
-
26
- def wrapper_attributes: () -> hakumi_html_options
27
-
28
- def normalized_options: () -> Array[checkbox_option]
29
-
30
- def option_checked?: ((String | Integer | Float) option_value) -> bool
31
- end
32
- end
33
- end
34
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Collapse
5
- class Component < HakumiComponents::BaseComponent
6
- type collapse_size = :default | :small | :large
7
- type collapse_collapsible = :header | :icon | :disabled | nil
8
-
9
- SIZES: Array[collapse_size]
10
- COLLAPSIBLES: Array[collapse_collapsible]
11
-
12
- @size: collapse_size
13
- @accordion: bool
14
- @bordered: bool
15
- @ghost: bool
16
- @collapsible: collapse_collapsible
17
- @active_keys: Array[String]?
18
- @default_active_keys: Array[String]?
19
- @html_options: hakumi_html_options
20
-
21
- def initialize: (
22
- ?size: collapse_size,
23
- ?accordion: bool,
24
- ?bordered: bool,
25
- ?ghost: bool,
26
- ?collapsible: collapse_collapsible,
27
- ?active_keys: (String | Array[String] | nil)?,
28
- ?default_active_keys: (String | Array[String] | nil)?,
29
- **hakumi_html_options html_options
30
- ) -> void
31
-
32
- attr_reader size: collapse_size
33
- attr_reader accordion: bool
34
- attr_reader bordered: bool
35
- attr_reader ghost: bool
36
- attr_reader collapsible: collapse_collapsible
37
-
38
- def collapse_classes: () -> String
39
-
40
- def wrapper_attributes: () -> hakumi_html_options
41
-
42
- def stimulus_controller: () -> String
43
-
44
- def initial_active_keys: () -> Array[String]
45
-
46
- def stimulus_values: () -> Hash[Symbol, untyped]
47
-
48
- def stimulus_data_attributes: () -> Hash[String, untyped]
49
-
50
- private
51
-
52
- def normalize_keys: ((String | Array[String] | nil)?) -> Array[String]?
53
-
54
- def validate_props!: () -> void
55
- end
56
- end
57
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Collapse
5
- module Panel
6
- class Component < HakumiComponents::BaseComponent
7
- type panel_collapsible = :header | :icon | :disabled | nil
8
-
9
- @key: String
10
- @header: (String | untyped)?
11
- @extra: (String | untyped)?
12
- @disabled: bool
13
- @show_arrow: bool
14
- @collapsible: panel_collapsible
15
- @force_render: bool
16
- @parent: HakumiComponents::Collapse::Component?
17
- @html_options: hakumi_html_options
18
- @content: (String | untyped)?
19
-
20
- def initialize: (
21
- key: (String | Symbol | Integer),
22
- ?header: (String | untyped)?,
23
- ?extra: (String | untyped)?,
24
- ?disabled: bool,
25
- ?show_arrow: bool,
26
- ?collapsible: panel_collapsible,
27
- ?force_render: bool,
28
- ?parent: HakumiComponents::Collapse::Component?,
29
- **hakumi_html_options html_options
30
- ) -> void
31
-
32
- attr_reader key: String
33
- attr_reader header: (String | untyped)?
34
- attr_reader extra: (String | untyped)?
35
- attr_reader disabled: bool
36
- attr_reader show_arrow: bool
37
- attr_reader collapsible: panel_collapsible
38
- attr_reader force_render: bool
39
- attr_accessor content: (String | untyped)?
40
-
41
- def item_classes: (bool active) -> String
42
-
43
- def item_attributes: (bool active) -> hakumi_html_options
44
- end
45
- end
46
- end
47
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module ColorPicker
5
- class Component < HakumiComponents::BaseComponent
6
- include HakumiComponents::Concerns::FormField
7
-
8
- type color_format = :hex | :rgb | :hsl | :hsb
9
- type trigger_type = :click | :hover
10
- type placement_type = :bottom_left | :bottom_right | :top_left | :top_right | :bottom | :top
11
- type preset_group = { label: String?, colors: Array[String] }
12
- type preset_hash = Hash[String, Array[String]]
13
- type preset_input = preset_hash | Array[preset_group] | Array[String]
14
-
15
- SIZES: Array[hakumi_size_standard]
16
- TRIGGERS: Array[trigger_type]
17
- FORMATS: Array[color_format]
18
- DEFAULT_PRESET_COLORS: Array[String]
19
-
20
- @name: String
21
- @label: String?
22
- @caption: String?
23
- @value: String?
24
- @default_value: String
25
- @format: color_format
26
- @show_text: bool
27
- @show_format_select: bool
28
- @disabled: bool
29
- @disabled_alpha: bool
30
- @allow_clear: bool
31
- @show_preset_colors: bool
32
- @default_preset_label: String
33
- @presets: Array[preset_group]
34
- @size: hakumi_size_standard
35
- @trigger: trigger_type
36
- @placement: placement_type
37
- @standalone: bool
38
- @errors: Array[String]
39
- @html_attrs: hakumi_html_options
40
-
41
- def initialize: (
42
- ?name: String?,
43
- ?label: String?,
44
- ?caption: String?,
45
- ?value: String?,
46
- ?default_value: String?,
47
- ?format: color_format,
48
- ?show_text: bool,
49
- ?show_format_select: bool,
50
- ?disabled: bool,
51
- ?disabled_alpha: bool,
52
- ?allow_clear: bool,
53
- ?show_preset_colors: bool,
54
- ?default_preset_label: String,
55
- ?presets: preset_input,
56
- ?size: hakumi_size_standard,
57
- ?trigger: trigger_type,
58
- ?placement: placement_type,
59
- ?standalone: bool,
60
- ?errors: (Array[String] | String),
61
- **hakumi_html_options html_attrs
62
- ) -> void
63
-
64
- def wrapper_attributes: () -> hakumi_html_options
65
- def trigger_size_class: () -> String
66
- def display_value: () -> String
67
- def presets?: () -> bool
68
- def preset_groups: () -> Array[preset_group]
69
- def default_presets: () -> Array[preset_group]
70
- def all_preset_groups: () -> Array[preset_group]
71
-
72
- private
73
-
74
- def validate_props!: () -> void
75
- def component_classes: () -> String
76
- def data_value: (String? value) -> String?
77
- def normalize_presets: (preset_input? presets) -> Array[preset_group]
78
- end
79
- end
80
- end
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Concerns
5
- # Shared behavior for form field components
6
- # Provides common methods for handling errors, labels, captions, and accessibility
7
- module FormField
8
- # Attribute readers provided by concern
9
- def name: () -> String
10
-
11
- def label: () -> String?
12
-
13
- def caption: () -> String?
14
-
15
- def errors: () -> Array[String]
16
-
17
- def required: () -> bool
18
-
19
- def size: () -> Symbol
20
-
21
- def standalone: () -> bool
22
-
23
- # Check if field has validation errors
24
- #
25
- # @return [Boolean]
26
- def has_error?: () -> bool
27
-
28
- # Check if component is in standalone mode
29
- #
30
- # @return [Boolean]
31
- def standalone?: () -> bool
32
-
33
- # Get the input field ID
34
- # Works with both @html_options and @html_attrs
35
- #
36
- # @return [String]
37
- def input_id: () -> String
38
-
39
- # Generate CSS classes for form item wrapper
40
- #
41
- # @return [String]
42
- def form_item_classes: () -> String
43
-
44
- # Generate aria-describedby attribute value
45
- #
46
- # @return [String, nil]
47
- def describedby_ids: () -> String?
48
-
49
- # Get first error message
50
- #
51
- # @return [String, nil]
52
- def error_message: () -> String?
53
-
54
- # Render label element (wraps label in div for proper styling)
55
- #
56
- # @param field_id [String] ID of the input field
57
- # @return [String, nil]
58
- def render_label: (?field_id: String?) -> String?
59
-
60
- # Render caption (help text) element
61
- #
62
- # @return [String, nil]
63
- def render_caption: () -> String?
64
-
65
- # Render error message element
66
- #
67
- # @return [String, nil]
68
- def render_error: () -> String?
69
-
70
- # Render explain section (caption or error)
71
- #
72
- # @return [String, nil]
73
- def render_explain: () -> String?
74
-
75
- # Generate form item wrapper attributes
76
- #
77
- # @param additional_data [Hash] Additional data attributes for Stimulus controllers
78
- # @return [Hash] HTML attributes hash with class, data, etc.
79
- def form_item_attributes: (?additional_data: Hash[Symbol, (String | Integer | bool)]) -> hakumi_html_options
80
-
81
- # Methods expected from BaseComponent (duck typing interface)
82
- # These are called by FormField but defined in BaseComponent
83
- def class_names: (String base, ?Hash[Symbol, (Symbol | String | Integer | bool)] modifiers, ?Array[String] extras) -> String
84
- def content_tag: (Symbol tag_name, String? content, **hakumi_html_attribute_value attributes) -> String
85
- | (Symbol tag_name, **hakumi_html_attribute_value attributes) { () -> String? } -> String
86
- def safe_join: (Array[untyped] array, ?String separator) -> String
87
- end
88
- end
89
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Container
5
- class Component < HakumiComponents::BaseComponent
6
- type container_width = :narrow | :default | :wide | :xl | :fluid | Numeric | String
7
-
8
- WIDTH_PRESETS: Hash[Symbol, String]
9
-
10
- @width: container_width
11
- @padded: bool
12
- @centered: bool
13
- @full_height: bool
14
- @html_options: hakumi_html_options
15
-
16
- def initialize: (
17
- ?width: container_width,
18
- ?padded: bool,
19
- ?centered: bool,
20
- ?full_height: bool,
21
- **hakumi_html_options html_options
22
- ) -> void
23
-
24
- def call: () -> String
25
-
26
- private
27
-
28
- def wrapper_attributes: () -> hakumi_html_options
29
-
30
- def wrapper_classes: () -> String
31
-
32
- def width_class: () -> String?
33
-
34
- def width_style: () -> String?
35
- end
36
- end
37
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module DatePicker
5
- class Component < HakumiComponents::BaseComponent
6
- include HakumiComponents::Concerns::FormField
7
-
8
- type picker_type = :date | :week | :month | :quarter | :year
9
- type date_value = String | Time | DateTime | Date | nil
10
-
11
- SIZES: Array[hakumi_size_standard]
12
- PICKERS: Array[picker_type]
13
-
14
- @name: String
15
- @label: String?
16
- @caption: String?
17
- @value: date_value
18
- @default_value: date_value
19
- @format: String?
20
- @display_format: String?
21
- @picker: picker_type
22
- @show_time: bool
23
- @show_seconds: bool
24
- @disabled: bool
25
- @disabled_date: Proc?
26
- @allow_clear: bool
27
- @placeholder: String?
28
- @size: hakumi_size_standard
29
- @bordered: bool
30
- @required: bool
31
- @errors: Array[String]
32
- @standalone: bool
33
- @html_options: hakumi_html_options
34
-
35
- def initialize: (
36
- ?name: String?,
37
- ?label: String?,
38
- ?caption: String?,
39
- ?value: date_value,
40
- ?default_value: date_value,
41
- ?format: String?,
42
- ?display_format: String?,
43
- ?picker: picker_type,
44
- ?show_time: bool,
45
- ?show_seconds: bool?,
46
- ?disabled: bool,
47
- ?disabled_date: Proc?,
48
- ?allow_clear: bool,
49
- ?placeholder: String?,
50
- ?size: hakumi_size_standard,
51
- ?bordered: bool,
52
- ?required: bool,
53
- ?errors: (Array[String] | String),
54
- ?standalone: bool,
55
- **hakumi_html_options html_options
56
- ) -> void
57
-
58
- def wrapper_attributes: () -> hakumi_html_options
59
- def hidden_input_attributes: () -> hakumi_html_options
60
- def visible_input_attributes: () -> hakumi_html_options
61
- def input_attributes: () -> hakumi_html_options
62
- def display_value: () -> String?
63
-
64
- private
65
-
66
- def validate_props!: () -> void
67
- def formatted_hours: () -> Array[String]
68
- def formatted_minutes: () -> Array[String]
69
- def formatted_seconds: () -> Array[String]
70
- end
71
- end
72
- end
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module DatePicker
5
- class RangePicker < HakumiComponents::BaseComponent
6
- include HakumiComponents::Concerns::FormField
7
- include SharedRendering
8
-
9
- @name: String
10
- @label: String?
11
- @caption: String?
12
- @start_value: SharedRendering::datetime_value
13
- @end_value: SharedRendering::datetime_value
14
- @value: SharedRendering::datetime_value
15
- @default_value: SharedRendering::datetime_value
16
- @format: String?
17
- @picker: Symbol
18
- @show_time: bool
19
- @disabled: bool
20
- # disabled_date is a Proc passed to Calendar component, or nil
21
- @disabled_date: untyped
22
- @allow_clear: bool
23
- @placeholder: (String | Array[String])?
24
- @size: Symbol
25
- @bordered: bool
26
- @required: bool
27
- @errors: Array[String]
28
- @standalone: bool
29
- @html_options: hakumi_html_options
30
-
31
- def initialize: (
32
- ?name: String?,
33
- ?label: String?,
34
- ?caption: String?,
35
- ?start_value: SharedRendering::datetime_value,
36
- ?end_value: SharedRendering::datetime_value,
37
- ?default_value: SharedRendering::datetime_value,
38
- ?format: String?,
39
- ?picker: Symbol,
40
- ?show_time: bool,
41
- ?disabled: bool,
42
- # disabled_date is a Proc for Calendar component
43
- ?disabled_date: untyped,
44
- ?allow_clear: bool,
45
- ?placeholder: (String | Array[String])?,
46
- ?size: Symbol,
47
- ?bordered: bool,
48
- ?required: bool,
49
- ?errors: Array[String],
50
- ?standalone: bool,
51
- **hakumi_html_options html_options
52
- ) -> void
53
-
54
- def wrapper_attributes: () -> hakumi_html_options
55
- def start_input_attributes: () -> hakumi_html_options
56
- def end_input_attributes: () -> hakumi_html_options
57
- def start_input_name: () -> String
58
- def end_input_name: () -> String
59
- def start_input_id: () -> String
60
- def end_input_id: () -> String
61
- def display_values: () -> Array[String?]
62
-
63
- private
64
-
65
- def validate_props!: () -> void
66
- end
67
- end
68
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module DatePicker
5
- module SharedRendering
6
- SIZES: Array[Symbol]
7
- PICKERS: Array[Symbol]
8
-
9
- DEFAULT_DATE_FORMAT: String
10
- DEFAULT_DATETIME_FORMAT: String
11
- DEFAULT_DATETIME_NO_SECONDS_FORMAT: String
12
-
13
- # Date/time value can be String, Time, DateTime, Date, or nil
14
- type datetime_value = String | Time | DateTime | Date | nil
15
-
16
- def iso_value: (datetime_value value) -> String?
17
- def formatted_value: (datetime_value value) -> String?
18
- def js_display_format: () -> String
19
- def display_format: () -> String
20
- def default_strftime_format: () -> String
21
- def dayjs_to_strftime: (String dayjs_format) -> String
22
- def parse_datetime: (datetime_value value) -> (Time | DateTime | Date | nil)
23
- def parse_date: (datetime_value value) -> Date?
24
- def show_seconds?: () -> bool
25
- def use_12_hours?: () -> bool
26
- def format_quarter: (Date | DateTime | Time date_value) -> String
27
- def picker_mode: () -> Symbol
28
- def base_wrapper_classes: (base: String, ?extra_classes: Array[String?]) -> String
29
- # Returns data attributes for picker panel (range is data attribute value)
30
- def picker_panel_attributes: (?range: String?) -> Hash[Symbol, String]
31
- # Returns options hash for Calendar component (disabled_date is Proc or nil, value is datetime)
32
- def calendar_component_options: (value: datetime_value, ?range: String?) -> Hash[Symbol, untyped]
33
- def placeholder_text: () -> String
34
- def range_placeholders: () -> Array[String]
35
-
36
- # Required helpers provided by BaseComponent
37
- def class_names: (String base, ?Hash[Symbol, bool] modifiers, ?Array[String?] extras) -> String
38
- def value_present?: (untyped value) -> bool
39
- end
40
- end
41
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Descriptions
5
- class Component < HakumiComponents::BaseComponent
6
- type descriptions_size = :default | :middle | :small
7
- type descriptions_layout = :horizontal | :vertical
8
- type descriptions_breakpoint = :xs | :sm | :md | :lg | :xl | :xxl
9
-
10
- SIZE_OPTIONS: Array[descriptions_size]
11
- LAYOUT_OPTIONS: Array[descriptions_layout]
12
- COLUMN_BREAKPOINTS: Array[descriptions_breakpoint]
13
-
14
- @title: (String | untyped)?
15
- @extra: (String | untyped)?
16
- @bordered: bool
17
- @size: descriptions_size
18
- @layout: descriptions_layout
19
- @column: (Integer | Hash[Symbol, Integer])
20
- @colon: bool
21
- @html_options: hakumi_html_options
22
-
23
- def initialize: (
24
- ?title: (String | untyped)?,
25
- ?extra: (String | untyped)?,
26
- ?bordered: bool,
27
- ?size: descriptions_size,
28
- ?layout: descriptions_layout,
29
- ?column: (Integer | Hash[Symbol, Integer]),
30
- ?colon: bool,
31
- **hakumi_html_options html_options
32
- ) -> void
33
-
34
- private
35
-
36
- def validate_props!: () -> void
37
-
38
- def max_column_count: () -> (Integer | Hash[Symbol, Integer])
39
-
40
- def rows: () -> Array[Array[[HakumiComponents::Descriptions::Item::Component, Integer]]]
41
-
42
- def wrapper_classes: () -> String
43
-
44
- def build_column_classes: () -> Array[String]
45
-
46
- def wrapper_attributes: () -> hakumi_html_options
47
-
48
- def table_classes: () -> String
49
-
50
- def label_cell_classes: () -> String
51
-
52
- def content_cell_classes: () -> String
53
-
54
- def render_title: () -> String?
55
-
56
- def render_extra: () -> String?
57
- end
58
- end
59
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module HakumiComponents
4
- module Descriptions
5
- module Item
6
- class Component < HakumiComponents::BaseComponent
7
- @label: (String | untyped)
8
- @content: (String | untyped)?
9
- @span: Integer
10
- @label_style: (String | Hash[Symbol, untyped])?
11
- @content_style: (String | Hash[Symbol, untyped])?
12
- @html_options: hakumi_html_options
13
-
14
- def initialize: (
15
- label: (String | untyped),
16
- ?content: (String | untyped)?,
17
- ?span: Integer,
18
- ?label_style: (String | Hash[Symbol, untyped])?,
19
- ?content_style: (String | Hash[Symbol, untyped])?,
20
- **hakumi_html_options html_options
21
- ) -> void
22
-
23
- attr_accessor content: (String | untyped)?
24
- attr_reader label: (String | untyped)
25
- attr_reader span: Integer
26
- attr_reader label_style: (String | Hash[Symbol, untyped])?
27
- attr_reader content_style: (String | Hash[Symbol, untyped])?
28
- end
29
- end
30
- end
31
- end