uikit_rails 0.1.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.

Potentially problematic release.


This version of uikit_rails might be problematic. Click here for more details.

Files changed (368) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +259 -0
  3. data/Rakefile +12 -0
  4. data/app/controllers/uikit_rails/styleguide_controller.rb +72 -0
  5. data/app/views/layouts/uikit_rails/application.html.erb +412 -0
  6. data/app/views/uikit_rails/styleguide/index.html.erb +27 -0
  7. data/app/views/uikit_rails/styleguide/show.html.erb +56 -0
  8. data/config/routes.rb +6 -0
  9. data/lib/uikit_rails/engine.rb +13 -0
  10. data/lib/uikit_rails/generators/add_generator.rb +110 -0
  11. data/lib/uikit_rails/generators/install_generator.rb +62 -0
  12. data/lib/uikit_rails/generators/templates/base_component.rb.tt +32 -0
  13. data/lib/uikit_rails/generators/templates/uikit_rails.css.tt +69 -0
  14. data/lib/uikit_rails/templates/components/accordion/USAGE +30 -0
  15. data/lib/uikit_rails/templates/components/accordion/accordion.css +74 -0
  16. data/lib/uikit_rails/templates/components/accordion/component.html.erb +13 -0
  17. data/lib/uikit_rails/templates/components/accordion/component.rb +35 -0
  18. data/lib/uikit_rails/templates/components/accordion/preview.yml +81 -0
  19. data/lib/uikit_rails/templates/components/alert/USAGE +25 -0
  20. data/lib/uikit_rails/templates/components/alert/alert.css +60 -0
  21. data/lib/uikit_rails/templates/components/alert/component.html.erb +9 -0
  22. data/lib/uikit_rails/templates/components/alert/component.rb +27 -0
  23. data/lib/uikit_rails/templates/components/alert/preview.yml +53 -0
  24. data/lib/uikit_rails/templates/components/alert_dialog/USAGE +38 -0
  25. data/lib/uikit_rails/templates/components/alert_dialog/alert_dialog.css +108 -0
  26. data/lib/uikit_rails/templates/components/alert_dialog/component.html.erb +27 -0
  27. data/lib/uikit_rails/templates/components/alert_dialog/component.rb +23 -0
  28. data/lib/uikit_rails/templates/components/alert_dialog/preview.yml +94 -0
  29. data/lib/uikit_rails/templates/components/avatar/USAGE +20 -0
  30. data/lib/uikit_rails/templates/components/avatar/avatar.css +53 -0
  31. data/lib/uikit_rails/templates/components/avatar/component.html.erb +7 -0
  32. data/lib/uikit_rails/templates/components/avatar/component.rb +31 -0
  33. data/lib/uikit_rails/templates/components/avatar/preview.yml +42 -0
  34. data/lib/uikit_rails/templates/components/badge/USAGE +13 -0
  35. data/lib/uikit_rails/templates/components/badge/badge.css +61 -0
  36. data/lib/uikit_rails/templates/components/badge/component.rb +28 -0
  37. data/lib/uikit_rails/templates/components/badge/preview.yml +38 -0
  38. data/lib/uikit_rails/templates/components/breadcrumb/USAGE +23 -0
  39. data/lib/uikit_rails/templates/components/breadcrumb/breadcrumb.css +55 -0
  40. data/lib/uikit_rails/templates/components/breadcrumb/component.html.erb +14 -0
  41. data/lib/uikit_rails/templates/components/breadcrumb/component.rb +40 -0
  42. data/lib/uikit_rails/templates/components/breadcrumb/preview.yml +42 -0
  43. data/lib/uikit_rails/templates/components/button/USAGE +21 -0
  44. data/lib/uikit_rails/templates/components/button/button.css +125 -0
  45. data/lib/uikit_rails/templates/components/button/component.rb +44 -0
  46. data/lib/uikit_rails/templates/components/button/preview.yml +106 -0
  47. data/lib/uikit_rails/templates/components/card/USAGE +33 -0
  48. data/lib/uikit_rails/templates/components/card/card.css +63 -0
  49. data/lib/uikit_rails/templates/components/card/component.html.erb +16 -0
  50. data/lib/uikit_rails/templates/components/card/component.rb +26 -0
  51. data/lib/uikit_rails/templates/components/card/preview.yml +57 -0
  52. data/lib/uikit_rails/templates/components/checkbox/USAGE +19 -0
  53. data/lib/uikit_rails/templates/components/checkbox/checkbox.css +67 -0
  54. data/lib/uikit_rails/templates/components/checkbox/component.html.erb +6 -0
  55. data/lib/uikit_rails/templates/components/checkbox/component.rb +26 -0
  56. data/lib/uikit_rails/templates/components/checkbox/preview.yml +43 -0
  57. data/lib/uikit_rails/templates/components/collapsible/USAGE +31 -0
  58. data/lib/uikit_rails/templates/components/collapsible/collapsible.css +55 -0
  59. data/lib/uikit_rails/templates/components/collapsible/component.html.erb +8 -0
  60. data/lib/uikit_rails/templates/components/collapsible/component.rb +18 -0
  61. data/lib/uikit_rails/templates/components/collapsible/preview.yml +65 -0
  62. data/lib/uikit_rails/templates/components/dialog/USAGE +41 -0
  63. data/lib/uikit_rails/templates/components/dialog/component.html.erb +23 -0
  64. data/lib/uikit_rails/templates/components/dialog/component.rb +20 -0
  65. data/lib/uikit_rails/templates/components/dialog/dialog.css +133 -0
  66. data/lib/uikit_rails/templates/components/dialog/preview.yml +77 -0
  67. data/lib/uikit_rails/templates/components/dropdown/USAGE +40 -0
  68. data/lib/uikit_rails/templates/components/dropdown/component.html.erb +14 -0
  69. data/lib/uikit_rails/templates/components/dropdown/component.rb +62 -0
  70. data/lib/uikit_rails/templates/components/dropdown/dropdown.css +104 -0
  71. data/lib/uikit_rails/templates/components/dropdown/preview.yml +75 -0
  72. data/lib/uikit_rails/templates/components/input/USAGE +21 -0
  73. data/lib/uikit_rails/templates/components/input/component.rb +25 -0
  74. data/lib/uikit_rails/templates/components/input/input.css +43 -0
  75. data/lib/uikit_rails/templates/components/input/preview.yml +58 -0
  76. data/lib/uikit_rails/templates/components/label/USAGE +16 -0
  77. data/lib/uikit_rails/templates/components/label/component.rb +25 -0
  78. data/lib/uikit_rails/templates/components/label/label.css +25 -0
  79. data/lib/uikit_rails/templates/components/label/preview.yml +34 -0
  80. data/lib/uikit_rails/templates/components/pagination/USAGE +45 -0
  81. data/lib/uikit_rails/templates/components/pagination/component.html.erb +7 -0
  82. data/lib/uikit_rails/templates/components/pagination/component.rb +90 -0
  83. data/lib/uikit_rails/templates/components/pagination/pagination.css +89 -0
  84. data/lib/uikit_rails/templates/components/pagination/preview.yml +61 -0
  85. data/lib/uikit_rails/templates/components/popover/USAGE +44 -0
  86. data/lib/uikit_rails/templates/components/popover/component.html.erb +8 -0
  87. data/lib/uikit_rails/templates/components/popover/component.rb +19 -0
  88. data/lib/uikit_rails/templates/components/popover/popover.css +94 -0
  89. data/lib/uikit_rails/templates/components/popover/preview.yml +102 -0
  90. data/lib/uikit_rails/templates/components/progress/USAGE +15 -0
  91. data/lib/uikit_rails/templates/components/progress/component.html.erb +3 -0
  92. data/lib/uikit_rails/templates/components/progress/component.rb +38 -0
  93. data/lib/uikit_rails/templates/components/progress/preview.yml +44 -0
  94. data/lib/uikit_rails/templates/components/progress/progress.css +20 -0
  95. data/lib/uikit_rails/templates/components/select/USAGE +19 -0
  96. data/lib/uikit_rails/templates/components/select/component.rb +38 -0
  97. data/lib/uikit_rails/templates/components/select/preview.yml +61 -0
  98. data/lib/uikit_rails/templates/components/select/select.css +46 -0
  99. data/lib/uikit_rails/templates/components/separator/USAGE +15 -0
  100. data/lib/uikit_rails/templates/components/separator/component.rb +34 -0
  101. data/lib/uikit_rails/templates/components/separator/preview.yml +32 -0
  102. data/lib/uikit_rails/templates/components/separator/separator.css +21 -0
  103. data/lib/uikit_rails/templates/components/sheet/USAGE +44 -0
  104. data/lib/uikit_rails/templates/components/sheet/component.html.erb +23 -0
  105. data/lib/uikit_rails/templates/components/sheet/component.rb +23 -0
  106. data/lib/uikit_rails/templates/components/sheet/preview.yml +105 -0
  107. data/lib/uikit_rails/templates/components/sheet/sheet.css +193 -0
  108. data/lib/uikit_rails/templates/components/skeleton/USAGE +19 -0
  109. data/lib/uikit_rails/templates/components/skeleton/component.rb +38 -0
  110. data/lib/uikit_rails/templates/components/skeleton/preview.yml +44 -0
  111. data/lib/uikit_rails/templates/components/skeleton/skeleton.css +25 -0
  112. data/lib/uikit_rails/templates/components/switch/USAGE +19 -0
  113. data/lib/uikit_rails/templates/components/switch/component.html.erb +19 -0
  114. data/lib/uikit_rails/templates/components/switch/component.rb +23 -0
  115. data/lib/uikit_rails/templates/components/switch/preview.yml +43 -0
  116. data/lib/uikit_rails/templates/components/switch/switch.css +81 -0
  117. data/lib/uikit_rails/templates/components/table/USAGE +40 -0
  118. data/lib/uikit_rails/templates/components/table/component.html.erb +14 -0
  119. data/lib/uikit_rails/templates/components/table/component.rb +25 -0
  120. data/lib/uikit_rails/templates/components/table/preview.yml +109 -0
  121. data/lib/uikit_rails/templates/components/table/table.css +86 -0
  122. data/lib/uikit_rails/templates/components/tabs/USAGE +24 -0
  123. data/lib/uikit_rails/templates/components/tabs/component.html.erb +10 -0
  124. data/lib/uikit_rails/templates/components/tabs/component.rb +35 -0
  125. data/lib/uikit_rails/templates/components/tabs/preview.yml +60 -0
  126. data/lib/uikit_rails/templates/components/tabs/tabs.css +72 -0
  127. data/lib/uikit_rails/templates/components/textarea/USAGE +19 -0
  128. data/lib/uikit_rails/templates/components/textarea/component.rb +25 -0
  129. data/lib/uikit_rails/templates/components/textarea/preview.yml +47 -0
  130. data/lib/uikit_rails/templates/components/textarea/textarea.css +39 -0
  131. data/lib/uikit_rails/templates/components/toggle/USAGE +25 -0
  132. data/lib/uikit_rails/templates/components/toggle/component.rb +39 -0
  133. data/lib/uikit_rails/templates/components/toggle/preview.yml +81 -0
  134. data/lib/uikit_rails/templates/components/toggle/toggle.css +89 -0
  135. data/lib/uikit_rails/templates/components/tooltip/USAGE +23 -0
  136. data/lib/uikit_rails/templates/components/tooltip/component.html.erb +8 -0
  137. data/lib/uikit_rails/templates/components/tooltip/component.rb +19 -0
  138. data/lib/uikit_rails/templates/components/tooltip/preview.yml +52 -0
  139. data/lib/uikit_rails/templates/components/tooltip/tooltip.css +78 -0
  140. data/lib/uikit_rails/templates/stimulus/accordion_controller.js +19 -0
  141. data/lib/uikit_rails/templates/stimulus/alert_dialog_controller.js +25 -0
  142. data/lib/uikit_rails/templates/stimulus/collapsible_controller.js +9 -0
  143. data/lib/uikit_rails/templates/stimulus/dialog_controller.js +19 -0
  144. data/lib/uikit_rails/templates/stimulus/dropdown_controller.js +47 -0
  145. data/lib/uikit_rails/templates/stimulus/popover_controller.js +47 -0
  146. data/lib/uikit_rails/templates/stimulus/sheet_controller.js +19 -0
  147. data/lib/uikit_rails/templates/stimulus/tabs_controller.js +24 -0
  148. data/lib/uikit_rails/templates/stimulus/tooltip_controller.js +13 -0
  149. data/lib/uikit_rails/version.rb +5 -0
  150. data/lib/uikit_rails.rb +58 -0
  151. data/sig/uikit_rails.rbs +4 -0
  152. data/test_app/.dockerignore +51 -0
  153. data/test_app/.gitattributes +9 -0
  154. data/test_app/.github/dependabot.yml +12 -0
  155. data/test_app/.github/workflows/ci.yml +124 -0
  156. data/test_app/.gitignore +35 -0
  157. data/test_app/.kamal/hooks/docker-setup.sample +3 -0
  158. data/test_app/.kamal/hooks/post-app-boot.sample +3 -0
  159. data/test_app/.kamal/hooks/post-deploy.sample +14 -0
  160. data/test_app/.kamal/hooks/post-proxy-reboot.sample +3 -0
  161. data/test_app/.kamal/hooks/pre-app-boot.sample +3 -0
  162. data/test_app/.kamal/hooks/pre-build.sample +51 -0
  163. data/test_app/.kamal/hooks/pre-connect.sample +47 -0
  164. data/test_app/.kamal/hooks/pre-deploy.sample +122 -0
  165. data/test_app/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  166. data/test_app/.kamal/secrets +20 -0
  167. data/test_app/.rubocop.yml +8 -0
  168. data/test_app/.ruby-version +1 -0
  169. data/test_app/Dockerfile +77 -0
  170. data/test_app/Gemfile +68 -0
  171. data/test_app/Gemfile.lock +587 -0
  172. data/test_app/README.md +24 -0
  173. data/test_app/Rakefile +6 -0
  174. data/test_app/app/assets/images/.keep +0 -0
  175. data/test_app/app/assets/stylesheets/application.css +10 -0
  176. data/test_app/app/assets/stylesheets/ui/accordion.css +74 -0
  177. data/test_app/app/assets/stylesheets/ui/alert.css +60 -0
  178. data/test_app/app/assets/stylesheets/ui/alert_dialog.css +108 -0
  179. data/test_app/app/assets/stylesheets/ui/avatar.css +53 -0
  180. data/test_app/app/assets/stylesheets/ui/badge.css +61 -0
  181. data/test_app/app/assets/stylesheets/ui/breadcrumb.css +55 -0
  182. data/test_app/app/assets/stylesheets/ui/button.css +125 -0
  183. data/test_app/app/assets/stylesheets/ui/card.css +63 -0
  184. data/test_app/app/assets/stylesheets/ui/checkbox.css +67 -0
  185. data/test_app/app/assets/stylesheets/ui/collapsible.css +55 -0
  186. data/test_app/app/assets/stylesheets/ui/dialog.css +133 -0
  187. data/test_app/app/assets/stylesheets/ui/dropdown.css +104 -0
  188. data/test_app/app/assets/stylesheets/ui/input.css +43 -0
  189. data/test_app/app/assets/stylesheets/ui/label.css +25 -0
  190. data/test_app/app/assets/stylesheets/ui/pagination.css +89 -0
  191. data/test_app/app/assets/stylesheets/ui/popover.css +94 -0
  192. data/test_app/app/assets/stylesheets/ui/progress.css +20 -0
  193. data/test_app/app/assets/stylesheets/ui/select.css +46 -0
  194. data/test_app/app/assets/stylesheets/ui/separator.css +21 -0
  195. data/test_app/app/assets/stylesheets/ui/sheet.css +193 -0
  196. data/test_app/app/assets/stylesheets/ui/skeleton.css +25 -0
  197. data/test_app/app/assets/stylesheets/ui/switch.css +81 -0
  198. data/test_app/app/assets/stylesheets/ui/table.css +86 -0
  199. data/test_app/app/assets/stylesheets/ui/tabs.css +72 -0
  200. data/test_app/app/assets/stylesheets/ui/textarea.css +39 -0
  201. data/test_app/app/assets/stylesheets/ui/toggle.css +89 -0
  202. data/test_app/app/assets/stylesheets/ui/tooltip.css +78 -0
  203. data/test_app/app/assets/stylesheets/uikit_rails.css +69 -0
  204. data/test_app/app/components/ui/accordion/component.html.erb +13 -0
  205. data/test_app/app/components/ui/accordion/component.rb +35 -0
  206. data/test_app/app/components/ui/accordion/preview.yml +81 -0
  207. data/test_app/app/components/ui/alert/component.html.erb +9 -0
  208. data/test_app/app/components/ui/alert/component.rb +27 -0
  209. data/test_app/app/components/ui/alert/preview.yml +53 -0
  210. data/test_app/app/components/ui/alert_dialog/component.html.erb +27 -0
  211. data/test_app/app/components/ui/alert_dialog/component.rb +23 -0
  212. data/test_app/app/components/ui/alert_dialog/preview.yml +94 -0
  213. data/test_app/app/components/ui/avatar/component.html.erb +7 -0
  214. data/test_app/app/components/ui/avatar/component.rb +31 -0
  215. data/test_app/app/components/ui/avatar/preview.yml +42 -0
  216. data/test_app/app/components/ui/badge/component.rb +28 -0
  217. data/test_app/app/components/ui/badge/preview.yml +38 -0
  218. data/test_app/app/components/ui/base_component.rb +32 -0
  219. data/test_app/app/components/ui/breadcrumb/component.html.erb +14 -0
  220. data/test_app/app/components/ui/breadcrumb/component.rb +40 -0
  221. data/test_app/app/components/ui/breadcrumb/preview.yml +42 -0
  222. data/test_app/app/components/ui/button/component.rb +44 -0
  223. data/test_app/app/components/ui/button/preview.yml +106 -0
  224. data/test_app/app/components/ui/card/component.html.erb +16 -0
  225. data/test_app/app/components/ui/card/component.rb +26 -0
  226. data/test_app/app/components/ui/card/preview.yml +57 -0
  227. data/test_app/app/components/ui/checkbox/component.html.erb +6 -0
  228. data/test_app/app/components/ui/checkbox/component.rb +26 -0
  229. data/test_app/app/components/ui/checkbox/preview.yml +43 -0
  230. data/test_app/app/components/ui/collapsible/component.html.erb +8 -0
  231. data/test_app/app/components/ui/collapsible/component.rb +18 -0
  232. data/test_app/app/components/ui/collapsible/preview.yml +65 -0
  233. data/test_app/app/components/ui/dialog/component.html.erb +23 -0
  234. data/test_app/app/components/ui/dialog/component.rb +20 -0
  235. data/test_app/app/components/ui/dialog/preview.yml +77 -0
  236. data/test_app/app/components/ui/dropdown/component.html.erb +14 -0
  237. data/test_app/app/components/ui/dropdown/component.rb +62 -0
  238. data/test_app/app/components/ui/dropdown/preview.yml +75 -0
  239. data/test_app/app/components/ui/input/component.rb +25 -0
  240. data/test_app/app/components/ui/input/preview.yml +58 -0
  241. data/test_app/app/components/ui/label/component.rb +25 -0
  242. data/test_app/app/components/ui/label/preview.yml +34 -0
  243. data/test_app/app/components/ui/pagination/component.html.erb +7 -0
  244. data/test_app/app/components/ui/pagination/component.rb +90 -0
  245. data/test_app/app/components/ui/pagination/preview.yml +61 -0
  246. data/test_app/app/components/ui/popover/component.html.erb +8 -0
  247. data/test_app/app/components/ui/popover/component.rb +19 -0
  248. data/test_app/app/components/ui/popover/preview.yml +102 -0
  249. data/test_app/app/components/ui/progress/component.html.erb +3 -0
  250. data/test_app/app/components/ui/progress/component.rb +38 -0
  251. data/test_app/app/components/ui/progress/preview.yml +44 -0
  252. data/test_app/app/components/ui/select/component.rb +38 -0
  253. data/test_app/app/components/ui/select/preview.yml +61 -0
  254. data/test_app/app/components/ui/separator/component.rb +34 -0
  255. data/test_app/app/components/ui/separator/preview.yml +32 -0
  256. data/test_app/app/components/ui/sheet/component.html.erb +23 -0
  257. data/test_app/app/components/ui/sheet/component.rb +23 -0
  258. data/test_app/app/components/ui/sheet/preview.yml +105 -0
  259. data/test_app/app/components/ui/skeleton/component.rb +38 -0
  260. data/test_app/app/components/ui/skeleton/preview.yml +44 -0
  261. data/test_app/app/components/ui/switch/component.html.erb +19 -0
  262. data/test_app/app/components/ui/switch/component.rb +23 -0
  263. data/test_app/app/components/ui/switch/preview.yml +43 -0
  264. data/test_app/app/components/ui/table/component.html.erb +14 -0
  265. data/test_app/app/components/ui/table/component.rb +25 -0
  266. data/test_app/app/components/ui/table/preview.yml +109 -0
  267. data/test_app/app/components/ui/tabs/component.html.erb +10 -0
  268. data/test_app/app/components/ui/tabs/component.rb +35 -0
  269. data/test_app/app/components/ui/tabs/preview.yml +60 -0
  270. data/test_app/app/components/ui/textarea/component.rb +25 -0
  271. data/test_app/app/components/ui/textarea/preview.yml +47 -0
  272. data/test_app/app/components/ui/toggle/component.rb +39 -0
  273. data/test_app/app/components/ui/toggle/preview.yml +81 -0
  274. data/test_app/app/components/ui/tooltip/component.html.erb +8 -0
  275. data/test_app/app/components/ui/tooltip/component.rb +19 -0
  276. data/test_app/app/components/ui/tooltip/preview.yml +52 -0
  277. data/test_app/app/controllers/application_controller.rb +7 -0
  278. data/test_app/app/controllers/concerns/.keep +0 -0
  279. data/test_app/app/helpers/application_helper.rb +2 -0
  280. data/test_app/app/javascript/application.js +3 -0
  281. data/test_app/app/javascript/controllers/application.js +9 -0
  282. data/test_app/app/javascript/controllers/hello_controller.js +7 -0
  283. data/test_app/app/javascript/controllers/index.js +4 -0
  284. data/test_app/app/javascript/controllers/ui/accordion_controller.js +19 -0
  285. data/test_app/app/javascript/controllers/ui/alert_dialog_controller.js +25 -0
  286. data/test_app/app/javascript/controllers/ui/collapsible_controller.js +9 -0
  287. data/test_app/app/javascript/controllers/ui/dialog_controller.js +19 -0
  288. data/test_app/app/javascript/controllers/ui/dropdown_controller.js +47 -0
  289. data/test_app/app/javascript/controllers/ui/popover_controller.js +47 -0
  290. data/test_app/app/javascript/controllers/ui/sheet_controller.js +19 -0
  291. data/test_app/app/javascript/controllers/ui/tabs_controller.js +24 -0
  292. data/test_app/app/javascript/controllers/ui/tooltip_controller.js +13 -0
  293. data/test_app/app/jobs/application_job.rb +7 -0
  294. data/test_app/app/mailers/application_mailer.rb +4 -0
  295. data/test_app/app/models/application_record.rb +3 -0
  296. data/test_app/app/models/concerns/.keep +0 -0
  297. data/test_app/app/views/layouts/application.html.erb +29 -0
  298. data/test_app/app/views/layouts/mailer.html.erb +13 -0
  299. data/test_app/app/views/layouts/mailer.text.erb +1 -0
  300. data/test_app/app/views/pwa/manifest.json.erb +22 -0
  301. data/test_app/app/views/pwa/service-worker.js +26 -0
  302. data/test_app/bin/brakeman +7 -0
  303. data/test_app/bin/bundler-audit +6 -0
  304. data/test_app/bin/ci +6 -0
  305. data/test_app/bin/dev +2 -0
  306. data/test_app/bin/docker-entrypoint +8 -0
  307. data/test_app/bin/importmap +4 -0
  308. data/test_app/bin/jobs +6 -0
  309. data/test_app/bin/kamal +16 -0
  310. data/test_app/bin/rails +4 -0
  311. data/test_app/bin/rake +4 -0
  312. data/test_app/bin/rubocop +8 -0
  313. data/test_app/bin/setup +35 -0
  314. data/test_app/bin/thrust +5 -0
  315. data/test_app/config/application.rb +27 -0
  316. data/test_app/config/boot.rb +4 -0
  317. data/test_app/config/bundler-audit.yml +5 -0
  318. data/test_app/config/cable.yml +17 -0
  319. data/test_app/config/cache.yml +16 -0
  320. data/test_app/config/ci.rb +24 -0
  321. data/test_app/config/credentials.yml.enc +1 -0
  322. data/test_app/config/database.yml +40 -0
  323. data/test_app/config/deploy.yml +119 -0
  324. data/test_app/config/environment.rb +5 -0
  325. data/test_app/config/environments/development.rb +78 -0
  326. data/test_app/config/environments/production.rb +90 -0
  327. data/test_app/config/environments/test.rb +53 -0
  328. data/test_app/config/importmap.rb +7 -0
  329. data/test_app/config/initializers/assets.rb +7 -0
  330. data/test_app/config/initializers/content_security_policy.rb +29 -0
  331. data/test_app/config/initializers/filter_parameter_logging.rb +8 -0
  332. data/test_app/config/initializers/inflections.rb +16 -0
  333. data/test_app/config/locales/en.yml +31 -0
  334. data/test_app/config/puma.rb +42 -0
  335. data/test_app/config/queue.yml +18 -0
  336. data/test_app/config/recurring.yml +15 -0
  337. data/test_app/config/routes.rb +13 -0
  338. data/test_app/config/storage.yml +27 -0
  339. data/test_app/config.ru +6 -0
  340. data/test_app/db/cable_schema.rb +11 -0
  341. data/test_app/db/cache_schema.rb +12 -0
  342. data/test_app/db/queue_schema.rb +129 -0
  343. data/test_app/db/seeds.rb +9 -0
  344. data/test_app/lib/tasks/.keep +0 -0
  345. data/test_app/log/.keep +0 -0
  346. data/test_app/public/400.html +135 -0
  347. data/test_app/public/404.html +135 -0
  348. data/test_app/public/406-unsupported-browser.html +135 -0
  349. data/test_app/public/422.html +135 -0
  350. data/test_app/public/500.html +135 -0
  351. data/test_app/public/icon.png +0 -0
  352. data/test_app/public/icon.svg +3 -0
  353. data/test_app/public/robots.txt +1 -0
  354. data/test_app/script/.keep +0 -0
  355. data/test_app/storage/.keep +0 -0
  356. data/test_app/test/controllers/.keep +0 -0
  357. data/test_app/test/fixtures/files/.keep +0 -0
  358. data/test_app/test/helpers/.keep +0 -0
  359. data/test_app/test/integration/.keep +0 -0
  360. data/test_app/test/mailers/.keep +0 -0
  361. data/test_app/test/models/.keep +0 -0
  362. data/test_app/test/test_helper.rb +15 -0
  363. data/test_app/tmp/.keep +0 -0
  364. data/test_app/tmp/pids/.keep +0 -0
  365. data/test_app/tmp/storage/.keep +0 -0
  366. data/test_app/vendor/.keep +0 -0
  367. data/test_app/vendor/javascript/.keep +0 -0
  368. metadata +438 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 15fd29b901ee109f1db0bd8397dd6cdd751c061ca49b69805cff6f2eb357c079
