nfg_ui 0.9.8.15
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +431 -0
- data/Rakefile +23 -0
- data/app/assets/config/nfg_ui_manifest.js +3 -0
- data/app/assets/images/nfg_ui/app_icon/android-chrome-192x192.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/android-chrome-384x384.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/apple-touch-icon.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/browserconfig.xml.erb +9 -0
- data/app/assets/images/nfg_ui/app_icon/favicon-16x16.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/favicon-32x32.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/favicon.ico +0 -0
- data/app/assets/images/nfg_ui/app_icon/mstile-150x150.png +0 -0
- data/app/assets/images/nfg_ui/app_icon/safari-pinned-tab.svg +38 -0
- data/app/assets/images/nfg_ui/app_icon/site.webmanifest.erb +19 -0
- data/app/assets/images/nfg_ui/email/icons/fa-caret-right.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-facebook.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-linkedin.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-twitter.png +0 -0
- data/app/assets/images/nfg_ui/email/icons/fa-youtube.png +0 -0
- data/app/assets/images/nfg_ui/email/nfg-logo.png +0 -0
- data/app/assets/javascripts/nfg_ui/application.coffee +16 -0
- data/app/assets/javascripts/nfg_ui/collapsible_toggle.coffee +47 -0
- data/app/assets/javascripts/nfg_ui/prevent_clickable_disabled_element.coffee +47 -0
- data/app/assets/javascripts/nfg_ui/vendor/select2.coffee +26 -0
- data/app/assets/javascripts/nfg_ui/vendor/tooltips.coffee +18 -0
- data/app/assets/stylesheets/nfg_ui/bootstrap/application.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/_variables.scss +1123 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/application.scss +23 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_alert.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_backgrounds.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_button-group.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_buttons.scss +17 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_card.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_custom.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_custom_forms.scss +156 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_dropdown.scss +24 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_forms.scss +85 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_media.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_nav.scss +22 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_navbar.scss +132 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_progress.scss +3 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_reboot.scss +31 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_tables.scss +7 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_tooltip.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/_type.scss +82 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_card.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_campaign_preview.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_content_section_buttons.scss +11 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_custom_questions_questionnaire.scss +84 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_custom_receipt_language.scss +15 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_email_preview.scss +24 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_interaction.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_mobile.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_nav_step.scss +95 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_overlay_blocker.scss +49 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_page_header.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_product_icons.scss +45 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_redactor.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_share_dropdown.scss +53 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_slat.scss +113 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_social_share.scss +44 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_status_indicator.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_ticket.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/admin/nfg_theme/custom/_tile.scss +71 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/application.scss +38 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/foundation_emails/_alignment.scss +93 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/foundation_emails/_button.scss +345 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_backgrounds.scss +15 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_layout.scss +33 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_rainbow_bar.scss +47 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_spacers.scss +60 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/nfg_theme/_typography.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/email/settings/_settings.scss +148 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/_variables.scss +1124 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/application.scss +23 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/application.scss +19 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_badge.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_buttons.scss +43 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_custom.scss +3 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_custom_forms.scss +50 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_forms.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_functions.scss +29 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_navbar.scss +18 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_reboot.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_type.scss +16 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/_utilities.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/custom/_everyday_default.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/nfg_theme/custom/_nav_step.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/entity_branding/plugins/_select2.scss +16 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/_variables.scss +13 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/application.scss +35 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_breadcrumb.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_button-group.scss +10 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_card.scss +45 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_carousel.scss +18 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_custom-forms.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_custom.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_forms.scss +68 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_grid.scss +4 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_input-group.scss +25 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_list-group.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_media.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_mixins.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_modal.scss +28 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_nav.scss +21 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_navbar.scss +54 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_pagination.scss +1 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_progress.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/_utilities.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_everyday_giving.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_nav_step.scss +13 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/custom/_slat.scss +66 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_breakpoints.scss +123 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_grid-framework.scss +30 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/mixins/_grid.scss +10 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/utilities/_display.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/nfg_theme/utilities/_flex.scss +49 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/legacy_browser_support/plugins/_sticky_div.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_alert.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_buttons.scss +17 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_card.scss +6 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_carousel.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_custom.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_custom_forms.scss +156 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_dropdown.scss +1 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_event.scss +19 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_forms.scss +83 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_list-group.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_progress.scss +9 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_reboot.scss +31 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_tooltip.scss +5 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/_type.scss +81 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_admin_bar.scss +20 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_background_variations.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_everyday_default.scss +43 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_everyday_story.scss +21 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_footer_links.scss +8 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_nav_step.scss +95 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_slat.scss +110 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_social_share.scss +44 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_ticket.scss +12 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_tile.scss +63 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/nfg_theme/custom/_user_navbar.scss +33 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_datepicker.scss +2 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_select2.scss +216 -0
- data/app/assets/stylesheets/nfg_ui/network_for_good/public/plugins/_sticky_div.scss +11 -0
- data/app/controllers/nfg_ui/application_controller.rb +5 -0
- data/app/helpers/nfg_ui/application_helper.rb +27 -0
- data/app/helpers/nfg_ui/components/email_helpers.rb +8 -0
- data/app/helpers/nfg_ui/components/resource_themes_helper.rb +8 -0
- data/app/helpers/nfg_ui/components/tooltip_helper.rb +24 -0
- data/app/models/nfg_ui/application_record.rb +5 -0
- data/app/views/nfg_ui/app_icons/_icons.html.haml +10 -0
- data/app/views/nfg_ui/email/README.md +12 -0
- data/app/views/nfg_ui/email/_button.html.haml +12 -0
- data/app/views/nfg_ui/email/_email_signature.html.haml +4 -0
- data/app/views/nfg_ui/email/_footer.html.haml +16 -0
- data/app/views/nfg_ui/email/_header.html.haml +6 -0
- data/app/views/nfg_ui/email/_logo.html.haml +6 -0
- data/app/views/nfg_ui/email/_product_content_image.html.haml +7 -0
- data/app/views/nfg_ui/email/_rainbow_bar.html.haml +10 -0
- data/app/views/nfg_ui/email/_section_header.html.haml +8 -0
- data/app/views/nfg_ui/email/_social_network_link.html.haml +12 -0
- data/app/views/nfg_ui/email/_sub_footer.html.haml +9 -0
- data/app/views/nfg_ui/email/_table_row.html.haml +13 -0
- data/config/initializers/web_app_manifest.rb +3 -0
- data/config/locales/email.yml +34 -0
- data/config/locales/en.yml +63 -0
- data/config/routes.rb +2 -0
- data/config/spring.rb +1 -0
- data/lib/nfg_ui/bootstrap/components/alert.rb +52 -0
- data/lib/nfg_ui/bootstrap/components/badge.rb +39 -0
- data/lib/nfg_ui/bootstrap/components/base.rb +151 -0
- data/lib/nfg_ui/bootstrap/components/breadcrumb.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/breadcrumb_item.rb +28 -0
- data/lib/nfg_ui/bootstrap/components/button.rb +74 -0
- data/lib/nfg_ui/bootstrap/components/button_group.rb +36 -0
- data/lib/nfg_ui/bootstrap/components/button_toolbar.rb +21 -0
- data/lib/nfg_ui/bootstrap/components/card.rb +81 -0
- data/lib/nfg_ui/bootstrap/components/card_body.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/card_footer.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/card_header.rb +35 -0
- data/lib/nfg_ui/bootstrap/components/card_image.rb +33 -0
- data/lib/nfg_ui/bootstrap/components/card_image_overlay.rb +46 -0
- data/lib/nfg_ui/bootstrap/components/carousel.rb +57 -0
- data/lib/nfg_ui/bootstrap/components/carousel_caption.rb +34 -0
- data/lib/nfg_ui/bootstrap/components/carousel_control.rb +73 -0
- data/lib/nfg_ui/bootstrap/components/carousel_indicators.rb +54 -0
- data/lib/nfg_ui/bootstrap/components/carousel_item.rb +49 -0
- data/lib/nfg_ui/bootstrap/components/collapse.rb +32 -0
- data/lib/nfg_ui/bootstrap/components/dropdown.rb +51 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_divider.rb +19 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_header.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_item.rb +41 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_menu.rb +32 -0
- data/lib/nfg_ui/bootstrap/components/dropdown_toggle.rb +82 -0
- data/lib/nfg_ui/bootstrap/components/embed.rb +80 -0
- data/lib/nfg_ui/bootstrap/components/form.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/input_group.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/jumbotron.rb +13 -0
- data/lib/nfg_ui/bootstrap/components/list_group.rb +39 -0
- data/lib/nfg_ui/bootstrap/components/list_group_item.rb +69 -0
- data/lib/nfg_ui/bootstrap/components/media.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/media_body.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/media_object.rb +23 -0
- data/lib/nfg_ui/bootstrap/components/modal.rb +66 -0
- data/lib/nfg_ui/bootstrap/components/modal_body.rb +16 -0
- data/lib/nfg_ui/bootstrap/components/modal_footer.rb +16 -0
- data/lib/nfg_ui/bootstrap/components/modal_header.rb +37 -0
- data/lib/nfg_ui/bootstrap/components/nav.rb +71 -0
- data/lib/nfg_ui/bootstrap/components/nav_item.rb +103 -0
- data/lib/nfg_ui/bootstrap/components/nav_link.rb +62 -0
- data/lib/nfg_ui/bootstrap/components/navbar.rb +97 -0
- data/lib/nfg_ui/bootstrap/components/navbar_brand.rb +25 -0
- data/lib/nfg_ui/bootstrap/components/navbar_nav.rb +48 -0
- data/lib/nfg_ui/bootstrap/components/navbar_text.rb +21 -0
- data/lib/nfg_ui/bootstrap/components/navbar_toggler.rb +38 -0
- data/lib/nfg_ui/bootstrap/components/page_item.rb +66 -0
- data/lib/nfg_ui/bootstrap/components/pagination.rb +30 -0
- data/lib/nfg_ui/bootstrap/components/popover.rb +12 -0
- data/lib/nfg_ui/bootstrap/components/progress.rb +44 -0
- data/lib/nfg_ui/bootstrap/components/progress_bar.rb +51 -0
- data/lib/nfg_ui/bootstrap/components/tab_content.rb +15 -0
- data/lib/nfg_ui/bootstrap/components/tab_pane.rb +49 -0
- data/lib/nfg_ui/bootstrap/components/table.rb +17 -0
- data/lib/nfg_ui/bootstrap/readme.md +1 -0
- data/lib/nfg_ui/bootstrap/utilities/activatable.rb +32 -0
- data/lib/nfg_ui/bootstrap/utilities/alignable.rb +33 -0
- data/lib/nfg_ui/bootstrap/utilities/collapse_toggleable.rb +35 -0
- data/lib/nfg_ui/bootstrap/utilities/collapsible.rb +42 -0
- data/lib/nfg_ui/bootstrap/utilities/disableable.rb +49 -0
- data/lib/nfg_ui/bootstrap/utilities/dismissible.rb +24 -0
- data/lib/nfg_ui/bootstrap/utilities/dropdown_directionable.rb +40 -0
- data/lib/nfg_ui/bootstrap/utilities/headable.rb +20 -0
- data/lib/nfg_ui/bootstrap/utilities/modalable.rb +104 -0
- data/lib/nfg_ui/bootstrap/utilities/progressable.rb +42 -0
- data/lib/nfg_ui/bootstrap/utilities/remotable.rb +24 -0
- data/lib/nfg_ui/bootstrap/utilities/sizable.rb +40 -0
- data/lib/nfg_ui/bootstrap/utilities/themeable.rb +51 -0
- data/lib/nfg_ui/bootstrap/utilities/tooltipable.rb +95 -0
- data/lib/nfg_ui/bootstrap/utilities/wrappable.rb +48 -0
- data/lib/nfg_ui/components/base.rb +14 -0
- data/lib/nfg_ui/components/elements/activity.rb +10 -0
- data/lib/nfg_ui/components/elements/alert.rb +63 -0
- data/lib/nfg_ui/components/elements/badge.rb +32 -0
- data/lib/nfg_ui/components/elements/breadcrumb.rb +16 -0
- data/lib/nfg_ui/components/elements/breadcrumb_item.rb +16 -0
- data/lib/nfg_ui/components/elements/button.rb +97 -0
- data/lib/nfg_ui/components/elements/card_body.rb +15 -0
- data/lib/nfg_ui/components/elements/card_footer.rb +14 -0
- data/lib/nfg_ui/components/elements/card_header.rb +14 -0
- data/lib/nfg_ui/components/elements/card_image.rb +14 -0
- data/lib/nfg_ui/components/elements/card_image_overlay.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_caption.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_control.rb +14 -0
- data/lib/nfg_ui/components/elements/carousel_indicators.rb +23 -0
- data/lib/nfg_ui/components/elements/carousel_item.rb +16 -0
- data/lib/nfg_ui/components/elements/chart.rb +11 -0
- data/lib/nfg_ui/components/elements/dropdown_divider.rb +14 -0
- data/lib/nfg_ui/components/elements/dropdown_header.rb +14 -0
- data/lib/nfg_ui/components/elements/dropdown_item.rb +78 -0
- data/lib/nfg_ui/components/elements/dropdown_toggle.rb +37 -0
- data/lib/nfg_ui/components/elements/embed.rb +15 -0
- data/lib/nfg_ui/components/elements/form_control.rb +18 -0
- data/lib/nfg_ui/components/elements/input_group.rb +14 -0
- data/lib/nfg_ui/components/elements/key.rb +11 -0
- data/lib/nfg_ui/components/elements/list_group_item.rb +14 -0
- data/lib/nfg_ui/components/elements/loader.rb +11 -0
- data/lib/nfg_ui/components/elements/media_body.rb +14 -0
- data/lib/nfg_ui/components/elements/media_object.rb +12 -0
- data/lib/nfg_ui/components/elements/modal_body.rb +14 -0
- data/lib/nfg_ui/components/elements/modal_footer.rb +14 -0
- data/lib/nfg_ui/components/elements/modal_header.rb +14 -0
- data/lib/nfg_ui/components/elements/nav.rb +19 -0
- data/lib/nfg_ui/components/elements/nav_item.rb +39 -0
- data/lib/nfg_ui/components/elements/nav_link.rb +33 -0
- data/lib/nfg_ui/components/elements/navbar_brand.rb +15 -0
- data/lib/nfg_ui/components/elements/navbar_text.rb +14 -0
- data/lib/nfg_ui/components/elements/navbar_toggler.rb +14 -0
- data/lib/nfg_ui/components/elements/page_item.rb +14 -0
- data/lib/nfg_ui/components/elements/popover.rb +14 -0
- data/lib/nfg_ui/components/elements/progress_bar.rb +62 -0
- data/lib/nfg_ui/components/elements/slat_action.rb +14 -0
- data/lib/nfg_ui/components/elements/slat_body.rb +14 -0
- data/lib/nfg_ui/components/elements/slat_item.rb +62 -0
- data/lib/nfg_ui/components/elements/stat.rb +11 -0
- data/lib/nfg_ui/components/elements/step.rb +55 -0
- data/lib/nfg_ui/components/elements/step_indicator.rb +41 -0
- data/lib/nfg_ui/components/elements/tab_pane.rb +15 -0
- data/lib/nfg_ui/components/elements/table.rb +14 -0
- data/lib/nfg_ui/components/elements/task.rb +11 -0
- data/lib/nfg_ui/components/elements.rb +58 -0
- data/lib/nfg_ui/components/foundations/color.rb +11 -0
- data/lib/nfg_ui/components/foundations/grid.rb +11 -0
- data/lib/nfg_ui/components/foundations/icon.rb +82 -0
- data/lib/nfg_ui/components/foundations/image.rb +14 -0
- data/lib/nfg_ui/components/foundations/input.rb +11 -0
- data/lib/nfg_ui/components/foundations/typeface.rb +122 -0
- data/lib/nfg_ui/components/patterns/activity_feed.rb +11 -0
- data/lib/nfg_ui/components/patterns/button_group.rb +23 -0
- data/lib/nfg_ui/components/patterns/button_toolbar.rb +20 -0
- data/lib/nfg_ui/components/patterns/card.rb +39 -0
- data/lib/nfg_ui/components/patterns/carousel.rb +31 -0
- data/lib/nfg_ui/components/patterns/collapse.rb +31 -0
- data/lib/nfg_ui/components/patterns/dropdown.rb +27 -0
- data/lib/nfg_ui/components/patterns/dropdown_menu.rb +16 -0
- data/lib/nfg_ui/components/patterns/empty_state.rb +11 -0
- data/lib/nfg_ui/components/patterns/filter_bar.rb +11 -0
- data/lib/nfg_ui/components/patterns/form_group.rb +11 -0
- data/lib/nfg_ui/components/patterns/graph.rb +11 -0
- data/lib/nfg_ui/components/patterns/jumbotron.rb +14 -0
- data/lib/nfg_ui/components/patterns/list_group.rb +16 -0
- data/lib/nfg_ui/components/patterns/media.rb +14 -0
- data/lib/nfg_ui/components/patterns/modal.rb +15 -0
- data/lib/nfg_ui/components/patterns/navbar.rb +17 -0
- data/lib/nfg_ui/components/patterns/navbar_nav.rb +17 -0
- data/lib/nfg_ui/components/patterns/page_header.rb +85 -0
- data/lib/nfg_ui/components/patterns/pagination.rb +14 -0
- data/lib/nfg_ui/components/patterns/progress.rb +24 -0
- data/lib/nfg_ui/components/patterns/slat.rb +14 -0
- data/lib/nfg_ui/components/patterns/slat_actions.rb +115 -0
- data/lib/nfg_ui/components/patterns/slat_header.rb +23 -0
- data/lib/nfg_ui/components/patterns/slat_list.rb +18 -0
- data/lib/nfg_ui/components/patterns/slats.rb +14 -0
- data/lib/nfg_ui/components/patterns/steps.rb +27 -0
- data/lib/nfg_ui/components/patterns/tab_content.rb +14 -0
- data/lib/nfg_ui/components/patterns/task_list.rb +11 -0
- data/lib/nfg_ui/components/patterns/tile.rb +58 -0
- data/lib/nfg_ui/components/patterns/tile_body.rb +29 -0
- data/lib/nfg_ui/components/patterns/tile_header.rb +40 -0
- data/lib/nfg_ui/components/patterns/tile_section.rb +29 -0
- data/lib/nfg_ui/components/traits/active.rb +14 -0
- data/lib/nfg_ui/components/traits/alert.rb +36 -0
- data/lib/nfg_ui/components/traits/alignment.rb +26 -0
- data/lib/nfg_ui/components/traits/button.rb +47 -0
- data/lib/nfg_ui/components/traits/button_group.rb +22 -0
- data/lib/nfg_ui/components/traits/card.rb +14 -0
- data/lib/nfg_ui/components/traits/collapse.rb +29 -0
- data/lib/nfg_ui/components/traits/disable.rb +19 -0
- data/lib/nfg_ui/components/traits/disable_with.rb +14 -0
- data/lib/nfg_ui/components/traits/dismiss.rb +16 -0
- data/lib/nfg_ui/components/traits/dropdown_toggle.rb +14 -0
- data/lib/nfg_ui/components/traits/icon.rb +16 -0
- data/lib/nfg_ui/components/traits/list_group.rb +16 -0
- data/lib/nfg_ui/components/traits/muted.rb +16 -0
- data/lib/nfg_ui/components/traits/nav.rb +26 -0
- data/lib/nfg_ui/components/traits/nav_item.rb +16 -0
- data/lib/nfg_ui/components/traits/navbar.rb +18 -0
- data/lib/nfg_ui/components/traits/page_header.rb +16 -0
- data/lib/nfg_ui/components/traits/pill.rb +14 -0
- data/lib/nfg_ui/components/traits/progress_bar.rb +24 -0
- data/lib/nfg_ui/components/traits/remote.rb +14 -0
- data/lib/nfg_ui/components/traits/size.rb +18 -0
- data/lib/nfg_ui/components/traits/slat_item.rb +28 -0
- data/lib/nfg_ui/components/traits/step.rb +14 -0
- data/lib/nfg_ui/components/traits/theme.rb +57 -0
- data/lib/nfg_ui/components/traits/typeface.rb +53 -0
- data/lib/nfg_ui/components/traits/vertical.rb +16 -0
- data/lib/nfg_ui/components/traits.rb +43 -0
- data/lib/nfg_ui/components/utilities/browser_detectable.rb +16 -0
- data/lib/nfg_ui/components/utilities/confirmable.rb +24 -0
- data/lib/nfg_ui/components/utilities/describable.rb +22 -0
- data/lib/nfg_ui/components/utilities/disable_withable.rb +26 -0
- data/lib/nfg_ui/components/utilities/emailable.rb +44 -0
- data/lib/nfg_ui/components/utilities/iconable.rb +20 -0
- data/lib/nfg_ui/components/utilities/left_iconable.rb +22 -0
- data/lib/nfg_ui/components/utilities/methodable.rb +24 -0
- data/lib/nfg_ui/components/utilities/renderable.rb +24 -0
- data/lib/nfg_ui/components/utilities/resource_themeable.rb +49 -0
- data/lib/nfg_ui/components/utilities/titleable.rb +20 -0
- data/lib/nfg_ui/components/utilities/traitable.rb +32 -0
- data/lib/nfg_ui/components/utilities/vertically_alignable.rb +31 -0
- data/lib/nfg_ui/components/utilities.rb +22 -0
- data/lib/nfg_ui/engine.rb +45 -0
- data/lib/nfg_ui/ui/base.rb +35 -0
- data/lib/nfg_ui/ui/bootstrap.rb +44 -0
- data/lib/nfg_ui/ui/network_for_good.rb +54 -0
- data/lib/nfg_ui/ui/utilities/initializer.rb +88 -0
- data/lib/nfg_ui/ui/utilities.rb +10 -0
- data/lib/nfg_ui/version.rb +5 -0
- data/lib/nfg_ui.rb +174 -0
- data/lib/tasks/nfg_ui_tasks.rake +53 -0
- metadata +741 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Shared methods between Progress & ProgressBar.
|
|
7
|
+
module Progressable
|
|
8
|
+
def animated
|
|
9
|
+
options.fetch(:animated, false)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def label
|
|
13
|
+
# options.fetch(:label, nil)
|
|
14
|
+
options[:label] == true ? "#{progress}%" : options[:label] || body
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def progress
|
|
18
|
+
options[:progress] || 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def striped
|
|
22
|
+
options.fetch(:striped, false)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def theme
|
|
26
|
+
options.fetch(:theme, nil)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def non_html_attribute_options
|
|
32
|
+
super.push(:animated,
|
|
33
|
+
:height,
|
|
34
|
+
:label,
|
|
35
|
+
:progress,
|
|
36
|
+
:striped,
|
|
37
|
+
:theme)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Turns remote: true functionality on for components that need it.
|
|
7
|
+
module Remotable
|
|
8
|
+
def data
|
|
9
|
+
remote ? super.merge!(remote: remote.to_s) : super
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def remote
|
|
13
|
+
options.fetch(:remote, nil)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def non_html_attribute_options
|
|
19
|
+
super.push(:remote)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Applies ability to modify the component's size
|
|
7
|
+
# Pass in :lg or :sm
|
|
8
|
+
module Sizable
|
|
9
|
+
def size
|
|
10
|
+
options.fetch(:size, nil)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def css_classes
|
|
16
|
+
[
|
|
17
|
+
super,
|
|
18
|
+
(size_css_class if resized?)
|
|
19
|
+
].join(' ').squish
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def non_html_attribute_options
|
|
23
|
+
super.push(:size)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def resized?
|
|
27
|
+
size == :sm || size == :lg
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def size_css_class
|
|
31
|
+
"#{size_css_class_prefix}-#{size}"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def size_css_class_prefix
|
|
35
|
+
@size_css_class_prefix ||= component_css_class
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allows component to utilize the bootstrap4 theme color palette
|
|
7
|
+
module Themeable
|
|
8
|
+
def outlined
|
|
9
|
+
options.fetch(:outlined, false)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# To disable theme on a case by case basis, pass in { theme: nil } to options.
|
|
13
|
+
# or
|
|
14
|
+
# To disable a default theme for a component set default_theme to nil
|
|
15
|
+
def theme
|
|
16
|
+
options.fetch(:theme, default_theme)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def css_classes
|
|
22
|
+
[
|
|
23
|
+
super,
|
|
24
|
+
("#{theme_css_class_prefix}#{outlined_css_class_prefix if outlined && outlineable?}#{theme}" if theme)
|
|
25
|
+
].join(' ').squish
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def default_theme
|
|
29
|
+
@default_theme ||= NfgUi::DEFAULT_BOOTSTRAP_THEME
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def non_html_attribute_options
|
|
33
|
+
super.push(:theme, :outlined)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def outlined_css_class_prefix
|
|
37
|
+
@outlined_css_class_prefix ||= 'outline-'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def theme_css_class_prefix
|
|
41
|
+
@theme_css_class_prefix ||= "#{component_css_class}-"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Explicitly turn off outlineable on components that should not allow outline
|
|
45
|
+
def outlineable?
|
|
46
|
+
true
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Tooltip doc coming soon
|
|
7
|
+
#
|
|
8
|
+
# Bootstrap documentation
|
|
9
|
+
# https://getbootstrap.com/docs/4.1/components/tooltips/
|
|
10
|
+
#
|
|
11
|
+
# Allows tooltips to be placed on any component's main wrapping element
|
|
12
|
+
#
|
|
13
|
+
# When tooltip is applied to a disabled component (via the tooltip argument)
|
|
14
|
+
# the component will return the necessary information to build a wrapper div
|
|
15
|
+
# due to the non-interactable nature of the disabled elements.
|
|
16
|
+
#
|
|
17
|
+
# Example implementation of a button in HAML:
|
|
18
|
+
#
|
|
19
|
+
# - if button.disabled_tooltipable?
|
|
20
|
+
# %span{ button.disabled_component_tooltip_wrapper_html_options }
|
|
21
|
+
# = content_tag button.html_wrapper_element, button.html_options do
|
|
22
|
+
# = button.body
|
|
23
|
+
|
|
24
|
+
# - else
|
|
25
|
+
# = content_tag button.html_wrapper_element, button.html_options do
|
|
26
|
+
# = button.body
|
|
27
|
+
#
|
|
28
|
+
# Tooltip placement:
|
|
29
|
+
# You can override the placement if needed by setting the tooltip_placement method
|
|
30
|
+
# in your target class -- :top, :bottom, :left, :right
|
|
31
|
+
#
|
|
32
|
+
# Example:
|
|
33
|
+
#
|
|
34
|
+
# def tooltip_placement
|
|
35
|
+
# :right
|
|
36
|
+
# end
|
|
37
|
+
module Tooltipable
|
|
38
|
+
# TODO: This include should be removed and then anything with Tooltipable
|
|
39
|
+
# needs to be evaluated that this doesn't break it.
|
|
40
|
+
# It is undesirable that every Tooltipable component also received
|
|
41
|
+
# the disableable functionality as well.
|
|
42
|
+
include Bootstrap::Utilities::Disableable
|
|
43
|
+
|
|
44
|
+
def tooltip
|
|
45
|
+
options.fetch(:tooltip, nil)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# There are a number of complex changes that need to be made to the html
|
|
49
|
+
# for disabled tooltipped buttons
|
|
50
|
+
# Read more:
|
|
51
|
+
#
|
|
52
|
+
# https://getbootstrap.com/docs/4.1/components/tooltips/#disabled-elements
|
|
53
|
+
def html_options
|
|
54
|
+
return super if options[:tooltip].nil?
|
|
55
|
+
|
|
56
|
+
component_title = disabled ? options.fetch(:title, nil) : tooltip
|
|
57
|
+
component_styles = (options[:style] || '') + (disabled ? ' pointer-events: none;' : '') if disabled
|
|
58
|
+
super.merge!(title: component_title,
|
|
59
|
+
style: component_styles.try(:squish))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def data
|
|
63
|
+
if tooltip
|
|
64
|
+
disabled ? super : super.merge!(tooltip_data_attributes)
|
|
65
|
+
else
|
|
66
|
+
super
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def disabled_component_tooltip_wrapper_html_options
|
|
71
|
+
{ data: tooltip_data_attributes,
|
|
72
|
+
title: tooltip,
|
|
73
|
+
class: 'd-inline-block',
|
|
74
|
+
tabindex: '0' }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def tooltip_data_attributes
|
|
80
|
+
{ toggle: 'tooltip',
|
|
81
|
+
placement: tooltip_placement,
|
|
82
|
+
html: 'true' }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def non_html_attribute_options
|
|
86
|
+
super.push(:tooltip)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def tooltip_placement
|
|
90
|
+
@tooltip_placement ||= :top
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Bootstrap
|
|
5
|
+
module Utilities
|
|
6
|
+
# Allows component to swap out the main component wrapping element (ex. :div vs. :span)
|
|
7
|
+
# Pass in :as -- only unique logic at the moment
|
|
8
|
+
# is converting :link to :a for tag generation
|
|
9
|
+
module Wrappable
|
|
10
|
+
attr_accessor :as
|
|
11
|
+
|
|
12
|
+
def utility_initialize
|
|
13
|
+
self.as = options.fetch(:as, automatic_as)
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def assistive_html_attributes
|
|
20
|
+
if as == :button
|
|
21
|
+
super.merge(type: options.fetch(:type, 'button')) # prefer type submit
|
|
22
|
+
else
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def automatic_as
|
|
28
|
+
if href
|
|
29
|
+
:a
|
|
30
|
+
elsif options[:type] == 'submit'
|
|
31
|
+
:button
|
|
32
|
+
else
|
|
33
|
+
default_html_wrapper_element
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Set default_html_wrapper_element on individual components as needed
|
|
38
|
+
def default_html_wrapper_element
|
|
39
|
+
@default_html_wrapper_element ||= :span
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def non_html_attribute_options
|
|
43
|
+
super.push(:as)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
# Base NFG UI component for components that are not directly
|
|
6
|
+
# inherited from Bootstrap base components (e.g.: buttons inhert their
|
|
7
|
+
# Bootstrap counterpart, tiles don't).
|
|
8
|
+
class Base < NfgUi::Bootstrap::Components::Base
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
include NfgUi::Components::Utilities::Traitable
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Alert doesn't have any customizations unique to the design system yet
|
|
7
|
+
# As such, the NFG UI alert is simply a bootstrap alert behind the scenes.
|
|
8
|
+
# Traits will eventually be connected here.
|
|
9
|
+
class Alert < NfgUi::Bootstrap::Components::Alert
|
|
10
|
+
include NfgUi::Components::Utilities::Iconable
|
|
11
|
+
include NfgUi::Components::Utilities::Traitable
|
|
12
|
+
include NfgUi::Components::Utilities::Describable
|
|
13
|
+
include NfgUi::Components::Utilities::Renderable
|
|
14
|
+
|
|
15
|
+
include NfgUi::Components::Traits::Alert
|
|
16
|
+
include NfgUi::Components::Traits::Dismiss
|
|
17
|
+
include NfgUi::Components::Traits::Theme
|
|
18
|
+
|
|
19
|
+
def render
|
|
20
|
+
# NOTE: concat statement must be surrounded by capture blocks.
|
|
21
|
+
# If you see duplication of content, it is likely because that
|
|
22
|
+
# a concat has been called outside of a capture block.
|
|
23
|
+
# This is specifically true when some of those concats are nested
|
|
24
|
+
# or are within a block defined within the capture block
|
|
25
|
+
content_tag(:div, html_options) do
|
|
26
|
+
capture do
|
|
27
|
+
if dismissible
|
|
28
|
+
concat(NfgUi::Components::Elements::Button.new({ traits: [:close], dismiss: :alert }, view_context).render)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if icon
|
|
32
|
+
concat(NfgUi::Components::Patterns::Media.new({}, view_context).render {
|
|
33
|
+
capture do
|
|
34
|
+
|
|
35
|
+
concat(NfgUi::Components::Elements::MediaObject.new({}, view_context).render {
|
|
36
|
+
content_tag(:div, class: 'mr-2') do
|
|
37
|
+
NfgUi::Components::Foundations::Icon.new({ traits: [icon] }, view_context).render
|
|
38
|
+
end
|
|
39
|
+
})
|
|
40
|
+
concat(NfgUi::Components::Elements::MediaBody.new({}, view_context).render {
|
|
41
|
+
capture do
|
|
42
|
+
if heading
|
|
43
|
+
concat(NfgUi::Components::Foundations::Typeface.new({ heading: heading, class: 'alert-heading' }, view_context).render)
|
|
44
|
+
end
|
|
45
|
+
concat(block_given? ? yield : body)
|
|
46
|
+
end
|
|
47
|
+
})
|
|
48
|
+
end
|
|
49
|
+
})
|
|
50
|
+
else
|
|
51
|
+
if heading
|
|
52
|
+
concat(NfgUi::Components::Foundations::Typeface.new({ heading: heading, class: 'alert-heading' }, view_context).render)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
concat(block_given? ? yield : body)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Badge doesn't have any customizations unique to the design system yet
|
|
7
|
+
# As such, the NFG UI badge is simply a bootstrap badge behind the scenes.
|
|
8
|
+
# Traits will eventually be connected here.
|
|
9
|
+
class Badge < NfgUi::Bootstrap::Components::Badge
|
|
10
|
+
include Bootstrap::Utilities::Tooltipable
|
|
11
|
+
|
|
12
|
+
include NfgUi::Components::Utilities::Iconable
|
|
13
|
+
include NfgUi::Components::Utilities::Traitable
|
|
14
|
+
include NfgUi::Components::Utilities::Describable
|
|
15
|
+
include NfgUi::Components::Utilities::Renderable
|
|
16
|
+
|
|
17
|
+
include NfgUi::Components::Traits::Theme
|
|
18
|
+
include NfgUi::Components::Traits::Pill
|
|
19
|
+
|
|
20
|
+
def render
|
|
21
|
+
super do
|
|
22
|
+
if icon
|
|
23
|
+
NfgUi::Components::Foundations::Icon.new({ traits: [icon], text: body }, view_context).render
|
|
24
|
+
else
|
|
25
|
+
(block_given? ? yield : body)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Breadcrumb doesn't have any customizations unique to the design system yet
|
|
7
|
+
# As such, the NFG UI Breadcrumb is simply a bootstrap Breadcrumb behind the scenes.
|
|
8
|
+
# Traits will eventually be connected here.
|
|
9
|
+
class Breadcrumb < NfgUi::Bootstrap::Components::Breadcrumb
|
|
10
|
+
include NfgUi::Components::Utilities::Traitable
|
|
11
|
+
include NfgUi::Components::Utilities::Describable
|
|
12
|
+
include NfgUi::Components::Utilities::Renderable
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Breadcrumb doesn't have any customizations unique to the design system yet
|
|
7
|
+
# As such, the NFG UI Breadcrumb is simply a bootstrap Breadcrumb behind the scenes.
|
|
8
|
+
# Traits will eventually be connected here.
|
|
9
|
+
class BreadcrumbItem < NfgUi::Bootstrap::Components::BreadcrumbItem
|
|
10
|
+
include NfgUi::Components::Utilities::Traitable
|
|
11
|
+
include NfgUi::Components::Utilities::Describable
|
|
12
|
+
include NfgUi::Components::Utilities::Renderable
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Button doesn't have any customizations unique to the design system yet
|
|
7
|
+
# As such, the NFG UI Button is simply a bootstrap Button behind the scenes.
|
|
8
|
+
# Traits will eventually be connected here.
|
|
9
|
+
class Button < NfgUi::Bootstrap::Components::Button
|
|
10
|
+
include NfgUi::Components::Utilities::Confirmable
|
|
11
|
+
include NfgUi::Components::Utilities::DisableWithable
|
|
12
|
+
include NfgUi::Components::Utilities::Iconable
|
|
13
|
+
include NfgUi::Components::Utilities::LeftIconable
|
|
14
|
+
include NfgUi::Components::Utilities::Traitable
|
|
15
|
+
include NfgUi::Components::Utilities::Describable
|
|
16
|
+
include NfgUi::Components::Utilities::Methodable
|
|
17
|
+
include NfgUi::Components::Utilities::Renderable
|
|
18
|
+
|
|
19
|
+
include NfgUi::Components::Traits::Active
|
|
20
|
+
include NfgUi::Components::Traits::Button
|
|
21
|
+
include NfgUi::Components::Traits::DisableWith
|
|
22
|
+
include NfgUi::Components::Traits::Size
|
|
23
|
+
include NfgUi::Components::Traits::Theme
|
|
24
|
+
include NfgUi::Components::Traits::Disable
|
|
25
|
+
include NfgUi::Components::Traits::Remote
|
|
26
|
+
|
|
27
|
+
def data
|
|
28
|
+
dismiss ? super.merge!(dismiss: dismiss) : super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# TODO
|
|
32
|
+
def close
|
|
33
|
+
# convert :close trait to
|
|
34
|
+
# close: :alert
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def method
|
|
38
|
+
options.fetch(:method, nil)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def dismiss
|
|
42
|
+
options.fetch(:dismiss, nil)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def render
|
|
46
|
+
if tooltip && disabled
|
|
47
|
+
content_tag(:span, disabled_component_tooltip_wrapper_html_options) do
|
|
48
|
+
content_tag(as, html_options) do
|
|
49
|
+
capture do
|
|
50
|
+
concat(left_icon_component) if left_icon
|
|
51
|
+
concat(block_given? ? yield : body)
|
|
52
|
+
concat(right_icon_component) if icon
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
else
|
|
58
|
+
content_tag(as, html_options) do
|
|
59
|
+
capture do
|
|
60
|
+
concat(left_icon_component) if left_icon
|
|
61
|
+
concat(block_given? ? yield : body)
|
|
62
|
+
concat(right_icon_component) if icon
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def left_icon_component
|
|
71
|
+
NfgUi::Components::Foundations::Icon.new({ traits: [left_icon],
|
|
72
|
+
class: NfgUi::Components::Foundations::Icon::LEFT_ICON_SPACER_CSS_CLASS },
|
|
73
|
+
view_context).render
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def right_icon_component
|
|
78
|
+
NfgUi::Components::Foundations::Icon.new({ traits: [icon, :right],
|
|
79
|
+
class: NfgUi::Components::Foundations::Icon::RIGHT_ICON_SPACER_CSS_CLASS },
|
|
80
|
+
view_context).render
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def base_element
|
|
84
|
+
as
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def dismiss_component?
|
|
88
|
+
dismiss == :alert || dismiss == :modal
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def non_html_attribute_options
|
|
92
|
+
super.push(:dismiss)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Bootstrap Card Body
|
|
7
|
+
# https://getbootstrap.com/docs/4.1/components/card/#header-and-footer
|
|
8
|
+
class CardBody < NfgUi::Bootstrap::Components::CardBody
|
|
9
|
+
def component_family
|
|
10
|
+
:card
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# doc coming soon
|
|
7
|
+
class CardFooter < NfgUi::Bootstrap::Components::CardFooter
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# doc coming soon
|
|
7
|
+
class CardHeader < NfgUi::Bootstrap::Components::CardHeader
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# doc coming soon
|
|
7
|
+
class CardImage < NfgUi::Bootstrap::Components::CardImage
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# doc coming soon
|
|
7
|
+
class CardImageOverlay < NfgUi::Bootstrap::Components::CardImageOverlay
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Docs coming soon
|
|
7
|
+
class CarouselCaption < NfgUi::Bootstrap::Components::CarouselCaption
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NfgUi
|
|
4
|
+
module Components
|
|
5
|
+
module Elements
|
|
6
|
+
# Docs coming soon
|
|
7
|
+
class CarouselControl < NfgUi::Bootstrap::Components::CarouselControl
|
|
8
|
+
include NfgUi::Components::Utilities::Traitable
|
|
9
|
+
include NfgUi::Components::Utilities::Describable
|
|
10
|
+
include NfgUi::Components::Utilities::Renderable
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|