railsui 3.1.5 → 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.
Files changed (533) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/settings.local.json +10 -0
  3. data/Gemfile.lock +29 -27
  4. data/README.md +1 -1
  5. data/app/assets/images/tailwind-corgie-thumbnail.jpg +0 -0
  6. data/app/assets/stylesheets/railsui/railsui.css +18 -0
  7. data/app/helpers/railsui/application_helper.rb +22 -17
  8. data/app/helpers/railsui/host_route_fallback_helper.rb +18 -0
  9. data/app/javascript/controllers/alert_controller.js +0 -0
  10. data/app/models/railsui/default.rb +28 -109
  11. data/app/views/railsui/admin/fields/_color.html.erb +6 -1
  12. data/app/views/railsui/admin/fields/_theme.html.erb +16 -8
  13. data/app/views/railsui/shared/_flash_messages.html.erb +2 -2
  14. data/app/views/railsui/shared/_full_access_cta.html.erb +27 -0
  15. data/app/views/railsui/shared/_preview.html.erb +1 -1
  16. data/app/views/railsui/shared/_rui_email_preview.html.erb +60 -3
  17. data/app/views/railsui/systems/forms/form_builder.html.erb +171 -0
  18. data/app/views/railsui/themes/corgie/_components.html.erb +7 -0
  19. data/app/views/railsui/themes/corgie/_content.html.erb +9 -0
  20. data/app/views/railsui/themes/corgie/_fonts.html.erb +0 -0
  21. data/app/views/railsui/themes/corgie/_forms.html.erb +19 -0
  22. data/app/views/railsui/themes/corgie/_icons.html.erb +125 -0
  23. data/app/views/railsui/themes/corgie/_nav.html.erb +166 -0
  24. data/app/views/railsui/themes/corgie/_scaffolds.html.erb +42 -0
  25. data/app/views/railsui/themes/corgie/authentication/_overview.html.erb +5 -0
  26. data/app/views/railsui/themes/corgie/authentication/devise/_change_password.html.erb +74 -0
  27. data/app/views/railsui/themes/corgie/authentication/devise/_confirmation.html.erb +63 -0
  28. data/app/views/railsui/themes/corgie/authentication/devise/_edit.html.erb +103 -0
  29. data/app/views/railsui/themes/corgie/authentication/devise/_overview.html.erb +225 -0
  30. data/app/views/railsui/themes/corgie/authentication/devise/_reset_password.html.erb +60 -0
  31. data/app/views/railsui/themes/corgie/authentication/devise/_signin.html.erb +93 -0
  32. data/app/views/railsui/themes/corgie/authentication/devise/_signup.html.erb +98 -0
  33. data/app/views/railsui/themes/corgie/authentication/devise/_unlocks.html.erb +60 -0
  34. data/app/views/railsui/themes/corgie/authentication/static/_change_password.html.erb +67 -0
  35. data/app/views/railsui/themes/corgie/authentication/static/_confirmation.html.erb +58 -0
  36. data/app/views/railsui/themes/corgie/authentication/static/_overview.html.erb +204 -0
  37. data/app/views/railsui/themes/corgie/authentication/static/_reset_password.html.erb +59 -0
  38. data/app/views/railsui/themes/corgie/authentication/static/_signin.html.erb +102 -0
  39. data/app/views/railsui/themes/corgie/authentication/static/_signup.html.erb +108 -0
  40. data/app/views/railsui/themes/corgie/authentication/static/_unlocks.html.erb +60 -0
  41. data/app/views/railsui/themes/corgie/components/_accordion.html.erb +17 -0
  42. data/app/views/railsui/themes/corgie/components/_alert.html.erb +23 -0
  43. data/app/views/railsui/themes/corgie/components/_avatar.html.erb +13 -0
  44. data/app/views/railsui/themes/corgie/components/_badge.html.erb +20 -0
  45. data/app/views/railsui/themes/corgie/components/_breadcrumb.html.erb +14 -0
  46. data/app/views/railsui/themes/corgie/components/_button.html.erb +16 -0
  47. data/app/views/railsui/themes/corgie/components/_card.html.erb +23 -0
  48. data/app/views/railsui/themes/corgie/components/_combobox.html.erb +11 -0
  49. data/app/views/railsui/themes/corgie/components/_dropdown.html.erb +22 -0
  50. data/app/views/railsui/themes/corgie/components/_flash.html.erb +17 -0
  51. data/app/views/railsui/themes/corgie/components/_modal.html.erb +27 -0
  52. data/app/views/railsui/themes/corgie/components/_navigation.html.erb +7 -0
  53. data/app/views/railsui/themes/corgie/components/_pagination.html.erb +15 -0
  54. data/app/views/railsui/themes/corgie/components/_tab.html.erb +23 -0
  55. data/app/views/railsui/themes/corgie/components/_toast.html.erb +75 -0
  56. data/app/views/railsui/themes/corgie/components/_tooltip.html.erb +77 -0
  57. data/app/views/railsui/themes/corgie/components/accordion/_contained.html.erb +90 -0
  58. data/app/views/railsui/themes/corgie/components/accordion/_flush.html.erb +92 -0
  59. data/app/views/railsui/themes/corgie/components/alert/_dismissable.html.erb +45 -0
  60. data/app/views/railsui/themes/corgie/components/alert/_with_accent_border.html.erb +32 -0
  61. data/app/views/railsui/themes/corgie/components/alert/_with_actions.html.erb +57 -0
  62. data/app/views/railsui/themes/corgie/components/alert/_with_description.html.erb +41 -0
  63. data/app/views/railsui/themes/corgie/components/alert/_with_list.html.erb +46 -0
  64. data/app/views/railsui/themes/corgie/components/avatar/_circle.html.erb +53 -0
  65. data/app/views/railsui/themes/corgie/components/avatar/_rounded.html.erb +53 -0
  66. data/app/views/railsui/themes/corgie/components/badge/_basic.html.erb +70 -0
  67. data/app/views/railsui/themes/corgie/components/badge/_outline.html.erb +67 -0
  68. data/app/views/railsui/themes/corgie/components/badge/_pill.html.erb +67 -0
  69. data/app/views/railsui/themes/corgie/components/badge/_tag.html.erb +277 -0
  70. data/app/views/railsui/themes/corgie/components/breadcrumb/_article.html.erb +88 -0
  71. data/app/views/railsui/themes/corgie/components/breadcrumb/_base.html.erb +77 -0
  72. data/app/views/railsui/themes/corgie/components/button/_base.html.erb +38 -0
  73. data/app/views/railsui/themes/corgie/components/button/_expanded.html.erb +24 -0
  74. data/app/views/railsui/themes/corgie/components/button/_sizes.html.erb +31 -0
  75. data/app/views/railsui/themes/corgie/components/card/_article.html.erb +119 -0
  76. data/app/views/railsui/themes/corgie/components/card/_base.html.erb +34 -0
  77. data/app/views/railsui/themes/corgie/components/card/_feature.html.erb +54 -0
  78. data/app/views/railsui/themes/corgie/components/card/_team_member.html.erb +60 -0
  79. data/app/views/railsui/themes/corgie/components/card/_value.html.erb +54 -0
  80. data/app/views/railsui/themes/corgie/components/combobox/_base.html.erb +250 -0
  81. data/app/views/railsui/themes/corgie/components/dropdown/_base.html.erb +61 -0
  82. data/app/views/railsui/themes/corgie/components/dropdown/_dropdown.html.erb +24 -0
  83. data/app/views/railsui/themes/corgie/components/dropdown/_dropdown_w_icon.html.erb +27 -0
  84. data/app/views/railsui/themes/corgie/components/dropdown/_right_aligned.html.erb +82 -0
  85. data/app/views/railsui/themes/corgie/components/dropdown/_with_dividers.html.erb +93 -0
  86. data/app/views/railsui/themes/corgie/components/dropdown/_with_icons.html.erb +85 -0
  87. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_1.html.erb +44 -0
  88. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_2.html.erb +16 -0
  89. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_3.html.erb +16 -0
  90. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_4.html.erb +27 -0
  91. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_dependencies.html.erb +3 -0
  92. data/app/views/railsui/themes/corgie/components/dropdown/tutorial/_tutorial.html.erb +25 -0
  93. data/app/views/railsui/themes/corgie/components/flash/_alert.html.erb +29 -0
  94. data/app/views/railsui/themes/corgie/components/flash/_dynamic.html.erb +46 -0
  95. data/app/views/railsui/themes/corgie/components/flash/_notice.html.erb +29 -0
  96. data/app/views/railsui/themes/corgie/components/modal/_base.html.erb +110 -0
  97. data/app/views/railsui/themes/corgie/components/modal/_centered_dual_action.html.erb +124 -0
  98. data/app/views/railsui/themes/corgie/components/modal/_dismiss_icon.html.erb +124 -0
  99. data/app/views/railsui/themes/corgie/components/modal/_settings.html.erb +201 -0
  100. data/app/views/railsui/themes/corgie/components/modal/_single_action.html.erb +119 -0
  101. data/app/views/railsui/themes/corgie/components/modal/_with_form.html.erb +148 -0
  102. data/app/views/railsui/themes/corgie/components/navigation/_base.html.erb +215 -0
  103. data/app/views/railsui/themes/corgie/components/navigation/_chat.html.erb +194 -0
  104. data/app/views/railsui/themes/corgie/components/navigation/_nav_preview.html.erb +9 -0
  105. data/app/views/railsui/themes/corgie/components/pagination/_contained.html.erb +131 -0
  106. data/app/views/railsui/themes/corgie/components/pagination/_pagy.html.erb +97 -0
  107. data/app/views/railsui/themes/corgie/components/pagination/_simple.html.erb +114 -0
  108. data/app/views/railsui/themes/corgie/components/tab/_base.html.erb +101 -0
  109. data/app/views/railsui/themes/corgie/components/tab/_pills.html.erb +102 -0
  110. data/app/views/railsui/themes/corgie/components/tab/_rounded.html.erb +104 -0
  111. data/app/views/railsui/themes/corgie/components/tab/_vertical.html.erb +145 -0
  112. data/app/views/railsui/themes/corgie/components/tab/_with_icons.html.erb +138 -0
  113. data/app/views/railsui/themes/corgie/components/toast/_base.html.erb +98 -0
  114. data/app/views/railsui/themes/corgie/components/tooltip/_base.html.erb +51 -0
  115. data/app/views/railsui/themes/corgie/content/_image.html.erb +31 -0
  116. data/app/views/railsui/themes/corgie/content/_table.html.erb +21 -0
  117. data/app/views/railsui/themes/corgie/content/_typography.html.erb +47 -0
  118. data/app/views/railsui/themes/corgie/content/image/_object_contain.html.erb +31 -0
  119. data/app/views/railsui/themes/corgie/content/image/_object_cover.html.erb +32 -0
  120. data/app/views/railsui/themes/corgie/content/image/_object_fill.html.erb +32 -0
  121. data/app/views/railsui/themes/corgie/content/image/_object_scale_down.html.erb +34 -0
  122. data/app/views/railsui/themes/corgie/content/image/_responsive.html.erb +24 -0
  123. data/app/views/railsui/themes/corgie/content/table/_bordered.html.erb +93 -0
  124. data/app/views/railsui/themes/corgie/content/table/_borderless.html.erb +92 -0
  125. data/app/views/railsui/themes/corgie/content/table/_comparison.html.erb +494 -0
  126. data/app/views/railsui/themes/corgie/content/typography/_blockquote.html.erb +41 -0
  127. data/app/views/railsui/themes/corgie/content/typography/_display_headings.html.erb +70 -0
  128. data/app/views/railsui/themes/corgie/content/typography/_fonts.html.erb +30 -0
  129. data/app/views/railsui/themes/corgie/content/typography/_headings.html.erb +88 -0
  130. data/app/views/railsui/themes/corgie/content/typography/_inline_formatting.html.erb +44 -0
  131. data/app/views/railsui/themes/corgie/content/typography/_lead_paragraph.html.erb +26 -0
  132. data/app/views/railsui/themes/corgie/content/typography/_lists.html.erb +82 -0
  133. data/app/views/railsui/themes/corgie/content/typography/_paragraphs.html.erb +33 -0
  134. data/app/views/railsui/themes/corgie/forms/_action_text.html.erb +54 -0
  135. data/app/views/railsui/themes/corgie/forms/_checkbox.html.erb +60 -0
  136. data/app/views/railsui/themes/corgie/forms/_form_builder.html.erb +487 -0
  137. data/app/views/railsui/themes/corgie/forms/_input.html.erb +378 -0
  138. data/app/views/railsui/themes/corgie/forms/_input_group.html.erb +485 -0
  139. data/app/views/railsui/themes/corgie/forms/_radio.html.erb +92 -0
  140. data/app/views/railsui/themes/corgie/forms/_select.html.erb +118 -0
  141. data/app/views/railsui/themes/corgie/forms/_switch.html.erb +60 -0
  142. data/app/views/railsui/themes/corgie/forms/_validation.html.erb +52 -0
  143. data/app/views/railsui/themes/corgie/mailers/_devise.html.erb +44 -0
  144. data/app/views/railsui/themes/corgie/mailers/_layout.html.erb +536 -0
  145. data/app/views/railsui/themes/corgie/mailers/_mailer_preview.html.erb +523 -0
  146. data/app/views/railsui/themes/corgie/mailers/_minimal.html.erb +63 -0
  147. data/app/views/railsui/themes/corgie/mailers/_promotion.html.erb +62 -0
  148. data/app/views/railsui/themes/corgie/mailers/_transactional.html.erb +133 -0
  149. data/app/views/railsui/themes/corgie/mailers/devise/_confirmation_instructions.html.erb +34 -0
  150. data/app/views/railsui/themes/corgie/mailers/devise/_email_changed.html.erb +32 -0
  151. data/app/views/railsui/themes/corgie/mailers/devise/_password_changed.html.erb +25 -0
  152. data/app/views/railsui/themes/corgie/mailers/devise/_reset_password_instructions.html.erb +33 -0
  153. data/app/views/railsui/themes/corgie/mailers/devise/_unlock_instructions.html.erb +32 -0
  154. data/app/views/railsui/themes/corgie/scaffolds/_edit.html.erb +88 -0
  155. data/app/views/railsui/themes/corgie/scaffolds/_index.html.erb +88 -0
  156. data/app/views/railsui/themes/corgie/scaffolds/_new.html.erb +80 -0
  157. data/app/views/railsui/themes/corgie/scaffolds/_partial.html.erb +56 -0
  158. data/app/views/railsui/themes/corgie/scaffolds/_show.html.erb +85 -0
  159. data/app/views/railsui/themes/hound/_forms.html.erb +2 -0
  160. data/app/views/railsui/themes/hound/_nav.html.erb +2 -0
  161. data/app/views/railsui/themes/hound/authentication/devise/_change_password.html.erb +1 -27
  162. data/app/views/railsui/themes/hound/authentication/devise/_confirmation.html.erb +1 -20
  163. data/app/views/railsui/themes/hound/authentication/devise/_edit.html.erb +1 -44
  164. data/app/views/railsui/themes/hound/authentication/devise/_overview.html.erb +3 -51
  165. data/app/views/railsui/themes/hound/authentication/devise/_reset_password.html.erb +1 -17
  166. data/app/views/railsui/themes/hound/authentication/devise/_signin.html.erb +1 -30
  167. data/app/views/railsui/themes/hound/authentication/devise/_signup.html.erb +1 -31
  168. data/app/views/railsui/themes/hound/authentication/devise/_unlocks.html.erb +1 -17
  169. data/app/views/railsui/themes/hound/authentication/static/_change_password.html.erb +1 -32
  170. data/app/views/railsui/themes/hound/authentication/static/_confirmation.html.erb +1 -23
  171. data/app/views/railsui/themes/hound/authentication/static/_edit.html.erb +1 -39
  172. data/app/views/railsui/themes/hound/authentication/static/_overview.html.erb +2 -40
  173. data/app/views/railsui/themes/hound/authentication/static/_reset_password.html.erb +1 -22
  174. data/app/views/railsui/themes/hound/authentication/static/_signin.html.erb +1 -35
  175. data/app/views/railsui/themes/hound/authentication/static/_signup.html.erb +1 -31
  176. data/app/views/railsui/themes/hound/authentication/static/_unlocks.html.erb +1 -20
  177. data/app/views/railsui/themes/hound/components/_toast.html.erb +0 -3
  178. data/app/views/railsui/themes/hound/components/accordion/_contained.html.erb +0 -27
  179. data/app/views/railsui/themes/hound/components/accordion/_flush.html.erb +0 -27
  180. data/app/views/railsui/themes/hound/components/alert/_dismissable.html.erb +0 -8
  181. data/app/views/railsui/themes/hound/components/alert/_with_accent_border.html.erb +0 -7
  182. data/app/views/railsui/themes/hound/components/alert/_with_actions.html.erb +0 -11
  183. data/app/views/railsui/themes/hound/components/alert/_with_description.html.erb +0 -7
  184. data/app/views/railsui/themes/hound/components/alert/_with_list.html.erb +0 -8
  185. data/app/views/railsui/themes/hound/components/avatar/_circle.html.erb +0 -12
  186. data/app/views/railsui/themes/hound/components/avatar/_rounded.html.erb +0 -12
  187. data/app/views/railsui/themes/hound/components/badge/_basic.html.erb +0 -22
  188. data/app/views/railsui/themes/hound/components/badge/_outline.html.erb +0 -22
  189. data/app/views/railsui/themes/hound/components/badge/_pill.html.erb +0 -22
  190. data/app/views/railsui/themes/hound/components/badge/_tag.html.erb +0 -52
  191. data/app/views/railsui/themes/hound/components/breadcrumb/_base.html.erb +0 -14
  192. data/app/views/railsui/themes/hound/components/breadcrumb/_contained.html.erb +0 -14
  193. data/app/views/railsui/themes/hound/components/button/_base.html.erb +0 -10
  194. data/app/views/railsui/themes/hound/components/button/_expanded.html.erb +0 -3
  195. data/app/views/railsui/themes/hound/components/button/_sizes.html.erb +0 -5
  196. data/app/views/railsui/themes/hound/components/card/_base.html.erb +0 -6
  197. data/app/views/railsui/themes/hound/components/card/_user_card.html.erb +0 -13
  198. data/app/views/railsui/themes/hound/components/card/_user_card_dropdown.html.erb +0 -20
  199. data/app/views/railsui/themes/hound/components/card/_user_card_with_actions.html.erb +0 -18
  200. data/app/views/railsui/themes/hound/components/card/_with_action.html.erb +0 -13
  201. data/app/views/railsui/themes/hound/components/card/_with_header.html.erb +0 -43
  202. data/app/views/railsui/themes/hound/components/combobox/_base.html.erb +0 -40
  203. data/app/views/railsui/themes/hound/components/dropdown/_base.html.erb +0 -10
  204. data/app/views/railsui/themes/hound/components/dropdown/_right_aligned.html.erb +0 -14
  205. data/app/views/railsui/themes/hound/components/dropdown/_with_dividers.html.erb +0 -14
  206. data/app/views/railsui/themes/hound/components/dropdown/_with_icons.html.erb +0 -20
  207. data/app/views/railsui/themes/hound/components/flash/_alert.html.erb +0 -5
  208. data/app/views/railsui/themes/hound/components/flash/_dynamic.html.erb +0 -5
  209. data/app/views/railsui/themes/hound/components/flash/_notice.html.erb +0 -5
  210. data/app/views/railsui/themes/hound/components/modal/_base.html.erb +0 -13
  211. data/app/views/railsui/themes/hound/components/modal/_centered_dual_action.html.erb +0 -16
  212. data/app/views/railsui/themes/hound/components/modal/_dismiss_icon.html.erb +0 -20
  213. data/app/views/railsui/themes/hound/components/modal/_single_action.html.erb +0 -15
  214. data/app/views/railsui/themes/hound/components/modal/_with_form.html.erb +0 -23
  215. data/app/views/railsui/themes/hound/components/navigation/_base.html.erb +1 -41
  216. data/app/views/railsui/themes/hound/components/navigation/_with_action.html.erb +1 -38
  217. data/app/views/railsui/themes/hound/components/navigation/_with_dropdowns.html.erb +1 -105
  218. data/app/views/railsui/themes/hound/components/navigation/_with_search.html.erb +1 -41
  219. data/app/views/railsui/themes/hound/components/pagination/_contained.html.erb +0 -31
  220. data/app/views/railsui/themes/hound/components/pagination/_minimal.html.erb +0 -27
  221. data/app/views/railsui/themes/hound/components/pagination/_pagy.html.erb +47 -72
  222. data/app/views/railsui/themes/hound/components/tab/_base.html.erb +1 -18
  223. data/app/views/railsui/themes/hound/components/tab/_pills.html.erb +1 -18
  224. data/app/views/railsui/themes/hound/components/tab/_rounded.html.erb +1 -18
  225. data/app/views/railsui/themes/hound/components/tab/_with_icons.html.erb +1 -26
  226. data/app/views/railsui/themes/hound/components/toast/_base.html.erb +0 -16
  227. data/app/views/railsui/themes/hound/components/tooltip/_base.html.erb +0 -3
  228. data/app/views/railsui/themes/hound/content/image/_object_contain.html.erb +0 -5
  229. data/app/views/railsui/themes/hound/content/image/_object_cover.html.erb +0 -5
  230. data/app/views/railsui/themes/hound/content/image/_object_fill.html.erb +0 -5
  231. data/app/views/railsui/themes/hound/content/image/_object_scale_down.html.erb +0 -5
  232. data/app/views/railsui/themes/hound/content/image/_responsive.html.erb +0 -4
  233. data/app/views/railsui/themes/hound/content/table/_bordered.html.erb +0 -21
  234. data/app/views/railsui/themes/hound/content/table/_borderless.html.erb +0 -21
  235. data/app/views/railsui/themes/hound/content/typography/_blockquote.html.erb +0 -9
  236. data/app/views/railsui/themes/hound/content/typography/_display_headings.html.erb +0 -9
  237. data/app/views/railsui/themes/hound/content/typography/_headings.html.erb +0 -12
  238. data/app/views/railsui/themes/hound/content/typography/_inline_formatting.html.erb +0 -20
  239. data/app/views/railsui/themes/hound/content/typography/_lead_paragraph.html.erb +0 -5
  240. data/app/views/railsui/themes/hound/content/typography/_lists.html.erb +0 -17
  241. data/app/views/railsui/themes/hound/content/typography/_paragraphs.html.erb +0 -4
  242. data/app/views/railsui/themes/hound/forms/_action_text.html.erb +0 -6
  243. data/app/views/railsui/themes/hound/forms/_checkbox.html.erb +0 -9
  244. data/app/views/railsui/themes/hound/forms/_form_builder.html.erb +487 -0
  245. data/app/views/railsui/themes/hound/forms/_input.html.erb +0 -93
  246. data/app/views/railsui/themes/hound/forms/_input_group.html.erb +0 -83
  247. data/app/views/railsui/themes/hound/forms/_radio.html.erb +0 -13
  248. data/app/views/railsui/themes/hound/forms/_select.html.erb +0 -16
  249. data/app/views/railsui/themes/hound/forms/_switch.html.erb +0 -9
  250. data/app/views/railsui/themes/hound/forms/_validation.html.erb +0 -15
  251. data/app/views/railsui/themes/hound/mailers/_layout.html.erb +1 -432
  252. data/app/views/railsui/themes/hound/mailers/_minimal.html.erb +1 -16
  253. data/app/views/railsui/themes/hound/mailers/_promotion.html.erb +1 -20
  254. data/app/views/railsui/themes/hound/mailers/_transactional.html.erb +1 -43
  255. data/app/views/railsui/themes/hound/mailers/devise/_confirmation_instructions.html.erb +1 -9
  256. data/app/views/railsui/themes/hound/mailers/devise/_email_changed.html.erb +1 -13
  257. data/app/views/railsui/themes/hound/mailers/devise/_password_changed.html.erb +1 -7
  258. data/app/views/railsui/themes/hound/mailers/devise/_reset_password_instructions.html.erb +1 -9
  259. data/app/views/railsui/themes/hound/mailers/devise/_unlock_instructions.html.erb +1 -9
  260. data/app/views/railsui/themes/hound/scaffolds/_edit.html.erb +1 -19
  261. data/app/views/railsui/themes/hound/scaffolds/_index.html.erb +1 -14
  262. data/app/views/railsui/themes/hound/scaffolds/_new.html.erb +1 -17
  263. data/app/views/railsui/themes/hound/scaffolds/_partial.html.erb +1 -17
  264. data/app/views/railsui/themes/hound/scaffolds/_show.html.erb +1 -20
  265. data/app/views/railsui/themes/shepherd/_forms.html.erb +5 -3
  266. data/app/views/railsui/themes/shepherd/_nav.html.erb +2 -0
  267. data/app/views/railsui/themes/shepherd/authentication/devise/_change_password.html.erb +1 -23
  268. data/app/views/railsui/themes/shepherd/authentication/devise/_confirmation.html.erb +1 -12
  269. data/app/views/railsui/themes/shepherd/authentication/devise/_edit.html.erb +1 -74
  270. data/app/views/railsui/themes/shepherd/authentication/devise/_overview.html.erb +2 -57
  271. data/app/views/railsui/themes/shepherd/authentication/devise/_reset_password.html.erb +1 -12
  272. data/app/views/railsui/themes/shepherd/authentication/devise/_signin.html.erb +1 -25
  273. data/app/views/railsui/themes/shepherd/authentication/devise/_signup.html.erb +1 -26
  274. data/app/views/railsui/themes/shepherd/authentication/devise/_unlocks.html.erb +1 -12
  275. data/app/views/railsui/themes/shepherd/authentication/static/_change_password.html.erb +1 -23
  276. data/app/views/railsui/themes/shepherd/authentication/static/_confirmation.html.erb +1 -12
  277. data/app/views/railsui/themes/shepherd/authentication/static/_edit.html.erb +1 -67
  278. data/app/views/railsui/themes/shepherd/authentication/static/_overview.html.erb +1 -56
  279. data/app/views/railsui/themes/shepherd/authentication/static/_reset_password.html.erb +1 -12
  280. data/app/views/railsui/themes/shepherd/authentication/static/_signin.html.erb +1 -24
  281. data/app/views/railsui/themes/shepherd/authentication/static/_signup.html.erb +1 -26
  282. data/app/views/railsui/themes/shepherd/authentication/static/_unlocks.html.erb +1 -16
  283. data/app/views/railsui/themes/shepherd/components/_toast.html.erb +0 -3
  284. data/app/views/railsui/themes/shepherd/components/accordion/_contained.html.erb +0 -28
  285. data/app/views/railsui/themes/shepherd/components/accordion/_flush.html.erb +0 -27
  286. data/app/views/railsui/themes/shepherd/components/alert/_dismissable.html.erb +0 -8
  287. data/app/views/railsui/themes/shepherd/components/alert/_with_accent_border.html.erb +0 -6
  288. data/app/views/railsui/themes/shepherd/components/alert/_with_actions.html.erb +0 -11
  289. data/app/views/railsui/themes/shepherd/components/alert/_with_description.html.erb +0 -7
  290. data/app/views/railsui/themes/shepherd/components/alert/_with_list.html.erb +0 -8
  291. data/app/views/railsui/themes/shepherd/components/avatar/_circle.html.erb +0 -12
  292. data/app/views/railsui/themes/shepherd/components/avatar/_rounded.html.erb +0 -12
  293. data/app/views/railsui/themes/shepherd/components/badge/_basic.html.erb +0 -22
  294. data/app/views/railsui/themes/shepherd/components/badge/_outline.html.erb +0 -22
  295. data/app/views/railsui/themes/shepherd/components/badge/_pill.html.erb +0 -22
  296. data/app/views/railsui/themes/shepherd/components/badge/_tag.html.erb +0 -52
  297. data/app/views/railsui/themes/shepherd/components/breadcrumb/_base.html.erb +0 -14
  298. data/app/views/railsui/themes/shepherd/components/breadcrumb/_contained.html.erb +0 -14
  299. data/app/views/railsui/themes/shepherd/components/button/_base.html.erb +0 -17
  300. data/app/views/railsui/themes/shepherd/components/button/_expanded.html.erb +0 -3
  301. data/app/views/railsui/themes/shepherd/components/button/_sizes.html.erb +0 -5
  302. data/app/views/railsui/themes/shepherd/components/card/_base.html.erb +0 -6
  303. data/app/views/railsui/themes/shepherd/components/card/_property_card.html.erb +0 -28
  304. data/app/views/railsui/themes/shepherd/components/card/_property_user_card.html.erb +0 -14
  305. data/app/views/railsui/themes/shepherd/components/card/_user_card_with_actions.html.erb +0 -12
  306. data/app/views/railsui/themes/shepherd/components/card/_with_action.html.erb +0 -7
  307. data/app/views/railsui/themes/shepherd/components/card/_with_header.html.erb +0 -7
  308. data/app/views/railsui/themes/shepherd/components/combobox/_base.html.erb +0 -40
  309. data/app/views/railsui/themes/shepherd/components/datalist/_booking_list.html.erb +0 -45
  310. data/app/views/railsui/themes/shepherd/components/datalist/_property_list.html.erb +0 -47
  311. data/app/views/railsui/themes/shepherd/components/dropdown/_base.html.erb +0 -10
  312. data/app/views/railsui/themes/shepherd/components/dropdown/_right_aligned.html.erb +0 -13
  313. data/app/views/railsui/themes/shepherd/components/dropdown/_with_dividers.html.erb +0 -14
  314. data/app/views/railsui/themes/shepherd/components/dropdown/_with_menu_icons.html.erb +0 -16
  315. data/app/views/railsui/themes/shepherd/components/flash/_alert.html.erb +0 -5
  316. data/app/views/railsui/themes/shepherd/components/flash/_dynamic.html.erb +0 -5
  317. data/app/views/railsui/themes/shepherd/components/flash/_notice.html.erb +0 -5
  318. data/app/views/railsui/themes/shepherd/components/modal/_base.html.erb +0 -12
  319. data/app/views/railsui/themes/shepherd/components/modal/_centered_dual_action.html.erb +0 -16
  320. data/app/views/railsui/themes/shepherd/components/modal/_dismiss_icon.html.erb +0 -23
  321. data/app/views/railsui/themes/shepherd/components/modal/_single_action.html.erb +0 -14
  322. data/app/views/railsui/themes/shepherd/components/modal/_with_form.html.erb +0 -23
  323. data/app/views/railsui/themes/shepherd/components/navigation/_base.html.erb +0 -81
  324. data/app/views/railsui/themes/shepherd/components/navigation/_logged_out.html.erb +0 -22
  325. data/app/views/railsui/themes/shepherd/components/navigation/_with_dropdowns.html.erb +0 -88
  326. data/app/views/railsui/themes/shepherd/components/navigation/_with_search.html.erb +1 -83
  327. data/app/views/railsui/themes/shepherd/components/pagination/_contained.html.erb +0 -31
  328. data/app/views/railsui/themes/shepherd/components/pagination/_dark.html.erb +0 -31
  329. data/app/views/railsui/themes/shepherd/components/pagination/_pagy.html.erb +53 -98
  330. data/app/views/railsui/themes/shepherd/components/pagination/_simple.html.erb +0 -27
  331. data/app/views/railsui/themes/shepherd/components/tab/_base.html.erb +1 -18
  332. data/app/views/railsui/themes/shepherd/components/tab/_pills.html.erb +1 -18
  333. data/app/views/railsui/themes/shepherd/components/tab/_rounded.html.erb +1 -18
  334. data/app/views/railsui/themes/shepherd/components/tab/_with_icons.html.erb +1 -26
  335. data/app/views/railsui/themes/shepherd/components/toast/_base.html.erb +0 -16
  336. data/app/views/railsui/themes/shepherd/components/tooltip/_base.html.erb +0 -3
  337. data/app/views/railsui/themes/shepherd/content/_image_old.html.erb +0 -20
  338. data/app/views/railsui/themes/shepherd/content/image/_object_contain.html.erb +0 -5
  339. data/app/views/railsui/themes/shepherd/content/image/_object_cover.html.erb +0 -5
  340. data/app/views/railsui/themes/shepherd/content/image/_object_fill.html.erb +0 -5
  341. data/app/views/railsui/themes/shepherd/content/image/_object_scale_down.html.erb +0 -5
  342. data/app/views/railsui/themes/shepherd/content/image/_responsive.html.erb +0 -4
  343. data/app/views/railsui/themes/shepherd/content/table/_bordered.html.erb +0 -21
  344. data/app/views/railsui/themes/shepherd/content/table/_borderless.html.erb +0 -21
  345. data/app/views/railsui/themes/shepherd/content/typography/_blockquote.html.erb +0 -9
  346. data/app/views/railsui/themes/shepherd/content/typography/_display_headings.html.erb +0 -9
  347. data/app/views/railsui/themes/shepherd/content/typography/_headings.html.erb +0 -15
  348. data/app/views/railsui/themes/shepherd/content/typography/_inline_formatting.html.erb +0 -21
  349. data/app/views/railsui/themes/shepherd/content/typography/_lead_paragraph.html.erb +0 -5
  350. data/app/views/railsui/themes/shepherd/content/typography/_lists.html.erb +0 -17
  351. data/app/views/railsui/themes/shepherd/content/typography/_paragraphs.html.erb +0 -4
  352. data/app/views/railsui/themes/shepherd/forms/_action_text.html.erb +0 -6
  353. data/app/views/railsui/themes/shepherd/forms/_checkbox.html.erb +0 -9
  354. data/app/views/railsui/themes/shepherd/forms/_form_builder.html.erb +487 -0
  355. data/app/views/railsui/themes/shepherd/forms/_input.html.erb +0 -119
  356. data/app/views/railsui/themes/shepherd/forms/_input_group.html.erb +0 -81
  357. data/app/views/railsui/themes/shepherd/forms/_radio.html.erb +0 -13
  358. data/app/views/railsui/themes/shepherd/forms/_select.html.erb +0 -16
  359. data/app/views/railsui/themes/shepherd/forms/_switch.html.erb +0 -9
  360. data/app/views/railsui/themes/shepherd/forms/_validation.html.erb +0 -11
  361. data/app/views/railsui/themes/shepherd/mailers/_layout.html.erb +1 -493
  362. data/app/views/railsui/themes/shepherd/mailers/_minimal.html.erb +1 -16
  363. data/app/views/railsui/themes/shepherd/mailers/_promotion.html.erb +1 -20
  364. data/app/views/railsui/themes/shepherd/mailers/_transactional.html.erb +1 -43
  365. data/app/views/railsui/themes/shepherd/mailers/devise/_confirmation_instructions.html.erb +1 -9
  366. data/app/views/railsui/themes/shepherd/mailers/devise/_email_changed.html.erb +1 -12
  367. data/app/views/railsui/themes/shepherd/mailers/devise/_password_changed.html.erb +1 -7
  368. data/app/views/railsui/themes/shepherd/mailers/devise/_reset_password_instructions.html.erb +1 -9
  369. data/app/views/railsui/themes/shepherd/mailers/devise/_unlock_instructions.html.erb +1 -9
  370. data/app/views/railsui/themes/shepherd/scaffolds/_edit.html.erb +1 -19
  371. data/app/views/railsui/themes/shepherd/scaffolds/_index.html.erb +1 -11
  372. data/app/views/railsui/themes/shepherd/scaffolds/_new.html.erb +1 -17
  373. data/app/views/railsui/themes/shepherd/scaffolds/_partial.html.erb +1 -17
  374. data/app/views/railsui/themes/shepherd/scaffolds/_show.html.erb +1 -18
  375. data/config/pages.yml +103 -0
  376. data/config/routes.rb +6 -5
  377. data/config/theme.yml +2 -0
  378. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/auth-bg.jpg +0 -0
  379. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog-feature.jpg +0 -0
  380. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog1.jpg +0 -0
  381. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog2.jpg +0 -0
  382. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog3.jpg +0 -0
  383. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog4.jpg +0 -0
  384. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog5.jpg +0 -0
  385. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog6.jpg +0 -0
  386. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog7.jpg +0 -0
  387. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog8.jpg +0 -0
  388. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/blog9.jpg +0 -0
  389. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/copy.svg +6 -0
  390. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/pencil.svg +1 -0
  391. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/scroll-text.svg +9 -0
  392. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/facebook.svg +1 -0
  393. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/github.svg +1 -0
  394. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/google.svg +1 -0
  395. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/instagram.svg +1 -0
  396. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/linkedin.svg +1 -0
  397. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/twitter.svg +1 -0
  398. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/x.svg +1 -0
  399. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/social/youtube.svg +1 -0
  400. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/stethoscope.svg +8 -0
  401. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/icons/test-tubes.svg +11 -0
  402. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/logo.svg +10 -0
  403. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/android-chrome-192x192.png +0 -0
  404. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/android-chrome-512x512.png +0 -0
  405. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/apple-touch-icon.png +0 -0
  406. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon-16x16.png +0 -0
  407. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon-32x32.png +0 -0
  408. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon.ico +0 -0
  409. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/favicon.svg +20 -0
  410. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/opengraph-mark.jpg +0 -0
  411. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/opengraph.jpg +0 -0
  412. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/meta/site.webmanifest +19 -0
  413. data/lib/generators/railsui/install/templates/themes/corgie/images/railsui/railsui.svg +3 -0
  414. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/character_count_controller.js +134 -0
  415. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/chat_controller.js +45 -0
  416. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/help_search_controller.js +333 -0
  417. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/highlight_controller.js +13 -0
  418. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/markdown_controller.js +106 -0
  419. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/search_controller.js +311 -0
  420. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/sidebar_controller.js +105 -0
  421. data/lib/generators/railsui/install/templates/themes/corgie/javascript/controllers/railsui/snippet_controller.js +223 -0
  422. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.html.erb +21 -0
  423. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/minimal.text.erb +9 -0
  424. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/promotion.html.erb +23 -0
  425. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/promotion.text.erb +9 -0
  426. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/transactional.html.erb +55 -0
  427. data/lib/generators/railsui/install/templates/themes/corgie/mail/railsui_mailer/transactional.text.erb +22 -0
  428. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/actiontext.css +173 -0
  429. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/blog.css +29 -0
  430. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/buttons.css +49 -0
  431. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/card.css +9 -0
  432. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/chat.css +27 -0
  433. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/code.css +233 -0
  434. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/dropdown.css +9 -0
  435. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/forms.css +321 -0
  436. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/sidebar.css +15 -0
  437. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/tailwind.config.js +24 -0
  438. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/theme.css +77 -0
  439. data/lib/generators/railsui/install/templates/themes/corgie/stylesheets/railsui/typography.css +47 -0
  440. data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui.html.erb +31 -0
  441. data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_admin.html.erb +30 -0
  442. data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_auth.html.erb +50 -0
  443. data/lib/generators/railsui/install/templates/themes/corgie/views/layouts/rui/railsui_mailer.html.erb +503 -0
  444. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/about.html.erb +278 -0
  445. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog.html.erb +258 -0
  446. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog_category.html.erb +261 -0
  447. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/blog_show.html.erb +429 -0
  448. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/chat_new.html.erb +68 -0
  449. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/chat_show.html.erb +152 -0
  450. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/features.html.erb +356 -0
  451. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/help.html.erb +123 -0
  452. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/home.html.erb +252 -0
  453. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/pricing.html.erb +397 -0
  454. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/privacy.html.erb +140 -0
  455. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/signin.html.erb +38 -0
  456. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/signup.html.erb +48 -0
  457. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/pages/terms.html.erb +182 -0
  458. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_account_dropdown.html.erb +46 -0
  459. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_action.html.erb +15 -0
  460. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_callout.html.erb +7 -0
  461. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_email_spacer.html.erb +7 -0
  462. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_error_messages.html.erb +10 -0
  463. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_faq.html.erb +9 -0
  464. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_flash.html.erb +11 -0
  465. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_fonts.html.erb +7 -0
  466. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_footer.html.erb +72 -0
  467. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_header.html.erb +15 -0
  468. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_meta.html.erb +90 -0
  469. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_nav.html.erb +3 -0
  470. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_railsui_head.html.erb +4 -0
  471. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_search.html.erb +32 -0
  472. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_sidebar.html.erb +7 -0
  473. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/_waves.html.erb +47 -0
  474. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/blog/_article.html.erb +39 -0
  475. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/blog/_pagination.html.erb +21 -0
  476. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_disclaimer.html.erb +4 -0
  477. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_form.html.erb +62 -0
  478. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_header.html.erb +47 -0
  479. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_history.html.erb +36 -0
  480. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_key_legend.html.erb +11 -0
  481. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_link.html.erb +17 -0
  482. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_message.html.erb +69 -0
  483. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/chat/_model_select.html.erb +55 -0
  484. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_cta_section.html.erb +16 -0
  485. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_feature_card.html.erb +23 -0
  486. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_feature_check_item.html.erb +6 -0
  487. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/common/_social_auth_buttons.html.erb +22 -0
  488. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_categories.html.erb +82 -0
  489. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_faq.html.erb +45 -0
  490. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/help/_quick_actions.html.erb +46 -0
  491. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_career.html.erb +9 -0
  492. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_nav.html.erb +57 -0
  493. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/marketing/_team_member_card.html.erb +16 -0
  494. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/_modal.html.erb +84 -0
  495. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/_nav_item.html.erb +14 -0
  496. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_billing.html.erb +120 -0
  497. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_data_controls.html.erb +69 -0
  498. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_general.html.erb +92 -0
  499. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_notifications.html.erb +102 -0
  500. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_personalization.html.erb +100 -0
  501. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_security.html.erb +98 -0
  502. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/settings/panels/_title.html.erb +5 -0
  503. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_actions.html.erb +39 -0
  504. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_header.html.erb +40 -0
  505. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_history.html.erb +36 -0
  506. data/lib/generators/railsui/install/templates/themes/corgie/views/rui/shared/sidebar/_link.html.erb +23 -0
  507. data/lib/generators/railsui/install/templates/themes/hound/stylesheets/railsui/forms.css +18 -4
  508. data/lib/generators/railsui/install/templates/themes/hound/stylesheets/railsui/theme.css +3 -2
  509. data/lib/generators/railsui/install/templates/themes/shepherd/stylesheets/railsui/forms.css +12 -2
  510. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/_form.html.erb.tt +52 -0
  511. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/edit.html.erb.tt +25 -0
  512. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/index.html.erb.tt +12 -0
  513. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/new.html.erb.tt +22 -0
  514. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/partial.html.erb.tt +22 -0
  515. data/lib/generators/railsui/scaffold/templates/themes/corgie/views/show.html.erb.tt +24 -0
  516. data/lib/generators/railsui/scaffold/templates/themes/hound/views/_form.html.erb.tt +29 -24
  517. data/lib/generators/railsui/scaffold/templates/themes/shepherd/views/_form.html.erb.tt +28 -26
  518. data/lib/railsui/configuration.rb +22 -21
  519. data/lib/railsui/engine.rb +26 -20
  520. data/lib/railsui/form_builder.rb +307 -0
  521. data/lib/railsui/pages.rb +14 -3
  522. data/lib/railsui/theme_helper.rb +8 -8
  523. data/lib/railsui/theme_setup.rb +83 -49
  524. data/lib/railsui/themes.rb +3 -4
  525. data/lib/railsui/version.rb +1 -1
  526. data/lib/railsui.rb +9 -6
  527. data/lib/tasks/install.rake +1 -1
  528. data/lib/tasks/pages.rake +1 -1
  529. data/lib/tasks/stimulus.rake +1 -1
  530. metadata +287 -5
  531. data/.standard.yml +0 -3
  532. data/CHANGELOG.md +0 -9
  533. 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
+ }