4
+ data.tar.gz: 9a4e1bb1eac43ad31eb5f3283d7d4b38e6e4c99273c2f3c2e199c825b53838af
5
+ SHA512:
6
+ metadata.gz: b0f262f355681225409026ea3b17476c942989711a7818a02a796955747266a049d80698f63f47ffed41c972170109c4ae15b02d2c8fca97b73060a8a883e6af
7
+ data.tar.gz: 78e353120978cabb0289137033d25002faa419ecfefe8c3d275a5ab2c28ff7ed43dccd0dd557b43f7c4889e11e6a1eac54047a9ddcfcba1147934b7a948c872a
data/README.md ADDED
@@ -0,0 +1,259 @@
1
+ # UikitRails
2
+
3
+ Beautiful, copy-paste UI components for Rails — inspired by [shadcn/ui](https://ui.shadcn.com).
4
+
5
+ You don't install a component library. You **copy components into your project** and own the code. Customize everything — HTML, CSS, Ruby — no abstractions in the way.
6
+
7
+ ## Why UikitRails?
8
+
9
+ | | Traditional gems | UikitRails |
10
+ |---|---|---|
11
+ | **Ownership** | Locked behind gem API | Code lives in your app |
12
+ | **Styling** | Override with hacks | Edit the CSS directly |
13
+ | **Tailwind required?** | Often | No — plain CSS with design tokens |
14
+ | **Customization** | Limited to gem options | Change anything you want |
15
+
16
+ ## Features
17
+
18
+ - **Copy, don't depend** — components are copied into your app via generators. No runtime dependency.
19
+ - **No Tailwind required** — plain CSS powered by CSS custom properties (design tokens). Works with any CSS setup.
20
+ - **ViewComponent-based** — each component is a proper [ViewComponent](https://viewcomponent.org/) with a Ruby class and ERB template.
21
+ - **Dark mode ready** — add `class="dark"` to your `<html>` tag and it just works.
22
+ - **Built-in styleguide** — mount the engine to browse live previews and copy code for every installed component.
23
+ - **Accessible** — semantic HTML, keyboard navigation, focus-visible states, and ARIA attributes.
24
+
25
+ ## Quick Start
26
+
27
+ ### 1. Add the gem
28
+
29
+ ```ruby
30
+ gem "uikit_rails"
31
+ ```
32
+
33
+ ```bash
34
+ bundle install
35
+ ```
36
+
37
+ ### 2. Run the installer
38
+
39
+ ```bash
40
+ rails generate uikit_rails:install
41
+ ```
42
+
43
+ This creates two files:
44
+
45
+ | File | Purpose |
46
+ |---|---|
47
+ | `app/components/ui/base_component.rb` | Base class all UI components inherit from |
48
+ | `app/assets/stylesheets/uikit_rails.css` | Design tokens — colors, radii, fonts, transitions |
49
+
50
+ ### 3. Add components
51
+
52
+ ```bash
53
+ # Add specific components
54
+ rails generate uikit_rails:add button card input
55
+
56
+ # Or install everything at once
57
+ rails generate uikit_rails:add --all
58
+ ```
59
+
60
+ This copies into your app:
61
+
62
+ | File | Purpose |
63
+ |---|---|
64
+ | `app/components/ui/button/component.rb` | ViewComponent Ruby class |
65
+ | `app/assets/stylesheets/ui/button.css` | Component styles (plain CSS) |
66
+ | `app/components/ui/button/preview.yml` | Preview examples for the styleguide |
67
+
68
+ Add multiple components at once:
69
+
70
+ ```bash
71
+ rails generate uikit_rails:add button card badge alert
72
+ ```
73
+
74
+ ### 4. Use in your views
75
+
76
+ ```erb
77
+ <%= render Ui::Button::Component.new do %>
78
+ Click me
79
+ <% end %>
80
+
81
+ <%= render Ui::Button::Component.new(variant: :destructive, size: :lg) do %>
82
+ Delete
83
+ <% end %>
84
+
85
+ <%= render Ui::Button::Component.new(tag: :a, href: "/dashboard", variant: :outline) do %>
86
+ Go to Dashboard
87
+ <% end %>
88
+ ```
89
+
90
+ ## Component Styleguide
91
+
92
+ UikitRails ships with a **mountable engine** that gives you a live component browser — like Storybook, but built into your Rails app.
93
+
94
+ Add one line to your routes:
95
+
96
+ ```ruby
97
+ # config/routes.rb
98
+ mount UikitRails::Engine => "/ui"
99
+ ```
100
+
101
+ Then visit `/ui` to see:
102
+ - A sidebar listing every installed component
103
+ - Live rendered previews with all variants and sizes
104
+ - Copyable ERB code snippets for every example
105
+ - The `rails generate` command to install each component
106
+
107
+ The styleguide is self-contained — it has its own layout and styles that won't interfere with your app.
108
+
109
+ ## Available Components
110
+
111
+ **Layout & Display**
112
+
113
+ | Component | Description |
114
+ |---|---|
115
+ | `card` | Container with header, title, description, body, and footer slots |
116
+ | `separator` | Horizontal or vertical divider between content |
117
+ | `skeleton` | Animated placeholder for loading states |
118
+ | `avatar` | Circular avatar with image or fallback initials |
119
+ | `badge` | Small status indicator (default, secondary, destructive, outline) |
120
+ | `alert` | Informational banner with title and description (default, destructive) |
121
+ | `progress` | Progress bar with accessible ARIA attributes |
122
+ | `label` | Styled form label |
123
+ | `table` | Data table with header, body, footer, and caption slots |
124
+
125
+ **Form Controls**
126
+
127
+ | Component | Description |
128
+ |---|---|
129
+ | `button` | Button with 6 variants and 4 sizes, renders as `<button>` or `<a>` |
130
+ | `input` | Styled text input field |
131
+ | `textarea` | Multi-line text input |
132
+ | `select` | Native select dropdown with custom styling |
133
+ | `checkbox` | Styled checkbox with optional label |
134
+ | `switch` | Toggle switch for boolean settings (pure CSS) |
135
+ | `toggle` | Pressable toggle button with pressed state |
136
+
137
+ **Interactive (Stimulus)**
138
+
139
+ | Component | Description |
140
+ |---|---|
141
+ | `dialog` | Modal dialog using native `<dialog>` element |
142
+ | `alert_dialog` | Confirmation dialog that requires user action |
143
+ | `sheet` | Slide-over panel from any side (top, right, bottom, left) |
144
+ | `dropdown` | Dropdown menu with items, separators, and labels |
145
+ | `popover` | Floating content panel triggered by click |
146
+ | `tabs` | Tabbed content panels with keyboard navigation |
147
+ | `tooltip` | Hover/focus tooltip (top, bottom, left, right) |
148
+ | `accordion` | Collapsible sections with single or multiple open |
149
+ | `collapsible` | Simple expand/collapse toggle |
150
+
151
+ **Navigation**
152
+
153
+ | Component | Description |
154
+ |---|---|
155
+ | `breadcrumb` | Navigation breadcrumb trail with links |
156
+ | `pagination` | Page navigation with prev, next, pages, and ellipsis |
157
+
158
+ ## Customization
159
+
160
+ ### Design Tokens
161
+
162
+ All components reference CSS custom properties defined in `app/assets/stylesheets/uikit_rails.css`. Change them once, every component updates:
163
+
164
+ ```css
165
+ :root {
166
+ --ui-primary: #2563eb;
167
+ --ui-primary-foreground: #ffffff;
168
+ --ui-radius: 0.5rem;
169
+ --ui-font-family: "Inter", sans-serif;
170
+ --ui-transition-speed: 150ms;
171
+ }
172
+ ```
173
+
174
+ Dark mode tokens are defined under `.dark` — add the class to `<html>` or `<body>` to switch.
175
+
176
+ ### Component Code
177
+
178
+ Since you own the code, you can change anything:
179
+
180
+ - **Ruby class** — add new variants, change defaults, add validations
181
+ - **CSS file** — restyle completely, add animations, adjust spacing
182
+ - **Preview** — edit `preview.yml` to add your own examples to the styleguide
183
+
184
+ ### Example: Adding a Custom Variant
185
+
186
+ ```ruby
187
+ # app/components/ui/button/component.rb
188
+ VARIANTS = %i[default destructive outline secondary ghost link brand].freeze
189
+ ```
190
+
191
+ ```css
192
+ /* app/assets/stylesheets/ui/button.css */
193
+ .ui-btn--brand {
194
+ background-color: #7c3aed;
195
+ color: #ffffff;
196
+ }
197
+
198
+ .ui-btn--brand:hover {
199
+ background-color: #6d28d9;
200
+ }
201
+ ```
202
+
203
+ ```erb
204
+ <%= render Ui::Button::Component.new(variant: :brand) do %>
205
+ Brand Button
206
+ <% end %>
207
+ ```
208
+
209
+ ## How It Works
210
+
211
+ ```
212
+ rails generate uikit_rails:install
213
+ └─ copies base_component.rb + uikit_rails.css (design tokens)
214
+
215
+ rails generate uikit_rails:add button
216
+ └─ copies component.rb → app/components/ui/button/
217
+ └─ copies button.css → app/assets/stylesheets/ui/
218
+ └─ copies preview.yml → app/components/ui/button/
219
+
220
+ mount UikitRails::Engine => "/ui"
221
+ └─ serves a styleguide at /ui with live previews
222
+ ```
223
+
224
+ The gem is only used for **generators and the styleguide engine**. Your components have zero runtime dependency on the gem — you could remove it from your Gemfile after adding all the components you need (though you'd lose the styleguide).
225
+
226
+ ## Requirements
227
+
228
+ - Ruby >= 3.2
229
+ - Rails >= 7.0
230
+ - [view_component](https://github.com/ViewComponent/view_component) >= 3.0
231
+
232
+ ## Development
233
+
234
+ ```bash
235
+ git clone https://github.com/kha-wogi/uikit_rails.git
236
+ cd uikit_rails
237
+ bin/setup
238
+ bundle exec rspec # run tests
239
+ bundle exec rubocop # run linter
240
+ ```
241
+
242
+ A test Rails app is included at `test_app/` for manual testing:
243
+
244
+ ```bash
245
+ cd test_app
246
+ bundle install
247
+ bin/rails generate uikit_rails:install
248
+ bin/rails generate uikit_rails:add button
249
+ bin/rails server
250
+ # Visit http://localhost:3000/ui
251
+ ```
252
+
253
+ ## Contributing
254
+
255
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/kha-wogi/uikit_rails).
256
+
257
+ ## License
258
+
259
+ MIT
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+
5
+ module UikitRails
6
+ # Serves the component styleguide: index of installed components and live previews.
7
+ class StyleguideController < ActionController::Base
8
+ layout "uikit_rails/application"
9
+
10
+ def index
11
+ @components = installed_components
12
+ end
13
+
14
+ def show
15
+ @component = params[:component]
16
+ @components = installed_components
17
+
18
+ unless @components.include?(@component)
19
+ redirect_to uikit_rails.root_path, alert: "Component '#{@component}' is not installed."
20
+ return
21
+ end
22
+
23
+ load_preview
24
+ end
25
+
26
+ private
27
+
28
+ def installed_components
29
+ components_dir = Rails.root.join("app/components/ui")
30
+ return [] unless Dir.exist?(components_dir)
31
+
32
+ Dir.children(components_dir)
33
+ .select { |entry| File.directory?(components_dir.join(entry)) }
34
+ .sort
35
+ end
36
+
37
+ def load_preview
38
+ preview_path = Rails.root.join("app/components/ui", @component, "preview.yml")
39
+ unless File.exist?(preview_path)
40
+ @sections = []
41
+ @description = nil
42
+ return
43
+ end
44
+
45
+ data = YAML.safe_load_file(preview_path, permitted_classes: [Symbol])
46
+ @description = data["description"]
47
+ @sections = parse_sections(data["sections"])
48
+ end
49
+
50
+ def parse_sections(sections)
51
+ (sections || []).map do |section|
52
+ {
53
+ title: section["title"],
54
+ examples: parse_examples(section["examples"])
55
+ }
56
+ end
57
+ end
58
+
59
+ def parse_examples(examples)
60
+ (examples || []).map do |example|
61
+ code = example["code"].to_s.strip
62
+ { title: example["title"], code: code, rendered: render_example(code) }
63
+ end
64
+ end
65
+
66
+ def render_example(code)
67
+ render_to_string(inline: code, layout: false)
68
+ rescue StandardError => e
69
+ %(<span style="color:red">Render error: #{ERB::Util.html_escape(e.message)}</span>)
70
+ end
71
+ end
72
+ end