hakumi_components 0.1.17.pre → 0.1.18.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/README.md +92 -70
- data/app/components/{hakumi → hakumi_components}/admin_panel/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/admin_panel/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/affix/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/alert/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/alert/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/anchor/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/anchor/link/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/autocomplete/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/autocomplete/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/avatar/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/badge/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/base_component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/breadcrumb/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/breadcrumb/item/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/breadcrumb/item/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/button/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/calendar/component.html.erb +5 -5
- data/app/components/{hakumi → hakumi_components}/calendar/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/card/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/card/grid/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/card/meta/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/carousel/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/carousel/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/cascader/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/cascader/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/checkbox/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/checkbox/group/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/checkbox/group/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/collapse/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/collapse/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/collapse/panel/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/color_picker/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/concerns/form_field.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/container/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/date_picker/component.html.erb +3 -3
- data/app/components/{hakumi → hakumi_components}/date_picker/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/date_picker/range_picker.html.erb +4 -4
- data/app/components/{hakumi → hakumi_components}/date_picker/range_picker.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/date_picker/shared_rendering.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/descriptions/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/descriptions/item/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/divider/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/drawer/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/drawer/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/dropdown/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/dropdown/divider/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/dropdown/item/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/empty/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/flex/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/float_button/back_top/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/float_button/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/float_button/group/component.rb +7 -7
- data/app/components/{hakumi → hakumi_components}/float_button/group_cluster/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/form/item/component.rb +6 -6
- data/app/components/{hakumi → hakumi_components}/grid/col/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/grid/row/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/icon/component.rb +8 -8
- data/app/components/{hakumi → hakumi_components}/image/component.html.erb +10 -10
- data/app/components/{hakumi → hakumi_components}/image/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/image/preview_group/component.html.erb +9 -9
- data/app/components/{hakumi → hakumi_components}/image/preview_group/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/input/component.rb +9 -9
- data/app/components/{hakumi → hakumi_components}/input/password/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/input/text_area/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/input_number/component.html.erb +4 -4
- data/app/components/{hakumi → hakumi_components}/input_number/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/layout/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/layout/content/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/layout/footer/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/layout/header/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/layout/sider/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/mentions/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/menu/component.rb +6 -6
- data/app/components/{hakumi → hakumi_components}/menu/divider/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/menu/group/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/menu/item/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/menu/sub_menu/component.rb +7 -7
- data/app/components/{hakumi → hakumi_components}/message/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/modal/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/modal/component.rb +2 -2
- data/app/components/hakumi_components/modal/confirm/component.html.erb +23 -0
- data/app/components/{hakumi → hakumi_components}/modal/confirm/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/modal/error/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/modal/info/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/modal/success/component.rb +5 -5
- data/app/components/{hakumi → hakumi_components}/modal/warning/component.rb +6 -6
- data/app/components/{hakumi → hakumi_components}/notification/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/pagination/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/pagination/component.rb +7 -7
- data/app/components/{hakumi → hakumi_components}/popconfirm/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/popconfirm/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/popover/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/progress/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/progress/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/qr_code/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/radio/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/radio/group/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/radio/group/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/rate/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/rate/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/result/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/segmented/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/select/component.html.erb +3 -3
- data/app/components/{hakumi → hakumi_components}/select/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/skeleton/avatar/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/skeleton/button/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/skeleton/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/skeleton/image/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/skeleton/image/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/skeleton/input/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/skeleton/node/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/slider/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/space/compact/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/space/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/spin/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/splitter/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/splitter/panel/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/statistic/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/steps/component.html.erb +4 -4
- data/app/components/{hakumi → hakumi_components}/steps/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/steps/item/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/switch/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/table/column/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/table/column_group/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/table/component.rb +7 -7
- data/app/components/{hakumi → hakumi_components}/table/concerns/columns.rb +8 -8
- data/app/components/{hakumi → hakumi_components}/table/concerns/editable.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/table/concerns/ellipsis.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/table/concerns/fixed_columns.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/tabs/component.html.erb +4 -4
- data/app/components/{hakumi → hakumi_components}/tabs/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/tabs/item/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/tag/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/tag/group/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/time_picker/component.html.erb +2 -2
- data/app/components/{hakumi → hakumi_components}/time_picker/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/timeline/component.rb +4 -4
- data/app/components/{hakumi → hakumi_components}/timeline/item/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/tooltip/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/tour/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/transfer/component.html.erb +4 -4
- data/app/components/{hakumi → hakumi_components}/transfer/component.rb +2 -2
- data/app/components/{hakumi → hakumi_components}/tree/component.html.erb +1 -1
- data/app/components/{hakumi → hakumi_components}/tree/component.rb +10 -10
- data/app/components/{hakumi → hakumi_components}/tree_select/component.html.erb +5 -5
- data/app/components/{hakumi → hakumi_components}/tree_select/component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/typography/base_component.rb +3 -3
- data/app/components/{hakumi → hakumi_components}/typography/link/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/typography/paragraph/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/typography/text/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/typography/title/component.rb +1 -1
- data/app/components/{hakumi → hakumi_components}/upload/component.html.erb +10 -10
- data/app/components/{hakumi → hakumi_components}/upload/component.rb +2 -2
- data/app/controllers/{hakumi → hakumi_components}/components_controller.rb +1 -1
- data/app/form_builders/{hakumi → hakumi_components}/form_builder.rb +31 -31
- data/app/helpers/{hakumi → hakumi_components}/form_helper.rb +4 -4
- data/app/services/hakumi_components/component_handler.rb +53 -0
- data/app/services/{hakumi → hakumi_components}/icon/loader.rb +4 -4
- data/app/services/{hakumi → hakumi_components}/illustrations/loader.rb +4 -4
- data/app/views/hakumi/_admin_panel.html.erb +1 -1
- data/app/views/hakumi/_affix.html.erb +1 -1
- data/app/views/hakumi/_alert.html.erb +1 -1
- data/app/views/hakumi/_confirm.html.erb +1 -1
- data/app/views/hakumi/_drawer.html.erb +1 -1
- data/app/views/hakumi/_message.html.erb +1 -1
- data/app/views/hakumi/_modal.html.erb +1 -1
- data/app/views/hakumi/_notification.html.erb +1 -1
- data/app/views/hakumi/_popconfirm.html.erb +1 -1
- data/app/views/hakumi/_popover.html.erb +1 -1
- data/app/views/hakumi/_qr_code.html.erb +1 -1
- data/app/views/hakumi/_result.html.erb +1 -1
- data/app/views/hakumi/_segmented.html.erb +1 -1
- data/app/views/hakumi/_skeleton.html.erb +1 -1
- data/app/views/hakumi/_spin.html.erb +1 -1
- data/app/views/hakumi/_statistic.html.erb +1 -1
- data/app/views/hakumi/_table.html.erb +1 -1
- data/app/views/hakumi/_tag.html.erb +1 -1
- data/app/views/hakumi/_timeline.html.erb +1 -1
- data/app/views/hakumi/_tree.html.erb +1 -1
- data/lib/generators/{hakumi → hakumi_components}/install_generator.rb +3 -3
- data/lib/hakumi_components/documentation.rb +6 -6
- data/lib/hakumi_components/engine.rb +9 -3
- data/lib/hakumi_components/rails/attribute_introspection.rb +1 -1
- data/lib/hakumi_components/rails/validation_introspection.rb +1 -1
- data/lib/hakumi_components/rails/validation_mapper.rb +1 -1
- data/lib/hakumi_components/rails.rb +1 -1
- data/lib/hakumi_components/version.rb +2 -2
- data/lib/hakumi_components.rb +3 -2
- data/sig/generators/{hakumi → hakumi_components}/install_generator.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/admin_panel/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/affix/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/alert/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/anchor/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/anchor/link/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/autocomplete/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/avatar/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/badge/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/base_component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/breadcrumb/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/breadcrumb/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/button/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/calendar/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/card/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/card/grid/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/card/meta/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/carousel/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/cascader/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/checkbox/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/checkbox/group/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/collapse/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/collapse/panel/component.rbs +4 -4
- data/sig/{hakumi → hakumi_components}/color_picker/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/concerns/form_field.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/container/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/date_picker/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/date_picker/range_picker.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/date_picker/shared_rendering.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/descriptions/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/descriptions/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/divider/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/drawer/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/dropdown/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/dropdown/divider/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/dropdown/item/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/empty/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/flex/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/float_button/back_top/component.rbs +6 -6
- data/sig/{hakumi → hakumi_components}/float_button/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/float_button/group/component.rbs +13 -13
- data/sig/{hakumi → hakumi_components}/float_button/group_cluster/component.rbs +7 -7
- data/sig/{hakumi → hakumi_components}/form/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/form_builder.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/grid/col/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/grid/row/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/icon/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/image/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/image/preview_group/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/input/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/input/password/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/input/text_area/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/input_number/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/layout/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/layout/content/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/layout/footer/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/layout/header/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/layout/sider/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/mentions/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/menu/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/menu/divider/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/menu/group/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/menu/item/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/menu/sub_menu/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/message/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/confirm/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/error/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/info/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/success/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/modal/warning/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/notification/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/pagination/component.rbs +7 -7
- data/sig/{hakumi → hakumi_components}/popconfirm/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/popover/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/progress/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/qr_code/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/radio/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/radio/group/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/rails/attribute_introspection.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/rails/validation_introspection.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/rails/validation_mapper.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/rails.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/rate/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/result/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/segmented/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/select/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/skeleton/avatar/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/skeleton/button/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/skeleton/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/skeleton/image/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/skeleton/input/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/skeleton/node/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/slider/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/space/compact/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/space/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/spin/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/splitter/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/splitter/panel/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/statistic/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/steps/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/steps/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/switch/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/table/column/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/table/column_group/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/table/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/table/concerns/columns.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/table/concerns/editable.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/table/concerns/ellipsis.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/table/concerns/fixed_columns.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/tabs/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tabs/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tag/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tag/group/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/time_picker/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/timeline/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/timeline/item/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tooltip/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tour/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/transfer/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tree/component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/tree_select/component.rbs +3 -3
- data/sig/{hakumi → hakumi_components}/typography/base_component.rbs +2 -2
- data/sig/{hakumi → hakumi_components}/typography/link/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/typography/paragraph/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/typography/text/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/typography/title/component.rbs +1 -1
- data/sig/{hakumi → hakumi_components}/upload/component.rbs +2 -2
- data/sig/{hakumi.rbs → hakumi_components.rbs} +3 -3
- metadata +340 -340
- data/app/components/hakumi/modal/confirm/component.html.erb +0 -23
- data/app/services/hakumi/component_handler.rb +0 -53
- /data/app/components/{hakumi → hakumi_components}/affix/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/anchor/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/anchor/link/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/breadcrumb/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/card/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/card/grid/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/card/meta/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/checkbox/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/color_picker/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/descriptions/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/dropdown/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/dropdown/item/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/icon/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/input/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/input/text_area/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/layout/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/layout/content/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/layout/footer/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/layout/header/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/layout/sider/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/mentions/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/menu/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/menu/group/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/menu/item/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/menu/sub_menu/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/message/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/popover/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/qr_code/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/radio/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/result/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/segmented/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/skeleton/avatar/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/skeleton/button/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/skeleton/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/skeleton/input/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/skeleton/node/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/slider/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/space/compact/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/space/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/spin/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/splitter/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/splitter/panel/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/statistic/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/steps/item/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/switch/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/table/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/timeline/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/timeline/item/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/tooltip/component.html.erb +0 -0
- /data/app/components/{hakumi → hakumi_components}/tour/component.html.erb +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module TreeSelect
|
|
5
|
-
class Component <
|
|
6
|
-
include
|
|
5
|
+
class Component < HakumiComponents::BaseComponent
|
|
6
|
+
include HakumiComponents::Concerns::FormField
|
|
7
7
|
|
|
8
8
|
SIZES = [ :small, :middle, :large ].freeze
|
|
9
9
|
VARIANTS = [ :default, :borderless ].freeze
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module Typography
|
|
5
|
-
class BaseComponent <
|
|
5
|
+
class BaseComponent < HakumiComponents::BaseComponent
|
|
6
6
|
TYPES = [ :secondary, :success, :warning, :danger ].freeze
|
|
7
7
|
|
|
8
8
|
def initialize(
|
|
@@ -101,7 +101,7 @@ module Hakumi
|
|
|
101
101
|
|
|
102
102
|
def copy_icon
|
|
103
103
|
tag.span(class: "hakumi-typography-copy", role: "button", "aria-label": "Copy") do
|
|
104
|
-
render
|
|
104
|
+
render HakumiComponents::Icon::Component.new(name: :copy)
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
<% if list_type_avatar? %>
|
|
5
5
|
<div class="hakumi-upload-avatar-wrapper" data-hakumi--upload-target="avatarWrapper" data-action="click->hakumi--upload#triggerInput">
|
|
6
|
-
<%= render
|
|
6
|
+
<%= render HakumiComponents::Avatar::Component.new(
|
|
7
7
|
icon: @avatar_icon,
|
|
8
8
|
size: @avatar_size,
|
|
9
9
|
shape: @avatar_shape,
|
|
10
10
|
data: { hakumi__upload_target: "avatar" }
|
|
11
11
|
) %>
|
|
12
12
|
<div class="hakumi-upload-avatar-overlay <%= avatar_overlay_class %>">
|
|
13
|
-
<%= render
|
|
13
|
+
<%= render HakumiComponents::Icon::Component.new(name: :camera, size: 20) %>
|
|
14
14
|
<span>Upload</span>
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
data-action="click->hakumi--upload#triggerInput dragover->hakumi--upload#dragOver dragleave->hakumi--upload#dragLeave drop->hakumi--upload#drop">
|
|
21
21
|
<div class="hakumi-upload-dragger-content">
|
|
22
22
|
<div class="hakumi-upload-dragger-icon">
|
|
23
|
-
<%= render
|
|
23
|
+
<%= render HakumiComponents::Icon::Component.new(name: :upload) %>
|
|
24
24
|
</div>
|
|
25
25
|
<div class="hakumi-upload-dragger-title">Click or drag file to this area to upload</div>
|
|
26
26
|
<div class="hakumi-upload-dragger-hint">Support for a single or bulk upload.</div>
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<div class="hakumi-upload-dragger-action">
|
|
30
|
-
<%= render
|
|
30
|
+
<%= render HakumiComponents::Button::Component.new(
|
|
31
31
|
type: :primary,
|
|
32
32
|
disabled: @disabled,
|
|
33
33
|
data: { action: "click->hakumi--upload#triggerInput:stop" }
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
</div>
|
|
39
39
|
<% elsif !inline_trigger? %>
|
|
40
40
|
<div class="hakumi-upload-select">
|
|
41
|
-
<%= render
|
|
41
|
+
<%= render HakumiComponents::Button::Component.new(
|
|
42
42
|
type: :primary,
|
|
43
43
|
disabled: @disabled,
|
|
44
44
|
data: { action: "click->hakumi--upload#triggerInput" }
|
|
@@ -67,14 +67,14 @@
|
|
|
67
67
|
class="hakumi-upload-list-item-action hakumi-upload-list-item-view"
|
|
68
68
|
data-action="click->hakumi--upload#previewFromEvent"
|
|
69
69
|
data-uid="<%= file[:uid] %>">
|
|
70
|
-
<%= render
|
|
70
|
+
<%= render HakumiComponents::Icon::Component.new(name: :eye) %>
|
|
71
71
|
</button>
|
|
72
72
|
<% end %>
|
|
73
73
|
<button type="button"
|
|
74
74
|
class="hakumi-upload-list-item-action hakumi-upload-list-item-remove"
|
|
75
75
|
data-action="click->hakumi--upload#removeFromEvent"
|
|
76
76
|
data-uid="<%= file[:uid] %>">
|
|
77
|
-
<%= render
|
|
77
|
+
<%= render HakumiComponents::Icon::Component.new(name: :delete) %>
|
|
78
78
|
</button>
|
|
79
79
|
</div>
|
|
80
80
|
<% end %>
|
|
@@ -88,14 +88,14 @@
|
|
|
88
88
|
class="hakumi-upload-list-item-action hakumi-upload-list-item-view"
|
|
89
89
|
data-action="click->hakumi--upload#previewFromEvent"
|
|
90
90
|
data-uid="<%= file[:uid] %>">
|
|
91
|
-
<%= render
|
|
91
|
+
<%= render HakumiComponents::Icon::Component.new(name: :eye) %>
|
|
92
92
|
</button>
|
|
93
93
|
<% end %>
|
|
94
94
|
<button type="button"
|
|
95
95
|
class="hakumi-upload-list-item-action hakumi-upload-list-item-remove"
|
|
96
96
|
data-action="click->hakumi--upload#removeFromEvent"
|
|
97
97
|
data-uid="<%= file[:uid] %>">
|
|
98
|
-
<%= render
|
|
98
|
+
<%= render HakumiComponents::Icon::Component.new(name: :delete) %>
|
|
99
99
|
</button>
|
|
100
100
|
</div>
|
|
101
101
|
<% end %>
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
|
|
109
109
|
<% if inline_trigger? %>
|
|
110
110
|
<li class="hakumi-upload-list-item-trigger" data-hakumi--upload-target="inlineTrigger" data-action="click->hakumi--upload#triggerInput">
|
|
111
|
-
<%= render
|
|
111
|
+
<%= render HakumiComponents::Icon::Component.new(name: :plus, size: 24) %>
|
|
112
112
|
<span>Upload</span>
|
|
113
113
|
</li>
|
|
114
114
|
<% end %>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module Upload
|
|
5
5
|
# Hakumi Upload component
|
|
6
6
|
# Provides file selection, drag-and-drop, and upload list management.
|
|
7
|
-
class Component <
|
|
7
|
+
class Component < HakumiComponents::BaseComponent
|
|
8
8
|
LIST_TYPES = %i[text picture picture_card avatar].freeze
|
|
9
9
|
|
|
10
10
|
def initialize(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
class ComponentsController < ApplicationController
|
|
5
5
|
COMPONENTS = %i[modal confirm alert drawer message admin_panel notification popconfirm popover result skeleton spin affix qr_code segmented statistic table tag timeline tree].freeze
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
# Custom FormBuilder that renders Hakumi components for form inputs.
|
|
5
5
|
# Extends Rails' ActionView::Helpers::FormBuilder to integrate seamlessly with Rails forms.
|
|
6
6
|
# Includes automatic detection of validations, I18n labels, and attribute introspection.
|
|
@@ -20,7 +20,7 @@ module Hakumi
|
|
|
20
20
|
# @return [String] Rendered HTML
|
|
21
21
|
def text_field(method, **options)
|
|
22
22
|
enhance_options_with_introspection!(method, options)
|
|
23
|
-
render_form_field(
|
|
23
|
+
render_form_field(HakumiComponents::Input::Component, method, **options)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# Renders a Hakumi password input field with visibility toggle
|
|
@@ -30,7 +30,7 @@ module Hakumi
|
|
|
30
30
|
# @return [String] Rendered HTML
|
|
31
31
|
def password_field(method, **options)
|
|
32
32
|
enhance_options_with_introspection!(method, options)
|
|
33
|
-
render_form_field(
|
|
33
|
+
render_form_field(HakumiComponents::Input::Password::Component, method, **options)
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# Renders a Hakumi textarea field
|
|
@@ -40,7 +40,7 @@ module Hakumi
|
|
|
40
40
|
# @return [String] Rendered HTML
|
|
41
41
|
def text_area(method, **options)
|
|
42
42
|
enhance_options_with_introspection!(method, options)
|
|
43
|
-
render_form_field(
|
|
43
|
+
render_form_field(HakumiComponents::Input::TextArea::Component, method, **options)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# Renders a Hakumi number input field
|
|
@@ -50,7 +50,7 @@ module Hakumi
|
|
|
50
50
|
# @return [String] Rendered HTML
|
|
51
51
|
def number_field(method, **options)
|
|
52
52
|
enhance_options_with_introspection!(method, options)
|
|
53
|
-
render_form_field(
|
|
53
|
+
render_form_field(HakumiComponents::InputNumber::Component, method, **options)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Renders a Hakumi select field
|
|
@@ -64,7 +64,7 @@ module Hakumi
|
|
|
64
64
|
enhance_options_with_introspection!(method, options)
|
|
65
65
|
|
|
66
66
|
render_form_field(
|
|
67
|
-
|
|
67
|
+
HakumiComponents::Select::Component,
|
|
68
68
|
method,
|
|
69
69
|
**options.merge(options: choices)
|
|
70
70
|
)
|
|
@@ -81,7 +81,7 @@ module Hakumi
|
|
|
81
81
|
enhance_options_with_introspection!(method, options)
|
|
82
82
|
|
|
83
83
|
render_form_field(
|
|
84
|
-
|
|
84
|
+
HakumiComponents::TreeSelect::Component,
|
|
85
85
|
method,
|
|
86
86
|
**options.merge(options: choices)
|
|
87
87
|
)
|
|
@@ -109,7 +109,7 @@ module Hakumi
|
|
|
109
109
|
config[:checked] = checked
|
|
110
110
|
|
|
111
111
|
render_form_field(
|
|
112
|
-
|
|
112
|
+
HakumiComponents::Radio::Component,
|
|
113
113
|
method,
|
|
114
114
|
config_overrides: config,
|
|
115
115
|
**options
|
|
@@ -136,7 +136,7 @@ module Hakumi
|
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
render_form_field(
|
|
139
|
-
|
|
139
|
+
HakumiComponents::Radio::Group::Component,
|
|
140
140
|
method,
|
|
141
141
|
**options.merge(options: radio_options)
|
|
142
142
|
)
|
|
@@ -155,7 +155,7 @@ module Hakumi
|
|
|
155
155
|
checked = value ? true : false
|
|
156
156
|
|
|
157
157
|
render_form_field(
|
|
158
|
-
|
|
158
|
+
HakumiComponents::Switch::Component,
|
|
159
159
|
method,
|
|
160
160
|
config_overrides: { checked: checked },
|
|
161
161
|
**options
|
|
@@ -169,7 +169,7 @@ module Hakumi
|
|
|
169
169
|
# @return [String] Rendered HTML
|
|
170
170
|
def rate_field(method, **options)
|
|
171
171
|
enhance_options_with_introspection!(method, options)
|
|
172
|
-
render_form_field(
|
|
172
|
+
render_form_field(HakumiComponents::Rate::Component, method, **options)
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
# Renders a Hakumi slider field
|
|
@@ -183,7 +183,7 @@ module Hakumi
|
|
|
183
183
|
config = field_configuration(method, options)
|
|
184
184
|
|
|
185
185
|
render_form_field(
|
|
186
|
-
|
|
186
|
+
HakumiComponents::Slider::Component,
|
|
187
187
|
method,
|
|
188
188
|
config_overrides: config,
|
|
189
189
|
**options
|
|
@@ -197,7 +197,7 @@ module Hakumi
|
|
|
197
197
|
# @return [String] Rendered HTML
|
|
198
198
|
def date_picker(method, **options)
|
|
199
199
|
enhance_options_with_introspection!(method, options)
|
|
200
|
-
render_form_field(
|
|
200
|
+
render_form_field(HakumiComponents::DatePicker::Component, method, **options)
|
|
201
201
|
end
|
|
202
202
|
|
|
203
203
|
# Renders a Hakumi mentions field (textarea with @ mention suggestions)
|
|
@@ -216,7 +216,7 @@ module Hakumi
|
|
|
216
216
|
mention_options = options.delete(:options) || []
|
|
217
217
|
|
|
218
218
|
render_form_field(
|
|
219
|
-
|
|
219
|
+
HakumiComponents::Mentions::Component,
|
|
220
220
|
method,
|
|
221
221
|
**options.merge(options: mention_options)
|
|
222
222
|
)
|
|
@@ -233,7 +233,7 @@ module Hakumi
|
|
|
233
233
|
enhance_options_with_introspection!(method, options)
|
|
234
234
|
|
|
235
235
|
render_form_field(
|
|
236
|
-
|
|
236
|
+
HakumiComponents::Autocomplete::Component,
|
|
237
237
|
method,
|
|
238
238
|
**options.merge(options: choices)
|
|
239
239
|
)
|
|
@@ -250,7 +250,7 @@ module Hakumi
|
|
|
250
250
|
enhance_options_with_introspection!(method, options)
|
|
251
251
|
|
|
252
252
|
render_form_field(
|
|
253
|
-
|
|
253
|
+
HakumiComponents::Cascader::Component,
|
|
254
254
|
method,
|
|
255
255
|
**options.merge(options: choices)
|
|
256
256
|
)
|
|
@@ -269,7 +269,7 @@ module Hakumi
|
|
|
269
269
|
checked = value ? true : false
|
|
270
270
|
|
|
271
271
|
render_form_field(
|
|
272
|
-
|
|
272
|
+
HakumiComponents::Checkbox::Component,
|
|
273
273
|
method,
|
|
274
274
|
config_overrides: { checked: checked },
|
|
275
275
|
**options
|
|
@@ -283,7 +283,7 @@ module Hakumi
|
|
|
283
283
|
# @return [String] Rendered HTML
|
|
284
284
|
def color_picker_field(method, **options)
|
|
285
285
|
enhance_options_with_introspection!(method, options)
|
|
286
|
-
render_form_field(
|
|
286
|
+
render_form_field(HakumiComponents::ColorPicker::Component, method, **options)
|
|
287
287
|
end
|
|
288
288
|
|
|
289
289
|
# Renders a Hakumi time picker field
|
|
@@ -293,7 +293,7 @@ module Hakumi
|
|
|
293
293
|
# @return [String] Rendered HTML
|
|
294
294
|
def time_picker_field(method, **options)
|
|
295
295
|
enhance_options_with_introspection!(method, options)
|
|
296
|
-
render_form_field(
|
|
296
|
+
render_form_field(HakumiComponents::TimePicker::Component, method, **options)
|
|
297
297
|
end
|
|
298
298
|
|
|
299
299
|
# Renders a Hakumi transfer field (dual list box)
|
|
@@ -307,7 +307,7 @@ module Hakumi
|
|
|
307
307
|
enhance_options_with_introspection!(method, options)
|
|
308
308
|
|
|
309
309
|
render_form_field(
|
|
310
|
-
|
|
310
|
+
HakumiComponents::Transfer::Component,
|
|
311
311
|
method,
|
|
312
312
|
**options.merge(data_source: data_source)
|
|
313
313
|
)
|
|
@@ -325,7 +325,7 @@ module Hakumi
|
|
|
325
325
|
# Upload requires action parameter
|
|
326
326
|
raise ArgumentError, "action parameter is required for upload_field" unless options[:action]
|
|
327
327
|
|
|
328
|
-
render_form_field(
|
|
328
|
+
render_form_field(HakumiComponents::Upload::Component, method, **options)
|
|
329
329
|
end
|
|
330
330
|
|
|
331
331
|
# Renders a Hakumi submit button
|
|
@@ -343,7 +343,7 @@ module Hakumi
|
|
|
343
343
|
loading = options.delete(:loading) || false
|
|
344
344
|
danger = options.delete(:danger) || false
|
|
345
345
|
|
|
346
|
-
@template.render(
|
|
346
|
+
@template.render(HakumiComponents::Button::Component.new(
|
|
347
347
|
type: button_type,
|
|
348
348
|
size: button_size,
|
|
349
349
|
html_type: :submit,
|
|
@@ -389,50 +389,50 @@ module Hakumi
|
|
|
389
389
|
|
|
390
390
|
# Auto-detect label from I18n (if not provided)
|
|
391
391
|
if options[:label].nil?
|
|
392
|
-
detected_label =
|
|
392
|
+
detected_label = HakumiComponents::Rails::AttributeIntrospection.human_attribute_name(@object, method)
|
|
393
393
|
options[:label] = detected_label if detected_label
|
|
394
394
|
end
|
|
395
395
|
|
|
396
396
|
# Auto-detect required for UI purposes (asterisk display) - NOT for HTML5 validation
|
|
397
397
|
if options[:required].nil?
|
|
398
|
-
options[:required] =
|
|
398
|
+
options[:required] = HakumiComponents::Rails::ValidationIntrospection.required?(@object, method)
|
|
399
399
|
end
|
|
400
400
|
|
|
401
401
|
# Auto-detect placeholder from I18n (if not provided)
|
|
402
402
|
if options[:placeholder].nil?
|
|
403
|
-
detected_placeholder =
|
|
403
|
+
detected_placeholder = HakumiComponents::Rails::AttributeIntrospection.placeholder(@object, method)
|
|
404
404
|
options[:placeholder] = detected_placeholder if detected_placeholder
|
|
405
405
|
end
|
|
406
406
|
|
|
407
407
|
# Auto-detect caption (hint) from I18n (if not provided)
|
|
408
408
|
if options[:caption].nil?
|
|
409
|
-
detected_hint =
|
|
409
|
+
detected_hint = HakumiComponents::Rails::AttributeIntrospection.hint(@object, method)
|
|
410
410
|
options[:caption] = detected_hint if detected_hint
|
|
411
411
|
end
|
|
412
412
|
|
|
413
413
|
# Auto-generate frontend validation rules from Rails validations
|
|
414
414
|
# If manual rules are provided, merge them with auto-detected rules
|
|
415
415
|
# Manual rules take priority over auto-detected ones for the same validation type
|
|
416
|
-
detected_rules =
|
|
416
|
+
detected_rules = HakumiComponents::Rails::ValidationMapper.to_frontend_rules(@object, method)
|
|
417
417
|
manual_rules = options[:rules]
|
|
418
418
|
|
|
419
419
|
if manual_rules.nil?
|
|
420
420
|
options[:rules] = detected_rules unless detected_rules.empty?
|
|
421
421
|
elsif !detected_rules.empty?
|
|
422
422
|
# Merge manual and auto-detected rules, with manual rules taking priority
|
|
423
|
-
options[:rules] =
|
|
423
|
+
options[:rules] = HakumiComponents::Rails::ValidationMapper.merge_rules(manual_rules, detected_rules)
|
|
424
424
|
end
|
|
425
425
|
# If manual_rules is present but detected_rules is empty, keep manual_rules as-is
|
|
426
426
|
|
|
427
427
|
# Auto-detect input type based on attribute name and validations (if not provided)
|
|
428
428
|
if options[:type].nil?
|
|
429
|
-
if
|
|
429
|
+
if HakumiComponents::Rails::ValidationIntrospection.email_field?(@object, method)
|
|
430
430
|
options[:type] = :email
|
|
431
|
-
elsif
|
|
431
|
+
elsif HakumiComponents::Rails::ValidationIntrospection.url_field?(@object, method)
|
|
432
432
|
options[:type] = :url
|
|
433
433
|
else
|
|
434
434
|
# Fallback to column type
|
|
435
|
-
detected_type =
|
|
435
|
+
detected_type = HakumiComponents::Rails::AttributeIntrospection.input_type_from_column(@object, method)
|
|
436
436
|
options[:type] = detected_type if detected_type && detected_type != :text
|
|
437
437
|
end
|
|
438
438
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module FormHelper
|
|
5
5
|
# Creates a form that uses Hakumi components.
|
|
6
|
-
# This is a wrapper around Rails' form_with that automatically sets the
|
|
6
|
+
# This is a wrapper around Rails' form_with that automatically sets the HakumiComponents::FormBuilder.
|
|
7
7
|
#
|
|
8
8
|
# @example Basic usage
|
|
9
9
|
# <%= hakumi_form_with(model: @user) do |f| %>
|
|
@@ -20,11 +20,11 @@ module Hakumi
|
|
|
20
20
|
# @option options [Object] :model Model object for the form
|
|
21
21
|
# @option options [String] :url URL to submit the form to
|
|
22
22
|
# @option options [Symbol] :method HTTP method (:get, :post, :patch, :delete)
|
|
23
|
-
# @option options [Class] :builder Custom form builder (defaults to
|
|
23
|
+
# @option options [Class] :builder Custom form builder (defaults to HakumiComponents::FormBuilder)
|
|
24
24
|
# @option options [Symbol] :layout Form layout (:horizontal, :vertical, :inline)
|
|
25
25
|
# @return [String] HTML form
|
|
26
26
|
def hakumi_form_with(**options, &block)
|
|
27
|
-
options[:builder] ||=
|
|
27
|
+
options[:builder] ||= HakumiComponents::FormBuilder
|
|
28
28
|
|
|
29
29
|
layout = options.delete(:layout)
|
|
30
30
|
if layout
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module HakumiComponents
|
|
4
|
+
class ComponentHandler
|
|
5
|
+
def initialize(component, params)
|
|
6
|
+
@component = component.to_sym
|
|
7
|
+
@params = params
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def locals
|
|
11
|
+
base_locals.merge(specific_locals)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def base_locals
|
|
17
|
+
{
|
|
18
|
+
id: @params[:id].presence || "hakumi-#{@component}-#{SecureRandom.hex(4)}"
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def specific_locals
|
|
23
|
+
component_class = resolve_component_class
|
|
24
|
+
return {} unless component_class.respond_to?(:extract_controller_locals)
|
|
25
|
+
|
|
26
|
+
component_class.extract_controller_locals(@params)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def resolve_component_class
|
|
30
|
+
case @component
|
|
31
|
+
when :modal then HakumiComponents::Modal::Component
|
|
32
|
+
when :confirm then HakumiComponents::Modal::Confirm::Component
|
|
33
|
+
when :alert then HakumiComponents::Alert::Component
|
|
34
|
+
when :drawer then HakumiComponents::Drawer::Component
|
|
35
|
+
when :message then HakumiComponents::Message::Component
|
|
36
|
+
when :notification then HakumiComponents::Notification::Component
|
|
37
|
+
when :popover then HakumiComponents::Popover::Component
|
|
38
|
+
when :progress then HakumiComponents::Progress::Component
|
|
39
|
+
when :result then HakumiComponents::Result::Component
|
|
40
|
+
when :skeleton then HakumiComponents::Skeleton::Component
|
|
41
|
+
when :spin then HakumiComponents::Spin::Component
|
|
42
|
+
when :qr_code then HakumiComponents::QrCode::Component
|
|
43
|
+
when :affix then HakumiComponents::Affix::Component
|
|
44
|
+
when :segmented then HakumiComponents::Segmented::Component
|
|
45
|
+
when :statistic then HakumiComponents::Statistic::Component
|
|
46
|
+
when :tag then HakumiComponents::Tag::Component
|
|
47
|
+
when :timeline then HakumiComponents::Timeline::Component
|
|
48
|
+
when :tree then HakumiComponents::Tree::Component
|
|
49
|
+
else nil
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module Icon
|
|
5
5
|
# Loads Ant Design icons from lib/hakumi_components/app/assets/icons
|
|
6
6
|
class Loader
|
|
7
|
-
ICONS_BASE_PATH = if defined?(
|
|
8
|
-
|
|
7
|
+
ICONS_BASE_PATH = if defined?(HakumiComponents::Engine)
|
|
8
|
+
HakumiComponents::Engine.root.join("app", "assets", "icons")
|
|
9
9
|
else
|
|
10
10
|
Rails.root.join("app", "assets", "icons")
|
|
11
11
|
end
|
|
@@ -92,4 +92,4 @@ module Hakumi
|
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
|
-
HakumiIconLoader =
|
|
95
|
+
HakumiIconLoader = HakumiComponents::Icon::Loader unless defined?(HakumiIconLoader)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
module
|
|
3
|
+
module HakumiComponents
|
|
4
4
|
module Illustrations
|
|
5
5
|
# Loads SVG illustrations stored under lib/hakumi_components/app/assets/illustrations
|
|
6
6
|
class Loader
|
|
7
|
-
ILLUSTRATIONS_PATH = if defined?(
|
|
8
|
-
|
|
7
|
+
ILLUSTRATIONS_PATH = if defined?(HakumiComponents::Engine)
|
|
8
|
+
HakumiComponents::Engine.root.join("app", "assets", "illustrations")
|
|
9
9
|
else
|
|
10
10
|
Rails.root.join("lib", "hakumi_components", "app", "assets", "illustrations")
|
|
11
11
|
end
|
|
@@ -40,4 +40,4 @@ module Hakumi
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
|
-
HakumiIllustrationLoader =
|
|
43
|
+
HakumiIllustrationLoader = HakumiComponents::Illustrations::Loader unless defined?(HakumiIllustrationLoader)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::AdminPanel::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Affix::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Alert::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Modal::Confirm::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Message::Component.new(**local_assigns) %>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
component_params = local_assigns.except(:title, :message).compact
|
|
8
8
|
%>
|
|
9
9
|
|
|
10
|
-
<%= render(
|
|
10
|
+
<%= render(HakumiComponents::Modal::Component.new(**component_params)) do |modal| %>
|
|
11
11
|
<% if title.present? %>
|
|
12
12
|
<% modal.with_header { title } %>
|
|
13
13
|
<% end %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Notification::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Popconfirm::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Popover::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::QrCode::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Result::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Segmented::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Skeleton::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Spin::Component.new(**local_assigns) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Table::Component.new(**local_assigns) %>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<% timeline_locals = local_assigns.except(:items) %>
|
|
2
2
|
<% timeline_items = Array(local_assigns[:items]) %>
|
|
3
3
|
|
|
4
|
-
<%= render
|
|
4
|
+
<%= render HakumiComponents::Timeline::Component.new(**timeline_locals) do |timeline| %>
|
|
5
5
|
<% timeline_items.each do |item| %>
|
|
6
6
|
<% item = item.with_indifferent_access %>
|
|
7
7
|
<% content = item.delete(:content) || item.delete(:body) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render HakumiComponents::Tree::Component.new(**local_assigns) %>
|