railsui 3.1.4 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.claude/settings.local.json +10 -0
- data/Gemfile.lock +29 -27
- data/README.md +1 -1
- data/app/assets/images/tailwind-corgie-thumbnail.jpg +0 -0
- data/app/assets/stylesheets/railsui/railsui.css +18 -0
- data/app/helpers/railsui/application_helper.rb +22 -17
- data/app/helpers/railsui/host_route_fallback_helper.rb +18 -0
- data/app/javascript/controllers/alert_controller.js +0 -0
- data/app/models/railsui/default.rb +28 -109
- data/app/views/railsui/admin/fields/_color.html.erb +6 -1
- data/app/views/railsui/admin/fields/_theme.html.erb +16 -8
- data/app/views/railsui/default/_launchpad.html.erb +1 -1
- data/app/views/railsui/shared/_flash_messages.html.erb +2 -2
- data/app/views/railsui/shared/_full_access_cta.html.erb +27 -0
- data/app/views/railsui/shared/_global_nav.html.erb +2 -2
- data/app/views/railsui/shared/_preview.html.erb +1 -1
- data/app/views/railsui/shared/_rui_email_preview.html.erb +60 -3
- data/app/views/railsui/systems/forms/form_builder.html.erb +171 -0
- data/app/views/railsui/themes/corgie/_components.html.erb +7 -0
- data/app/views/railsui/themes/corgie/_content.html.erb +9 -0
- data/app/views/railsui/themes/corgie/_fonts.html.erb +0 -0
- data/app/views/railsui/themes/corgie/_forms.html.erb +19 -0
- data/app/views/railsui/themes/corgie/_icons.html.erb +125 -0
- data/app/views/railsui/themes/corgie/_nav.html.erb +166 -0
- data/app/views/railsui/themes/corgie/_scaffolds.html.erb +42 -0
- data/app/views/railsui/themes/corgie/authentication/_overview.html.erb +5 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_change_password.html.erb +74 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_confirmation.html.erb +63 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_edit.html.erb +103 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_overview.html.erb +225 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_reset_password.html.erb +60 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_signin.html.erb +93 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_signup.html.erb +98 -0
- data/app/views/railsui/themes/corgie/authentication/devise/_unlocks.html.erb +60 -0
- data/app/views/railsui/themes/corgie/authentication/static/_change_password.html.erb +67 -0
- data/app/views/railsui/themes/corgie/authentication/static/_confirmation.html.erb +58 -0
- data/app/views/railsui/themes/corgie/authentication/static/_overview.html.erb +204 -0
- data/app/views/railsui/themes/corgie/authentication/static/_reset_password.html.erb +59 -0
- data/app/views/railsui/themes/corgie/authentication/static/_signin.html.erb +102 -0
- data/app/views/railsui/themes/corgie/authentication/static/_signup.html.erb +108 -0
- data/app/views/railsui/themes/corgie/authentication/static/_unlocks.html.erb +60 -0
- data/app/views/railsui/themes/corgie/components/_accordion.html.erb +17 -0
- data/app/views/railsui/themes/corgie/components/_alert.html.erb +23 -0
- data/app/views/railsui/themes/corgie/components/_avatar.html.erb +13 -0
- data/app/views/railsui/themes/corgie/components/_badge.html.erb +20 -0
- data/app/views/railsui/themes/corgie/components/_breadcrumb.html.erb +14 -0
- data/app/views/railsui/themes/corgie/components/_button.html.erb +16 -0
- data/app/views/railsui/themes/corgie/components/_card.html.erb +23 -0
- data/app/views/railsui/themes/corgie/components/_combobox.html.erb +11 -0
- data/app/views/railsui/themes/corgie/components/_dropdown.html.erb +22 -0
- data/app/views/railsui/themes/corgie/components/_flash.html.erb +17 -0
- data/app/views/railsui/themes/corgie/components/_modal.html.erb +27 -0
- data/app/views/railsui/themes/corgie/components/_navigation.html.erb +7 -0
- data/app/views/railsui/themes/corgie/components/_pagination.html.erb +15 -0
- data/app/views/railsui/themes/corgie/components/_tab.html.erb +23 -0
- data/app/views/railsui/themes/corgie/components/_toast.html.erb +75 -0
- data/app/views/railsui/themes/corgie/components/_tooltip.html.erb +77 -0
- data/app/views/railsui/themes/corgie/components/accordion/_contained.html.erb +90 -0
- data/app/views/railsui/themes/corgie/components/accordion/_flush.html.erb +92 -0
- data/app/views/railsui/themes/corgie/components/alert/_dismissable.html.erb +45 -0
- data/app/views/railsui/themes/corgie/components/alert/_with_accent_border.html.erb +32 -0
- data/app/views/railsui/themes/corgie/components/alert/_with_actions.html.erb +57 -0
- data/app/views/railsui/themes/corgie/components/alert/_with_description.html.erb +41 -0
- data/app/views/railsui/themes/corgie/components/alert/_with_list.html.erb +46 -0
- data/app/views/railsui/themes/corgie/components/avatar/_circle.html.erb +53 -0
- data/app/views/railsui/themes/corgie/components/avatar/_rounded.html.erb +53 -0
- data/app/views/railsui/themes/corgie/components/badge/_basic.html.erb +70 -0
- data/app/views/railsui/themes/corgie/components/badge/_outline.html.erb +67 -0
- data/app/views/railsui/themes/corgie/components/badge/_pill.html.erb +67 -0
- data/app/views/railsui/themes/corgie/components/badge/_tag.html.erb +277 -0
- data/app/views/railsui/themes/corgie/components/breadcrumb/_article.html.erb +88 -0
- data/app/views/railsui/themes/corgie/components/breadcrumb/_base.html.erb +77 -0
- data/app/views/railsui/themes/corgie/components/button/_base.html.erb +38 -0
- data/app/views/railsui/themes/corgie/components/button/_expanded.html.erb +24 -0
- data/app/views/railsui/themes/corgie/components/button/_sizes.html.erb +31 -0
- data/app/views/railsui/themes/corgie/components/card/_article.html.erb +119 -0
- data/app/views/railsui/themes/corgie/components/card/_base.html.erb +34 -0
- data/app/views/railsui/themes/corgie/components/card/_feature.html.erb +54 -0
- data/app/views/railsui/themes/corgie/components/card/_team_member.html.erb +60 -0
- data/app/views/railsui/themes/corgie/components/card/_value.html.erb +54 -0
- data/app/views/railsui/themes/corgie/components/combobox/_base.html.erb +250 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_base.html.erb +61 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_dropdown.html.erb +24 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_dropdown_w_icon.html.erb +27 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_right_aligned.html.erb +82 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_with_dividers.html.erb +93 -0
- data/app/views/railsui/themes/corgie/components/dropdown/_with_icons.html.erb +85 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_1.html.erb +44 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_2.html.erb +16 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_3.html.erb +16 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_4.html.erb +27 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_dependencies.html.erb +3 -0
- data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_tutorial.html.erb +25 -0
- data/app/views/railsui/themes/corgie/components/flash/_alert.html.erb +29 -0
- data/app/views/railsui/themes/corgie/components/flash/_dynamic.html.erb +46 -0
- data/app/views/railsui/themes/corgie/components/flash/_notice.html.erb +29 -0
- data/app/views/railsui/themes/corgie/components/modal/_base.html.erb +110 -0
- data/app/views/railsui/themes/corgie/components/modal/_centered_dual_action.html.erb +124 -0
- data/app/views/railsui/themes/corgie/components/modal/_dismiss_icon.html.erb +124 -0
- data/app/views/railsui/themes/corgie/components/modal/_settings.html.erb +201 -0
- data/app/views/railsui/themes/corgie/components/modal/_single_action.html.erb +119 -0
- data/app/views/railsui/themes/corgie/components/modal/_with_form.html.erb +148 -0
- data/app/views/railsui/themes/corgie/components/navigation/_base.html.erb +215 -0
- data/app/views/railsui/themes/corgie/components/navigation/_chat.html.erb +194 -0
- data/app/views/railsui/themes/corgie/components/navigation/_nav_preview.html.erb +9 -0
- data/app/views/railsui/themes/corgie/components/pagination/_contained.html.erb +131 -0
- data/app/views/railsui/themes/corgie/components/pagination/_pagy.html.erb +97 -0
- data/app/views/railsui/themes/corgie/components/pagination/_simple.html.erb +114 -0
- data/app/views/railsui/themes/corgie/components/tab/_base.html.erb +101 -0
- data/app/views/railsui/themes/corgie/components/tab/_pills.html.erb +102 -0
- data/app/views/railsui/themes/corgie/components/tab/_rounded.html.erb +104 -0
- data/app/views/railsui/themes/corgie/components/tab/_vertical.html.erb +145 -0
- data/app/views/railsui/themes/corgie/components/tab/_with_icons.html.erb +138 -0
- data/app/views/railsui/themes/corgie/components/toast/_base.html.erb +98 -0
- data/app/views/railsui/themes/corgie/components/tooltip/_base.html.erb +51 -0
- data/app/views/railsui/themes/corgie/content/_image.html.erb +31 -0
- data/app/views/railsui/themes/corgie/content/_table.html.erb +21 -0
- data/app/views/railsui/themes/corgie/content/_typography.html.erb +47 -0
- data/app/views/railsui/themes/corgie/content/image/_object_contain.html.erb +31 -0
- data/app/views/railsui/themes/corgie/content/image/_object_cover.html.erb +32 -0
- data/app/views/railsui/themes/corgie/content/image/_object_fill.html.erb +32 -0
- data/app/views/railsui/themes/corgie/content/image/_object_scale_down.html.erb +34 -0
- data/app/views/railsui/themes/corgie/content/image/_responsive.html.erb +24 -0
- data/app/views/railsui/themes/corgie/content/table/_bordered.html.erb +93 -0
- data/app/views/railsui/themes/corgie/content/table/_borderless.html.erb +92 -0
- data/app/views/railsui/themes/corgie/content/table/_comparison.html.erb +494 -0
- data/app/views/railsui/themes/corgie/content/typography/_blockquote.html.erb +41 -0
- data/app/views/railsui/themes/corgie/content/typography/_display_headings.html.erb +70 -0
- data/app/views/railsui/themes/corgie/content/typography/_fonts.html.erb +30 -0
- data/app/views/railsui/themes/corgie/content/typography/_headings.html.erb +88 -0
- data/app/views/railsui/themes/corgie/content/typography/_inline_formatting.html.erb +44 -0
- data/app/views/railsui/themes/corgie/content/typography/_lead_paragraph.html.erb +26 -0
- data/app/views/railsui/themes/corgie/content/typography/_lists.html.erb +82 -0
- data/app/views/railsui/themes/corgie/content/typography/_paragraphs.html.erb +33 -0
- data/app/views/railsui/themes/corgie/forms/_action_text.html.erb +54 -0
- data/app/views/railsui/themes/corgie/forms/_checkbox.html.erb +60 -0
- data/app/views/railsui/themes/corgie/forms/_form_builder.html.erb +487 -0
- data/app/views/railsui/themes/corgie/forms/_input.html.erb +378 -0
- data/app/views/railsui/themes/corgie/forms/_input_group.html.erb +485 -0
- data/app/views/railsui/themes/corgie/forms/_radio.html.erb +92 -0
- data/app/views/railsui/themes/corgie/forms/_select.html.erb +118 -0
- data/app/views/railsui/themes/corgie/forms/_switch.html.erb +60 -0
- data/app/views/railsui/themes/corgie/forms/_validation.html.erb +52 -0
- data/app/views/railsui/themes/corgie/mailers/_devise.html.erb +44 -0
- data/app/views/railsui/themes/corgie/mailers/_layout.html.erb +536 -0
- data/app/views/railsui/themes/corgie/mailers/_mailer_preview.html.erb +523 -0
- data/app/views/railsui/themes/corgie/mailers/_minimal.html.erb +63 -0
- data/app/views/railsui/themes/corgie/mailers/_promotion.html.erb +62 -0
- data/app/views/railsui/themes/corgie/mailers/_transactional.html.erb +133 -0
- data/app/views/railsui/themes/corgie/mailers/devise/_confirmation_instructions.html.erb +34 -0
- data/app/views/railsui/themes/corgie/mailers/devise/_email_changed.html.erb +32 -0
- data/app/views/railsui/themes/corgie/mailers/devise/_password_changed.html.erb +25 -0
- data/app/views/railsui/themes/corgie/mailers/devise/_reset_password_instructions.html.erb +33 -0
- data/app/views/railsui/themes/corgie/mailers/devise/_unlock_instructions.html.erb +32 -0
- data/app/views/railsui/themes/corgie/scaffolds/_edit.html.erb +88 -0
- data/app/views/railsui/themes/corgie/scaffolds/_index.html.erb +88 -0
- data/app/views/railsui/themes/corgie/scaffolds/_new.html.erb +80 -0
- data/app/views/railsui/themes/corgie/scaffolds/_partial.html.erb +56 -0
- data/app/views/railsui/themes/corgie/scaffolds/_show.html.erb +85 -0
- data/app/views/railsui/themes/hound/_forms.html.erb +2 -0
- data/app/views/railsui/themes/hound/_nav.html.erb +2 -0
- data/app/views/railsui/themes/hound/authentication/devise/_change_password.html.erb +1 -27
- data/app/views/railsui/themes/hound/authentication/devise/_confirmation.html.erb +1 -20
- data/app/views/railsui/themes/hound/authentication/devise/_edit.html.erb +1 -44
- data/app/views/railsui/themes/hound/authentication/devise/_overview.html.erb +3 -51
- data/app/views/railsui/themes/hound/authentication/devise/_reset_password.html.erb +1 -17
- data/app/views/railsui/themes/hound/authentication/devise/_signin.html.erb +1 -30
- data/app/views/railsui/themes/hound/authentication/devise/_signup.html.erb +1 -31
- data/app/views/railsui/themes/hound/authentication/devise/_unlocks.html.erb +1 -17
- data/app/views/railsui/themes/hound/authentication/static/_change_password.html.erb +1 -32
- data/app/views/railsui/themes/hound/authentication/static/_confirmation.html.erb +1 -23
- data/app/views/railsui/themes/hound/authentication/static/_edit.html.erb +1 -39
- data/app/views/railsui/themes/hound/authentication/static/_overview.html.erb +2 -40
- data/app/views/railsui/themes/hound/authentication/static/_reset_password.html.erb +1 -22
- data/app/views/railsui/themes/hound/authentication/static/_signin.html.erb +1 -35
- data/app/views/railsui/themes/hound/authentication/static/_signup.html.erb +1 -31
- data/app/views/railsui/themes/hound/authentication/static/_unlocks.html.erb +1 -20
- data/app/views/railsui/themes/hound/components/_toast.html.erb +0 -3
- data/app/views/railsui/themes/hound/components/accordion/_contained.html.erb +0 -27
- data/app/views/railsui/themes/hound/components/accordion/_flush.html.erb +0 -27
- data/app/views/railsui/themes/hound/components/alert/_dismissable.html.erb +0 -8
- data/app/views/railsui/themes/hound/components/alert/_with_accent_border.html.erb +0 -7
- data/app/views/railsui/themes/hound/components/alert/_with_actions.html.erb +0 -11
- data/app/views/railsui/themes/hound/components/alert/_with_description.html.erb +0 -7
- data/app/views/railsui/themes/hound/components/alert/_with_list.html.erb +0 -8
- data/app/views/railsui/themes/hound/components/avatar/_circle.html.erb +0 -12
- data/app/views/railsui/themes/hound/components/avatar/_rounded.html.erb +0 -12
- data/app/views/railsui/themes/hound/components/badge/_basic.html.erb +0 -22
- data/app/views/railsui/themes/hound/components/badge/_outline.html.erb +0 -22
- data/app/views/railsui/themes/hound/components/badge/_pill.html.erb +0 -22
- data/app/views/railsui/themes/hound/components/badge/_tag.html.erb +0 -52
- data/app/views/railsui/themes/hound/components/breadcrumb/_base.html.erb +0 -14
- data/app/views/railsui/themes/hound/components/breadcrumb/_contained.html.erb +0 -14
- data/app/views/railsui/themes/hound/components/button/_base.html.erb +0 -10
- data/app/views/railsui/themes/hound/components/button/_expanded.html.erb +0 -3
- data/app/views/railsui/themes/hound/components/button/_sizes.html.erb +0 -5
- data/app/views/railsui/themes/hound/components/card/_base.html.erb +0 -6
- data/app/views/railsui/themes/hound/components/card/_user_card.html.erb +0 -13
- data/app/views/railsui/themes/hound/components/card/_user_card_dropdown.html.erb +0 -20
- data/app/views/railsui/themes/hound/components/card/_user_card_with_actions.html.erb +0 -18
- data/app/views/railsui/themes/hound/components/card/_with_action.html.erb +0 -13
- data/app/views/railsui/themes/hound/components/card/_with_header.html.erb +0 -43
- data/app/views/railsui/themes/hound/components/combobox/_base.html.erb +0 -40
- data/app/views/railsui/themes/hound/components/dropdown/_base.html.erb +0 -10
- data/app/views/railsui/themes/hound/components/dropdown/_right_aligned.html.erb +0 -14
- data/app/views/railsui/themes/hound/components/dropdown/_with_dividers.html.erb +0 -14
- data/app/views/railsui/themes/hound/components/dropdown/_with_icons.html.erb +0 -20
- data/app/views/railsui/themes/hound/components/flash/_alert.html.erb +0 -5
- data/app/views/railsui/themes/hound/components/flash/_dynamic.html.erb +0 -5
- data/app/views/railsui/themes/hound/components/flash/_notice.html.erb +0 -5
- data/app/views/railsui/themes/hound/components/modal/_base.html.erb +0 -13
- data/app/views/railsui/themes/hound/components/modal/_centered_dual_action.html.erb +0 -16
- data/app/views/railsui/themes/hound/components/modal/_dismiss_icon.html.erb +0 -20
- data/app/views/railsui/themes/hound/components/modal/_single_action.html.erb +0 -15
- data/app/views/railsui/themes/hound/components/modal/_with_form.html.erb +0 -23
- data/app/views/railsui/themes/hound/components/navigation/_base.html.erb +1 -41
- data/app/views/railsui/themes/hound/components/navigation/_with_action.html.erb +1 -38
- data/app/views/railsui/themes/hound/components/navigation/_with_dropdowns.html.erb +1 -105
- data/app/views/railsui/themes/hound/components/navigation/_with_search.html.erb +1 -41
- data/app/views/railsui/themes/hound/components/pagination/_contained.html.erb +0 -31
- data/app/views/railsui/themes/hound/components/pagination/_minimal.html.erb +0 -27
- data/app/views/railsui/themes/hound/components/pagination/_pagy.html.erb +47 -72
- data/app/views/railsui/themes/hound/components/tab/_base.html.erb +1 -18
- data/app/views/railsui/themes/hound/components/tab/_pills.html.erb +1 -18
- data/app/views/railsui/themes/hound/components/tab/_rounded.html.erb +1 -18
- data/app/views/railsui/themes/hound/components/tab/_with_icons.html.erb +1 -26
- data/app/views/railsui/themes/hound/components/toast/_base.html.erb +0 -16
- data/app/views/railsui/themes/hound/components/tooltip/_base.html.erb +0 -3
- data/app/views/railsui/themes/hound/content/image/_object_contain.html.erb +0 -5
- data/app/views/railsui/themes/hound/content/image/_object_cover.html.erb +0 -5
- data/app/views/railsui/themes/hound/content/image/_object_fill.html.erb +0 -5
- data/app/views/railsui/themes/hound/content/image/_object_scale_down.html.erb +0 -5
- data/app/views/railsui/themes/hound/content/image/_responsive.html.erb +0 -4
- data/app/views/railsui/themes/hound/content/table/_bordered.html.erb +0 -21
- data/app/views/railsui/themes/hound/content/table/_borderless.html.erb +0 -21
- data/app/views/railsui/themes/hound/content/typography/_blockquote.html.erb +0 -9
- data/app/views/railsui/themes/hound/content/typography/_display_headings.html.erb +0 -9
- data/app/views/railsui/themes/hound/content/typography/_headings.html.erb +0 -12
- data/app/views/railsui/themes/hound/content/typography/_inline_formatting.html.erb +0 -20
- data/app/views/railsui/themes/hound/content/typography/_lead_paragraph.html.erb +0 -5
- data/app/views/railsui/themes/hound/content/typography/_lists.html.erb +0 -17
- data/app/views/railsui/themes/hound/content/typography/_paragraphs.html.erb +0 -4
- data/app/views/railsui/themes/hound/forms/_action_text.html.erb +0 -6
- data/app/views/railsui/themes/hound/forms/_checkbox.html.erb +0 -9
- data/app/views/railsui/themes/hound/forms/_form_builder.html.erb +487 -0
- data/app/views/railsui/themes/hound/forms/_input.html.erb +0 -93
- data/app/views/railsui/themes/hound/forms/_input_group.html.erb +0 -83
- data/app/views/railsui/themes/hound/forms/_radio.html.erb +0 -13
- data/app/views/railsui/themes/hound/forms/_select.html.erb +0 -16
- data/app/views/railsui/themes/hound/forms/_switch.html.erb +0 -9
- data/app/views/railsui/themes/hound/forms/_validation.html.erb +0 -15
- data/app/views/railsui/themes/hound/mailers/_layout.html.erb +1 -432
- data/app/views/railsui/themes/hound/mailers/_minimal.html.erb +1 -16
- data/app/views/railsui/themes/hound/mailers/_promotion.html.erb +1 -20
- data/app/views/railsui/themes/hound/mailers/_transactional.html.erb +1 -43
- data/app/views/railsui/themes/hound/mailers/devise/_confirmation_instructions.html.erb +1 -9
- data/app/views/railsui/themes/hound/mailers/devise/_email_changed.html.erb +1 -13
- data/app/views/railsui/themes/hound/mailers/devise/_password_changed.html.erb +1 -7
- data/app/views/railsui/themes/hound/mailers/devise/_reset_password_instructions.html.erb +1 -9
- data/app/views/railsui/themes/hound/mailers/devise/_unlock_instructions.html.erb +1 -9
- data/app/views/railsui/themes/hound/scaffolds/_edit.html.erb +1 -19
- data/app/views/railsui/themes/hound/scaffolds/_index.html.erb +1 -14
- data/app/views/railsui/themes/hound/scaffolds/_new.html.erb +1 -17
- data/app/views/railsui/themes/hound/scaffolds/_partial.html.erb +1 -17
- data/app/views/railsui/themes/hound/scaffolds/_show.html.erb +1 -20
- data/app/views/railsui/themes/shepherd/_forms.html.erb +5 -3
- data/app/views/railsui/themes/shepherd/_nav.html.erb +2 -0
- data/app/views/railsui/themes/shepherd/authentication/devise/_change_password.html.erb +1 -23
- data/app/views/railsui/themes/shepherd/authentication/devise/_confirmation.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/authentication/devise/_edit.html.erb +1 -74
- data/app/views/railsui/themes/shepherd/authentication/devise/_overview.html.erb +2 -57
- data/app/views/railsui/themes/shepherd/authentication/devise/_reset_password.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/authentication/devise/_signin.html.erb +1 -25
- data/app/views/railsui/themes/shepherd/authentication/devise/_signup.html.erb +1 -26
- data/app/views/railsui/themes/shepherd/authentication/devise/_unlocks.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/authentication/static/_change_password.html.erb +1 -23
- data/app/views/railsui/themes/shepherd/authentication/static/_confirmation.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/authentication/static/_edit.html.erb +1 -67
- data/app/views/railsui/themes/shepherd/authentication/static/_overview.html.erb +1 -56
- data/app/views/railsui/themes/shepherd/authentication/static/_reset_password.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/authentication/static/_signin.html.erb +1 -24
- data/app/views/railsui/themes/shepherd/authentication/static/_signup.html.erb +1 -26
- data/app/views/railsui/themes/shepherd/authentication/static/_unlocks.html.erb +1 -16
- data/app/views/railsui/themes/shepherd/components/_toast.html.erb +0 -3
- data/app/views/railsui/themes/shepherd/components/accordion/_contained.html.erb +0 -28
- data/app/views/railsui/themes/shepherd/components/accordion/_flush.html.erb +0 -27
- data/app/views/railsui/themes/shepherd/components/alert/_dismissable.html.erb +0 -8
- data/app/views/railsui/themes/shepherd/components/alert/_with_accent_border.html.erb +0 -6
- data/app/views/railsui/themes/shepherd/components/alert/_with_actions.html.erb +0 -11
- data/app/views/railsui/themes/shepherd/components/alert/_with_description.html.erb +0 -7
- data/app/views/railsui/themes/shepherd/components/alert/_with_list.html.erb +0 -8
- data/app/views/railsui/themes/shepherd/components/avatar/_circle.html.erb +0 -12
- data/app/views/railsui/themes/shepherd/components/avatar/_rounded.html.erb +0 -12
- data/app/views/railsui/themes/shepherd/components/badge/_basic.html.erb +0 -22
- data/app/views/railsui/themes/shepherd/components/badge/_outline.html.erb +0 -22
- data/app/views/railsui/themes/shepherd/components/badge/_pill.html.erb +0 -22
- data/app/views/railsui/themes/shepherd/components/badge/_tag.html.erb +0 -52
- data/app/views/railsui/themes/shepherd/components/breadcrumb/_base.html.erb +0 -14
- data/app/views/railsui/themes/shepherd/components/breadcrumb/_contained.html.erb +0 -14
- data/app/views/railsui/themes/shepherd/components/button/_base.html.erb +0 -17
- data/app/views/railsui/themes/shepherd/components/button/_expanded.html.erb +0 -3
- data/app/views/railsui/themes/shepherd/components/button/_sizes.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/components/card/_base.html.erb +0 -6
- data/app/views/railsui/themes/shepherd/components/card/_property_card.html.erb +0 -28
- data/app/views/railsui/themes/shepherd/components/card/_property_user_card.html.erb +0 -14
- data/app/views/railsui/themes/shepherd/components/card/_user_card_with_actions.html.erb +0 -12
- data/app/views/railsui/themes/shepherd/components/card/_with_action.html.erb +0 -7
- data/app/views/railsui/themes/shepherd/components/card/_with_header.html.erb +0 -7
- data/app/views/railsui/themes/shepherd/components/combobox/_base.html.erb +0 -40
- data/app/views/railsui/themes/shepherd/components/datalist/_booking_list.html.erb +0 -45
- data/app/views/railsui/themes/shepherd/components/datalist/_property_list.html.erb +0 -47
- data/app/views/railsui/themes/shepherd/components/dropdown/_base.html.erb +0 -10
- data/app/views/railsui/themes/shepherd/components/dropdown/_right_aligned.html.erb +0 -13
- data/app/views/railsui/themes/shepherd/components/dropdown/_with_dividers.html.erb +0 -14
- data/app/views/railsui/themes/shepherd/components/dropdown/_with_menu_icons.html.erb +0 -16
- data/app/views/railsui/themes/shepherd/components/flash/_alert.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/components/flash/_dynamic.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/components/flash/_notice.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/components/modal/_base.html.erb +0 -12
- data/app/views/railsui/themes/shepherd/components/modal/_centered_dual_action.html.erb +0 -16
- data/app/views/railsui/themes/shepherd/components/modal/_dismiss_icon.html.erb +0 -23
- data/app/views/railsui/themes/shepherd/components/modal/_single_action.html.erb +0 -14
- data/app/views/railsui/themes/shepherd/components/modal/_with_form.html.erb +0 -23
- data/app/views/railsui/themes/shepherd/components/navigation/_base.html.erb +0 -81
- data/app/views/railsui/themes/shepherd/components/navigation/_logged_out.html.erb +0 -22
- data/app/views/railsui/themes/shepherd/components/navigation/_with_dropdowns.html.erb +0 -88
- data/app/views/railsui/themes/shepherd/components/navigation/_with_search.html.erb +1 -83
- data/app/views/railsui/themes/shepherd/components/pagination/_contained.html.erb +0 -31
- data/app/views/railsui/themes/shepherd/components/pagination/_dark.html.erb +0 -31
- data/app/views/railsui/themes/shepherd/components/pagination/_pagy.html.erb +53 -98
- data/app/views/railsui/themes/shepherd/components/pagination/_simple.html.erb +0 -27
- data/app/views/railsui/themes/shepherd/components/tab/_base.html.erb +1 -18
- data/app/views/railsui/themes/shepherd/components/tab/_pills.html.erb +1 -18
- data/app/views/railsui/themes/shepherd/components/tab/_rounded.html.erb +1 -18
- data/app/views/railsui/themes/shepherd/components/tab/_with_icons.html.erb +1 -26
- data/app/views/railsui/themes/shepherd/components/toast/_base.html.erb +0 -16
- data/app/views/railsui/themes/shepherd/components/tooltip/_base.html.erb +0 -3
- data/app/views/railsui/themes/shepherd/content/_image_old.html.erb +0 -20
- data/app/views/railsui/themes/shepherd/content/image/_object_contain.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/content/image/_object_cover.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/content/image/_object_fill.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/content/image/_object_scale_down.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/content/image/_responsive.html.erb +0 -4
- data/app/views/railsui/themes/shepherd/content/table/_bordered.html.erb +0 -21
- data/app/views/railsui/themes/shepherd/content/table/_borderless.html.erb +0 -21
- data/app/views/railsui/themes/shepherd/content/typography/_blockquote.html.erb +0 -9
- data/app/views/railsui/themes/shepherd/content/typography/_display_headings.html.erb +0 -9
- data/app/views/railsui/themes/shepherd/content/typography/_headings.html.erb +0 -15
- data/app/views/railsui/themes/shepherd/content/typography/_inline_formatting.html.erb +0 -21
- data/app/views/railsui/themes/shepherd/content/typography/_lead_paragraph.html.erb +0 -5
- data/app/views/railsui/themes/shepherd/content/typography/_lists.html.erb +0 -17
- data/app/views/railsui/themes/shepherd/content/typography/_paragraphs.html.erb +0 -4
- data/app/views/railsui/themes/shepherd/forms/_action_text.html.erb +0 -6
- data/app/views/railsui/themes/shepherd/forms/_checkbox.html.erb +0 -9
- data/app/views/railsui/themes/shepherd/forms/_form_builder.html.erb +487 -0
- data/app/views/railsui/themes/shepherd/forms/_input.html.erb +0 -119
- data/app/views/railsui/themes/shepherd/forms/_input_group.html.erb +0 -81
- data/app/views/railsui/themes/shepherd/forms/_radio.html.erb +0 -13
- data/app/views/railsui/themes/shepherd/forms/_select.html.erb +0 -16
- data/app/views/railsui/themes/shepherd/forms/_switch.html.erb +0 -9
- data/app/views/railsui/themes/shepherd/forms/_validation.html.erb +0 -11
- data/app/views/railsui/themes/shepherd/mailers/_layout.html.erb +1 -493
- data/app/views/railsui/themes/shepherd/mailers/_minimal.html.erb +1 -16
- data/app/views/railsui/themes/shepherd/mailers/_promotion.html.erb +1 -20
- data/app/views/railsui/themes/shepherd/mailers/_transactional.html.erb +1 -43
- data/app/views/railsui/themes/shepherd/mailers/devise/_confirmation_instructions.html.erb +1 -9
- data/app/views/railsui/themes/shepherd/mailers/devise/_email_changed.html.erb +1 -12
- data/app/views/railsui/themes/shepherd/mailers/devise/_password_changed.html.erb +1 -7
- data/app/views/railsui/themes/shepherd/mailers/devise/_reset_password_instructions.html.erb +1 -9
- data/app/views/railsui/themes/shepherd/mailers/devise/_unlock_instructions.html.erb +1 -9
- data/app/views/railsui/themes/shepherd/scaffolds/_edit.html.erb +1 -19
- data/app/views/railsui/themes/shepherd/scaffolds/_index.html.erb +1 -11
- data/app/views/railsui/themes/shepherd/scaffolds/_new.html.erb +1 -17
- data/app/views/railsui/themes/shepherd/scaffolds/_partial.html.erb +1 -17
- data/app/views/railsui/themes/shepherd/scaffolds/_show.html.erb +1 -18
- data/config/pages.yml +103 -0
- data/config/routes.rb +6 -5
- data/config/theme.yml +2 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/auth-bg.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog-feature.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog1.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog2.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog3.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog4.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog5.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog6.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog7.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog8.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog9.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/copy.svg +6 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/pencil.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/scroll-text.svg +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/facebook.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/github.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/google.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/instagram.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/linkedin.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/twitter.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/x.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/youtube.svg +1 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/stethoscope.svg +8 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/test-tubes.svg +11 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/logo.svg +10 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/android-chrome-192x192.png +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/android-chrome-512x512.png +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/apple-touch-icon.png +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon-16x16.png +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon-32x32.png +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon.ico +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon.svg +20 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/opengraph-mark.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/opengraph.jpg +0 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/site.webmanifest +19 -0
- data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/railsui.svg +3 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/character_count_controller.js +134 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/chat_controller.js +45 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/help_search_controller.js +333 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/highlight_controller.js +13 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/markdown_controller.js +106 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/search_controller.js +311 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/sidebar_controller.js +105 -0
- data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/snippet_controller.js +223 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.html.erb +21 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.text.erb +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/promotion.html.erb +23 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/promotion.text.erb +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/transactional.html.erb +55 -0
- data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/transactional.text.erb +22 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/actiontext.css +173 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/blog.css +29 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/buttons.css +49 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/card.css +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/chat.css +27 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/code.css +233 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/dropdown.css +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/forms.css +321 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/sidebar.css +15 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/tailwind.config.js +24 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/theme.css +77 -0
- data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/typography.css +47 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui.html.erb +31 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_admin.html.erb +30 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_auth.html.erb +50 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_mailer.html.erb +503 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/about.html.erb +278 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog.html.erb +258 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog_category.html.erb +261 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog_show.html.erb +429 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/chat_new.html.erb +68 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/chat_show.html.erb +152 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/features.html.erb +356 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/help.html.erb +123 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/home.html.erb +252 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/pricing.html.erb +397 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/privacy.html.erb +140 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/signin.html.erb +38 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/signup.html.erb +48 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/terms.html.erb +182 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_account_dropdown.html.erb +46 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_action.html.erb +15 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_callout.html.erb +7 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_spacer.html.erb +7 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_error_messages.html.erb +10 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_faq.html.erb +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_flash.html.erb +11 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_fonts.html.erb +7 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_footer.html.erb +72 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_header.html.erb +15 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_meta.html.erb +90 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_nav.html.erb +3 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_railsui_head.html.erb +4 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_search.html.erb +32 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_sidebar.html.erb +7 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_waves.html.erb +47 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/blog/_article.html.erb +39 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/blog/_pagination.html.erb +21 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_disclaimer.html.erb +4 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_form.html.erb +62 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_header.html.erb +47 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_history.html.erb +36 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_key_legend.html.erb +11 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_link.html.erb +17 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_message.html.erb +69 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_model_select.html.erb +55 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_cta_section.html.erb +16 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_feature_card.html.erb +23 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_feature_check_item.html.erb +6 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_social_auth_buttons.html.erb +22 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_categories.html.erb +82 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_faq.html.erb +45 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_quick_actions.html.erb +46 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_career.html.erb +9 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_nav.html.erb +57 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_team_member_card.html.erb +16 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/_modal.html.erb +84 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/_nav_item.html.erb +14 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_billing.html.erb +120 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_data_controls.html.erb +69 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_general.html.erb +92 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_notifications.html.erb +102 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_personalization.html.erb +100 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_security.html.erb +98 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_title.html.erb +5 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_actions.html.erb +39 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_header.html.erb +40 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_history.html.erb +36 -0
- data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_link.html.erb +23 -0
- data/lib/generators/railsui/install/templates/themes/hound/stylesheets/railsui/forms.css +18 -4
- data/lib/generators/railsui/install/templates/themes/hound/stylesheets/railsui/theme.css +3 -2
- data/lib/generators/railsui/install/templates/themes/shepherd/stylesheets/railsui/forms.css +12 -2
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/_form.html.erb.tt +52 -0
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/edit.html.erb.tt +25 -0
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/index.html.erb.tt +12 -0
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/new.html.erb.tt +22 -0
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/partial.html.erb.tt +22 -0
- data/lib/generators/railsui/scaffold/templates/themes/corgie/views/show.html.erb.tt +24 -0
- data/lib/generators/railsui/scaffold/templates/themes/hound/views/_form.html.erb.tt +29 -24
- data/lib/generators/railsui/scaffold/templates/themes/shepherd/views/_form.html.erb.tt +28 -26
- data/lib/railsui/configuration.rb +22 -21
- data/lib/railsui/engine.rb +26 -20
- data/lib/railsui/form_builder.rb +307 -0
- data/lib/railsui/pages.rb +14 -3
- data/lib/railsui/theme_helper.rb +8 -8
- data/lib/railsui/theme_setup.rb +83 -49
- data/lib/railsui/themes.rb +3 -4
- data/lib/railsui/version.rb +1 -1
- data/lib/railsui.rb +9 -6
- data/lib/tasks/install.rake +1 -1
- data/lib/tasks/pages.rake +1 -1
- data/lib/tasks/stimulus.rake +1 -1
- metadata +287 -5
- data/.standard.yml +0 -3
- data/CHANGELOG.md +0 -9
- data/config/colors.yml +0 -50
@@ -0,0 +1,311 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
import { useTransition } from "stimulus-use"
|
3
|
+
|
4
|
+
export default class extends Controller {
|
5
|
+
static targets = ["modal", "input", "results"]
|
6
|
+
|
7
|
+
connect() {
|
8
|
+
useTransition(this, {
|
9
|
+
element: this.modalTarget,
|
10
|
+
enterActive: "transition ease-out duration-200",
|
11
|
+
enterFrom: "opacity-0 scale-95",
|
12
|
+
enterTo: "opacity-100 scale-100",
|
13
|
+
leaveActive: "transition ease-in duration-150",
|
14
|
+
leaveFrom: "opacity-100 scale-100",
|
15
|
+
leaveTo: "opacity-0 scale-95",
|
16
|
+
})
|
17
|
+
this.isOpen = false
|
18
|
+
this.activeIndex = -1
|
19
|
+
this.currentResults = []
|
20
|
+
}
|
21
|
+
|
22
|
+
open() {
|
23
|
+
this.isOpen = true
|
24
|
+
this.activeIndex = -1
|
25
|
+
this.modalTarget.classList.remove("hidden")
|
26
|
+
this.modalTarget.classList.add("flex")
|
27
|
+
this.enter()
|
28
|
+
|
29
|
+
// Show recent chats by default
|
30
|
+
this.showRecentChats()
|
31
|
+
|
32
|
+
// Focus the input and set up ARIA
|
33
|
+
setTimeout(() => {
|
34
|
+
this.inputTarget.focus()
|
35
|
+
this.inputTarget.setAttribute("aria-expanded", "true")
|
36
|
+
this.inputTarget.setAttribute("aria-activedescendant", "")
|
37
|
+
this.resultsTarget.setAttribute("role", "listbox")
|
38
|
+
this.resultsTarget.setAttribute("aria-label", "Search results")
|
39
|
+
}, 100)
|
40
|
+
|
41
|
+
// Add escape key listener
|
42
|
+
document.addEventListener("keydown", this.handleEscape.bind(this))
|
43
|
+
}
|
44
|
+
|
45
|
+
close() {
|
46
|
+
this.isOpen = false
|
47
|
+
this.activeIndex = -1
|
48
|
+
this.leave(() => {
|
49
|
+
this.modalTarget.classList.add("hidden")
|
50
|
+
this.modalTarget.classList.remove("flex")
|
51
|
+
})
|
52
|
+
|
53
|
+
// Clear input and results
|
54
|
+
this.inputTarget.value = ""
|
55
|
+
this.resultsTarget.innerHTML = ""
|
56
|
+
this.inputTarget.setAttribute("aria-expanded", "false")
|
57
|
+
this.inputTarget.removeAttribute("aria-activedescendant")
|
58
|
+
|
59
|
+
// Remove escape key listener
|
60
|
+
document.removeEventListener("keydown", this.handleEscape.bind(this))
|
61
|
+
}
|
62
|
+
|
63
|
+
handleEscape(event) {
|
64
|
+
if (event.key === "Escape" && this.isOpen) {
|
65
|
+
this.close()
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
handleInput(event) {
|
70
|
+
const query = event.target.value.trim()
|
71
|
+
this.activeIndex = -1 // Reset active index on new input
|
72
|
+
|
73
|
+
if (query.length === 0) {
|
74
|
+
this.showRecentChats()
|
75
|
+
} else {
|
76
|
+
this.search(query)
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
search(query) {
|
81
|
+
// Mock search results - in a real app, this would likely be API calls or turbo_streams
|
82
|
+
const mockResults = [
|
83
|
+
{
|
84
|
+
type: "chat",
|
85
|
+
title: "How to optimize Rails performance?",
|
86
|
+
subtitle: "Yesterday • 15 messages",
|
87
|
+
icon: "chat-bubble-left-right",
|
88
|
+
},
|
89
|
+
{
|
90
|
+
type: "chat",
|
91
|
+
title: "JavaScript async/await patterns",
|
92
|
+
subtitle: "2 days ago • 8 messages",
|
93
|
+
icon: "chat-bubble-left-right",
|
94
|
+
},
|
95
|
+
{
|
96
|
+
type: "action",
|
97
|
+
title: "New chat",
|
98
|
+
subtitle: "Start a new conversation",
|
99
|
+
icon: "plus",
|
100
|
+
},
|
101
|
+
{
|
102
|
+
type: "action",
|
103
|
+
title: "Clear all chats",
|
104
|
+
subtitle: "Delete all conversation history",
|
105
|
+
icon: "trash",
|
106
|
+
},
|
107
|
+
].filter((item) => item.title.toLowerCase().includes(query.toLowerCase()))
|
108
|
+
|
109
|
+
this.renderResults(mockResults)
|
110
|
+
}
|
111
|
+
|
112
|
+
showRecentChats() {
|
113
|
+
const recentChats = [
|
114
|
+
{
|
115
|
+
type: "chat",
|
116
|
+
title: "How to optimize Rails performance?",
|
117
|
+
subtitle: "Yesterday • 15 messages",
|
118
|
+
icon: "chat-bubble-left-right",
|
119
|
+
},
|
120
|
+
{
|
121
|
+
type: "chat",
|
122
|
+
title: "Explain machine learning concepts",
|
123
|
+
subtitle: "2 days ago • 12 messages",
|
124
|
+
icon: "chat-bubble-left-right",
|
125
|
+
},
|
126
|
+
{
|
127
|
+
type: "chat",
|
128
|
+
title: "JavaScript async/await patterns",
|
129
|
+
subtitle: "3 days ago • 8 messages",
|
130
|
+
icon: "chat-bubble-left-right",
|
131
|
+
},
|
132
|
+
]
|
133
|
+
|
134
|
+
this.renderResults(recentChats)
|
135
|
+
}
|
136
|
+
|
137
|
+
renderResults(results) {
|
138
|
+
this.currentResults = results
|
139
|
+
this.activeIndex = -1
|
140
|
+
|
141
|
+
if (results.length === 0) {
|
142
|
+
this.resultsTarget.innerHTML = `
|
143
|
+
<div class="p-4 text-center text-neutral-500">
|
144
|
+
<div class="size-12 bg-neutral-100 rounded-lg flex items-center justify-center mx-auto dark:bg-neutral-900 mb-3">
|
145
|
+
<svg class="size-5 text-neutral-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
146
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
147
|
+
</svg>
|
148
|
+
</div>
|
149
|
+
<p>No results found</p>
|
150
|
+
</div>
|
151
|
+
`
|
152
|
+
return
|
153
|
+
}
|
154
|
+
|
155
|
+
const resultHTML = results
|
156
|
+
.map(
|
157
|
+
(result, index) => `
|
158
|
+
<div class="px-4 py-3 hover:bg-neutral-50 cursor-pointer border-b border-neutral-100 last:border-b-0 dark:border-neutral-700/50 dark:hover:bg-neutral-700"
|
159
|
+
data-action="click->search#selectResult"
|
160
|
+
data-search-result-index="${index}"
|
161
|
+
id="search-result-${index}"
|
162
|
+
role="option"
|
163
|
+
aria-selected="false"
|
164
|
+
tabindex="-1">
|
165
|
+
<div class="flex items-center space-x-3">
|
166
|
+
<div class="size-8 bg-neutral-100 rounded-lg flex items-center justify-center shrink-0">
|
167
|
+
<svg class="size-4 text-neutral-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
168
|
+
${this.getIconPath(result.icon)}
|
169
|
+
</svg>
|
170
|
+
</div>
|
171
|
+
<div class="flex-1 min-w-0">
|
172
|
+
<p class="text-sm font-medium text-neutral-900 truncate dark:text-neutral-100">${
|
173
|
+
result.title
|
174
|
+
}</p>
|
175
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400 truncate">${
|
176
|
+
result.subtitle
|
177
|
+
}</p>
|
178
|
+
</div>
|
179
|
+
</div>
|
180
|
+
</div>
|
181
|
+
`
|
182
|
+
)
|
183
|
+
.join("")
|
184
|
+
|
185
|
+
this.resultsTarget.innerHTML = resultHTML
|
186
|
+
this.updateActiveDescendant()
|
187
|
+
}
|
188
|
+
|
189
|
+
getIconPath(iconName) {
|
190
|
+
const icons = {
|
191
|
+
"chat-bubble-left-right":
|
192
|
+
'<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path>',
|
193
|
+
plus: '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"></path>',
|
194
|
+
trash:
|
195
|
+
'<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>',
|
196
|
+
}
|
197
|
+
return icons[iconName] || icons["chat-bubble-left-right"]
|
198
|
+
}
|
199
|
+
|
200
|
+
selectResult(event) {
|
201
|
+
const index = parseInt(event.currentTarget.dataset.searchResultIndex)
|
202
|
+
this.selectResultByIndex(index)
|
203
|
+
}
|
204
|
+
|
205
|
+
selectResultByIndex(index) {
|
206
|
+
const result = this.currentResults[index]
|
207
|
+
if (!result) return
|
208
|
+
|
209
|
+
// Handle different result types
|
210
|
+
if (result.type === "chat") {
|
211
|
+
// Open the selected chat
|
212
|
+
this.close()
|
213
|
+
// In a real app, this would navigate to the chat
|
214
|
+
} else if (result.type === "action") {
|
215
|
+
if (result.title === "New chat") {
|
216
|
+
// Navigate to new chat page
|
217
|
+
window.location.href = "/chats/new/"
|
218
|
+
}
|
219
|
+
this.close()
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
preventClose(event) {
|
224
|
+
event.stopPropagation()
|
225
|
+
}
|
226
|
+
|
227
|
+
handleKeydown(event) {
|
228
|
+
if (!this.isOpen || this.currentResults.length === 0) return
|
229
|
+
|
230
|
+
switch (event.key) {
|
231
|
+
case "ArrowDown":
|
232
|
+
event.preventDefault()
|
233
|
+
this.navigateDown()
|
234
|
+
break
|
235
|
+
case "ArrowUp":
|
236
|
+
event.preventDefault()
|
237
|
+
this.navigateUp()
|
238
|
+
break
|
239
|
+
case "Enter":
|
240
|
+
event.preventDefault()
|
241
|
+
if (this.activeIndex >= 0) {
|
242
|
+
this.selectResultByIndex(this.activeIndex)
|
243
|
+
}
|
244
|
+
break
|
245
|
+
case "Home":
|
246
|
+
event.preventDefault()
|
247
|
+
this.setActiveIndex(0)
|
248
|
+
break
|
249
|
+
case "End":
|
250
|
+
event.preventDefault()
|
251
|
+
this.setActiveIndex(this.currentResults.length - 1)
|
252
|
+
break
|
253
|
+
}
|
254
|
+
}
|
255
|
+
|
256
|
+
navigateDown() {
|
257
|
+
const newIndex =
|
258
|
+
this.activeIndex < this.currentResults.length - 1
|
259
|
+
? this.activeIndex + 1
|
260
|
+
: 0 // Wrap to first item
|
261
|
+
this.setActiveIndex(newIndex)
|
262
|
+
}
|
263
|
+
|
264
|
+
navigateUp() {
|
265
|
+
const newIndex =
|
266
|
+
this.activeIndex > 0
|
267
|
+
? this.activeIndex - 1
|
268
|
+
: this.currentResults.length - 1 // Wrap to last item
|
269
|
+
this.setActiveIndex(newIndex)
|
270
|
+
}
|
271
|
+
|
272
|
+
setActiveIndex(index) {
|
273
|
+
// Remove active state from previous item
|
274
|
+
if (this.activeIndex >= 0) {
|
275
|
+
const prevElement = this.resultsTarget.querySelector(
|
276
|
+
`#search-result-${this.activeIndex}`
|
277
|
+
)
|
278
|
+
if (prevElement) {
|
279
|
+
prevElement.classList.remove("bg-neutral-200/60")
|
280
|
+
prevElement.setAttribute("aria-selected", "false")
|
281
|
+
}
|
282
|
+
}
|
283
|
+
|
284
|
+
this.activeIndex = index
|
285
|
+
|
286
|
+
// Add active state to new item
|
287
|
+
if (this.activeIndex >= 0) {
|
288
|
+
const activeElement = this.resultsTarget.querySelector(
|
289
|
+
`#search-result-${this.activeIndex}`
|
290
|
+
)
|
291
|
+
if (activeElement) {
|
292
|
+
activeElement.classList.add("bg-neutral-200/60")
|
293
|
+
activeElement.setAttribute("aria-selected", "true")
|
294
|
+
|
295
|
+
// Scroll into view if needed
|
296
|
+
activeElement.scrollIntoView({
|
297
|
+
block: "nearest",
|
298
|
+
behavior: "smooth",
|
299
|
+
})
|
300
|
+
}
|
301
|
+
}
|
302
|
+
|
303
|
+
this.updateActiveDescendant()
|
304
|
+
}
|
305
|
+
|
306
|
+
updateActiveDescendant() {
|
307
|
+
const activeId =
|
308
|
+
this.activeIndex >= 0 ? `search-result-${this.activeIndex}` : ""
|
309
|
+
this.inputTarget.setAttribute("aria-activedescendant", activeId)
|
310
|
+
}
|
311
|
+
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus";
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = ["container"];
|
5
|
+
|
6
|
+
connect() {
|
7
|
+
this.storageKey = "railsui-sidebar-collapsed";
|
8
|
+
this.initializeFromStorage();
|
9
|
+
this.setupMediaQuery();
|
10
|
+
this.setupKeyboardShortcuts();
|
11
|
+
}
|
12
|
+
|
13
|
+
initializeFromStorage() {
|
14
|
+
const storedState = localStorage.getItem(this.storageKey);
|
15
|
+
this.isCollapsed = storedState === "true";
|
16
|
+
|
17
|
+
this.isCollapsed ? this.applyCollapsedState() : this.applyExpandedState();
|
18
|
+
}
|
19
|
+
|
20
|
+
setupMediaQuery() {
|
21
|
+
this.mediaQuery = window.matchMedia("(max-width: 1024px)");
|
22
|
+
this.handleMediaQuery(this.mediaQuery);
|
23
|
+
this.mediaQuery.addEventListener("change", this.handleMediaQuery);
|
24
|
+
}
|
25
|
+
|
26
|
+
handleMediaQuery = (mq) => {
|
27
|
+
if (mq.matches) {
|
28
|
+
this.collapse(false);
|
29
|
+
} else {
|
30
|
+
this.isCollapsed ? this.collapse(false) : this.expand(false);
|
31
|
+
}
|
32
|
+
};
|
33
|
+
|
34
|
+
toggle = () => {
|
35
|
+
this.isCollapsed ? this.expand() : this.collapse();
|
36
|
+
};
|
37
|
+
|
38
|
+
collapse(saveToStorage = true) {
|
39
|
+
this.isCollapsed = true;
|
40
|
+
this.applyCollapsedState();
|
41
|
+
if (saveToStorage) {
|
42
|
+
localStorage.setItem(this.storageKey, "true");
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
expand(saveToStorage = true) {
|
47
|
+
this.isCollapsed = false;
|
48
|
+
this.applyExpandedState();
|
49
|
+
if (saveToStorage) {
|
50
|
+
localStorage.setItem(this.storageKey, "false");
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
applyCollapsedState() {
|
55
|
+
this.containerTarget.classList.remove("sidebar-expanded", "w-64");
|
56
|
+
this.containerTarget.classList.add("sidebar-collapsed", "w-16");
|
57
|
+
}
|
58
|
+
|
59
|
+
applyExpandedState() {
|
60
|
+
this.containerTarget.classList.remove("sidebar-collapsed", "w-16");
|
61
|
+
this.containerTarget.classList.add("sidebar-expanded", "w-64");
|
62
|
+
}
|
63
|
+
|
64
|
+
setupKeyboardShortcuts() {
|
65
|
+
document.addEventListener("keydown", this.handleKeyboardShortcut);
|
66
|
+
}
|
67
|
+
|
68
|
+
handleKeyboardShortcut = (event) => {
|
69
|
+
const { shiftKey, metaKey, ctrlKey, key } = event;
|
70
|
+
const isModifierPressed = metaKey || ctrlKey;
|
71
|
+
|
72
|
+
if (shiftKey && isModifierPressed && key === "O") {
|
73
|
+
event.preventDefault();
|
74
|
+
this.newChat();
|
75
|
+
}
|
76
|
+
|
77
|
+
if (isModifierPressed && key === "k") {
|
78
|
+
event.preventDefault();
|
79
|
+
this.openSearch();
|
80
|
+
}
|
81
|
+
|
82
|
+
if (isModifierPressed && key === "b") {
|
83
|
+
event.preventDefault();
|
84
|
+
this.toggle();
|
85
|
+
}
|
86
|
+
};
|
87
|
+
|
88
|
+
openSearch() {
|
89
|
+
const searchElement = document.querySelector('[data-controller*="search"]');
|
90
|
+
if (!searchElement) return;
|
91
|
+
|
92
|
+
const searchController =
|
93
|
+
this.application.getControllerForElementAndIdentifier(
|
94
|
+
searchElement,
|
95
|
+
"search",
|
96
|
+
);
|
97
|
+
|
98
|
+
searchController?.open?.();
|
99
|
+
}
|
100
|
+
|
101
|
+
disconnect() {
|
102
|
+
this.mediaQuery?.removeEventListener("change", this.handleMediaQuery);
|
103
|
+
document.removeEventListener("keydown", this.handleKeyboardShortcut);
|
104
|
+
}
|
105
|
+
}
|
@@ -0,0 +1,223 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
import hljs from "highlight.js"
|
3
|
+
|
4
|
+
export default class extends Controller {
|
5
|
+
static targets = [
|
6
|
+
"code",
|
7
|
+
"language",
|
8
|
+
"copyButton",
|
9
|
+
"collapseButton",
|
10
|
+
"wrapButton",
|
11
|
+
]
|
12
|
+
static values = {
|
13
|
+
language: String,
|
14
|
+
collapsed: { type: Boolean, default: false },
|
15
|
+
wrapped: { type: Boolean, default: false },
|
16
|
+
code: String
|
17
|
+
}
|
18
|
+
|
19
|
+
connect() {
|
20
|
+
this.initializeHighlighting()
|
21
|
+
this.setupEventListeners()
|
22
|
+
this.updateUI()
|
23
|
+
}
|
24
|
+
|
25
|
+
initializeHighlighting() {
|
26
|
+
const codeElement = this.codeTarget
|
27
|
+
|
28
|
+
// Use data attribute if available, otherwise process template content
|
29
|
+
let text = this.codeValue || codeElement.textContent
|
30
|
+
|
31
|
+
// Convert HTML entities to actual characters if from data attribute
|
32
|
+
if (this.codeValue) {
|
33
|
+
text = text.replace(/ /g, '\n').replace(/"/g, '"').replace(/&/g, '&')
|
34
|
+
} else {
|
35
|
+
// Smart dedent for template content
|
36
|
+
text = text.trim()
|
37
|
+
|
38
|
+
if (text) {
|
39
|
+
const lines = text.split('\n')
|
40
|
+
const nonEmptyLines = lines.filter(line => line.trim().length > 0)
|
41
|
+
|
42
|
+
if (nonEmptyLines.length > 0) {
|
43
|
+
const indents = nonEmptyLines.map(line => line.match(/^(\s*)/)[0].length)
|
44
|
+
const minIndent = Math.min(...indents)
|
45
|
+
|
46
|
+
// Check if we have the "broken template" pattern:
|
47
|
+
// First line has min indent, but others have excessive indent
|
48
|
+
if (minIndent === 0 && indents.some(indent => indent > 4)) {
|
49
|
+
// Apply language-specific smart formatting
|
50
|
+
const language = this.languageValue || this.detectLanguage()
|
51
|
+
if (language === 'ruby') {
|
52
|
+
text = this.fixRubyIndentation(lines)
|
53
|
+
} else {
|
54
|
+
text = this.fixGenericIndentation(lines)
|
55
|
+
}
|
56
|
+
} else {
|
57
|
+
// Standard dedent - remove common indentation
|
58
|
+
const dedentedLines = lines.map(line => {
|
59
|
+
if (line.trim().length === 0) return ''
|
60
|
+
return line.slice(minIndent)
|
61
|
+
})
|
62
|
+
text = dedentedLines.join('\n')
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
codeElement.textContent = text
|
69
|
+
|
70
|
+
const language = this.languageValue || this.detectLanguage()
|
71
|
+
|
72
|
+
if (language) {
|
73
|
+
this.languageTarget.textContent = language
|
74
|
+
codeElement.className = `language-${language}`
|
75
|
+
}
|
76
|
+
|
77
|
+
hljs.highlightElement(codeElement)
|
78
|
+
}
|
79
|
+
|
80
|
+
|
81
|
+
fixGenericIndentation(lines) {
|
82
|
+
// Simple approach: just trim all lines and apply standard 2-space indentation
|
83
|
+
// based on brace/bracket nesting for JavaScript, etc.
|
84
|
+
const result = []
|
85
|
+
let indentLevel = 0
|
86
|
+
|
87
|
+
for (const line of lines) {
|
88
|
+
const trimmed = line.trim()
|
89
|
+
|
90
|
+
if (trimmed === '') {
|
91
|
+
result.push('')
|
92
|
+
continue
|
93
|
+
}
|
94
|
+
|
95
|
+
// Decrease indent for closing braces/brackets
|
96
|
+
if (/^[}\])];?\s*$/.test(trimmed) || trimmed.startsWith('}') || trimmed.startsWith(']') || trimmed.startsWith(')')){
|
97
|
+
indentLevel = Math.max(0, indentLevel - 1)
|
98
|
+
}
|
99
|
+
|
100
|
+
// Add current line with proper indentation
|
101
|
+
result.push(' '.repeat(indentLevel) + trimmed)
|
102
|
+
|
103
|
+
// Increase indent for opening braces/brackets or control structures
|
104
|
+
if (trimmed.endsWith('{') || trimmed.endsWith('[') || trimmed.endsWith('(') ||
|
105
|
+
/^(if|else|for|while|function|class)\b.*[^{]*$/.test(trimmed)) {
|
106
|
+
indentLevel++
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
return result.join('\n')
|
111
|
+
}
|
112
|
+
|
113
|
+
fixRubyIndentation(lines) {
|
114
|
+
const result = []
|
115
|
+
let indentLevel = 0
|
116
|
+
|
117
|
+
for (const line of lines) {
|
118
|
+
const trimmed = line.trim()
|
119
|
+
|
120
|
+
if (trimmed === '') {
|
121
|
+
result.push('')
|
122
|
+
continue
|
123
|
+
}
|
124
|
+
|
125
|
+
// Decrease indent for end/else/elsif/rescue/ensure
|
126
|
+
if (/^(end|else|elsif|rescue|ensure|when)\b/.test(trimmed)) {
|
127
|
+
indentLevel = Math.max(0, indentLevel - 1)
|
128
|
+
}
|
129
|
+
|
130
|
+
// Add current line with proper indentation
|
131
|
+
result.push(' '.repeat(indentLevel) + trimmed)
|
132
|
+
|
133
|
+
// Increase indent for def/if/class/module/begin/case etc
|
134
|
+
if (/^(def|if|unless|while|until|for|class|module|begin|case)\b/.test(trimmed) ||
|
135
|
+
trimmed.endsWith(' do')) {
|
136
|
+
indentLevel++
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
return result.join('\n')
|
141
|
+
}
|
142
|
+
|
143
|
+
detectLanguage() {
|
144
|
+
const codeContent = this.codeTarget.textContent
|
145
|
+
const result = hljs.highlightAuto(codeContent)
|
146
|
+
return result.language || "text"
|
147
|
+
}
|
148
|
+
|
149
|
+
setupEventListeners() {
|
150
|
+
// Copy functionality
|
151
|
+
this.copyButtonTarget.addEventListener("click", this.copy.bind(this))
|
152
|
+
|
153
|
+
// Collapse functionality
|
154
|
+
this.collapseButtonTarget.addEventListener(
|
155
|
+
"click",
|
156
|
+
this.toggleCollapse.bind(this)
|
157
|
+
)
|
158
|
+
|
159
|
+
// Wrap functionality
|
160
|
+
this.wrapButtonTarget.addEventListener("click", this.toggleWrap.bind(this))
|
161
|
+
}
|
162
|
+
|
163
|
+
copy() {
|
164
|
+
const codeText = this.codeTarget.textContent
|
165
|
+
navigator.clipboard
|
166
|
+
.writeText(codeText)
|
167
|
+
.then(() => {
|
168
|
+
// Visual feedback
|
169
|
+
const originalText =
|
170
|
+
this.copyButtonTarget.querySelector("span").textContent
|
171
|
+
this.copyButtonTarget.querySelector("span").textContent = "Copied!"
|
172
|
+
|
173
|
+
setTimeout(() => {
|
174
|
+
this.copyButtonTarget.querySelector("span").textContent = originalText
|
175
|
+
}, 2000)
|
176
|
+
})
|
177
|
+
.catch((err) => {
|
178
|
+
console.error("Failed to copy code:", err)
|
179
|
+
})
|
180
|
+
}
|
181
|
+
|
182
|
+
toggleCollapse() {
|
183
|
+
this.collapsedValue = !this.collapsedValue
|
184
|
+
this.updateUI()
|
185
|
+
}
|
186
|
+
|
187
|
+
toggleWrap() {
|
188
|
+
this.wrappedValue = !this.wrappedValue
|
189
|
+
this.updateUI()
|
190
|
+
}
|
191
|
+
|
192
|
+
updateUI() {
|
193
|
+
const codeContainer = this.codeTarget.parentElement
|
194
|
+
|
195
|
+
// Update collapse state
|
196
|
+
if (this.collapsedValue) {
|
197
|
+
codeContainer.style.maxHeight = "100px"
|
198
|
+
codeContainer.style.overflow = "hidden"
|
199
|
+
this.collapseButtonTarget.querySelector("span").textContent = "Expand"
|
200
|
+
} else {
|
201
|
+
codeContainer.style.maxHeight = "none"
|
202
|
+
codeContainer.style.overflow = "auto"
|
203
|
+
this.collapseButtonTarget.querySelector("span").textContent = "Collapse"
|
204
|
+
}
|
205
|
+
|
206
|
+
// Update wrap state
|
207
|
+
if (this.wrappedValue) {
|
208
|
+
this.codeTarget.style.whiteSpace = "pre-wrap"
|
209
|
+
this.wrapButtonTarget.querySelector("span").textContent = "No Wrap"
|
210
|
+
} else {
|
211
|
+
this.codeTarget.style.whiteSpace = "pre"
|
212
|
+
this.wrapButtonTarget.querySelector("span").textContent = "Wrap"
|
213
|
+
}
|
214
|
+
}
|
215
|
+
|
216
|
+
collapsedValueChanged() {
|
217
|
+
this.updateUI()
|
218
|
+
}
|
219
|
+
|
220
|
+
wrappedValueChanged() {
|
221
|
+
this.updateUI()
|
222
|
+
}
|
223
|
+
}
|
data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.html.erb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
<h1>This is a heading</h1>
|
2
|
+
|
3
|
+
<%= spacer(8) %>
|
4
|
+
|
5
|
+
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Excepturi nulla rem ipsam, praesentium quisquam quidem laboriosam nihil cumque, molestias vero enim corrupti corporis quibusdam mollitia! Dolores ipsum eos animi facere.</p>
|
6
|
+
|
7
|
+
<%= spacer(16) %>
|
8
|
+
|
9
|
+
<ul>
|
10
|
+
<li>List item 1</li>
|
11
|
+
<li>List item 2</li>
|
12
|
+
<li>List item 3</li>
|
13
|
+
</ul>
|
14
|
+
|
15
|
+
<%= spacer(16) %>
|
16
|
+
|
17
|
+
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Excepturi nulla rem ipsam, praesentium quisquam quidem laboriosam nihil cumque, molestias vero enim corrupti corporis quibusdam mollitia! Dolores ipsum eos animi facere.</p>
|
18
|
+
|
19
|
+
<%= spacer(16) %>
|
20
|
+
|
21
|
+
<%= link_to "Learn more", "https://railsui.com" %>
|
data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.text.erb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Excepturi nulla rem ipsam, praesentium quisquam quidem laboriosam nihil cumque, molestias vero enim corrupti corporis quibusdam mollitia! Dolores ipsum eos animi facere.
|
2
|
+
|
3
|
+
- List item 1
|
4
|
+
- List item 2
|
5
|
+
- List item 3
|
6
|
+
|
7
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Excepturi nulla rem ipsam, praesentium quisquam quidem laboriosam nihil cumque, molestias vero enim corrupti corporis quibusdam mollitia! Dolores ipsum eos animi facere.
|
8
|
+
|
9
|
+
https://railsui.com
|
data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/promotion.html.erb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= image_tag "https://picsum.photos/600/280", alt: "Promotional image example", width: 600, height: 280 %>
|
2
|
+
|
3
|
+
<%= spacer(8) %>
|
4
|
+
|
5
|
+
<h1>Limited time offer!</h1>
|
6
|
+
|
7
|
+
<%= spacer(16) %>
|
8
|
+
|
9
|
+
<p>Lorem ipsum dolor...</p>
|
10
|
+
|
11
|
+
<%= spacer(16) %>
|
12
|
+
|
13
|
+
<%= email_callout do %>
|
14
|
+
<p>For a limited time use the coupon code <strong>50OFF</strong> for 50% off your first purchase.</p>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= spacer(16) %>
|
18
|
+
|
19
|
+
<p>Lorem ipsum dolor...</p>
|
20
|
+
|
21
|
+
<%= spacer(16) %>
|
22
|
+
|
23
|
+
<%= email_action "Start shopping", "#", align: "center", fullwidth: true, theme: "secondary" %>
|