openproject-primer_view_components 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2931 -0
- data/LICENSE.txt +21 -0
- data/README.md +17 -0
- data/app/assets/javascripts/app/components/primer/alpha/action_bar_element.d.ts +16 -0
- data/app/assets/javascripts/app/components/primer/alpha/action_menu/action_menu_element.d.ts +31 -0
- data/app/assets/javascripts/app/components/primer/alpha/dropdown/menu.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/alpha/dropdown.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/alpha/image_crop.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/alpha/modal_dialog.d.ts +18 -0
- data/app/assets/javascripts/app/components/primer/alpha/nav_list.d.ts +28 -0
- data/app/assets/javascripts/app/components/primer/alpha/segmented_control.d.ts +12 -0
- data/app/assets/javascripts/app/components/primer/alpha/tab_container.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/alpha/toggle_switch.d.ts +30 -0
- data/app/assets/javascripts/app/components/primer/alpha/tool_tip.d.ts +26 -0
- data/app/assets/javascripts/app/components/primer/alpha/x_banner.d.ts +13 -0
- data/app/assets/javascripts/app/components/primer/anchored_position.d.ts +27 -0
- data/app/assets/javascripts/app/components/primer/beta/auto_complete/auto_complete.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/beta/clipboard_copy.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/beta/relative_time.d.ts +1 -0
- data/app/assets/javascripts/app/components/primer/focus_group.d.ts +19 -0
- data/app/assets/javascripts/app/components/primer/primer.d.ts +21 -0
- data/app/assets/javascripts/lib/primer/forms/primer_multi_input.d.ts +10 -0
- data/app/assets/javascripts/lib/primer/forms/primer_text_field.d.ts +1 -0
- data/app/assets/javascripts/lib/primer/forms/toggle_switch_input.d.ts +5 -0
- data/app/assets/javascripts/primer_view_components.js +2 -0
- data/app/assets/javascripts/primer_view_components.js.map +1 -0
- data/app/assets/styles/primer_view_components.css +1 -0
- data/app/assets/styles/primer_view_components.css.map +1 -0
- data/app/components/primer/alpha/action_bar/divider.rb +30 -0
- data/app/components/primer/alpha/action_bar/item.rb +26 -0
- data/app/components/primer/alpha/action_bar.css +1 -0
- data/app/components/primer/alpha/action_bar.css.json +17 -0
- data/app/components/primer/alpha/action_bar.css.map +1 -0
- data/app/components/primer/alpha/action_bar.html.erb +12 -0
- data/app/components/primer/alpha/action_bar.pcss +69 -0
- data/app/components/primer/alpha/action_bar.rb +109 -0
- data/app/components/primer/alpha/action_bar_element.d.ts +16 -0
- data/app/components/primer/alpha/action_bar_element.js +172 -0
- data/app/components/primer/alpha/action_bar_element.ts +175 -0
- data/app/components/primer/alpha/action_list/divider.rb +35 -0
- data/app/components/primer/alpha/action_list/form_wrapper.html.erb +10 -0
- data/app/components/primer/alpha/action_list/form_wrapper.rb +61 -0
- data/app/components/primer/alpha/action_list/heading.html.erb +8 -0
- data/app/components/primer/alpha/action_list/heading.rb +50 -0
- data/app/components/primer/alpha/action_list/item.html.erb +53 -0
- data/app/components/primer/alpha/action_list/item.rb +301 -0
- data/app/components/primer/alpha/action_list.css +1 -0
- data/app/components/primer/alpha/action_list.css.json +134 -0
- data/app/components/primer/alpha/action_list.css.map +1 -0
- data/app/components/primer/alpha/action_list.html.erb +20 -0
- data/app/components/primer/alpha/action_list.pcss +697 -0
- data/app/components/primer/alpha/action_list.rb +256 -0
- data/app/components/primer/alpha/action_menu/action_menu_element.d.ts +31 -0
- data/app/components/primer/alpha/action_menu/action_menu_element.js +241 -0
- data/app/components/primer/alpha/action_menu/action_menu_element.ts +252 -0
- data/app/components/primer/alpha/action_menu/list.rb +123 -0
- data/app/components/primer/alpha/action_menu.html.erb +26 -0
- data/app/components/primer/alpha/action_menu.rb +411 -0
- data/app/components/primer/alpha/auto_complete/auto_complete.html.erb +24 -0
- data/app/components/primer/alpha/auto_complete/item.rb +46 -0
- data/app/components/primer/alpha/auto_complete.css +1 -0
- data/app/components/primer/alpha/auto_complete.css.json +23 -0
- data/app/components/primer/alpha/auto_complete.css.map +1 -0
- data/app/components/primer/alpha/auto_complete.pcss +118 -0
- data/app/components/primer/alpha/auto_complete.rb +158 -0
- data/app/components/primer/alpha/banner.css +1 -0
- data/app/components/primer/alpha/banner.css.json +24 -0
- data/app/components/primer/alpha/banner.css.map +1 -0
- data/app/components/primer/alpha/banner.html.erb +33 -0
- data/app/components/primer/alpha/banner.pcss +126 -0
- data/app/components/primer/alpha/banner.rb +141 -0
- data/app/components/primer/alpha/button_marketing.css +1 -0
- data/app/components/primer/alpha/button_marketing.css.json +33 -0
- data/app/components/primer/alpha/button_marketing.css.map +1 -0
- data/app/components/primer/alpha/button_marketing.pcss +168 -0
- data/app/components/primer/alpha/button_marketing.rb +73 -0
- data/app/components/primer/alpha/check_box.rb +74 -0
- data/app/components/primer/alpha/check_box_group.rb +36 -0
- data/app/components/primer/alpha/dialog/body.rb +28 -0
- data/app/components/primer/alpha/dialog/footer.rb +34 -0
- data/app/components/primer/alpha/dialog/header.html.erb +17 -0
- data/app/components/primer/alpha/dialog/header.rb +40 -0
- data/app/components/primer/alpha/dialog.css +1 -0
- data/app/components/primer/alpha/dialog.css.json +80 -0
- data/app/components/primer/alpha/dialog.css.map +1 -0
- data/app/components/primer/alpha/dialog.html.erb +12 -0
- data/app/components/primer/alpha/dialog.pcss +482 -0
- data/app/components/primer/alpha/dialog.rb +176 -0
- data/app/components/primer/alpha/dropdown/menu.d.ts +1 -0
- data/app/components/primer/alpha/dropdown/menu.html.erb +25 -0
- data/app/components/primer/alpha/dropdown/menu.js +1 -0
- data/app/components/primer/alpha/dropdown/menu.rb +107 -0
- data/app/components/primer/alpha/dropdown/menu.ts +1 -0
- data/app/components/primer/alpha/dropdown.css +1 -0
- data/app/components/primer/alpha/dropdown.css.json +40 -0
- data/app/components/primer/alpha/dropdown.css.map +1 -0
- data/app/components/primer/alpha/dropdown.d.ts +1 -0
- data/app/components/primer/alpha/dropdown.html.erb +9 -0
- data/app/components/primer/alpha/dropdown.js +1 -0
- data/app/components/primer/alpha/dropdown.pcss +261 -0
- data/app/components/primer/alpha/dropdown.rb +154 -0
- data/app/components/primer/alpha/dropdown.ts +1 -0
- data/app/components/primer/alpha/form_button.rb +32 -0
- data/app/components/primer/alpha/form_control.html.erb +26 -0
- data/app/components/primer/alpha/form_control.rb +105 -0
- data/app/components/primer/alpha/hellip_button.rb +43 -0
- data/app/components/primer/alpha/hidden_text_expander.rb +57 -0
- data/app/components/primer/alpha/image.rb +50 -0
- data/app/components/primer/alpha/image_crop.d.ts +1 -0
- data/app/components/primer/alpha/image_crop.html.erb +12 -0
- data/app/components/primer/alpha/image_crop.js +1 -0
- data/app/components/primer/alpha/image_crop.rb +39 -0
- data/app/components/primer/alpha/image_crop.ts +1 -0
- data/app/components/primer/alpha/layout.css +1 -0
- data/app/components/primer/alpha/layout.css.json +80 -0
- data/app/components/primer/alpha/layout.css.map +1 -0
- data/app/components/primer/alpha/layout.html.erb +5 -0
- data/app/components/primer/alpha/layout.pcss +268 -0
- data/app/components/primer/alpha/layout.rb +278 -0
- data/app/components/primer/alpha/menu.css +1 -0
- data/app/components/primer/alpha/menu.css.json +28 -0
- data/app/components/primer/alpha/menu.css.map +1 -0
- data/app/components/primer/alpha/menu.html.erb +6 -0
- data/app/components/primer/alpha/menu.pcss +119 -0
- data/app/components/primer/alpha/menu.rb +76 -0
- data/app/components/primer/alpha/modal_dialog.d.ts +18 -0
- data/app/components/primer/alpha/modal_dialog.js +189 -0
- data/app/components/primer/alpha/modal_dialog.ts +202 -0
- data/app/components/primer/alpha/multi_input.rb +81 -0
- data/app/components/primer/alpha/nav_list/divider.rb +14 -0
- data/app/components/primer/alpha/nav_list/group.html.erb +7 -0
- data/app/components/primer/alpha/nav_list/group.rb +107 -0
- data/app/components/primer/alpha/nav_list/heading.rb +36 -0
- data/app/components/primer/alpha/nav_list/item.html.erb +13 -0
- data/app/components/primer/alpha/nav_list/item.rb +156 -0
- data/app/components/primer/alpha/nav_list.d.ts +28 -0
- data/app/components/primer/alpha/nav_list.html.erb +15 -0
- data/app/components/primer/alpha/nav_list.js +248 -0
- data/app/components/primer/alpha/nav_list.rb +281 -0
- data/app/components/primer/alpha/nav_list.ts +267 -0
- data/app/components/primer/alpha/navigation/tab.html.erb +11 -0
- data/app/components/primer/alpha/navigation/tab.rb +168 -0
- data/app/components/primer/alpha/octicon_symbols.html.erb +3 -0
- data/app/components/primer/alpha/octicon_symbols.rb +59 -0
- data/app/components/primer/alpha/overlay/body.rb +26 -0
- data/app/components/primer/alpha/overlay/footer.rb +41 -0
- data/app/components/primer/alpha/overlay/header.html.erb +17 -0
- data/app/components/primer/alpha/overlay/header.rb +50 -0
- data/app/components/primer/alpha/overlay.css +1 -0
- data/app/components/primer/alpha/overlay.css.json +8 -0
- data/app/components/primer/alpha/overlay.css.map +1 -0
- data/app/components/primer/alpha/overlay.html.erb +13 -0
- data/app/components/primer/alpha/overlay.pcss +30 -0
- data/app/components/primer/alpha/overlay.rb +214 -0
- data/app/components/primer/alpha/radio_button.rb +25 -0
- data/app/components/primer/alpha/radio_button_group.rb +36 -0
- data/app/components/primer/alpha/segmented_control/item.html.erb +13 -0
- data/app/components/primer/alpha/segmented_control/item.rb +30 -0
- data/app/components/primer/alpha/segmented_control.css +1 -0
- data/app/components/primer/alpha/segmented_control.css.json +33 -0
- data/app/components/primer/alpha/segmented_control.css.map +1 -0
- data/app/components/primer/alpha/segmented_control.d.ts +12 -0
- data/app/components/primer/alpha/segmented_control.html.erb +7 -0
- data/app/components/primer/alpha/segmented_control.js +47 -0
- data/app/components/primer/alpha/segmented_control.pcss +157 -0
- data/app/components/primer/alpha/segmented_control.rb +122 -0
- data/app/components/primer/alpha/segmented_control.ts +41 -0
- data/app/components/primer/alpha/select.rb +37 -0
- data/app/components/primer/alpha/submit_button.rb +32 -0
- data/app/components/primer/alpha/tab_container.d.ts +1 -0
- data/app/components/primer/alpha/tab_container.js +1 -0
- data/app/components/primer/alpha/tab_container.rb +43 -0
- data/app/components/primer/alpha/tab_container.ts +1 -0
- data/app/components/primer/alpha/tab_nav.css +1 -0
- data/app/components/primer/alpha/tab_nav.css.json +24 -0
- data/app/components/primer/alpha/tab_nav.css.map +1 -0
- data/app/components/primer/alpha/tab_nav.html.erb +11 -0
- data/app/components/primer/alpha/tab_nav.pcss +100 -0
- data/app/components/primer/alpha/tab_nav.rb +136 -0
- data/app/components/primer/alpha/tab_panels.html.erb +14 -0
- data/app/components/primer/alpha/tab_panels.rb +89 -0
- data/app/components/primer/alpha/text_area.rb +24 -0
- data/app/components/primer/alpha/text_field.css +1 -0
- data/app/components/primer/alpha/text_field.css.json +135 -0
- data/app/components/primer/alpha/text_field.css.map +1 -0
- data/app/components/primer/alpha/text_field.pcss +706 -0
- data/app/components/primer/alpha/text_field.rb +101 -0
- data/app/components/primer/alpha/toggle_switch.css +1 -0
- data/app/components/primer/alpha/toggle_switch.css.json +40 -0
- data/app/components/primer/alpha/toggle_switch.css.map +1 -0
- data/app/components/primer/alpha/toggle_switch.d.ts +30 -0
- data/app/components/primer/alpha/toggle_switch.html.erb +46 -0
- data/app/components/primer/alpha/toggle_switch.js +165 -0
- data/app/components/primer/alpha/toggle_switch.pcss +220 -0
- data/app/components/primer/alpha/toggle_switch.rb +96 -0
- data/app/components/primer/alpha/toggle_switch.ts +189 -0
- data/app/components/primer/alpha/tool_tip.d.ts +26 -0
- data/app/components/primer/alpha/tool_tip.js +427 -0
- data/app/components/primer/alpha/tool_tip.ts +430 -0
- data/app/components/primer/alpha/tooltip.rb +128 -0
- data/app/components/primer/alpha/underline_nav.css +1 -0
- data/app/components/primer/alpha/underline_nav.css.json +28 -0
- data/app/components/primer/alpha/underline_nav.css.map +1 -0
- data/app/components/primer/alpha/underline_nav.html.erb +15 -0
- data/app/components/primer/alpha/underline_nav.pcss +134 -0
- data/app/components/primer/alpha/underline_nav.rb +138 -0
- data/app/components/primer/alpha/underline_panels.html.erb +18 -0
- data/app/components/primer/alpha/underline_panels.rb +86 -0
- data/app/components/primer/alpha/x_banner.d.ts +13 -0
- data/app/components/primer/alpha/x_banner.js +49 -0
- data/app/components/primer/alpha/x_banner.ts +40 -0
- data/app/components/primer/anchored_position.d.ts +27 -0
- data/app/components/primer/anchored_position.js +147 -0
- data/app/components/primer/anchored_position.ts +153 -0
- data/app/components/primer/base_component.rb +172 -0
- data/app/components/primer/beta/auto_complete/auto_complete.d.ts +1 -0
- data/app/components/primer/beta/auto_complete/auto_complete.html.erb +28 -0
- data/app/components/primer/beta/auto_complete/auto_complete.js +1 -0
- data/app/components/primer/beta/auto_complete/auto_complete.ts +1 -0
- data/app/components/primer/beta/auto_complete/item.html.erb +21 -0
- data/app/components/primer/beta/auto_complete/item.rb +84 -0
- data/app/components/primer/beta/auto_complete.rb +218 -0
- data/app/components/primer/beta/avatar.css +1 -0
- data/app/components/primer/beta/avatar.css.json +17 -0
- data/app/components/primer/beta/avatar.css.map +1 -0
- data/app/components/primer/beta/avatar.pcss +73 -0
- data/app/components/primer/beta/avatar.rb +84 -0
- data/app/components/primer/beta/avatar_stack.css +1 -0
- data/app/components/primer/beta/avatar_stack.css.json +28 -0
- data/app/components/primer/beta/avatar_stack.css.map +1 -0
- data/app/components/primer/beta/avatar_stack.html.erb +10 -0
- data/app/components/primer/beta/avatar_stack.pcss +141 -0
- data/app/components/primer/beta/avatar_stack.rb +92 -0
- data/app/components/primer/beta/base_button.rb +56 -0
- data/app/components/primer/beta/blankslate.css +1 -0
- data/app/components/primer/beta/blankslate.css.json +22 -0
- data/app/components/primer/beta/blankslate.css.map +1 -0
- data/app/components/primer/beta/blankslate.html.erb +19 -0
- data/app/components/primer/beta/blankslate.pcss +90 -0
- data/app/components/primer/beta/blankslate.rb +238 -0
- data/app/components/primer/beta/border_box/header.html.erb +4 -0
- data/app/components/primer/beta/border_box/header.rb +52 -0
- data/app/components/primer/beta/border_box.css +1 -0
- data/app/components/primer/beta/border_box.css.json +54 -0
- data/app/components/primer/beta/border_box.css.map +1 -0
- data/app/components/primer/beta/border_box.html.erb +12 -0
- data/app/components/primer/beta/border_box.pcss +284 -0
- data/app/components/primer/beta/border_box.rb +147 -0
- data/app/components/primer/beta/breadcrumbs.css +1 -0
- data/app/components/primer/beta/breadcrumbs.css.json +11 -0
- data/app/components/primer/beta/breadcrumbs.css.map +1 -0
- data/app/components/primer/beta/breadcrumbs.html.erb +8 -0
- data/app/components/primer/beta/breadcrumbs.pcss +30 -0
- data/app/components/primer/beta/breadcrumbs.rb +82 -0
- data/app/components/primer/beta/button.css +1 -0
- data/app/components/primer/beta/button.css.json +75 -0
- data/app/components/primer/beta/button.css.map +1 -0
- data/app/components/primer/beta/button.html.erb +23 -0
- data/app/components/primer/beta/button.pcss +366 -0
- data/app/components/primer/beta/button.rb +197 -0
- data/app/components/primer/beta/button_group.css +1 -0
- data/app/components/primer/beta/button_group.css.json +14 -0
- data/app/components/primer/beta/button_group.css.map +1 -0
- data/app/components/primer/beta/button_group.html.erb +5 -0
- data/app/components/primer/beta/button_group.pcss +27 -0
- data/app/components/primer/beta/button_group.rb +59 -0
- data/app/components/primer/beta/clipboard_copy.d.ts +1 -0
- data/app/components/primer/beta/clipboard_copy.html.erb +8 -0
- data/app/components/primer/beta/clipboard_copy.js +43 -0
- data/app/components/primer/beta/clipboard_copy.rb +50 -0
- data/app/components/primer/beta/clipboard_copy.ts +55 -0
- data/app/components/primer/beta/close_button.rb +43 -0
- data/app/components/primer/beta/counter.css +1 -0
- data/app/components/primer/beta/counter.css.json +10 -0
- data/app/components/primer/beta/counter.css.map +1 -0
- data/app/components/primer/beta/counter.pcss +35 -0
- data/app/components/primer/beta/counter.rb +113 -0
- data/app/components/primer/beta/details.html.erb +8 -0
- data/app/components/primer/beta/details.rb +80 -0
- data/app/components/primer/beta/flash.css +1 -0
- data/app/components/primer/beta/flash.css.json +27 -0
- data/app/components/primer/beta/flash.css.map +1 -0
- data/app/components/primer/beta/flash.html.erb +10 -0
- data/app/components/primer/beta/flash.pcss +142 -0
- data/app/components/primer/beta/flash.rb +71 -0
- data/app/components/primer/beta/heading.rb +46 -0
- data/app/components/primer/beta/icon_button.html.erb +6 -0
- data/app/components/primer/beta/icon_button.rb +112 -0
- data/app/components/primer/beta/label.css +1 -0
- data/app/components/primer/beta/label.css.json +25 -0
- data/app/components/primer/beta/label.css.map +1 -0
- data/app/components/primer/beta/label.pcss +103 -0
- data/app/components/primer/beta/label.rb +100 -0
- data/app/components/primer/beta/link.css +1 -0
- data/app/components/primer/beta/link.css.json +19 -0
- data/app/components/primer/beta/link.css.map +1 -0
- data/app/components/primer/beta/link.pcss +64 -0
- data/app/components/primer/beta/link.rb +95 -0
- data/app/components/primer/beta/markdown.rb +290 -0
- data/app/components/primer/beta/octicon.html.erb +7 -0
- data/app/components/primer/beta/octicon.rb +88 -0
- data/app/components/primer/beta/popover.css +1 -0
- data/app/components/primer/beta/popover.css.json +39 -0
- data/app/components/primer/beta/popover.css.map +1 -0
- data/app/components/primer/beta/popover.html.erb +6 -0
- data/app/components/primer/beta/popover.pcss +225 -0
- data/app/components/primer/beta/popover.rb +127 -0
- data/app/components/primer/beta/progress_bar.css +1 -0
- data/app/components/primer/beta/progress_bar.css.json +10 -0
- data/app/components/primer/beta/progress_bar.css.map +1 -0
- data/app/components/primer/beta/progress_bar.html.erb +5 -0
- data/app/components/primer/beta/progress_bar.pcss +26 -0
- data/app/components/primer/beta/progress_bar.rb +72 -0
- data/app/components/primer/beta/relative_time.d.ts +1 -0
- data/app/components/primer/beta/relative_time.js +1 -0
- data/app/components/primer/beta/relative_time.rb +166 -0
- data/app/components/primer/beta/relative_time.ts +1 -0
- data/app/components/primer/beta/spinner.html.erb +4 -0
- data/app/components/primer/beta/spinner.rb +45 -0
- data/app/components/primer/beta/state.css +1 -0
- data/app/components/primer/beta/state.css.json +13 -0
- data/app/components/primer/beta/state.css.map +1 -0
- data/app/components/primer/beta/state.pcss +50 -0
- data/app/components/primer/beta/state.rb +76 -0
- data/app/components/primer/beta/subhead.css +1 -0
- data/app/components/primer/beta/subhead.css.json +12 -0
- data/app/components/primer/beta/subhead.css.map +1 -0
- data/app/components/primer/beta/subhead.html.erb +5 -0
- data/app/components/primer/beta/subhead.pcss +49 -0
- data/app/components/primer/beta/subhead.rb +135 -0
- data/app/components/primer/beta/text.rb +27 -0
- data/app/components/primer/beta/timeline_item.css +1 -0
- data/app/components/primer/beta/timeline_item.css.json +16 -0
- data/app/components/primer/beta/timeline_item.css.map +1 -0
- data/app/components/primer/beta/timeline_item.html.erb +5 -0
- data/app/components/primer/beta/timeline_item.pcss +93 -0
- data/app/components/primer/beta/timeline_item.rb +90 -0
- data/app/components/primer/beta/truncate.css +1 -0
- data/app/components/primer/beta/truncate.css.json +12 -0
- data/app/components/primer/beta/truncate.css.map +1 -0
- data/app/components/primer/beta/truncate.html.erb +5 -0
- data/app/components/primer/beta/truncate.pcss +31 -0
- data/app/components/primer/beta/truncate.rb +111 -0
- data/app/components/primer/blankslate_component.html.erb +25 -0
- data/app/components/primer/blankslate_component.rb +156 -0
- data/app/components/primer/box.rb +25 -0
- data/app/components/primer/button_component.html.erb +12 -0
- data/app/components/primer/button_component.rb +175 -0
- data/app/components/primer/component.rb +145 -0
- data/app/components/primer/conditional_wrapper.rb +36 -0
- data/app/components/primer/content.rb +12 -0
- data/app/components/primer/focus_group.d.ts +19 -0
- data/app/components/primer/focus_group.js +139 -0
- data/app/components/primer/focus_group.ts +133 -0
- data/app/components/primer/icon_button.html.erb +12 -0
- data/app/components/primer/icon_button.rb +108 -0
- data/app/components/primer/layout_component.html.erb +11 -0
- data/app/components/primer/layout_component.rb +73 -0
- data/app/components/primer/navigation/tab_component.rb +10 -0
- data/app/components/primer/primer.d.ts +21 -0
- data/app/components/primer/primer.js +21 -0
- data/app/components/primer/primer.pcss +42 -0
- data/app/components/primer/primer.ts +21 -0
- data/app/components/primer/tooltip.rb +91 -0
- data/app/components/primer/truncate.css +1 -0
- data/app/components/primer/truncate.css.json +13 -0
- data/app/components/primer/truncate.css.map +1 -0
- data/app/components/primer/truncate.pcss +30 -0
- data/app/components/primer/truncate.rb +52 -0
- data/app/forms/after_content_form/after_content.html.erb +1 -0
- data/app/forms/after_content_form.rb +13 -0
- data/app/forms/application_form.rb +5 -0
- data/app/forms/array_check_box_group_form/places_lopez_caption.html.erb +1 -0
- data/app/forms/array_check_box_group_form.rb +15 -0
- data/app/forms/both_types_of_caption_form/first_name_caption.html.erb +1 -0
- data/app/forms/both_types_of_caption_form.rb +13 -0
- data/app/forms/caption_template_form/age_middle_aged_caption.html.erb +1 -0
- data/app/forms/caption_template_form/age_young_caption.html.erb +1 -0
- data/app/forms/caption_template_form/cool_caption.html.erb +1 -0
- data/app/forms/caption_template_form/first_name_caption.html.erb +1 -0
- data/app/forms/caption_template_form.rb +22 -0
- data/app/forms/check_box_group_form.rb +28 -0
- data/app/forms/check_box_with_nested_form.rb +39 -0
- data/app/forms/composed_form.rb +14 -0
- data/app/forms/example_toggle_switch_form/example_field_caption.html.erb +1 -0
- data/app/forms/example_toggle_switch_form.rb +8 -0
- data/app/forms/first_name_form.rb +13 -0
- data/app/forms/horizontal_form.rb +34 -0
- data/app/forms/immediate_validation_form.rb +29 -0
- data/app/forms/invalid_form.rb +21 -0
- data/app/forms/last_name_form.rb +13 -0
- data/app/forms/multi_input_form.rb +27 -0
- data/app/forms/multi_text_field_form.rb +27 -0
- data/app/forms/name_with_question_mark_form/enabled_caption.html.erb +1 -0
- data/app/forms/name_with_question_mark_form.rb +11 -0
- data/app/forms/radio_button_group_form.rb +12 -0
- data/app/forms/radio_button_with_nested_form.rb +39 -0
- data/app/forms/select_form.rb +12 -0
- data/app/forms/single_text_field_form.rb +13 -0
- data/app/forms/submit_button_form.rb +26 -0
- data/app/forms/text_field_and_checkbox_form.rb +19 -0
- data/app/helpers/primer/form_helper.rb +23 -0
- data/app/lib/primer/attributes_helper.rb +105 -0
- data/app/lib/primer/audited/dsl.rb +32 -0
- data/app/lib/primer/class_name_helper.rb +29 -0
- data/app/lib/primer/css/layout.css +1541 -0
- data/app/lib/primer/css/layout.css.json +316 -0
- data/app/lib/primer/css/utilities.css +7304 -0
- data/app/lib/primer/css/utilities.css.json +1659 -0
- data/app/lib/primer/fetch_or_fallback_helper.rb +65 -0
- data/app/lib/primer/join_style_arguments_helper.rb +14 -0
- data/app/lib/primer/octicon/cache.rb +44 -0
- data/app/lib/primer/status/dsl.rb +44 -0
- data/app/lib/primer/tab_nav_helper.rb +35 -0
- data/app/lib/primer/tabbed_component_helper.rb +39 -0
- data/app/lib/primer/test_selector_helper.rb +20 -0
- data/app/lib/primer/underline_nav_helper.rb +44 -0
- data/app/lib/primer/view_helper.rb +21 -0
- data/lib/postcss_mixins/activeIndicatorLine.pcss +11 -0
- data/lib/postcss_mixins/clearfix.pcss +12 -0
- data/lib/postcss_mixins/focusBoxShadowInset.pcss +6 -0
- data/lib/postcss_mixins/focusOutline.pcss +5 -0
- data/lib/postcss_mixins/focusOutlineOnEmphasis.pcss +6 -0
- data/lib/postcss_mixins/minTouchTarget.js +20 -0
- data/lib/postcss_mixins/targetBoxShadow.pcss +6 -0
- data/lib/primer/accessibility.rb +74 -0
- data/lib/primer/classify/utilities.rb +201 -0
- data/lib/primer/classify/utilities.yml +1879 -0
- data/lib/primer/classify/validation.rb +18 -0
- data/lib/primer/classify.rb +135 -0
- data/lib/primer/deprecations.rb +99 -0
- data/lib/primer/deprecations.yml +45 -0
- data/lib/primer/example_image.rb +8 -0
- data/lib/primer/form_components.rb +57 -0
- data/lib/primer/forms/acts_as_component.rb +129 -0
- data/lib/primer/forms/base.html.erb +8 -0
- data/lib/primer/forms/base.rb +133 -0
- data/lib/primer/forms/base_component.rb +76 -0
- data/lib/primer/forms/buffer_rewriter.rb +51 -0
- data/lib/primer/forms/builder.rb +71 -0
- data/lib/primer/forms/button.html.erb +4 -0
- data/lib/primer/forms/button.rb +66 -0
- data/lib/primer/forms/caption.html.erb +10 -0
- data/lib/primer/forms/caption.rb +29 -0
- data/lib/primer/forms/check_box.html.erb +16 -0
- data/lib/primer/forms/check_box.rb +46 -0
- data/lib/primer/forms/check_box_group.html.erb +17 -0
- data/lib/primer/forms/check_box_group.rb +19 -0
- data/lib/primer/forms/dsl/button_input.rb +29 -0
- data/lib/primer/forms/dsl/check_box_group_input.rb +53 -0
- data/lib/primer/forms/dsl/check_box_input.rb +54 -0
- data/lib/primer/forms/dsl/form_object.rb +25 -0
- data/lib/primer/forms/dsl/form_reference_input.rb +59 -0
- data/lib/primer/forms/dsl/hidden_input.rb +29 -0
- data/lib/primer/forms/dsl/input.rb +315 -0
- data/lib/primer/forms/dsl/input_group.rb +34 -0
- data/lib/primer/forms/dsl/input_methods.rb +139 -0
- data/lib/primer/forms/dsl/multi_input.rb +55 -0
- data/lib/primer/forms/dsl/radio_button_group_input.rb +37 -0
- data/lib/primer/forms/dsl/radio_button_input.rb +37 -0
- data/lib/primer/forms/dsl/select_input.rb +61 -0
- data/lib/primer/forms/dsl/submit_button_input.rb +29 -0
- data/lib/primer/forms/dsl/text_area_input.rb +33 -0
- data/lib/primer/forms/dsl/text_field_input.rb +86 -0
- data/lib/primer/forms/dsl/toggle_switch_input.rb +39 -0
- data/lib/primer/forms/form_control.html.erb +20 -0
- data/lib/primer/forms/form_control.rb +28 -0
- data/lib/primer/forms/form_list.html.erb +5 -0
- data/lib/primer/forms/form_list.rb +21 -0
- data/lib/primer/forms/form_reference.html.erb +3 -0
- data/lib/primer/forms/form_reference.rb +18 -0
- data/lib/primer/forms/group.html.erb +5 -0
- data/lib/primer/forms/group.rb +27 -0
- data/lib/primer/forms/hidden_field.html.erb +1 -0
- data/lib/primer/forms/hidden_field.rb +15 -0
- data/lib/primer/forms/multi.html.erb +7 -0
- data/lib/primer/forms/multi.rb +16 -0
- data/lib/primer/forms/primer_base_component_wrapper.html.erb +3 -0
- data/lib/primer/forms/primer_base_component_wrapper.rb +24 -0
- data/lib/primer/forms/primer_multi_input.d.ts +10 -0
- data/lib/primer/forms/primer_multi_input.js +45 -0
- data/lib/primer/forms/primer_multi_input.ts +46 -0
- data/lib/primer/forms/primer_text_field.d.ts +1 -0
- data/lib/primer/forms/primer_text_field.js +73 -0
- data/lib/primer/forms/primer_text_field.ts +56 -0
- data/lib/primer/forms/radio_button.html.erb +16 -0
- data/lib/primer/forms/radio_button.rb +29 -0
- data/lib/primer/forms/radio_button_group.html.erb +17 -0
- data/lib/primer/forms/radio_button_group.rb +19 -0
- data/lib/primer/forms/select.html.erb +5 -0
- data/lib/primer/forms/select.rb +29 -0
- data/lib/primer/forms/separator.html.erb +1 -0
- data/lib/primer/forms/separator.rb +8 -0
- data/lib/primer/forms/spacing_wrapper.html.erb +3 -0
- data/lib/primer/forms/spacing_wrapper.rb +8 -0
- data/lib/primer/forms/submit_button.html.erb +1 -0
- data/lib/primer/forms/submit_button.rb +14 -0
- data/lib/primer/forms/text_area.html.erb +5 -0
- data/lib/primer/forms/text_area.rb +20 -0
- data/lib/primer/forms/text_field.html.erb +17 -0
- data/lib/primer/forms/text_field.rb +46 -0
- data/lib/primer/forms/toggle_switch.html.erb +22 -0
- data/lib/primer/forms/toggle_switch.rb +21 -0
- data/lib/primer/forms/toggle_switch_form.rb +81 -0
- data/lib/primer/forms/toggle_switch_input.d.ts +5 -0
- data/lib/primer/forms/toggle_switch_input.js +34 -0
- data/lib/primer/forms/toggle_switch_input.ts +26 -0
- data/lib/primer/forms/utils.rb +48 -0
- data/lib/primer/static/generate_arguments.rb +55 -0
- data/lib/primer/static/generate_audited_at.rb +17 -0
- data/lib/primer/static/generate_constants.rb +19 -0
- data/lib/primer/static/generate_info_arch.rb +160 -0
- data/lib/primer/static/generate_previews.rb +61 -0
- data/lib/primer/static/generate_statuses.rb +17 -0
- data/lib/primer/static.rb +72 -0
- data/lib/primer/view_components/audited.rb +14 -0
- data/lib/primer/view_components/constants.rb +55 -0
- data/lib/primer/view_components/engine.rb +69 -0
- data/lib/primer/view_components/linters/accessibility.yml +9 -0
- data/lib/primer/view_components/linters/argument_mappers/base.rb +100 -0
- data/lib/primer/view_components/linters/argument_mappers/button.rb +72 -0
- data/lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb +21 -0
- data/lib/primer/view_components/linters/argument_mappers/close_button.rb +43 -0
- data/lib/primer/view_components/linters/argument_mappers/conversion_error.rb +10 -0
- data/lib/primer/view_components/linters/argument_mappers/flash.rb +32 -0
- data/lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb +67 -0
- data/lib/primer/view_components/linters/argument_mappers/label.rb +56 -0
- data/lib/primer/view_components/linters/argument_mappers/system_arguments.rb +48 -0
- data/lib/primer/view_components/linters/autocorrectable.rb +32 -0
- data/lib/primer/view_components/linters/base_linter.rb +190 -0
- data/lib/primer/view_components/linters/blankslate_api_migration.rb +152 -0
- data/lib/primer/view_components/linters/blankslate_component_migration_counter.rb +14 -0
- data/lib/primer/view_components/linters/breadcrumbs_component_migration_counter.rb +14 -0
- data/lib/primer/view_components/linters/button_component_migration_counter.rb +26 -0
- data/lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb +20 -0
- data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +121 -0
- data/lib/primer/view_components/linters/deprecated_components_counter.rb +84 -0
- data/lib/primer/view_components/linters/details_menu_migration.rb +35 -0
- data/lib/primer/view_components/linters/disallow_action_list.rb +73 -0
- data/lib/primer/view_components/linters/disallow_component_css_counter.rb +69 -0
- data/lib/primer/view_components/linters/flash_migration_counter.rb +36 -0
- data/lib/primer/view_components/linters/helpers/deprecated_components_helpers.rb +20 -0
- data/lib/primer/view_components/linters/helpers/rubocop_helpers.rb +14 -0
- data/lib/primer/view_components/linters/helpers/rule_helpers.rb +39 -0
- data/lib/primer/view_components/linters/label_component_migration_counter.rb +24 -0
- data/lib/primer/view_components/linters/migrate_deprecated_flash_arguments.rb +140 -0
- data/lib/primer/view_components/linters/severity_schema.rb +14 -0
- data/lib/primer/view_components/linters/subhead_component_migration_counter.rb +14 -0
- data/lib/primer/view_components/linters/super_in_component_templates.rb +65 -0
- data/lib/primer/view_components/linters/tag_tree_helpers.rb +61 -0
- data/lib/primer/view_components/linters/tooltipped_migration.rb +35 -0
- data/lib/primer/view_components/linters/two_column_layout_migration_counter.rb +158 -0
- data/lib/primer/view_components/linters.rb +3 -0
- data/lib/primer/view_components/statuses.rb +14 -0
- data/lib/primer/view_components/version.rb +18 -0
- data/lib/primer/view_components.rb +15 -0
- data/lib/primer/yard/backend.rb +24 -0
- data/lib/primer/yard/component_manifest.rb +144 -0
- data/lib/primer/yard/component_ref.rb +54 -0
- data/lib/primer/yard/docs_helper.rb +98 -0
- data/lib/primer/yard/info_arch_docs_helper.rb +31 -0
- data/lib/primer/yard/legacy_gatsby_backend.rb +233 -0
- data/lib/primer/yard/lookbook_docs_helper.rb +32 -0
- data/lib/primer/yard/lookbook_pages_backend.rb +231 -0
- data/lib/primer/yard/registry.rb +136 -0
- data/lib/primer/yard/renders_many_handler.rb +23 -0
- data/lib/primer/yard/renders_one_handler.rb +23 -0
- data/lib/primer/yard.rb +20 -0
- data/lib/rubocop/config/default.yml +20 -0
- data/lib/rubocop/cop/primer/base_cop.rb +28 -0
- data/lib/rubocop/cop/primer/component_name_migration.rb +37 -0
- data/lib/rubocop/cop/primer/deprecated_arguments.rb +317 -0
- data/lib/rubocop/cop/primer/deprecated_button_arguments.rb +51 -0
- data/lib/rubocop/cop/primer/deprecated_components.rb +49 -0
- data/lib/rubocop/cop/primer/deprecated_label_schemes.rb +68 -0
- data/lib/rubocop/cop/primer/deprecated_label_variants.rb +71 -0
- data/lib/rubocop/cop/primer/deprecated_layout_component.rb +30 -0
- data/lib/rubocop/cop/primer/no_tag_memoize.rb +43 -0
- data/lib/rubocop/cop/primer/primer_octicon.rb +217 -0
- data/lib/rubocop/cop/primer/system_argument_instead_of_class.rb +57 -0
- data/lib/rubocop/cop/primer/test_selector.rb +48 -0
- data/lib/rubocop/cop/primer.rb +3 -0
- data/lib/tasks/custom_utilities.yml +372 -0
- data/previews/pages/forms/01_introduction.md.erb +44 -0
- data/previews/pages/forms/02_getting_started.md.erb +125 -0
- data/previews/pages/forms/03_caption_templates.md.erb +30 -0
- data/previews/pages/forms/04_after_content.md.erb +39 -0
- data/previews/pages/forms/05_groups_layouts.md.erb +22 -0
- data/previews/pages/forms/06_miscellaneous_inputs.md.erb +43 -0
- data/previews/pages/forms/07_toggle_switch_forms.md.erb +58 -0
- data/previews/pages/forms/08_validations.md.erb +28 -0
- data/previews/pages/forms/09_compound_forms.md.erb +97 -0
- data/previews/primer/alpha/action_bar_preview/inline.html.erb +16 -0
- data/previews/primer/alpha/action_bar_preview.rb +77 -0
- data/previews/primer/alpha/action_list_preview.rb +464 -0
- data/previews/primer/alpha/action_menu_preview/align_end.html.erb +6 -0
- data/previews/primer/alpha/action_menu_preview/content_labels.html.erb +9 -0
- data/previews/primer/alpha/action_menu_preview/multiple_select_form.html.erb +13 -0
- data/previews/primer/alpha/action_menu_preview/opens_dialog.html.erb +21 -0
- data/previews/primer/alpha/action_menu_preview/single_select_form.html.erb +13 -0
- data/previews/primer/alpha/action_menu_preview/submitting_forms.html.erb +15 -0
- data/previews/primer/alpha/action_menu_preview/two_menus.html.erb +13 -0
- data/previews/primer/alpha/action_menu_preview/with_actions.html.erb +21 -0
- data/previews/primer/alpha/action_menu_preview.rb +328 -0
- data/previews/primer/alpha/auto_complete_preview.rb +121 -0
- data/previews/primer/alpha/banner_preview/with_action_button.html.erb +4 -0
- data/previews/primer/alpha/banner_preview/with_action_content.html.erb +6 -0
- data/previews/primer/alpha/banner_preview.rb +102 -0
- data/previews/primer/alpha/button_marketing_preview.rb +65 -0
- data/previews/primer/alpha/check_box_group_preview.rb +90 -0
- data/previews/primer/alpha/check_box_preview.rb +68 -0
- data/previews/primer/alpha/dialog_preview/body_has_scrollbar_overflow.html.erb +9 -0
- data/previews/primer/alpha/dialog_preview/custom_header.html.erb +7 -0
- data/previews/primer/alpha/dialog_preview/nested_dialog.html.erb +14 -0
- data/previews/primer/alpha/dialog_preview/test.html.erb +7 -0
- data/previews/primer/alpha/dialog_preview/with_footer.html.erb +8 -0
- data/previews/primer/alpha/dialog_preview/with_form.html.erb +12 -0
- data/previews/primer/alpha/dialog_preview/with_text_input.html.erb +10 -0
- data/previews/primer/alpha/dialog_preview.rb +154 -0
- data/previews/primer/alpha/dropdown_preview.rb +211 -0
- data/previews/primer/alpha/form_control_preview/playground.html.erb +9 -0
- data/previews/primer/alpha/form_control_preview.rb +106 -0
- data/previews/primer/alpha/hellip_button_preview.rb +26 -0
- data/previews/primer/alpha/hidden_text_expander_preview.rb +23 -0
- data/previews/primer/alpha/image_crop_preview.rb +31 -0
- data/previews/primer/alpha/layout_preview.rb +215 -0
- data/previews/primer/alpha/menu_preview/default.html.erb +17 -0
- data/previews/primer/alpha/menu_preview/playground.html.erb +17 -0
- data/previews/primer/alpha/menu_preview.rb +15 -0
- data/previews/primer/alpha/multi_input_preview/playground.html.erb +41 -0
- data/previews/primer/alpha/multi_input_preview.rb +84 -0
- data/previews/primer/alpha/nav_list_preview/trailing_action.html.erb +19 -0
- data/previews/primer/alpha/nav_list_preview.rb +125 -0
- data/previews/primer/alpha/overlay_preview/middle_of_page.html.erb +17 -0
- data/previews/primer/alpha/overlay_preview/middle_of_page_with_relative_container.html.erb +19 -0
- data/previews/primer/alpha/overlay_preview.rb +179 -0
- data/previews/primer/alpha/radio_button_group_preview.rb +85 -0
- data/previews/primer/alpha/radio_button_preview.rb +72 -0
- data/previews/primer/alpha/segmented_control_preview/with_label_and_caption.html.erb +9 -0
- data/previews/primer/alpha/segmented_control_preview/with_subhead_actions.html.erb +11 -0
- data/previews/primer/alpha/segmented_control_preview.rb +183 -0
- data/previews/primer/alpha/select_preview.rb +136 -0
- data/previews/primer/alpha/tab_nav_preview/with_extra.html.erb +8 -0
- data/previews/primer/alpha/tab_nav_preview.rb +63 -0
- data/previews/primer/alpha/tab_panels_preview/with_extra.html.erb +17 -0
- data/previews/primer/alpha/tab_panels_preview.rb +44 -0
- data/previews/primer/alpha/text_area_preview.rb +94 -0
- data/previews/primer/alpha/text_field_preview.rb +194 -0
- data/previews/primer/alpha/toggle_switch_preview.rb +63 -0
- data/previews/primer/alpha/tooltip_preview/tooltip_inside_primer_overlay.html.erb +20 -0
- data/previews/primer/alpha/tooltip_preview/with_multiple_on_a_page.html.erb +14 -0
- data/previews/primer/alpha/tooltip_preview/with_right_most_position.html.erb +7 -0
- data/previews/primer/alpha/tooltip_preview.rb +88 -0
- data/previews/primer/alpha/underline_nav_preview/default.html.erb +8 -0
- data/previews/primer/alpha/underline_nav_preview/playground.html.erb +8 -0
- data/previews/primer/alpha/underline_nav_preview.rb +58 -0
- data/previews/primer/alpha/underline_panels_preview.rb +38 -0
- data/previews/primer/beta/auto_complete_item_preview/default.html.erb +9 -0
- data/previews/primer/beta/auto_complete_item_preview/playground.html.erb +9 -0
- data/previews/primer/beta/auto_complete_item_preview/with_description.html.erb +11 -0
- data/previews/primer/beta/auto_complete_item_preview.rb +57 -0
- data/previews/primer/beta/auto_complete_preview/with_submit_button.html.erb +20 -0
- data/previews/primer/beta/auto_complete_preview.rb +287 -0
- data/previews/primer/beta/avatar_preview.rb +92 -0
- data/previews/primer/beta/avatar_stack_preview.rb +104 -0
- data/previews/primer/beta/base_button_preview.rb +33 -0
- data/previews/primer/beta/blankslate_preview.rb +139 -0
- data/previews/primer/beta/border_box_preview.rb +102 -0
- data/previews/primer/beta/breadcrumbs_preview.rb +31 -0
- data/previews/primer/beta/button_group_preview/action_menus.html.erb +8 -0
- data/previews/primer/beta/button_group_preview.rb +74 -0
- data/previews/primer/beta/button_preview/all_schemes.html.erb +30 -0
- data/previews/primer/beta/button_preview/invisible_all_visuals.html.erb +54 -0
- data/previews/primer/beta/button_preview/leading_visual.html.erb +10 -0
- data/previews/primer/beta/button_preview/trailing_action.html.erb +10 -0
- data/previews/primer/beta/button_preview/trailing_counter.html.erb +11 -0
- data/previews/primer/beta/button_preview/trailing_visual.html.erb +11 -0
- data/previews/primer/beta/button_preview/with_tooltip.html.erb +10 -0
- data/previews/primer/beta/button_preview.rb +324 -0
- data/previews/primer/beta/clipboard_copy_preview/element.html.erb +2 -0
- data/previews/primer/beta/clipboard_copy_preview.rb +41 -0
- data/previews/primer/beta/close_button_preview.rb +24 -0
- data/previews/primer/beta/counter_preview.rb +93 -0
- data/previews/primer/beta/details_preview.rb +63 -0
- data/previews/primer/beta/flash_preview.rb +77 -0
- data/previews/primer/beta/heading_preview.rb +25 -0
- data/previews/primer/beta/icon_button_preview.rb +113 -0
- data/previews/primer/beta/label_preview.rb +117 -0
- data/previews/primer/beta/link_preview.rb +71 -0
- data/previews/primer/beta/markdown_preview.rb +294 -0
- data/previews/primer/beta/octicon_preview.rb +25 -0
- data/previews/primer/beta/popover_preview.rb +85 -0
- data/previews/primer/beta/progress_bar_preview.rb +64 -0
- data/previews/primer/beta/relative_time_preview.rb +286 -0
- data/previews/primer/beta/spinner_preview.rb +23 -0
- data/previews/primer/beta/state_preview.rb +72 -0
- data/previews/primer/beta/subhead_preview/actions.html.erb +14 -0
- data/previews/primer/beta/subhead_preview.rb +103 -0
- data/previews/primer/beta/text_preview.rb +25 -0
- data/previews/primer/beta/timeline_item_preview.rb +31 -0
- data/previews/primer/beta/truncate_preview.rb +55 -0
- data/previews/primer/box_preview.rb +30 -0
- data/previews/primer/forms_preview/after_content_form.html.erb +3 -0
- data/previews/primer/forms_preview/array_check_box_group_form.html.erb +3 -0
- data/previews/primer/forms_preview/caption_template_form.html.erb +3 -0
- data/previews/primer/forms_preview/check_box_group_form.html.erb +3 -0
- data/previews/primer/forms_preview/check_box_with_nested_form.html.erb +3 -0
- data/previews/primer/forms_preview/composed_form.html.erb +4 -0
- data/previews/primer/forms_preview/example_toggle_switch_form.html.erb +3 -0
- data/previews/primer/forms_preview/horizontal_form.html.erb +3 -0
- data/previews/primer/forms_preview/immediate_validation_form.html.erb +3 -0
- data/previews/primer/forms_preview/invalid_form.html.erb +3 -0
- data/previews/primer/forms_preview/multi_input_form.html.erb +14 -0
- data/previews/primer/forms_preview/multi_text_field_form.html.erb +3 -0
- data/previews/primer/forms_preview/name_with_question_mark_form.html.erb +3 -0
- data/previews/primer/forms_preview/radio_button_group_form.html.erb +3 -0
- data/previews/primer/forms_preview/radio_button_with_nested_form.html.erb +3 -0
- data/previews/primer/forms_preview/select_form.html.erb +3 -0
- data/previews/primer/forms_preview/single_text_field_form.html.erb +3 -0
- data/previews/primer/forms_preview/submit_button_form.html.erb +3 -0
- data/previews/primer/forms_preview/text_field_and_checkbox_form.html.erb +3 -0
- data/previews/primer/forms_preview.rb +44 -0
- data/previews/primer/url_helpers.rb +15 -0
- data/static/arguments.json +4501 -0
- data/static/assets/view-components.svg +18 -0
- data/static/audited_at.json +107 -0
- data/static/classes.json +606 -0
- data/static/constants.json +1335 -0
- data/static/info_arch.json +14465 -0
- data/static/previews.json +6408 -0
- data/static/statuses.json +107 -0
- metadata +1145 -0
@@ -0,0 +1,158 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module Alpha
|
5
|
+
# Use `AutoComplete` to provide a user with a list of selectable suggestions that appear when they type into the
|
6
|
+
# input field. This list is populated by server search results.
|
7
|
+
# @accessibility
|
8
|
+
# Always set an accessible label to help the user interact with the component.
|
9
|
+
#
|
10
|
+
# * `label_text` is required and visible by default.
|
11
|
+
# * If you must use a non-visible label, set `is_label_visible` to `false`.
|
12
|
+
# However, please note that a visible label should almost always
|
13
|
+
# be used unless there is compelling reason not to. A placeholder is not a label.
|
14
|
+
class AutoComplete < Primer::Component
|
15
|
+
status :deprecated
|
16
|
+
|
17
|
+
# Customizable results list.
|
18
|
+
#
|
19
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
20
|
+
renders_one :results, lambda { |**system_arguments|
|
21
|
+
deny_tag_argument(**system_arguments)
|
22
|
+
system_arguments[:tag] = :ul
|
23
|
+
system_arguments[:id] = @list_id
|
24
|
+
system_arguments[:classes] = class_names(
|
25
|
+
"autocomplete-results",
|
26
|
+
system_arguments[:classes]
|
27
|
+
)
|
28
|
+
Primer::BaseComponent.new(**system_arguments)
|
29
|
+
}
|
30
|
+
|
31
|
+
# Customizable input used to search for results.
|
32
|
+
# It is preferred to use this slot sparingly - it will be created by default if not explicity added.
|
33
|
+
#
|
34
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
35
|
+
renders_one :input, lambda { |**system_arguments|
|
36
|
+
sanitized_args = deny_tag_argument(**system_arguments)
|
37
|
+
sanitized_args = deny_single_argument(:autofocus, "autofocus is not allowed for accessibility reasons. See https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus#accessibility_considerations for more information.", **sanitized_args)
|
38
|
+
deny_aria_key(
|
39
|
+
:label,
|
40
|
+
"instead of `aria-label`, include `label_text` and set `is_label_visible` to `false` on the component initializer.",
|
41
|
+
**sanitized_args
|
42
|
+
)
|
43
|
+
deny_single_argument(
|
44
|
+
:id,
|
45
|
+
"`id` will always be set to @input_id.",
|
46
|
+
**sanitized_args
|
47
|
+
)
|
48
|
+
deny_single_argument(
|
49
|
+
:name,
|
50
|
+
"Set @input_name on the component initializer instead with `input_name`.",
|
51
|
+
**sanitized_args
|
52
|
+
)
|
53
|
+
sanitized_args[:id] = @input_id
|
54
|
+
sanitized_args[:name] = @input_name
|
55
|
+
sanitized_args[:tag] = :input
|
56
|
+
sanitized_args[:autocomplete] = "off"
|
57
|
+
sanitized_args[:type] = :text
|
58
|
+
sanitized_args[:classes] = class_names(
|
59
|
+
"form-control",
|
60
|
+
sanitized_args[:classes]
|
61
|
+
)
|
62
|
+
Primer::BaseComponent.new(**sanitized_args)
|
63
|
+
}
|
64
|
+
|
65
|
+
# @example Default
|
66
|
+
# @description
|
67
|
+
# Labels are stacked by default.
|
68
|
+
# @code
|
69
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", input_id: "fruits-input--default", list_id: "fruits-popup--default")) %>
|
70
|
+
#
|
71
|
+
# @example With inline label
|
72
|
+
# @description
|
73
|
+
# Labels can be inline by setting `is_label_inline: true`. However, labels will always become stacked on smaller screen sizes.
|
74
|
+
# @code
|
75
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", is_label_inline: true, input_id: "fruits-input--inline-label", list_id: "fruits-popup--inline-label")) %>
|
76
|
+
#
|
77
|
+
# @example With non-visible label
|
78
|
+
# @description
|
79
|
+
# A non-visible label may be rendered with `is_label_visible: false`, but it is highly discouraged. See <%= link_to_accessibility %>.
|
80
|
+
# @code
|
81
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", input_id: "fruits-input--non-visible-label", list_id: "fruits-popup--non-visible-label", is_label_visible: false)) %>
|
82
|
+
#
|
83
|
+
# @example With icon
|
84
|
+
# @description
|
85
|
+
# To display a search icon, set `with_icon` to `true`.
|
86
|
+
# @code
|
87
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", list_id: "fruits-popup--icon", input_id: "fruits-input--icon", with_icon: true)) %>
|
88
|
+
#
|
89
|
+
# @example With icon and non-visible label
|
90
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", list_id: "fruits-popup--icon-no-label", input_id: "fruits-input--icon-no-label", with_icon: true, is_label_visible: false)) %>
|
91
|
+
#
|
92
|
+
# @example With clear button
|
93
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", input_id: "fruits-input--clear", list_id: "fruits-popup--clear", is_clearable: true)) %>
|
94
|
+
#
|
95
|
+
# @example With custom classes for the input
|
96
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", input_id: "fruits-input--custom-input", list_id: "fruits-popup--custom-input")) do |component| %>
|
97
|
+
# <% component.with_input(classes: "custom-class") %>
|
98
|
+
# <% end %>
|
99
|
+
#
|
100
|
+
# @example With custom classes for the results
|
101
|
+
# <%= render(Primer::Alpha::AutoComplete.new(label_text: "Fruits", src: "/view-components/rails-app/auto_complete?version=alpha", input_id: "fruits-input--custom-results", list_id: "fruits-popup--custom-results")) do |component| %>
|
102
|
+
# <% component.with_results(classes: "custom-class") do %>
|
103
|
+
# <%= render(Primer::Alpha::AutoComplete::Item.new(selected: true, value: "apple")) do %>
|
104
|
+
# Apple
|
105
|
+
# <% end %>
|
106
|
+
# <%= render(Primer::Alpha::AutoComplete::Item.new(value: "orange")) do %>
|
107
|
+
# Orange
|
108
|
+
# <% end %>
|
109
|
+
# <% end %>
|
110
|
+
# <% end %>
|
111
|
+
#
|
112
|
+
# @param label_text [String] The label of the input.
|
113
|
+
# @param src [String] The route to query.
|
114
|
+
# @param input_id [String] Id of the input element.
|
115
|
+
# @param input_name [String] Optional name of the input element, defaults to `input_id` when not set.
|
116
|
+
# @param list_id [String] Id of the list element.
|
117
|
+
# @param with_icon [Boolean] Controls if a search icon is visible, defaults to `false`.
|
118
|
+
# @param is_label_visible [Boolean] Controls if the label is visible. If `false`, screen reader only text will be added.
|
119
|
+
# @param is_clearable [Boolean] Adds optional clear button.
|
120
|
+
# @param is_label_inline [Boolean] Controls if the label is inline. On smaller screens, label will always become stacked.
|
121
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
122
|
+
def initialize(label_text:, src:, list_id:, input_id:, input_name: nil, is_label_visible: true, is_label_inline: false, with_icon: false, is_clearable: false, **system_arguments)
|
123
|
+
@label_text = label_text
|
124
|
+
@list_id = list_id
|
125
|
+
@input_id = input_id
|
126
|
+
@input_name = input_name || input_id
|
127
|
+
@is_label_visible = is_label_visible
|
128
|
+
@with_icon = with_icon
|
129
|
+
@is_clearable = is_clearable
|
130
|
+
@label_classes = label_classes(is_label_visible: is_label_visible, is_label_inline: is_label_inline)
|
131
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
132
|
+
@system_arguments[:tag] = "auto-complete"
|
133
|
+
@system_arguments[:src] = src
|
134
|
+
@system_arguments[:for] = list_id
|
135
|
+
end
|
136
|
+
|
137
|
+
# add `input` and `results` without needing to explicitly call them in the view
|
138
|
+
def before_render
|
139
|
+
with_results(classes: "") unless results?
|
140
|
+
with_input(classes: "") unless input?
|
141
|
+
end
|
142
|
+
|
143
|
+
private
|
144
|
+
|
145
|
+
# Private: determines the label classes based on component configration.
|
146
|
+
#
|
147
|
+
# If the label is not visible, return an empty string.
|
148
|
+
#
|
149
|
+
# @param args [Hash] The component configuration.
|
150
|
+
# @return [String] The label classes.
|
151
|
+
def label_classes(**args)
|
152
|
+
return "" if args[:is_label_visible] == false
|
153
|
+
|
154
|
+
args[:is_label_inline] ? "autocomplete-label-inline" : "autocomplete-label-stacked"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
.Banner{background-image:linear-gradient(var(--bgColor-accent-muted,var(--color-accent-subtle)),var(--bgColor-accent-muted,var(--color-accent-subtle)));border:var(--borderWidth-thin,max(1px,.0625rem)) solid var(--borderColor-accent-muted,var(--color-accent-muted));border-radius:var(--borderRadius-medium,6px);color:var(--fgColor-default,var(--color-fg-default));display:grid;grid-auto-flow:column;grid-template-areas:"visual message actions close";grid-template-columns:min-content 1fr minmax(0,auto) min-content;grid-template-rows:min-content;padding:var(--base-size-8,.5rem);position:relative}@media (max-width:543.98px){.Banner{grid-template-areas:"visual message close" ". actions actions";grid-template-columns:min-content 1fr min-content;grid-template-rows:min-content min-content}.Banner .Banner-actions{margin:var(--base-size-8,.5rem) 0 0 var(--base-size-8,.5rem)}}.Banner .Banner-visual{align-self:start;display:grid;grid-area:visual;padding:.375rem var(--base-size-8,.5rem)}.Banner .Banner-visual>.octicon{margin-block:calc(var(--base-size-4,.25rem)/2)}.Banner .Banner-visual>*{align-self:center}.Banner .Banner-message{align-self:center;grid-area:message;padding:.375rem var(--base-size-8,.5rem)}.Banner .Banner-message p:last-child{margin-bottom:0}.Banner .Banner-message .Banner-title:not(:only-child){font-weight:var(--base-text-weight-semibold,600);margin-bottom:0}.Banner .Banner-actions{grid-area:actions}.Banner .Banner-actions:last-child{align-self:center}.Banner .Banner-close{grid-area:close;margin-left:var(--controlStack-medium-gap-condensed,.5rem)}.Banner .Banner-visual .octicon{color:var(--fgColor-accent,var(--color-accent-fg))}.Banner.Banner--warning{background-image:linear-gradient(var(--bgColor-attention-muted,var(--color-attention-subtle)),var(--bgColor-attention-muted,var(--color-attention-subtle)));border-color:var(--borderColor-attention-muted,var(--color-attention-muted));color:var(--fgColor-default,var(--color-fg-default))}.Banner.Banner--warning .Banner-visual .octicon{color:var(--fgColor-attention,var(--color-attention-fg))}.Banner.Banner--error{background-image:linear-gradient(var(--bgColor-danger-muted,var(--color-danger-subtle)),var(--bgColor-danger-muted,var(--color-danger-subtle)));border-color:var(--borderColor-danger-muted,var(--color-danger-muted));color:var(--fgColor-default,var(--color-fg-default))}.Banner.Banner--error .Banner-visual .octicon{color:var(--fgColor-danger,var(--color-danger-fg))}.Banner.Banner--success{background-image:linear-gradient(var(--bgColor-success-muted,var(--color-success-subtle)),var(--bgColor-success-muted,var(--color-success-subtle)));border-color:var(--borderColor-success-muted,var(--color-success-muted));color:var(--fgColor-default,var(--color-fg-default))}.Banner.Banner--success .Banner-visual .octicon{color:var(--fgColor-success,var(--color-success-fg))}.Banner.Banner--full{border-left:0;border-radius:0;border-right:0;margin-top:calc(var(--borderWidth-thin,max(1px, .0625rem))*-1)}@media (max-width:767.98px){.Banner.Banner--full-whenNarrow{border-left:0;border-radius:0;border-right:0;margin-top:calc(var(--borderWidth-thin,max(1px, .0625rem))*-1)}}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"name": "alpha/banner",
|
3
|
+
"selectors": [
|
4
|
+
".Banner",
|
5
|
+
".Banner .Banner-actions",
|
6
|
+
".Banner .Banner-visual",
|
7
|
+
".Banner .Banner-visual>.octicon",
|
8
|
+
".Banner .Banner-visual>*",
|
9
|
+
".Banner .Banner-message",
|
10
|
+
".Banner .Banner-message p:last-child",
|
11
|
+
".Banner .Banner-message .Banner-title:not(:only-child)",
|
12
|
+
".Banner .Banner-actions:last-child",
|
13
|
+
".Banner .Banner-close",
|
14
|
+
".Banner .Banner-visual .octicon",
|
15
|
+
".Banner.Banner--warning",
|
16
|
+
".Banner.Banner--warning .Banner-visual .octicon",
|
17
|
+
".Banner.Banner--error",
|
18
|
+
".Banner.Banner--error .Banner-visual .octicon",
|
19
|
+
".Banner.Banner--success",
|
20
|
+
".Banner.Banner--success .Banner-visual .octicon",
|
21
|
+
".Banner.Banner--full",
|
22
|
+
".Banner.Banner--full-whenNarrow"
|
23
|
+
]
|
24
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["banner.pcss"],"names":[],"mappings":"AAEA,QAKE,+IAA2F,CAC3F,gHAAqE,CACrE,4CAAyC,CAHzC,oDAA6B,CAF7B,YAAa,CAMb,qBAAsB,CACtB,kDAAmD,CACnD,gEAAkE,CAClE,8BAA+B,CAR/B,gCAA2B,CAF3B,iBA0HF,CA7GE,4BAdF,QAeI,8DAEqB,CACrB,iDAAkD,CAClD,0CAwGJ,CAtGI,wBACE,4DACF,CACF,CAIA,uBAIE,gBAAiB,CAHjB,YAAa,CAEb,gBAAiB,CADjB,wCAWF,CAPE,gCACE,8CACF,CAEA,yBACE,iBACF,CAGF,wBAGE,iBAAkB,CADlB,iBAAkB,CADlB,wCAYF,CARE,qCACE,eACF,CAEA,uDAEE,gDAA6C,CAD7C,eAEF,CAGF,wBACE,iBAKF,CAHE,mCACE,iBACF,CAIF,sBACE,eAAgB,CAChB,0DACF,CAEA,gCACE,kDACF,CAEA,wBAEE,2JAAiG,CACjG,4EAAgD,CAFhD,oDAOF,CAHE,gDACE,wDACF,CAGF,sBAEE,+IAA2F,CAC3F,sEAA6C,CAF7C,oDAOF,CAHE,8CACE,kDACF,CAGF,wBAEE,mJAA6F,CAC7F,wEAA8C,CAF9C,oDAOF,CAHE,gDACE,oDACF,CAKF,qBAGE,aAAc,CACd,eAAgB,CAFhB,cAAe,CADf,8DAIF,CAEA,4BACE,gCAGE,aAAc,CACd,eAAgB,CAFhB,cAAe,CADf,8DAIF,CACF","file":"banner.css","sourcesContent":["/* Banner alert */\n\n.Banner {\n position: relative;\n display: grid;\n padding: var(--base-size-8);\n color: var(--fgColor-default);\n background-image: linear-gradient(var(--bgColor-accent-muted), var(--bgColor-accent-muted));\n border: var(--borderWidth-thin) solid var(--borderColor-accent-muted);\n border-radius: var(--borderRadius-medium);\n grid-auto-flow: column;\n grid-template-areas: 'visual message actions close';\n grid-template-columns: min-content 1fr minmax(0, auto) min-content;\n grid-template-rows: min-content;\n\n /* `sm` breakpoint variantion */\n @media (max-width: 543.98px) {\n grid-template-areas:\n 'visual message close'\n '. actions actions';\n grid-template-columns: min-content 1fr min-content;\n grid-template-rows: min-content min-content;\n\n & .Banner-actions {\n margin: var(--base-size-8) 0 0 var(--base-size-8);\n }\n }\n\n /* Elements */\n\n & .Banner-visual {\n display: grid;\n padding: 0.375rem var(--base-size-8);\n grid-area: visual;\n align-self: start;\n\n & > .octicon {\n margin-block: calc(var(--base-size-4) / 2);\n }\n\n & > * {\n align-self: center;\n }\n }\n\n & .Banner-message {\n padding: 0.375rem var(--base-size-8);\n grid-area: message;\n align-self: center;\n\n & p:last-child {\n margin-bottom: 0;\n }\n\n & .Banner-title:not(:only-child) {\n margin-bottom: 0;\n font-weight: var(--base-text-weight-semibold);\n }\n }\n\n & .Banner-actions {\n grid-area: actions;\n\n &:last-child {\n align-self: center;\n }\n }\n\n /* is this used anywhere? could not find any use, but unsure */\n & .Banner-close {\n grid-area: close;\n margin-left: var(--controlStack-medium-gap-condensed);\n }\n\n & .Banner-visual .octicon {\n color: var(--fgColor-accent);\n }\n\n &.Banner--warning {\n color: var(--fgColor-default);\n background-image: linear-gradient(var(--bgColor-attention-muted), var(--bgColor-attention-muted));\n border-color: var(--borderColor-attention-muted);\n\n & .Banner-visual .octicon {\n color: var(--fgColor-attention);\n }\n }\n\n &.Banner--error {\n color: var(--fgColor-default);\n background-image: linear-gradient(var(--bgColor-danger-muted), var(--bgColor-danger-muted));\n border-color: var(--borderColor-danger-muted);\n\n & .Banner-visual .octicon {\n color: var(--fgColor-danger);\n }\n }\n\n &.Banner--success {\n color: var(--fgColor-default);\n background-image: linear-gradient(var(--bgColor-success-muted), var(--bgColor-success-muted));\n border-color: var(--borderColor-success-muted);\n\n & .Banner-visual .octicon {\n color: var(--fgColor-success);\n }\n }\n\n /* Full-width */\n\n &.Banner--full {\n margin-top: calc(var(--borderWidth-thin) * -1);\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n }\n\n @media (max-width: 767.98px) {\n &.Banner--full-whenNarrow {\n margin-top: calc(var(--borderWidth-thin) * -1);\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n }\n }\n}\n"]}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<%= render(Primer::BaseComponent.new(**@wrapper_arguments)) do %>
|
2
|
+
<%= render(Primer::BaseComponent.new(**@system_arguments)) do %>
|
3
|
+
<% if @icon %>
|
4
|
+
<div class="Banner-visual">
|
5
|
+
<%= render(Primer::Beta::Octicon.new(icon: @icon)) %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
8
|
+
<%= render(Primer::BaseComponent.new(**@message_arguments)) do %>
|
9
|
+
<p class="Banner-title" data-target="<%= catalyst_target(field: "titleText") %>"><%= content %></p>
|
10
|
+
<% if @description %>
|
11
|
+
<p><%= @description %></p>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
<% if action %>
|
15
|
+
<div class="flash-action Banner-actions">
|
16
|
+
<%= action %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
<% if @dismiss_scheme != :none %>
|
20
|
+
<div class="flash-close Banner-close">
|
21
|
+
<%= render(
|
22
|
+
Primer::Beta::IconButton.new(
|
23
|
+
scheme: :invisible,
|
24
|
+
icon: :x,
|
25
|
+
aria: { label: "Dismiss" },
|
26
|
+
data: { action: catalyst_action(event: "click", function: "dismiss") },
|
27
|
+
autofocus: true
|
28
|
+
)
|
29
|
+
) %>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
@@ -0,0 +1,126 @@
|
|
1
|
+
/* Banner alert */
|
2
|
+
|
3
|
+
.Banner {
|
4
|
+
position: relative;
|
5
|
+
display: grid;
|
6
|
+
padding: var(--base-size-8);
|
7
|
+
color: var(--fgColor-default);
|
8
|
+
background-image: linear-gradient(var(--bgColor-accent-muted), var(--bgColor-accent-muted));
|
9
|
+
border: var(--borderWidth-thin) solid var(--borderColor-accent-muted);
|
10
|
+
border-radius: var(--borderRadius-medium);
|
11
|
+
grid-auto-flow: column;
|
12
|
+
grid-template-areas: 'visual message actions close';
|
13
|
+
grid-template-columns: min-content 1fr minmax(0, auto) min-content;
|
14
|
+
grid-template-rows: min-content;
|
15
|
+
|
16
|
+
/* `sm` breakpoint variantion */
|
17
|
+
@media (max-width: 543.98px) {
|
18
|
+
grid-template-areas:
|
19
|
+
'visual message close'
|
20
|
+
'. actions actions';
|
21
|
+
grid-template-columns: min-content 1fr min-content;
|
22
|
+
grid-template-rows: min-content min-content;
|
23
|
+
|
24
|
+
& .Banner-actions {
|
25
|
+
margin: var(--base-size-8) 0 0 var(--base-size-8);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
/* Elements */
|
30
|
+
|
31
|
+
& .Banner-visual {
|
32
|
+
display: grid;
|
33
|
+
padding: 0.375rem var(--base-size-8);
|
34
|
+
grid-area: visual;
|
35
|
+
align-self: start;
|
36
|
+
|
37
|
+
& > .octicon {
|
38
|
+
margin-block: calc(var(--base-size-4) / 2);
|
39
|
+
}
|
40
|
+
|
41
|
+
& > * {
|
42
|
+
align-self: center;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
& .Banner-message {
|
47
|
+
padding: 0.375rem var(--base-size-8);
|
48
|
+
grid-area: message;
|
49
|
+
align-self: center;
|
50
|
+
|
51
|
+
& p:last-child {
|
52
|
+
margin-bottom: 0;
|
53
|
+
}
|
54
|
+
|
55
|
+
& .Banner-title:not(:only-child) {
|
56
|
+
margin-bottom: 0;
|
57
|
+
font-weight: var(--base-text-weight-semibold);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
& .Banner-actions {
|
62
|
+
grid-area: actions;
|
63
|
+
|
64
|
+
&:last-child {
|
65
|
+
align-self: center;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
/* is this used anywhere? could not find any use, but unsure */
|
70
|
+
& .Banner-close {
|
71
|
+
grid-area: close;
|
72
|
+
margin-left: var(--controlStack-medium-gap-condensed);
|
73
|
+
}
|
74
|
+
|
75
|
+
& .Banner-visual .octicon {
|
76
|
+
color: var(--fgColor-accent);
|
77
|
+
}
|
78
|
+
|
79
|
+
&.Banner--warning {
|
80
|
+
color: var(--fgColor-default);
|
81
|
+
background-image: linear-gradient(var(--bgColor-attention-muted), var(--bgColor-attention-muted));
|
82
|
+
border-color: var(--borderColor-attention-muted);
|
83
|
+
|
84
|
+
& .Banner-visual .octicon {
|
85
|
+
color: var(--fgColor-attention);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
&.Banner--error {
|
90
|
+
color: var(--fgColor-default);
|
91
|
+
background-image: linear-gradient(var(--bgColor-danger-muted), var(--bgColor-danger-muted));
|
92
|
+
border-color: var(--borderColor-danger-muted);
|
93
|
+
|
94
|
+
& .Banner-visual .octicon {
|
95
|
+
color: var(--fgColor-danger);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
&.Banner--success {
|
100
|
+
color: var(--fgColor-default);
|
101
|
+
background-image: linear-gradient(var(--bgColor-success-muted), var(--bgColor-success-muted));
|
102
|
+
border-color: var(--borderColor-success-muted);
|
103
|
+
|
104
|
+
& .Banner-visual .octicon {
|
105
|
+
color: var(--fgColor-success);
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Full-width */
|
110
|
+
|
111
|
+
&.Banner--full {
|
112
|
+
margin-top: calc(var(--borderWidth-thin) * -1);
|
113
|
+
border-right: 0;
|
114
|
+
border-left: 0;
|
115
|
+
border-radius: 0;
|
116
|
+
}
|
117
|
+
|
118
|
+
@media (max-width: 767.98px) {
|
119
|
+
&.Banner--full-whenNarrow {
|
120
|
+
margin-top: calc(var(--borderWidth-thin) * -1);
|
121
|
+
border-right: 0;
|
122
|
+
border-left: 0;
|
123
|
+
border-radius: 0;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Primer
|
4
|
+
module Alpha
|
5
|
+
# Use `Banner` to highlight important information.
|
6
|
+
class Banner < Primer::Component
|
7
|
+
status :alpha
|
8
|
+
|
9
|
+
# A button or custom content that will render on the right-hand side of the component.
|
10
|
+
#
|
11
|
+
# To render a button, call the `with_action_button` method, which accepts the arguments accepted by <%= link_to_component(Primer::Beta::Button) %>.
|
12
|
+
#
|
13
|
+
# To render custom content, call the `with_action_content` method and pass a block that returns HTML.
|
14
|
+
renders_one :action, types: {
|
15
|
+
button: lambda { |**system_arguments|
|
16
|
+
deny_tag_argument(**system_arguments)
|
17
|
+
|
18
|
+
Primer::Beta::Button.new(**system_arguments)
|
19
|
+
},
|
20
|
+
|
21
|
+
content: lambda { |**system_arguments|
|
22
|
+
deny_tag_argument(**system_arguments)
|
23
|
+
system_arguments[:tag] = :div
|
24
|
+
|
25
|
+
Primer::BaseComponent.new(**system_arguments)
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
DEFAULT_SCHEME = :default
|
30
|
+
SCHEME_MAPPINGS = {
|
31
|
+
DEFAULT_SCHEME => "",
|
32
|
+
:warning => "Banner--warning",
|
33
|
+
:danger => "Banner--error",
|
34
|
+
:success => "Banner--success"
|
35
|
+
}.freeze
|
36
|
+
|
37
|
+
LEGACY_SCHEME_MAPPINGS = {
|
38
|
+
DEFAULT_SCHEME => "",
|
39
|
+
:warning => "flash-warn",
|
40
|
+
:danger => "flash-error",
|
41
|
+
:success => "flash-success"
|
42
|
+
}.freeze
|
43
|
+
|
44
|
+
DEFAULT_ICONS = {
|
45
|
+
default: :bell,
|
46
|
+
warning: :alert,
|
47
|
+
danger: :stop,
|
48
|
+
success: :"check-circle"
|
49
|
+
}.freeze
|
50
|
+
|
51
|
+
DEFAULT_DISMISS_SCHEME = :none
|
52
|
+
DISMISS_SCHEMES = [
|
53
|
+
DEFAULT_DISMISS_SCHEME,
|
54
|
+
:remove,
|
55
|
+
:hide
|
56
|
+
].freeze
|
57
|
+
|
58
|
+
# @example Schemes
|
59
|
+
# <div style="display: grid; row-gap: 15px">
|
60
|
+
# <%= render(Primer::Alpha::Banner.new) { "This is a banner message!" } %>
|
61
|
+
# <%= render(Primer::Alpha::Banner.new(scheme: :warning)) { "This is a warning banner!" } %>
|
62
|
+
# <%= render(Primer::Alpha::Banner.new(scheme: :danger)) { "This is a danger banner!" } %>
|
63
|
+
# <%= render(Primer::Alpha::Banner.new(scheme: :success)) { "This is a success banner!" } %>
|
64
|
+
# </div>
|
65
|
+
#
|
66
|
+
# @example Full width
|
67
|
+
# <%= render(Primer::Alpha::Banner.new(full: true)) { "This is a full width banner!" } %>
|
68
|
+
#
|
69
|
+
# @example Dismissible
|
70
|
+
# <%= render(Primer::Alpha::Banner.new(dismissible: :remove)) { "This is a dismissible banner!" } %>
|
71
|
+
#
|
72
|
+
# @example Custom icon
|
73
|
+
# <%= render(Primer::Alpha::Banner.new(icon: :people)) { "This is a banner with a custom icon!" } %>
|
74
|
+
#
|
75
|
+
# @example With action button
|
76
|
+
# <%= render(Primer::Alpha::Banner.new) do |component| %>
|
77
|
+
# This is a banner with an action button!
|
78
|
+
# <% component.with_action_button(size: :small) { "Take action" } %>
|
79
|
+
# <% end %>
|
80
|
+
#
|
81
|
+
# @example With custom action
|
82
|
+
# <%= render(Primer::Alpha::Banner.new) do |component| %>
|
83
|
+
# Comment saved!
|
84
|
+
# <% component.with_action_content do %>
|
85
|
+
# <%= render(Primer::IconButton.new(icon: :pencil, mr: 1, "aria-label": "Edit")) %>
|
86
|
+
# <% end %>
|
87
|
+
# <% end %>
|
88
|
+
#
|
89
|
+
# @param full [Boolean] Whether the component should take up the full width of the screen.
|
90
|
+
# @param full_when_narrow [Boolean] Whether the component should take up the full width of the screen when rendered inside smaller viewports.
|
91
|
+
# @param dismiss_scheme [Symbol] Whether the component can be dismissed with an "x" button. <%= one_of(Primer::Alpha::Banner::DISMISS_SCHEMES) %>
|
92
|
+
# @param description [String] Description text rendered underneath the message.
|
93
|
+
# @param icon [Symbol] The name of an <%= link_to_octicons %> icon to use. If no icon is provided, a default one will be chosen based on the scheme.
|
94
|
+
# @param scheme [Symbol] <%= one_of(Primer::Alpha::Banner::SCHEME_MAPPINGS.keys) %>
|
95
|
+
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
96
|
+
def initialize(full: false, full_when_narrow: false, dismiss_scheme: DEFAULT_DISMISS_SCHEME, description: nil, icon: nil, scheme: DEFAULT_SCHEME, **system_arguments)
|
97
|
+
@scheme = fetch_or_fallback(SCHEME_MAPPINGS.keys, scheme, DEFAULT_SCHEME)
|
98
|
+
@icon = icon || DEFAULT_ICONS[@scheme]
|
99
|
+
@dismiss_scheme = dismiss_scheme
|
100
|
+
@description = description
|
101
|
+
|
102
|
+
@system_arguments = deny_tag_argument(**system_arguments)
|
103
|
+
@system_arguments[:tag] = :div
|
104
|
+
@system_arguments[:classes] = class_names(
|
105
|
+
@system_arguments[:classes],
|
106
|
+
"Banner",
|
107
|
+
"flash", # legacy
|
108
|
+
SCHEME_MAPPINGS[@scheme],
|
109
|
+
LEGACY_SCHEME_MAPPINGS[@scheme],
|
110
|
+
"Banner--full": full,
|
111
|
+
"flash-full": full, # legacy
|
112
|
+
"Banner--full-whenNarrow": full_when_narrow
|
113
|
+
)
|
114
|
+
|
115
|
+
@message_arguments = {
|
116
|
+
tag: :div,
|
117
|
+
classes: "Banner-message"
|
118
|
+
}
|
119
|
+
|
120
|
+
@wrapper_arguments = {
|
121
|
+
tag: custom_element_name,
|
122
|
+
data: { dismiss_scheme: @dismiss_scheme }
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def custom_element_name
|
129
|
+
"x-banner"
|
130
|
+
end
|
131
|
+
|
132
|
+
def catalyst_action(event:, function:)
|
133
|
+
"#{event}:#{custom_element_name}##{function}"
|
134
|
+
end
|
135
|
+
|
136
|
+
def catalyst_target(field:)
|
137
|
+
"#{custom_element_name}.#{field}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
.btn-mktg{-webkit-appearance:none!important;appearance:none!important;background:linear-gradient(180deg,#ffffff26 0,#fff0 100%),var(--color-mktg-btn-bg)!important;border:0;border-radius:.375rem;color:var(--bgColor-default,var(--color-canvas-default));display:inline-block;font-size:1rem;font-weight:var(--base-text-weight-semibold,600);line-height:1;padding:.9rem 1.5rem 1.1rem;position:relative;text-align:center;transition:box-shadow .2s,outline .2s ease;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap;z-index:1}.btn-mktg:before{background:linear-gradient(180deg,#ffffff26,#fff0)!important;background-blend-mode:normal;border-radius:inherit;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:opacity .2s;z-index:-1}.btn-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover)!important;text-decoration:none}.btn-mktg.focus:before,.btn-mktg:focus-visible:before,.btn-mktg:focus:before,.btn-mktg:hover:before{opacity:1}.btn-mktg:focus{box-shadow:none;outline:2px solid var(--focus-outlineColor,var(--color-accent-fg));outline-offset:2px}.btn-mktg:focus:not(:focus-visible){box-shadow:none;outline:1px solid #0000}.btn-mktg:focus-visible{box-shadow:none;outline:2px solid var(--focus-outlineColor,var(--color-accent-fg));outline-offset:2px}.btn-mktg:active:before{opacity:.5!important}.btn-mktg.disabled,.btn-mktg[disabled]{cursor:default;opacity:.5;pointer-events:none}.btn-muted-mktg{background:none!important;box-shadow:var(--color-mktg-btn-shadow-outline);color:var(--fgColor-default,var(--color-fg-default))!important}.btn-muted-mktg:before{display:none}.btn-muted-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted)!important}.btn-muted-mktg:active{box-shadow:var(--fgColor-default,var(--color-fg-default)) 0 0 0 3px inset!important}.btn-muted-mktg:disabled{box-shadow:var(--fgColor-default,var(--color-fg-default)) 0 0 0 1px inset!important}.btn-subtle-mktg{box-shadow:none!important;color:var(--fgColor-default,var(--color-fg-default))!important}.btn-subtle-mktg,.btn-subtle-mktg:before{background:none!important}.btn-subtle-mktg:hover{box-shadow:var(--color-mktg-btn-shadow-hover-muted)!important}.btn-signup-mktg{background:linear-gradient(180deg,#34b75926,#2ea44f00),#2ea44f!important;color:#fff}.btn-signup-mktg:before{background:linear-gradient(180deg,#34b75926,#2ea44f00)!important}.btn-signup-mktg:focus{box-shadow:none;outline:2px solid var(--focus-outlineColor,var(--color-accent-fg));outline-offset:2px}.btn-signup-mktg:focus:not(:focus-visible){box-shadow:none;outline:1px solid #0000}.btn-signup-mktg:focus-visible{box-shadow:none;outline:2px solid var(--focus-outlineColor,var(--color-accent-fg));outline-offset:2px}.btn-small-mktg{padding:.625rem 1rem .8125rem}.btn-large-mktg{font-size:1.25rem;padding:16px 30px 20px!important}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "alpha/button_marketing",
|
3
|
+
"selectors": [
|
4
|
+
".btn-mktg",
|
5
|
+
".btn-mktg:before",
|
6
|
+
".btn-mktg:hover",
|
7
|
+
".btn-mktg.focus:before",
|
8
|
+
".btn-mktg:focus-visible:before",
|
9
|
+
".btn-mktg:focus:before",
|
10
|
+
".btn-mktg:hover:before",
|
11
|
+
".btn-mktg:focus",
|
12
|
+
".btn-mktg:focus:not(:focus-visible)",
|
13
|
+
".btn-mktg:focus-visible",
|
14
|
+
".btn-mktg:active:before",
|
15
|
+
".btn-mktg.disabled",
|
16
|
+
".btn-mktg[disabled]",
|
17
|
+
".btn-muted-mktg",
|
18
|
+
".btn-muted-mktg:before",
|
19
|
+
".btn-muted-mktg:hover",
|
20
|
+
".btn-muted-mktg:active",
|
21
|
+
".btn-muted-mktg:disabled",
|
22
|
+
".btn-subtle-mktg",
|
23
|
+
".btn-subtle-mktg:before",
|
24
|
+
".btn-subtle-mktg:hover",
|
25
|
+
".btn-signup-mktg",
|
26
|
+
".btn-signup-mktg:before",
|
27
|
+
".btn-signup-mktg:focus",
|
28
|
+
".btn-signup-mktg:focus:not(:focus-visible)",
|
29
|
+
".btn-signup-mktg:focus-visible",
|
30
|
+
".btn-small-mktg",
|
31
|
+
".btn-large-mktg"
|
32
|
+
]
|
33
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["button_marketing.pcss","../../../../lib/postcss_mixins/focusOutline.pcss"],"names":[],"mappings":"AAAA,UAwBE,iCAA2B,CAA3B,yBAA2B,CAP3B,4FACqC,CACrC,QAAS,CAGT,qBAAuB,CAVvB,wDAA6B,CAT7B,oBAAqB,CAMrB,cAAe,CACf,gDAA6C,CAC7C,aAAc,CALd,2BAA6B,CAL7B,iBAAkB,CAYlB,iBAAkB,CAUlB,0CAA8C,CAP9C,wBAAiB,CAAjB,gBAAiB,CADjB,qBAAsB,CADtB,kBAAmB,CAZnB,SAmFF,CA3DE,iBAUE,4DAAyG,CAIzG,4BAA6B,CAH7B,qBAAsB,CAPtB,QAAS,CAGT,UAAW,CAFX,MAAO,CAOP,SAAU,CAXV,iBAAkB,CAElB,OAAQ,CADR,KAAM,CAWN,sBAAwB,CAPxB,UASF,CAEA,gBAEE,uDAAyD,CADzD,oBAEF,CAME,oGACE,SACF,CAIF,gBCvDA,eAAgB,CAFhB,kEAAgC,CAChC,kBDgEA,CAJE,oCAEE,eAAgB,CADhB,uBAEF,CAIF,wBClEA,eAAgB,CAFhB,kEAAgC,CAChC,kBDqEA,CAGE,wBACE,oBACF,CAGF,uCAGE,cAAe,CACf,UAAY,CAFZ,mBAGF,CAGF,gBAEE,yBAA2B,CAC3B,+CAAgD,CAFhD,8DAqBF,CAjBE,uBACE,YACF,CAEA,sBACE,6DACF,CAEA,uBAEE,mFACF,CAEA,yBAEE,mFACF,CAGF,iBAGE,yBAA2B,CAF3B,8DAWF,CAPE,yCAHA,yBAKA,CAEA,uBACE,6DACF,CAGF,iBAKE,wEAAuH,CAHvH,UAyBF,CApBE,wBAEE,gEACF,CAGA,uBCvIA,eAAgB,CAFhB,kEAAgC,CAChC,kBDgJA,CAJE,2CAEE,eAAgB,CADhB,uBAEF,CAIF,+BClJA,eAAgB,CAFhB,kEAAgC,CAChC,kBDqJA,CAKF,gBAEE,6BACF,CAEA,gBAKE,iBAAkB,CAHlB,gCAIF","file":"button_marketing.css","sourcesContent":[".btn-mktg {\n position: relative;\n z-index: 1;\n display: inline-block;\n\n /* stylelint-disable-next-line primer/spacing */\n padding: 0.9rem 1.5rem 1.1rem;\n\n /* stylelint-disable-next-line primer/typography */\n font-size: 1rem;\n font-weight: var(--base-text-weight-semibold);\n line-height: 1;\n color: var(--bgColor-default);\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n background: linear-gradient(180deg, rgba(255, 255, 255, 15%) 0%, rgba(255, 255, 255, 0%) 100%),\n var(--color-mktg-btn-bg) !important;\n border: 0;\n\n /* stylelint-disable-next-line primer/borders */\n border-radius: 0.375rem;\n transition: box-shadow 0.2s, outline 0.2s ease;\n appearance: none !important;\n\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n content: '';\n\n /* stylelint-disable-next-line primer/colors */\n background: linear-gradient(180deg, rgba(255, 255, 255, 15%) 0%, rgba(255, 255, 255, 0%) 100%) !important;\n border-radius: inherit;\n opacity: 0;\n transition: opacity 0.2s;\n background-blend-mode: normal;\n }\n\n &:hover {\n text-decoration: none;\n box-shadow: var(--color-mktg-btn-shadow-hover) !important;\n }\n\n &:hover,\n &:focus,\n &:focus-visible,\n &.focus {\n &::before {\n opacity: 1;\n }\n }\n\n /* fallback :focus state */\n &:focus {\n @mixin focusOutline 2px, var(--focus-outlineColor);\n\n /* remove fallback :focus if :focus-visible is supported */\n &:not(:focus-visible) {\n outline: solid 1px transparent;\n box-shadow: none;\n }\n }\n\n /* default focus state */\n &:focus-visible {\n @mixin focusOutline 2px, var(--focus-outlineColor);\n }\n\n &:active {\n &::before {\n opacity: 0.5 !important;\n }\n }\n\n &.disabled,\n &[disabled] {\n pointer-events: none;\n cursor: default;\n opacity: 0.5;\n }\n}\n\n.btn-muted-mktg {\n color: var(--fgColor-default) !important;\n background: none !important;\n box-shadow: var(--color-mktg-btn-shadow-outline);\n\n &::before {\n display: none;\n }\n\n &:hover {\n box-shadow: var(--color-mktg-btn-shadow-hover-muted) !important;\n }\n\n &:active {\n /* stylelint-disable-next-line primer/box-shadow */\n box-shadow: var(--fgColor-default) 0 0 0 3px inset !important;\n }\n\n &:disabled {\n /* stylelint-disable-next-line primer/box-shadow */\n box-shadow: var(--fgColor-default) 0 0 0 1px inset !important;\n }\n}\n\n.btn-subtle-mktg {\n color: var(--fgColor-default) !important;\n background: none !important;\n box-shadow: none !important;\n\n &::before {\n background: none !important;\n }\n\n &:hover {\n box-shadow: var(--color-mktg-btn-shadow-hover-muted) !important;\n }\n}\n\n.btn-signup-mktg {\n /* stylelint-disable-next-line primer/colors */\n color: #fff;\n\n /* stylelint-disable-next-line primer/colors */\n background: linear-gradient(180deg, rgba(52, 183, 89, 15%) 0%, rgba(46, 164, 79, 0%) 100%), rgb(46, 164, 79) !important;\n\n &::before {\n /* stylelint-disable-next-line primer/colors */\n background: linear-gradient(180deg, rgba(52, 183, 89, 15%) 0%, rgba(46, 164, 79, 0%) 100%) !important;\n }\n\n /* fallback :focus state */\n &:focus {\n @mixin focusOutline 2px, var(--focus-outlineColor);\n\n /* remove fallback :focus if :focus-visible is supported */\n &:not(:focus-visible) {\n outline: solid 1px transparent;\n box-shadow: none;\n }\n }\n\n /* default focus state */\n &:focus-visible {\n @mixin focusOutline 2px, var(--focus-outlineColor);\n }\n}\n\n/* Size modifiers */\n\n.btn-small-mktg {\n /* stylelint-disable-next-line primer/spacing */\n padding: 0.625rem 1rem 0.8125rem;\n}\n\n.btn-large-mktg {\n /* stylelint-disable-next-line primer/spacing */\n padding: 16px 30px 20px !important;\n\n /* stylelint-disable-next-line primer/typography */\n font-size: 1.25rem;\n}\n","@define-mixin focusOutline $outlineOffset: -2px, $outlineColor: var(--focus-outlineColor) {\n outline: 2px solid $outlineColor;\n outline-offset: $outlineOffset;\n box-shadow: none;\n}\n"]}
|