railsui 3.1.5 → 3.2.1
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/shared/_flash_messages.html.erb +2 -2
- data/app/views/railsui/shared/_full_access_cta.html.erb +27 -0
- 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,45 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = ["input", "send"]
|
5
|
+
static outlets = ["character-count"]
|
6
|
+
|
7
|
+
connect() {
|
8
|
+
this.setupInputHandling()
|
9
|
+
}
|
10
|
+
|
11
|
+
setupInputHandling() {
|
12
|
+
this.sendTarget.disabled = this.inputTarget.value.trim().length === 0
|
13
|
+
}
|
14
|
+
|
15
|
+
handleKeydown(event) {
|
16
|
+
if (event.key === "Enter" && !event.shiftKey) {
|
17
|
+
event.preventDefault()
|
18
|
+
this.sendMessage()
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
sendMessage() {
|
23
|
+
const message = this.inputTarget.value.trim()
|
24
|
+
if (!message) return
|
25
|
+
this.inputTarget.value = ""
|
26
|
+
this.sendTarget.disabled = true
|
27
|
+
this.resetCharacterCount()
|
28
|
+
this.showMessageSent()
|
29
|
+
}
|
30
|
+
|
31
|
+
resetCharacterCount() {
|
32
|
+
if (this.hasCharacterCountOutlet) {
|
33
|
+
this.characterCountOutlet.reset()
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
showMessageSent() {
|
38
|
+
const originalText = this.sendTarget.innerHTML
|
39
|
+
this.sendTarget.innerHTML =
|
40
|
+
'<svg class="size-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg>'
|
41
|
+
setTimeout(() => {
|
42
|
+
this.sendTarget.innerHTML = originalText
|
43
|
+
}, 1000)
|
44
|
+
}
|
45
|
+
}
|
@@ -0,0 +1,333 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = ["input", "results"]
|
5
|
+
|
6
|
+
connect() {
|
7
|
+
this.isOpen = false
|
8
|
+
this.activeIndex = -1
|
9
|
+
this.currentResults = []
|
10
|
+
this.helpArticles = this.getHelpArticles()
|
11
|
+
|
12
|
+
document.addEventListener("keydown", this.handleGlobalKeydown.bind(this))
|
13
|
+
}
|
14
|
+
|
15
|
+
disconnect() {
|
16
|
+
document.removeEventListener("keydown", this.handleGlobalKeydown.bind(this))
|
17
|
+
}
|
18
|
+
|
19
|
+
handleGlobalKeydown(event) {
|
20
|
+
// Handle ⌘K or Ctrl+K to focus search
|
21
|
+
if ((event.metaKey || event.ctrlKey) && event.key === "k") {
|
22
|
+
event.preventDefault()
|
23
|
+
this.inputTarget.focus()
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
handleFocus() {
|
28
|
+
// Only show results if there's content in the input
|
29
|
+
const query = this.inputTarget.value.trim()
|
30
|
+
if (query.length > 0) {
|
31
|
+
this.showResults()
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
handleBlur(event) {
|
36
|
+
setTimeout(() => {
|
37
|
+
if (!this.element.contains(document.activeElement)) {
|
38
|
+
this.hideResults()
|
39
|
+
}
|
40
|
+
}, 200)
|
41
|
+
}
|
42
|
+
|
43
|
+
handleInput(event) {
|
44
|
+
const query = event.target.value.trim()
|
45
|
+
this.activeIndex = -1
|
46
|
+
|
47
|
+
if (query.length === 0) {
|
48
|
+
this.hideResults()
|
49
|
+
} else {
|
50
|
+
this.searchArticles(query)
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
handleKeydown(event) {
|
55
|
+
if (!this.isOpen || this.currentResults.length === 0) return
|
56
|
+
|
57
|
+
switch (event.key) {
|
58
|
+
case "ArrowDown":
|
59
|
+
event.preventDefault()
|
60
|
+
this.navigateDown()
|
61
|
+
break
|
62
|
+
case "ArrowUp":
|
63
|
+
event.preventDefault()
|
64
|
+
this.navigateUp()
|
65
|
+
break
|
66
|
+
case "Enter":
|
67
|
+
event.preventDefault()
|
68
|
+
if (this.activeIndex >= 0) {
|
69
|
+
this.selectResultByIndex(this.activeIndex)
|
70
|
+
}
|
71
|
+
break
|
72
|
+
case "Escape":
|
73
|
+
event.preventDefault()
|
74
|
+
this.hideResults()
|
75
|
+
this.inputTarget.blur()
|
76
|
+
break
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
navigateDown() {
|
81
|
+
const newIndex = this.activeIndex < this.currentResults.length - 1
|
82
|
+
? this.activeIndex + 1
|
83
|
+
: 0 // Wrap to first item
|
84
|
+
this.setActiveIndex(newIndex)
|
85
|
+
}
|
86
|
+
|
87
|
+
navigateUp() {
|
88
|
+
const newIndex = this.activeIndex > 0
|
89
|
+
? this.activeIndex - 1
|
90
|
+
: this.currentResults.length - 1 // Wrap to last item
|
91
|
+
this.setActiveIndex(newIndex)
|
92
|
+
}
|
93
|
+
|
94
|
+
setActiveIndex(index) {
|
95
|
+
// Remove active state from previous item
|
96
|
+
if (this.activeIndex >= 0) {
|
97
|
+
const prevElement = this.resultsTarget.querySelector(`#help-search-result-${this.activeIndex}`)
|
98
|
+
if (prevElement) {
|
99
|
+
prevElement.classList.remove("bg-neutral-100", "dark:bg-neutral-700")
|
100
|
+
prevElement.setAttribute("aria-selected", "false")
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
this.activeIndex = index
|
105
|
+
|
106
|
+
// Add active state to new item
|
107
|
+
if (this.activeIndex >= 0) {
|
108
|
+
const activeElement = this.resultsTarget.querySelector(`#help-search-result-${this.activeIndex}`)
|
109
|
+
if (activeElement) {
|
110
|
+
activeElement.classList.add("bg-neutral-100", "dark:bg-neutral-700")
|
111
|
+
activeElement.setAttribute("aria-selected", "true")
|
112
|
+
|
113
|
+
// Scroll into view if needed
|
114
|
+
activeElement.scrollIntoView({
|
115
|
+
block: "nearest",
|
116
|
+
behavior: "smooth",
|
117
|
+
})
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
this.updateActiveDescendant()
|
122
|
+
}
|
123
|
+
|
124
|
+
updateActiveDescendant() {
|
125
|
+
const activeId = this.activeIndex >= 0 ? `help-search-result-${this.activeIndex}` : ""
|
126
|
+
this.inputTarget.setAttribute("aria-activedescendant", activeId)
|
127
|
+
}
|
128
|
+
|
129
|
+
searchArticles(query) {
|
130
|
+
const results = this.helpArticles.filter(
|
131
|
+
(article) =>
|
132
|
+
article.title.toLowerCase().includes(query.toLowerCase()) ||
|
133
|
+
article.description.toLowerCase().includes(query.toLowerCase()) ||
|
134
|
+
article.tags.some((tag) =>
|
135
|
+
tag.toLowerCase().includes(query.toLowerCase())
|
136
|
+
)
|
137
|
+
)
|
138
|
+
|
139
|
+
this.renderResults(results.slice(0, 6)) // Limit to 6 results
|
140
|
+
}
|
141
|
+
|
142
|
+
|
143
|
+
renderResults(results) {
|
144
|
+
this.currentResults = results
|
145
|
+
this.activeIndex = -1
|
146
|
+
|
147
|
+
if (results.length === 0) {
|
148
|
+
this.resultsTarget.innerHTML = `
|
149
|
+
<div class="p-6 text-center">
|
150
|
+
<div class="size-12 bg-neutral-100 dark:bg-neutral-800 rounded-lg flex items-center justify-center mx-auto mb-3">
|
151
|
+
<svg class="size-6 text-neutral-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
152
|
+
<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>
|
153
|
+
</svg>
|
154
|
+
</div>
|
155
|
+
<p class="text-neutral-500 dark:text-neutral-400">No articles found</p>
|
156
|
+
<p class="text-xs text-neutral-400 dark:text-neutral-500 mt-1">Try a different search term</p>
|
157
|
+
</div>
|
158
|
+
`
|
159
|
+
this.showResults()
|
160
|
+
return
|
161
|
+
}
|
162
|
+
|
163
|
+
const resultHTML = results
|
164
|
+
.map(
|
165
|
+
(result, index) => `
|
166
|
+
<div class="px-4 py-3 hover:bg-neutral-50 dark:hover:bg-neutral-700/50 cursor-pointer border-b border-neutral-100 dark:border-neutral-700/50 last:border-b-0 transition-colors"
|
167
|
+
data-action="click->help-search#selectResult"
|
168
|
+
data-help-search-result-index="${index}"
|
169
|
+
id="help-search-result-${index}"
|
170
|
+
role="option"
|
171
|
+
aria-selected="false"
|
172
|
+
tabindex="-1">
|
173
|
+
<div class="flex items-start gap-3">
|
174
|
+
<div class="size-8 ${
|
175
|
+
result.iconBg
|
176
|
+
} rounded-lg flex items-center justify-center shrink-0">
|
177
|
+
${this.getIconSvg(result.icon, result.iconColor)}
|
178
|
+
</div>
|
179
|
+
<div class="flex-1 min-w-0 text-left">
|
180
|
+
<p class="text-sm font-medium text-neutral-900 dark:text-neutral-100 truncate">${
|
181
|
+
result.title
|
182
|
+
}</p>
|
183
|
+
<p class="text-xs text-neutral-500 dark:text-neutral-400 truncate">${
|
184
|
+
result.description
|
185
|
+
}</p>
|
186
|
+
<div class="flex items-center gap-2 mt-2">
|
187
|
+
<span class="text-xs text-neutral-400">${result.readTime}</span>
|
188
|
+
${
|
189
|
+
result.popular
|
190
|
+
? '<span class="px-1.5 py-0.5 font-medium text-xs bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 rounded-full">Popular</span>'
|
191
|
+
: ""
|
192
|
+
}
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
</div>
|
196
|
+
</div>
|
197
|
+
`
|
198
|
+
)
|
199
|
+
.join("")
|
200
|
+
|
201
|
+
this.resultsTarget.innerHTML = resultHTML
|
202
|
+
this.showResults()
|
203
|
+
}
|
204
|
+
|
205
|
+
showResults() {
|
206
|
+
if (!this.isOpen) {
|
207
|
+
this.isOpen = true
|
208
|
+
this.resultsTarget.classList.remove("hidden")
|
209
|
+
this.resultsTarget.setAttribute("role", "listbox")
|
210
|
+
this.resultsTarget.setAttribute("aria-label", "Help search results")
|
211
|
+
}
|
212
|
+
}
|
213
|
+
|
214
|
+
hideResults() {
|
215
|
+
if (this.isOpen) {
|
216
|
+
this.isOpen = false
|
217
|
+
this.resultsTarget.classList.add("hidden")
|
218
|
+
this.activeIndex = -1
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
selectResult(event) {
|
223
|
+
const index = parseInt(event.currentTarget.dataset.helpSearchResultIndex)
|
224
|
+
this.selectResultByIndex(index)
|
225
|
+
}
|
226
|
+
|
227
|
+
selectResultByIndex(index) {
|
228
|
+
const result = this.currentResults[index]
|
229
|
+
if (!result) return
|
230
|
+
|
231
|
+
// In a real application, this would navigate to the article
|
232
|
+
console.log("Opening article:", result.title)
|
233
|
+
this.hideResults()
|
234
|
+
this.inputTarget.blur()
|
235
|
+
}
|
236
|
+
|
237
|
+
getIconSvg(iconName, colorClass) {
|
238
|
+
const icons = {
|
239
|
+
"rocket-launch": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.58-5.84a14.927 14.927 0 00-2.58 5.84"></path></svg>`,
|
240
|
+
"code-bracket": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"></path></svg>`,
|
241
|
+
"shield-check": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg>`,
|
242
|
+
"cog-6-tooth": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>`,
|
243
|
+
"exclamation-triangle": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.728-.833-2.498 0L4.316 16.5c-.77.833.192 2.5 1.732 2.5z"></path></svg>`,
|
244
|
+
"light-bulb": `<svg class="size-4 ${colorClass}" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>`,
|
245
|
+
}
|
246
|
+
return icons[iconName] || icons["rocket-launch"]
|
247
|
+
}
|
248
|
+
|
249
|
+
getHelpArticles() {
|
250
|
+
return [
|
251
|
+
{
|
252
|
+
title: "Getting Started Guide",
|
253
|
+
description: "Learn the basics of using Corgie AI effectively",
|
254
|
+
readTime: "5 min read",
|
255
|
+
popular: true,
|
256
|
+
icon: "rocket-launch",
|
257
|
+
iconBg: "bg-blue-100 dark:bg-blue-900/30",
|
258
|
+
iconColor: "text-blue-600 dark:text-blue-400",
|
259
|
+
tags: ["basics", "tutorial", "getting started", "new user"],
|
260
|
+
},
|
261
|
+
{
|
262
|
+
title: "API Integration",
|
263
|
+
description: "Connect Corgie AI to your applications",
|
264
|
+
readTime: "10 min read",
|
265
|
+
popular: false,
|
266
|
+
icon: "code-bracket",
|
267
|
+
iconBg: "bg-green-100 dark:bg-green-900/30",
|
268
|
+
iconColor: "text-green-600 dark:text-green-400",
|
269
|
+
tags: ["api", "integration", "development", "sdk"],
|
270
|
+
},
|
271
|
+
{
|
272
|
+
title: "Privacy & Security",
|
273
|
+
description: "Understanding data protection and privacy",
|
274
|
+
readTime: "7 min read",
|
275
|
+
popular: false,
|
276
|
+
icon: "shield-check",
|
277
|
+
iconBg: "bg-purple-100 dark:bg-purple-900/30",
|
278
|
+
iconColor: "text-purple-600 dark:text-purple-400",
|
279
|
+
tags: ["privacy", "security", "data protection", "gdpr"],
|
280
|
+
},
|
281
|
+
{
|
282
|
+
title: "Account Settings",
|
283
|
+
description: "Manage your profile and preferences",
|
284
|
+
readTime: "3 min read",
|
285
|
+
popular: false,
|
286
|
+
icon: "cog-6-tooth",
|
287
|
+
iconBg: "bg-orange-100 dark:bg-orange-900/30",
|
288
|
+
iconColor: "text-orange-600 dark:text-orange-400",
|
289
|
+
tags: ["account", "settings", "profile", "preferences"],
|
290
|
+
},
|
291
|
+
{
|
292
|
+
title: "Troubleshooting",
|
293
|
+
description: "Common issues and solutions",
|
294
|
+
readTime: "8 min read",
|
295
|
+
popular: false,
|
296
|
+
icon: "exclamation-triangle",
|
297
|
+
iconBg: "bg-red-100 dark:bg-red-900/30",
|
298
|
+
iconColor: "text-red-600 dark:text-red-400",
|
299
|
+
tags: ["troubleshooting", "issues", "problems", "fixes"],
|
300
|
+
},
|
301
|
+
{
|
302
|
+
title: "Tips & Best Practices",
|
303
|
+
description: "Get the most out of Corgie AI",
|
304
|
+
readTime: "12 min read",
|
305
|
+
popular: false,
|
306
|
+
icon: "light-bulb",
|
307
|
+
iconBg: "bg-indigo-100 dark:bg-indigo-900/30",
|
308
|
+
iconColor: "text-indigo-600 dark:text-indigo-400",
|
309
|
+
tags: ["tips", "best practices", "optimization", "productivity"],
|
310
|
+
},
|
311
|
+
{
|
312
|
+
title: "Billing & Subscriptions",
|
313
|
+
description: "Managing your account billing",
|
314
|
+
readTime: "4 min read",
|
315
|
+
popular: false,
|
316
|
+
icon: "credit-card",
|
317
|
+
iconBg: "bg-yellow-100 dark:bg-yellow-900/30",
|
318
|
+
iconColor: "text-yellow-600 dark:text-yellow-400",
|
319
|
+
tags: ["billing", "subscription", "payment", "plan"],
|
320
|
+
},
|
321
|
+
{
|
322
|
+
title: "Mobile App Guide",
|
323
|
+
description: "Using Corgie AI on mobile devices",
|
324
|
+
readTime: "6 min read",
|
325
|
+
popular: false,
|
326
|
+
icon: "device-phone-mobile",
|
327
|
+
iconBg: "bg-pink-100 dark:bg-pink-900/30",
|
328
|
+
iconColor: "text-pink-600 dark:text-pink-400",
|
329
|
+
tags: ["mobile", "app", "ios", "android"],
|
330
|
+
},
|
331
|
+
]
|
332
|
+
}
|
333
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
import hljs from "highlight.js"
|
3
|
+
|
4
|
+
export default class extends Controller {
|
5
|
+
static targets = ["code"]
|
6
|
+
connect() {
|
7
|
+
this.codeTargets.forEach((target) => {
|
8
|
+
target.querySelectorAll("pre code").forEach((c) => {
|
9
|
+
hljs.highlightElement(c)
|
10
|
+
})
|
11
|
+
})
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1,106 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
import { marked } from "marked"
|
3
|
+
import sanitizeHtml from "sanitize-html"
|
4
|
+
|
5
|
+
export default class extends Controller {
|
6
|
+
static targets = ["content"]
|
7
|
+
|
8
|
+
connect() {
|
9
|
+
this.renderMarkdown()
|
10
|
+
}
|
11
|
+
|
12
|
+
renderMarkdown() {
|
13
|
+
const originalContent = this.contentTarget.innerHTML
|
14
|
+
let content = this.contentTarget.textContent
|
15
|
+
if (!content || !content.trim()) {
|
16
|
+
return
|
17
|
+
}
|
18
|
+
content = content.trim().replace(/\r\n/g, "\n")
|
19
|
+
content = this.dedentContent(content)
|
20
|
+
marked.setOptions({
|
21
|
+
breaks: true,
|
22
|
+
gfm: true,
|
23
|
+
sanitize: false,
|
24
|
+
smartLists: true,
|
25
|
+
smartypants: false,
|
26
|
+
pedantic: false,
|
27
|
+
silent: false,
|
28
|
+
})
|
29
|
+
const sanitizeOptions = {
|
30
|
+
allowedTags: [
|
31
|
+
"h1",
|
32
|
+
"h2",
|
33
|
+
"h3",
|
34
|
+
"h4",
|
35
|
+
"h5",
|
36
|
+
"h6",
|
37
|
+
"p",
|
38
|
+
"br",
|
39
|
+
"strong",
|
40
|
+
"b",
|
41
|
+
"em",
|
42
|
+
"i",
|
43
|
+
"u",
|
44
|
+
"strike",
|
45
|
+
"del",
|
46
|
+
"ul",
|
47
|
+
"ol",
|
48
|
+
"li",
|
49
|
+
"blockquote",
|
50
|
+
"pre",
|
51
|
+
"code",
|
52
|
+
"a",
|
53
|
+
"img",
|
54
|
+
"table",
|
55
|
+
"thead",
|
56
|
+
"tbody",
|
57
|
+
"tr",
|
58
|
+
"th",
|
59
|
+
"td",
|
60
|
+
"div",
|
61
|
+
"span",
|
62
|
+
"hr",
|
63
|
+
],
|
64
|
+
allowedAttributes: {
|
65
|
+
a: ["href", "title", "target"],
|
66
|
+
img: ["src", "alt", "title", "width", "height"],
|
67
|
+
pre: ["class"],
|
68
|
+
code: ["class"],
|
69
|
+
"*": ["class", "id"],
|
70
|
+
},
|
71
|
+
}
|
72
|
+
try {
|
73
|
+
const rawHtml = marked.parse(content)
|
74
|
+
const cleanHtml = sanitizeHtml(rawHtml, sanitizeOptions)
|
75
|
+
this.contentTarget.innerHTML = cleanHtml
|
76
|
+
} catch (error) {
|
77
|
+
this.contentTarget.innerHTML = originalContent
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
dedentContent(content) {
|
82
|
+
const lines = content.split("\n")
|
83
|
+
const nonEmptyLines = lines.filter((line) => line.trim().length > 0)
|
84
|
+
if (nonEmptyLines.length === 0) return content
|
85
|
+
const indents = nonEmptyLines.map((line) => {
|
86
|
+
const match = line.match(/^(\s*)/)
|
87
|
+
return match ? match[1].length : 0
|
88
|
+
})
|
89
|
+
let minIndent = Math.min(...indents)
|
90
|
+
if (
|
91
|
+
indents[0] === 0 &&
|
92
|
+
indents.length > 1 &&
|
93
|
+
indents.slice(1).every((indent) => indent > 0)
|
94
|
+
) {
|
95
|
+
minIndent = Math.min(...indents.slice(1))
|
96
|
+
}
|
97
|
+
const result = lines
|
98
|
+
.map((line, index) => {
|
99
|
+
if (line.trim().length === 0) return ""
|
100
|
+
if (index === 0 && indents[0] === 0) return line
|
101
|
+
return line.slice(minIndent)
|
102
|
+
})
|
103
|
+
.join("\n")
|
104
|
+
return result
|
105
|
+
}
|
106
|
+
}
|