satis 1.0.74 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (671) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -25
  3. data/app/assets/config/satis_manifest.js +8 -1
  4. data/app/assets/fontawesome/brands.js +6 -0
  5. data/app/assets/fontawesome/fontawesome.js +6 -0
  6. data/app/assets/fontawesome/solid.js +6 -0
  7. data/app/assets/images/satis/flags/1x1/ac.svg +81 -0
  8. data/app/assets/images/satis/flags/1x1/ad.svg +148 -0
  9. data/app/assets/images/satis/flags/1x1/ae.svg +6 -0
  10. data/app/assets/images/satis/flags/1x1/af.svg +81 -0
  11. data/app/assets/images/satis/flags/1x1/ag.svg +14 -0
  12. data/app/assets/images/satis/flags/1x1/ai.svg +763 -0
  13. data/app/assets/images/satis/flags/1x1/al.svg +5 -0
  14. data/app/assets/images/satis/flags/1x1/am.svg +5 -0
  15. data/app/assets/images/satis/flags/1x1/ao.svg +13 -0
  16. data/app/assets/images/satis/flags/1x1/aq.svg +5 -0
  17. data/app/assets/images/satis/flags/1x1/ar.svg +31 -0
  18. data/app/assets/images/satis/flags/1x1/as.svg +33 -0
  19. data/app/assets/images/satis/flags/1x1/at.svg +6 -0
  20. data/app/assets/images/satis/flags/1x1/au.svg +11 -0
  21. data/app/assets/images/satis/flags/1x1/aw.svg +186 -0
  22. data/app/assets/images/satis/flags/1x1/ax.svg +18 -0
  23. data/app/assets/images/satis/flags/1x1/az.svg +8 -0
  24. data/app/assets/images/satis/flags/1x1/ba.svg +12 -0
  25. data/app/assets/images/satis/flags/1x1/bb.svg +6 -0
  26. data/app/assets/images/satis/flags/1x1/bd.svg +4 -0
  27. data/app/assets/images/satis/flags/1x1/be.svg +7 -0
  28. data/app/assets/images/satis/flags/1x1/bf.svg +7 -0
  29. data/app/assets/images/satis/flags/1x1/bg.svg +7 -0
  30. data/app/assets/images/satis/flags/1x1/bh.svg +9 -0
  31. data/app/assets/images/satis/flags/1x1/bi.svg +15 -0
  32. data/app/assets/images/satis/flags/1x1/bj.svg +14 -0
  33. data/app/assets/images/satis/flags/1x1/bl.svg +7 -0
  34. data/app/assets/images/satis/flags/1x1/bm.svg +99 -0
  35. data/app/assets/images/satis/flags/1x1/bn.svg +36 -0
  36. data/app/assets/images/satis/flags/1x1/bo.svg +678 -0
  37. data/app/assets/images/satis/flags/1x1/bq.svg +5 -0
  38. data/app/assets/images/satis/flags/1x1/br.svg +45 -0
  39. data/app/assets/images/satis/flags/1x1/bs.svg +13 -0
  40. data/app/assets/images/satis/flags/1x1/bt.svg +89 -0
  41. data/app/assets/images/satis/flags/1x1/bv.svg +13 -0
  42. data/app/assets/images/satis/flags/1x1/bw.svg +7 -0
  43. data/app/assets/images/satis/flags/1x1/by.svg +22 -0
  44. data/app/assets/images/satis/flags/1x1/bz.svg +145 -0
  45. data/app/assets/images/satis/flags/1x1/ca.svg +4 -0
  46. data/app/assets/images/satis/flags/1x1/cc.svg +19 -0
  47. data/app/assets/images/satis/flags/1x1/cd.svg +12 -0
  48. data/app/assets/images/satis/flags/1x1/cf.svg +15 -0
  49. data/app/assets/images/satis/flags/1x1/cg.svg +12 -0
  50. data/app/assets/images/satis/flags/1x1/ch.svg +9 -0
  51. data/app/assets/images/satis/flags/1x1/ci.svg +7 -0
  52. data/app/assets/images/satis/flags/1x1/ck.svg +11 -0
  53. data/app/assets/images/satis/flags/1x1/cl.svg +13 -0
  54. data/app/assets/images/satis/flags/1x1/cm.svg +15 -0
  55. data/app/assets/images/satis/flags/1x1/cn.svg +11 -0
  56. data/app/assets/images/satis/flags/1x1/co.svg +7 -0
  57. data/app/assets/images/satis/flags/1x1/cp.svg +7 -0
  58. data/app/assets/images/satis/flags/1x1/cr.svg +7 -0
  59. data/app/assets/images/satis/flags/1x1/cu.svg +13 -0
  60. data/app/assets/images/satis/flags/1x1/cv.svg +13 -0
  61. data/app/assets/images/satis/flags/1x1/cw.svg +14 -0
  62. data/app/assets/images/satis/flags/1x1/cx.svg +15 -0
  63. data/app/assets/images/satis/flags/1x1/cy.svg +6 -0
  64. data/app/assets/images/satis/flags/1x1/cz.svg +5 -0
  65. data/app/assets/images/satis/flags/1x1/de.svg +5 -0
  66. data/app/assets/images/satis/flags/1x1/dg.svg +140 -0
  67. data/app/assets/images/satis/flags/1x1/dj.svg +13 -0
  68. data/app/assets/images/satis/flags/1x1/dk.svg +5 -0
  69. data/app/assets/images/satis/flags/1x1/dm.svg +152 -0
  70. data/app/assets/images/satis/flags/1x1/do.svg +6745 -0
  71. data/app/assets/images/satis/flags/1x1/dz.svg +5 -0
  72. data/app/assets/images/satis/flags/1x1/ea.svg +547 -0
  73. data/app/assets/images/satis/flags/1x1/ec.svg +138 -0
  74. data/app/assets/images/satis/flags/1x1/ee.svg +7 -0
  75. data/app/assets/images/satis/flags/1x1/eg.svg +38 -0
  76. data/app/assets/images/satis/flags/1x1/eh.svg +16 -0
  77. data/app/assets/images/satis/flags/1x1/er.svg +13 -0
  78. data/app/assets/images/satis/flags/1x1/es-ct.svg +4 -0
  79. data/app/assets/images/satis/flags/1x1/es-ga.svg +189 -0
  80. data/app/assets/images/satis/flags/1x1/es.svg +547 -0
  81. data/app/assets/images/satis/flags/1x1/et.svg +14 -0
  82. data/app/assets/images/satis/flags/1x1/eu.svg +28 -0
  83. data/app/assets/images/satis/flags/1x1/fi.svg +5 -0
  84. data/app/assets/images/satis/flags/1x1/fj.svg +125 -0
  85. data/app/assets/images/satis/flags/1x1/fk.svg +93 -0
  86. data/app/assets/images/satis/flags/1x1/fm.svg +11 -0
  87. data/app/assets/images/satis/flags/1x1/fo.svg +12 -0
  88. data/app/assets/images/satis/flags/1x1/fr.svg +7 -0
  89. data/app/assets/images/satis/flags/1x1/ga.svg +7 -0
  90. data/app/assets/images/satis/flags/1x1/gb-eng.svg +5 -0
  91. data/app/assets/images/satis/flags/1x1/gb-nir.svg +131 -0
  92. data/app/assets/images/satis/flags/1x1/gb-sct.svg +4 -0
  93. data/app/assets/images/satis/flags/1x1/gb-wls.svg +9 -0
  94. data/app/assets/images/satis/flags/1x1/gb.svg +7 -0
  95. data/app/assets/images/satis/flags/1x1/gd.svg +27 -0
  96. data/app/assets/images/satis/flags/1x1/ge.svg +6 -0
  97. data/app/assets/images/satis/flags/1x1/gf.svg +7 -0
  98. data/app/assets/images/satis/flags/1x1/gg.svg +9 -0
  99. data/app/assets/images/satis/flags/1x1/gh.svg +6 -0
  100. data/app/assets/images/satis/flags/1x1/gi.svg +32 -0
  101. data/app/assets/images/satis/flags/1x1/gl.svg +4 -0
  102. data/app/assets/images/satis/flags/1x1/gm.svg +9 -0
  103. data/app/assets/images/satis/flags/1x1/gn.svg +7 -0
  104. data/app/assets/images/satis/flags/1x1/gp.svg +7 -0
  105. data/app/assets/images/satis/flags/1x1/gq.svg +23 -0
  106. data/app/assets/images/satis/flags/1x1/gr.svg +16 -0
  107. data/app/assets/images/satis/flags/1x1/gs.svg +245 -0
  108. data/app/assets/images/satis/flags/1x1/gt.svg +204 -0
  109. data/app/assets/images/satis/flags/1x1/gu.svg +39 -0
  110. data/app/assets/images/satis/flags/1x1/gw.svg +15 -0
  111. data/app/assets/images/satis/flags/1x1/gy.svg +9 -0
  112. data/app/assets/images/satis/flags/1x1/hk.svg +30 -0
  113. data/app/assets/images/satis/flags/1x1/hm.svg +11 -0
  114. data/app/assets/images/satis/flags/1x1/hn.svg +18 -0
  115. data/app/assets/images/satis/flags/1x1/hr.svg +56 -0
  116. data/app/assets/images/satis/flags/1x1/ht.svg +116 -0
  117. data/app/assets/images/satis/flags/1x1/hu.svg +7 -0
  118. data/app/assets/images/satis/flags/1x1/ic.svg +7 -0
  119. data/app/assets/images/satis/flags/1x1/id.svg +6 -0
  120. data/app/assets/images/satis/flags/1x1/ie.svg +7 -0
  121. data/app/assets/images/satis/flags/1x1/il.svg +14 -0
  122. data/app/assets/images/satis/flags/1x1/im.svg +36 -0
  123. data/app/assets/images/satis/flags/1x1/in.svg +25 -0
  124. data/app/assets/images/satis/flags/1x1/io.svg +140 -0
  125. data/app/assets/images/satis/flags/1x1/iq.svg +10 -0
  126. data/app/assets/images/satis/flags/1x1/ir.svg +219 -0
  127. data/app/assets/images/satis/flags/1x1/is.svg +12 -0
  128. data/app/assets/images/satis/flags/1x1/it.svg +7 -0
  129. data/app/assets/images/satis/flags/1x1/je.svg +47 -0
  130. data/app/assets/images/satis/flags/1x1/jm.svg +8 -0
  131. data/app/assets/images/satis/flags/1x1/jo.svg +16 -0
  132. data/app/assets/images/satis/flags/1x1/jp.svg +11 -0
  133. data/app/assets/images/satis/flags/1x1/ke.svg +23 -0
  134. data/app/assets/images/satis/flags/1x1/kg.svg +15 -0
  135. data/app/assets/images/satis/flags/1x1/kh.svg +61 -0
  136. data/app/assets/images/satis/flags/1x1/ki.svg +36 -0
  137. data/app/assets/images/satis/flags/1x1/km.svg +16 -0
  138. data/app/assets/images/satis/flags/1x1/kn.svg +14 -0
  139. data/app/assets/images/satis/flags/1x1/kp.svg +15 -0
  140. data/app/assets/images/satis/flags/1x1/kr.svg +24 -0
  141. data/app/assets/images/satis/flags/1x1/kw.svg +13 -0
  142. data/app/assets/images/satis/flags/1x1/ky.svg +225 -0
  143. data/app/assets/images/satis/flags/1x1/kz.svg +23 -0
  144. data/app/assets/images/satis/flags/1x1/la.svg +12 -0
  145. data/app/assets/images/satis/flags/1x1/lb.svg +15 -0
  146. data/app/assets/images/satis/flags/1x1/lc.svg +8 -0
  147. data/app/assets/images/satis/flags/1x1/li.svg +43 -0
  148. data/app/assets/images/satis/flags/1x1/lk.svg +22 -0
  149. data/app/assets/images/satis/flags/1x1/lr.svg +14 -0
  150. data/app/assets/images/satis/flags/1x1/ls.svg +8 -0
  151. data/app/assets/images/satis/flags/1x1/lt.svg +7 -0
  152. data/app/assets/images/satis/flags/1x1/lu.svg +5 -0
  153. data/app/assets/images/satis/flags/1x1/lv.svg +6 -0
  154. data/app/assets/images/satis/flags/1x1/ly.svg +13 -0
  155. data/app/assets/images/satis/flags/1x1/ma.svg +4 -0
  156. data/app/assets/images/satis/flags/1x1/mc.svg +6 -0
  157. data/app/assets/images/satis/flags/1x1/md.svg +71 -0
  158. data/app/assets/images/satis/flags/1x1/me.svg +118 -0
  159. data/app/assets/images/satis/flags/1x1/mf.svg +7 -0
  160. data/app/assets/images/satis/flags/1x1/mg.svg +7 -0
  161. data/app/assets/images/satis/flags/1x1/mh.svg +8 -0
  162. data/app/assets/images/satis/flags/1x1/mk.svg +5 -0
  163. data/app/assets/images/satis/flags/1x1/ml.svg +7 -0
  164. data/app/assets/images/satis/flags/1x1/mm.svg +16 -0
  165. data/app/assets/images/satis/flags/1x1/mn.svg +13 -0
  166. data/app/assets/images/satis/flags/1x1/mo.svg +9 -0
  167. data/app/assets/images/satis/flags/1x1/mp.svg +86 -0
  168. data/app/assets/images/satis/flags/1x1/mq.svg +7 -0
  169. data/app/assets/images/satis/flags/1x1/mr.svg +6 -0
  170. data/app/assets/images/satis/flags/1x1/ms.svg +70 -0
  171. data/app/assets/images/satis/flags/1x1/mt.svg +50 -0
  172. data/app/assets/images/satis/flags/1x1/mu.svg +8 -0
  173. data/app/assets/images/satis/flags/1x1/mv.svg +6 -0
  174. data/app/assets/images/satis/flags/1x1/mw.svg +15 -0
  175. data/app/assets/images/satis/flags/1x1/mx.svg +378 -0
  176. data/app/assets/images/satis/flags/1x1/my.svg +11 -0
  177. data/app/assets/images/satis/flags/1x1/mz.svg +21 -0
  178. data/app/assets/images/satis/flags/1x1/na.svg +16 -0
  179. data/app/assets/images/satis/flags/1x1/nc.svg +14 -0
  180. data/app/assets/images/satis/flags/1x1/ne.svg +6 -0
  181. data/app/assets/images/satis/flags/1x1/nf.svg +11 -0
  182. data/app/assets/images/satis/flags/1x1/ng.svg +6 -0
  183. data/app/assets/images/satis/flags/1x1/ni.svg +129 -0
  184. data/app/assets/images/satis/flags/1x1/nl.svg +5 -0
  185. data/app/assets/images/satis/flags/1x1/no.svg +7 -0
  186. data/app/assets/images/satis/flags/1x1/np.svg +19 -0
  187. data/app/assets/images/satis/flags/1x1/nr.svg +12 -0
  188. data/app/assets/images/satis/flags/1x1/nu.svg +26 -0
  189. data/app/assets/images/satis/flags/1x1/nz.svg +42 -0
  190. data/app/assets/images/satis/flags/1x1/om.svg +115 -0
  191. data/app/assets/images/satis/flags/1x1/pa.svg +13 -0
  192. data/app/assets/images/satis/flags/1x1/pe.svg +244 -0
  193. data/app/assets/images/satis/flags/1x1/pf.svg +18 -0
  194. data/app/assets/images/satis/flags/1x1/pg.svg +16 -0
  195. data/app/assets/images/satis/flags/1x1/ph.svg +9 -0
  196. data/app/assets/images/satis/flags/1x1/pk.svg +15 -0
  197. data/app/assets/images/satis/flags/1x1/pl.svg +6 -0
  198. data/app/assets/images/satis/flags/1x1/pm.svg +7 -0
  199. data/app/assets/images/satis/flags/1x1/pn.svg +100 -0
  200. data/app/assets/images/satis/flags/1x1/pr.svg +13 -0
  201. data/app/assets/images/satis/flags/1x1/ps.svg +15 -0
  202. data/app/assets/images/satis/flags/1x1/pt.svg +57 -0
  203. data/app/assets/images/satis/flags/1x1/pw.svg +11 -0
  204. data/app/assets/images/satis/flags/1x1/py.svg +156 -0
  205. data/app/assets/images/satis/flags/1x1/qa.svg +4 -0
  206. data/app/assets/images/satis/flags/1x1/re.svg +7 -0
  207. data/app/assets/images/satis/flags/1x1/ro.svg +7 -0
  208. data/app/assets/images/satis/flags/1x1/rs.svg +296 -0
  209. data/app/assets/images/satis/flags/1x1/ru.svg +7 -0
  210. data/app/assets/images/satis/flags/1x1/rw.svg +13 -0
  211. data/app/assets/images/satis/flags/1x1/sa.svg +26 -0
  212. data/app/assets/images/satis/flags/1x1/sb.svg +13 -0
  213. data/app/assets/images/satis/flags/1x1/sc.svg +14 -0
  214. data/app/assets/images/satis/flags/1x1/sd.svg +13 -0
  215. data/app/assets/images/satis/flags/1x1/se.svg +5 -0
  216. data/app/assets/images/satis/flags/1x1/sg.svg +13 -0
  217. data/app/assets/images/satis/flags/1x1/sh.svg +81 -0
  218. data/app/assets/images/satis/flags/1x1/si.svg +18 -0
  219. data/app/assets/images/satis/flags/1x1/sj.svg +7 -0
  220. data/app/assets/images/satis/flags/1x1/sk.svg +9 -0
  221. data/app/assets/images/satis/flags/1x1/sl.svg +12 -0
  222. data/app/assets/images/satis/flags/1x1/sm.svg +89 -0
  223. data/app/assets/images/satis/flags/1x1/sn.svg +8 -0
  224. data/app/assets/images/satis/flags/1x1/so.svg +11 -0
  225. data/app/assets/images/satis/flags/1x1/sr.svg +6 -0
  226. data/app/assets/images/satis/flags/1x1/ss.svg +8 -0
  227. data/app/assets/images/satis/flags/1x1/st.svg +16 -0
  228. data/app/assets/images/satis/flags/1x1/sv.svg +594 -0
  229. data/app/assets/images/satis/flags/1x1/sx.svg +56 -0
  230. data/app/assets/images/satis/flags/1x1/sy.svg +6 -0
  231. data/app/assets/images/satis/flags/1x1/sz.svg +45 -0
  232. data/app/assets/images/satis/flags/1x1/ta.svg +81 -0
  233. data/app/assets/images/satis/flags/1x1/tc.svg +52 -0
  234. data/app/assets/images/satis/flags/1x1/td.svg +7 -0
  235. data/app/assets/images/satis/flags/1x1/tf.svg +15 -0
  236. data/app/assets/images/satis/flags/1x1/tg.svg +14 -0
  237. data/app/assets/images/satis/flags/1x1/th.svg +7 -0
  238. data/app/assets/images/satis/flags/1x1/tj.svg +26 -0
  239. data/app/assets/images/satis/flags/1x1/tk.svg +5 -0
  240. data/app/assets/images/satis/flags/1x1/tl.svg +13 -0
  241. data/app/assets/images/satis/flags/1x1/tm.svg +203 -0
  242. data/app/assets/images/satis/flags/1x1/tn.svg +13 -0
  243. data/app/assets/images/satis/flags/1x1/to.svg +10 -0
  244. data/app/assets/images/satis/flags/1x1/tr.svg +8 -0
  245. data/app/assets/images/satis/flags/1x1/tt.svg +7 -0
  246. data/app/assets/images/satis/flags/1x1/tv.svg +16 -0
  247. data/app/assets/images/satis/flags/1x1/tw.svg +32 -0
  248. data/app/assets/images/satis/flags/1x1/tz.svg +15 -0
  249. data/app/assets/images/satis/flags/1x1/ua.svg +6 -0
  250. data/app/assets/images/satis/flags/1x1/ug.svg +30 -0
  251. data/app/assets/images/satis/flags/1x1/um.svg +15 -0
  252. data/app/assets/images/satis/flags/1x1/un.svg +16 -0
  253. data/app/assets/images/satis/flags/1x1/us.svg +10 -0
  254. data/app/assets/images/satis/flags/1x1/uy.svg +28 -0
  255. data/app/assets/images/satis/flags/1x1/uz.svg +30 -0
  256. data/app/assets/images/satis/flags/1x1/va.svg +479 -0
  257. data/app/assets/images/satis/flags/1x1/vc.svg +8 -0
  258. data/app/assets/images/satis/flags/1x1/ve.svg +26 -0
  259. data/app/assets/images/satis/flags/1x1/vg.svg +127 -0
  260. data/app/assets/images/satis/flags/1x1/vi.svg +28 -0
  261. data/app/assets/images/satis/flags/1x1/vn.svg +11 -0
  262. data/app/assets/images/satis/flags/1x1/vu.svg +18 -0
  263. data/app/assets/images/satis/flags/1x1/wf.svg +7 -0
  264. data/app/assets/images/satis/flags/1x1/ws.svg +7 -0
  265. data/app/assets/images/satis/flags/1x1/xk.svg +16 -0
  266. data/app/assets/images/satis/flags/1x1/xx.svg +5 -0
  267. data/app/assets/images/satis/flags/1x1/ye.svg +7 -0
  268. data/app/assets/images/satis/flags/1x1/yt.svg +7 -0
  269. data/app/assets/images/satis/flags/1x1/za.svg +17 -0
  270. data/app/assets/images/satis/flags/1x1/zm.svg +27 -0
  271. data/app/assets/images/satis/flags/1x1/zw.svg +21 -0
  272. data/app/assets/images/satis/flags/4x3/ac.svg +76 -0
  273. data/app/assets/images/satis/flags/4x3/ad.svg +150 -0
  274. data/app/assets/images/satis/flags/4x3/ae.svg +6 -0
  275. data/app/assets/images/satis/flags/4x3/af.svg +81 -0
  276. data/app/assets/images/satis/flags/4x3/ag.svg +14 -0
  277. data/app/assets/images/satis/flags/4x3/ai.svg +763 -0
  278. data/app/assets/images/satis/flags/4x3/al.svg +5 -0
  279. data/app/assets/images/satis/flags/4x3/am.svg +5 -0
  280. data/app/assets/images/satis/flags/4x3/ao.svg +13 -0
  281. data/app/assets/images/satis/flags/4x3/aq.svg +5 -0
  282. data/app/assets/images/satis/flags/4x3/ar.svg +31 -0
  283. data/app/assets/images/satis/flags/4x3/as.svg +33 -0
  284. data/app/assets/images/satis/flags/4x3/at.svg +6 -0
  285. data/app/assets/images/satis/flags/4x3/au.svg +9 -0
  286. data/app/assets/images/satis/flags/4x3/aw.svg +186 -0
  287. data/app/assets/images/satis/flags/4x3/ax.svg +18 -0
  288. data/app/assets/images/satis/flags/4x3/az.svg +8 -0
  289. data/app/assets/images/satis/flags/4x3/ba.svg +12 -0
  290. data/app/assets/images/satis/flags/4x3/bb.svg +6 -0
  291. data/app/assets/images/satis/flags/4x3/bd.svg +4 -0
  292. data/app/assets/images/satis/flags/4x3/be.svg +7 -0
  293. data/app/assets/images/satis/flags/4x3/bf.svg +7 -0
  294. data/app/assets/images/satis/flags/4x3/bg.svg +7 -0
  295. data/app/assets/images/satis/flags/4x3/bh.svg +9 -0
  296. data/app/assets/images/satis/flags/4x3/bi.svg +15 -0
  297. data/app/assets/images/satis/flags/4x3/bj.svg +14 -0
  298. data/app/assets/images/satis/flags/4x3/bl.svg +7 -0
  299. data/app/assets/images/satis/flags/4x3/bm.svg +99 -0
  300. data/app/assets/images/satis/flags/4x3/bn.svg +36 -0
  301. data/app/assets/images/satis/flags/4x3/bo.svg +676 -0
  302. data/app/assets/images/satis/flags/4x3/bq.svg +5 -0
  303. data/app/assets/images/satis/flags/4x3/br.svg +45 -0
  304. data/app/assets/images/satis/flags/4x3/bs.svg +13 -0
  305. data/app/assets/images/satis/flags/4x3/bt.svg +89 -0
  306. data/app/assets/images/satis/flags/4x3/bv.svg +13 -0
  307. data/app/assets/images/satis/flags/4x3/bw.svg +7 -0
  308. data/app/assets/images/satis/flags/4x3/by.svg +20 -0
  309. data/app/assets/images/satis/flags/4x3/bz.svg +145 -0
  310. data/app/assets/images/satis/flags/4x3/ca.svg +4 -0
  311. data/app/assets/images/satis/flags/4x3/cc.svg +19 -0
  312. data/app/assets/images/satis/flags/4x3/cd.svg +5 -0
  313. data/app/assets/images/satis/flags/4x3/cf.svg +15 -0
  314. data/app/assets/images/satis/flags/4x3/cg.svg +12 -0
  315. data/app/assets/images/satis/flags/4x3/ch.svg +9 -0
  316. data/app/assets/images/satis/flags/4x3/ci.svg +7 -0
  317. data/app/assets/images/satis/flags/4x3/ck.svg +9 -0
  318. data/app/assets/images/satis/flags/4x3/cl.svg +13 -0
  319. data/app/assets/images/satis/flags/4x3/cm.svg +15 -0
  320. data/app/assets/images/satis/flags/4x3/cn.svg +11 -0
  321. data/app/assets/images/satis/flags/4x3/co.svg +7 -0
  322. data/app/assets/images/satis/flags/4x3/cp.svg +7 -0
  323. data/app/assets/images/satis/flags/4x3/cr.svg +7 -0
  324. data/app/assets/images/satis/flags/4x3/cu.svg +13 -0
  325. data/app/assets/images/satis/flags/4x3/cv.svg +13 -0
  326. data/app/assets/images/satis/flags/4x3/cw.svg +14 -0
  327. data/app/assets/images/satis/flags/4x3/cx.svg +15 -0
  328. data/app/assets/images/satis/flags/4x3/cy.svg +6 -0
  329. data/app/assets/images/satis/flags/4x3/cz.svg +5 -0
  330. data/app/assets/images/satis/flags/4x3/de.svg +5 -0
  331. data/app/assets/images/satis/flags/4x3/dg.svg +138 -0
  332. data/app/assets/images/satis/flags/4x3/dj.svg +13 -0
  333. data/app/assets/images/satis/flags/4x3/dk.svg +5 -0
  334. data/app/assets/images/satis/flags/4x3/dm.svg +152 -0
  335. data/app/assets/images/satis/flags/4x3/do.svg +6745 -0
  336. data/app/assets/images/satis/flags/4x3/dz.svg +5 -0
  337. data/app/assets/images/satis/flags/4x3/ea.svg +544 -0
  338. data/app/assets/images/satis/flags/4x3/ec.svg +138 -0
  339. data/app/assets/images/satis/flags/4x3/ee.svg +7 -0
  340. data/app/assets/images/satis/flags/4x3/eg.svg +38 -0
  341. data/app/assets/images/satis/flags/4x3/eh.svg +16 -0
  342. data/app/assets/images/satis/flags/4x3/er.svg +8 -0
  343. data/app/assets/images/satis/flags/4x3/es-ct.svg +4 -0
  344. data/app/assets/images/satis/flags/4x3/es-ga.svg +189 -0
  345. data/app/assets/images/satis/flags/4x3/es.svg +544 -0
  346. data/app/assets/images/satis/flags/4x3/et.svg +14 -0
  347. data/app/assets/images/satis/flags/4x3/eu.svg +28 -0
  348. data/app/assets/images/satis/flags/4x3/fi.svg +5 -0
  349. data/app/assets/images/satis/flags/4x3/fj.svg +122 -0
  350. data/app/assets/images/satis/flags/4x3/fk.svg +90 -0
  351. data/app/assets/images/satis/flags/4x3/fm.svg +11 -0
  352. data/app/assets/images/satis/flags/4x3/fo.svg +12 -0
  353. data/app/assets/images/satis/flags/4x3/fr.svg +7 -0
  354. data/app/assets/images/satis/flags/4x3/ga.svg +7 -0
  355. data/app/assets/images/satis/flags/4x3/gb-eng.svg +5 -0
  356. data/app/assets/images/satis/flags/4x3/gb-nir.svg +132 -0
  357. data/app/assets/images/satis/flags/4x3/gb-sct.svg +4 -0
  358. data/app/assets/images/satis/flags/4x3/gb-wls.svg +9 -0
  359. data/app/assets/images/satis/flags/4x3/gb.svg +7 -0
  360. data/app/assets/images/satis/flags/4x3/gd.svg +27 -0
  361. data/app/assets/images/satis/flags/4x3/ge.svg +6 -0
  362. data/app/assets/images/satis/flags/4x3/gf.svg +7 -0
  363. data/app/assets/images/satis/flags/4x3/gg.svg +9 -0
  364. data/app/assets/images/satis/flags/4x3/gh.svg +6 -0
  365. data/app/assets/images/satis/flags/4x3/gi.svg +32 -0
  366. data/app/assets/images/satis/flags/4x3/gl.svg +4 -0
  367. data/app/assets/images/satis/flags/4x3/gm.svg +14 -0
  368. data/app/assets/images/satis/flags/4x3/gn.svg +7 -0
  369. data/app/assets/images/satis/flags/4x3/gp.svg +7 -0
  370. data/app/assets/images/satis/flags/4x3/gq.svg +23 -0
  371. data/app/assets/images/satis/flags/4x3/gr.svg +16 -0
  372. data/app/assets/images/satis/flags/4x3/gs.svg +242 -0
  373. data/app/assets/images/satis/flags/4x3/gt.svg +204 -0
  374. data/app/assets/images/satis/flags/4x3/gu.svg +39 -0
  375. data/app/assets/images/satis/flags/4x3/gw.svg +13 -0
  376. data/app/assets/images/satis/flags/4x3/gy.svg +9 -0
  377. data/app/assets/images/satis/flags/4x3/hk.svg +30 -0
  378. data/app/assets/images/satis/flags/4x3/hm.svg +9 -0
  379. data/app/assets/images/satis/flags/4x3/hn.svg +18 -0
  380. data/app/assets/images/satis/flags/4x3/hr.svg +58 -0
  381. data/app/assets/images/satis/flags/4x3/ht.svg +116 -0
  382. data/app/assets/images/satis/flags/4x3/hu.svg +7 -0
  383. data/app/assets/images/satis/flags/4x3/ic.svg +7 -0
  384. data/app/assets/images/satis/flags/4x3/id.svg +6 -0
  385. data/app/assets/images/satis/flags/4x3/ie.svg +7 -0
  386. data/app/assets/images/satis/flags/4x3/il.svg +14 -0
  387. data/app/assets/images/satis/flags/4x3/im.svg +36 -0
  388. data/app/assets/images/satis/flags/4x3/in.svg +25 -0
  389. data/app/assets/images/satis/flags/4x3/io.svg +138 -0
  390. data/app/assets/images/satis/flags/4x3/iq.svg +10 -0
  391. data/app/assets/images/satis/flags/4x3/ir.svg +219 -0
  392. data/app/assets/images/satis/flags/4x3/is.svg +12 -0
  393. data/app/assets/images/satis/flags/4x3/it.svg +7 -0
  394. data/app/assets/images/satis/flags/4x3/je.svg +47 -0
  395. data/app/assets/images/satis/flags/4x3/jm.svg +8 -0
  396. data/app/assets/images/satis/flags/4x3/jo.svg +16 -0
  397. data/app/assets/images/satis/flags/4x3/jp.svg +11 -0
  398. data/app/assets/images/satis/flags/4x3/ke.svg +23 -0
  399. data/app/assets/images/satis/flags/4x3/kg.svg +15 -0
  400. data/app/assets/images/satis/flags/4x3/kh.svg +61 -0
  401. data/app/assets/images/satis/flags/4x3/ki.svg +36 -0
  402. data/app/assets/images/satis/flags/4x3/km.svg +16 -0
  403. data/app/assets/images/satis/flags/4x3/kn.svg +14 -0
  404. data/app/assets/images/satis/flags/4x3/kp.svg +15 -0
  405. data/app/assets/images/satis/flags/4x3/kr.svg +24 -0
  406. data/app/assets/images/satis/flags/4x3/kw.svg +13 -0
  407. data/app/assets/images/satis/flags/4x3/ky.svg +225 -0
  408. data/app/assets/images/satis/flags/4x3/kz.svg +23 -0
  409. data/app/assets/images/satis/flags/4x3/la.svg +12 -0
  410. data/app/assets/images/satis/flags/4x3/lb.svg +15 -0
  411. data/app/assets/images/satis/flags/4x3/lc.svg +8 -0
  412. data/app/assets/images/satis/flags/4x3/li.svg +43 -0
  413. data/app/assets/images/satis/flags/4x3/lk.svg +22 -0
  414. data/app/assets/images/satis/flags/4x3/lr.svg +14 -0
  415. data/app/assets/images/satis/flags/4x3/ls.svg +8 -0
  416. data/app/assets/images/satis/flags/4x3/lt.svg +7 -0
  417. data/app/assets/images/satis/flags/4x3/lu.svg +5 -0
  418. data/app/assets/images/satis/flags/4x3/lv.svg +6 -0
  419. data/app/assets/images/satis/flags/4x3/ly.svg +13 -0
  420. data/app/assets/images/satis/flags/4x3/ma.svg +4 -0
  421. data/app/assets/images/satis/flags/4x3/mc.svg +6 -0
  422. data/app/assets/images/satis/flags/4x3/md.svg +70 -0
  423. data/app/assets/images/satis/flags/4x3/me.svg +116 -0
  424. data/app/assets/images/satis/flags/4x3/mf.svg +7 -0
  425. data/app/assets/images/satis/flags/4x3/mg.svg +7 -0
  426. data/app/assets/images/satis/flags/4x3/mh.svg +7 -0
  427. data/app/assets/images/satis/flags/4x3/mk.svg +5 -0
  428. data/app/assets/images/satis/flags/4x3/ml.svg +7 -0
  429. data/app/assets/images/satis/flags/4x3/mm.svg +16 -0
  430. data/app/assets/images/satis/flags/4x3/mn.svg +13 -0
  431. data/app/assets/images/satis/flags/4x3/mo.svg +9 -0
  432. data/app/assets/images/satis/flags/4x3/mp.svg +86 -0
  433. data/app/assets/images/satis/flags/4x3/mq.svg +7 -0
  434. data/app/assets/images/satis/flags/4x3/mr.svg +6 -0
  435. data/app/assets/images/satis/flags/4x3/ms.svg +78 -0
  436. data/app/assets/images/satis/flags/4x3/mt.svg +49 -0
  437. data/app/assets/images/satis/flags/4x3/mu.svg +8 -0
  438. data/app/assets/images/satis/flags/4x3/mv.svg +6 -0
  439. data/app/assets/images/satis/flags/4x3/mw.svg +10 -0
  440. data/app/assets/images/satis/flags/4x3/mx.svg +382 -0
  441. data/app/assets/images/satis/flags/4x3/my.svg +11 -0
  442. data/app/assets/images/satis/flags/4x3/mz.svg +21 -0
  443. data/app/assets/images/satis/flags/4x3/na.svg +16 -0
  444. data/app/assets/images/satis/flags/4x3/nc.svg +14 -0
  445. data/app/assets/images/satis/flags/4x3/ne.svg +6 -0
  446. data/app/assets/images/satis/flags/4x3/nf.svg +9 -0
  447. data/app/assets/images/satis/flags/4x3/ng.svg +6 -0
  448. data/app/assets/images/satis/flags/4x3/ni.svg +129 -0
  449. data/app/assets/images/satis/flags/4x3/nl.svg +5 -0
  450. data/app/assets/images/satis/flags/4x3/no.svg +7 -0
  451. data/app/assets/images/satis/flags/4x3/np.svg +14 -0
  452. data/app/assets/images/satis/flags/4x3/nr.svg +12 -0
  453. data/app/assets/images/satis/flags/4x3/nu.svg +26 -0
  454. data/app/assets/images/satis/flags/4x3/nz.svg +42 -0
  455. data/app/assets/images/satis/flags/4x3/om.svg +115 -0
  456. data/app/assets/images/satis/flags/4x3/pa.svg +14 -0
  457. data/app/assets/images/satis/flags/4x3/pe.svg +244 -0
  458. data/app/assets/images/satis/flags/4x3/pf.svg +19 -0
  459. data/app/assets/images/satis/flags/4x3/pg.svg +9 -0
  460. data/app/assets/images/satis/flags/4x3/ph.svg +9 -0
  461. data/app/assets/images/satis/flags/4x3/pk.svg +15 -0
  462. data/app/assets/images/satis/flags/4x3/pl.svg +6 -0
  463. data/app/assets/images/satis/flags/4x3/pm.svg +7 -0
  464. data/app/assets/images/satis/flags/4x3/pn.svg +97 -0
  465. data/app/assets/images/satis/flags/4x3/pr.svg +13 -0
  466. data/app/assets/images/satis/flags/4x3/ps.svg +15 -0
  467. data/app/assets/images/satis/flags/4x3/pt.svg +57 -0
  468. data/app/assets/images/satis/flags/4x3/pw.svg +11 -0
  469. data/app/assets/images/satis/flags/4x3/py.svg +157 -0
  470. data/app/assets/images/satis/flags/4x3/qa.svg +4 -0
  471. data/app/assets/images/satis/flags/4x3/re.svg +7 -0
  472. data/app/assets/images/satis/flags/4x3/ro.svg +7 -0
  473. data/app/assets/images/satis/flags/4x3/rs.svg +292 -0
  474. data/app/assets/images/satis/flags/4x3/ru.svg +7 -0
  475. data/app/assets/images/satis/flags/4x3/rw.svg +13 -0
  476. data/app/assets/images/satis/flags/4x3/sa.svg +26 -0
  477. data/app/assets/images/satis/flags/4x3/sb.svg +13 -0
  478. data/app/assets/images/satis/flags/4x3/sc.svg +14 -0
  479. data/app/assets/images/satis/flags/4x3/sd.svg +13 -0
  480. data/app/assets/images/satis/flags/4x3/se.svg +5 -0
  481. data/app/assets/images/satis/flags/4x3/sg.svg +13 -0
  482. data/app/assets/images/satis/flags/4x3/sh.svg +76 -0
  483. data/app/assets/images/satis/flags/4x3/si.svg +18 -0
  484. data/app/assets/images/satis/flags/4x3/sj.svg +7 -0
  485. data/app/assets/images/satis/flags/4x3/sk.svg +9 -0
  486. data/app/assets/images/satis/flags/4x3/sl.svg +7 -0
  487. data/app/assets/images/satis/flags/4x3/sm.svg +91 -0
  488. data/app/assets/images/satis/flags/4x3/sn.svg +8 -0
  489. data/app/assets/images/satis/flags/4x3/so.svg +11 -0
  490. data/app/assets/images/satis/flags/4x3/sr.svg +6 -0
  491. data/app/assets/images/satis/flags/4x3/ss.svg +8 -0
  492. data/app/assets/images/satis/flags/4x3/st.svg +16 -0
  493. data/app/assets/images/satis/flags/4x3/sv.svg +594 -0
  494. data/app/assets/images/satis/flags/4x3/sx.svg +56 -0
  495. data/app/assets/images/satis/flags/4x3/sy.svg +6 -0
  496. data/app/assets/images/satis/flags/4x3/sz.svg +45 -0
  497. data/app/assets/images/satis/flags/4x3/ta.svg +76 -0
  498. data/app/assets/images/satis/flags/4x3/tc.svg +52 -0
  499. data/app/assets/images/satis/flags/4x3/td.svg +7 -0
  500. data/app/assets/images/satis/flags/4x3/tf.svg +15 -0
  501. data/app/assets/images/satis/flags/4x3/tg.svg +14 -0
  502. data/app/assets/images/satis/flags/4x3/th.svg +7 -0
  503. data/app/assets/images/satis/flags/4x3/tj.svg +22 -0
  504. data/app/assets/images/satis/flags/4x3/tk.svg +5 -0
  505. data/app/assets/images/satis/flags/4x3/tl.svg +13 -0
  506. data/app/assets/images/satis/flags/4x3/tm.svg +206 -0
  507. data/app/assets/images/satis/flags/4x3/tn.svg +13 -0
  508. data/app/assets/images/satis/flags/4x3/to.svg +10 -0
  509. data/app/assets/images/satis/flags/4x3/tr.svg +8 -0
  510. data/app/assets/images/satis/flags/4x3/tt.svg +5 -0
  511. data/app/assets/images/satis/flags/4x3/tv.svg +16 -0
  512. data/app/assets/images/satis/flags/4x3/tw.svg +34 -0
  513. data/app/assets/images/satis/flags/4x3/tz.svg +13 -0
  514. data/app/assets/images/satis/flags/4x3/ua.svg +6 -0
  515. data/app/assets/images/satis/flags/4x3/ug.svg +30 -0
  516. data/app/assets/images/satis/flags/4x3/um.svg +15 -0
  517. data/app/assets/images/satis/flags/4x3/un.svg +16 -0
  518. data/app/assets/images/satis/flags/4x3/us.svg +10 -0
  519. data/app/assets/images/satis/flags/4x3/uy.svg +28 -0
  520. data/app/assets/images/satis/flags/4x3/uz.svg +30 -0
  521. data/app/assets/images/satis/flags/4x3/va.svg +479 -0
  522. data/app/assets/images/satis/flags/4x3/vc.svg +8 -0
  523. data/app/assets/images/satis/flags/4x3/ve.svg +26 -0
  524. data/app/assets/images/satis/flags/4x3/vg.svg +127 -0
  525. data/app/assets/images/satis/flags/4x3/vi.svg +28 -0
  526. data/app/assets/images/satis/flags/4x3/vn.svg +11 -0
  527. data/app/assets/images/satis/flags/4x3/vu.svg +18 -0
  528. data/app/assets/images/satis/flags/4x3/wf.svg +7 -0
  529. data/app/assets/images/satis/flags/4x3/ws.svg +7 -0
  530. data/app/assets/images/satis/flags/4x3/xk.svg +16 -0
  531. data/app/assets/images/satis/flags/4x3/xx.svg +5 -0
  532. data/app/assets/images/satis/flags/4x3/ye.svg +7 -0
  533. data/app/assets/images/satis/flags/4x3/yt.svg +7 -0
  534. data/app/assets/images/satis/flags/4x3/za.svg +17 -0
  535. data/app/assets/images/satis/flags/4x3/zm.svg +27 -0
  536. data/app/assets/images/satis/flags/4x3/zw.svg +21 -0
  537. data/app/assets/images/satis/intl-tel-input/flags.png +0 -0
  538. data/app/assets/images/satis/intl-tel-input/flags@2x.png +0 -0
  539. data/app/assets/images/satis/leaflet/layers-2x.png +0 -0
  540. data/app/assets/images/satis/leaflet/layers.png +0 -0
  541. data/app/assets/images/satis/leaflet/marker-icon-2x.png +0 -0
  542. data/app/assets/images/satis/leaflet/marker-icon.png +0 -0
  543. data/app/assets/images/satis/leaflet/marker-shadow.png +0 -0
  544. data/app/assets/stylesheets/satis/application.css +68 -15
  545. data/app/assets/stylesheets/satis/components/diffy.css +74 -0
  546. data/app/assets/stylesheets/satis/components/flag-icons.min.css +1 -0
  547. data/app/assets/stylesheets/satis/components/form.css +158 -0
  548. data/app/assets/stylesheets/satis/components/intlTelInput.min.css +1 -0
  549. data/app/assets/stylesheets/satis/components/leaflet.css +661 -0
  550. data/app/assets/stylesheets/satis/components/phone-number.css +30 -0
  551. data/app/assets/stylesheets/satis/components/tippyjs.css +8 -0
  552. data/app/assets/stylesheets/satis/components/trix.css +412 -0
  553. data/app/components/satis/appearance_switcher/{component.scss → component.css} +1 -1
  554. data/app/components/satis/appearance_switcher/component.html.slim +1 -1
  555. data/app/components/satis/appearance_switcher/component_controller.js +3 -4
  556. data/app/components/satis/application_component.rb +8 -42
  557. data/app/components/satis/avatar/component.rb +3 -1
  558. data/app/components/satis/calendar_month/component.html.slim +522 -0
  559. data/app/components/satis/calendar_month/component.rb +9 -0
  560. data/app/components/satis/card/component.css +19 -0
  561. data/app/components/satis/card/component.html.slim +8 -32
  562. data/app/components/satis/card/component.rb +35 -8
  563. data/app/components/satis/date_time_picker/component.rb +10 -10
  564. data/app/components/satis/date_time_picker/component_controller.js +61 -45
  565. data/app/components/satis/dialog/component.html.slim +26 -0
  566. data/app/components/satis/dialog/component.rb +22 -0
  567. data/app/components/satis/dialog/component_controller.js +16 -0
  568. data/app/components/satis/dropdown/{component.scss → component.css} +5 -1
  569. data/app/components/satis/dropdown/component.html.slim +28 -14
  570. data/app/components/satis/dropdown/component.rb +44 -7
  571. data/app/components/satis/dropdown/component_controller.js +568 -172
  572. data/app/components/satis/editor/component.css +3 -0
  573. data/app/components/satis/editor/component.html.slim +5 -0
  574. data/app/components/satis/editor/component.rb +45 -0
  575. data/app/components/satis/editor/component_controller.js +90 -0
  576. data/app/components/satis/flash_messages/{component.scss → component.css} +5 -4
  577. data/app/components/satis/info_item/component.html.slim +2 -2
  578. data/app/components/satis/info_item/component.rb +10 -2
  579. data/app/components/satis/input/component_controller.js +20 -0
  580. data/app/components/satis/input_array/component.css +3 -0
  581. data/app/components/satis/input_array/component.html.slim +33 -0
  582. data/app/components/satis/input_array/component.rb +18 -0
  583. data/app/components/satis/input_array/component_controller.js +54 -0
  584. data/app/components/satis/map/{component.scss → component.css} +1 -1
  585. data/app/components/satis/map/component.html.slim +1 -1
  586. data/app/components/satis/map/component_controller.js +14 -12
  587. data/app/components/satis/menu/component.html.slim +4 -5
  588. data/app/components/satis/menu/component.rb +8 -3
  589. data/app/components/satis/menu/component_controller.js +139 -17
  590. data/app/components/satis/menu_item/component.html.slim +13 -8
  591. data/app/components/satis/menu_item/component.rb +1 -0
  592. data/app/components/satis/page/component.html.slim +30 -12
  593. data/app/components/satis/page/component_controller.js +2 -2
  594. data/app/components/satis/progress_bar/component.html.slim +4 -0
  595. data/app/components/satis/progress_bar/component.rb +57 -0
  596. data/app/components/satis/sidebar_menu/component.css +0 -0
  597. data/app/components/satis/sidebar_menu/component.html.slim +2 -3
  598. data/app/components/satis/sidebar_menu/component_controller.js +3 -4
  599. data/app/components/satis/sidebar_menu/mobile/component.html.slim +1 -2
  600. data/app/components/satis/sidebar_menu_item/component.html.slim +8 -5
  601. data/app/components/satis/sidebar_menu_item/component.rb +1 -0
  602. data/app/components/satis/sidebar_menu_item/component_controller.js +13 -4
  603. data/app/components/satis/switch/component_controller.js +3 -4
  604. data/app/components/satis/tab/component.rb +42 -13
  605. data/app/components/satis/tabs/{component.scss → component.css} +17 -1
  606. data/app/components/satis/tabs/component.html.slim +23 -9
  607. data/app/components/satis/tabs/component.rb +9 -2
  608. data/app/components/satis/tabs/component_controller.js +34 -19
  609. data/app/controllers/satis/dialogs_controller.rb +20 -0
  610. data/app/controllers/satis/documentation/avatars_controller.rb +7 -0
  611. data/app/controllers/satis/documentation/cards_controller.rb +6 -0
  612. data/app/controllers/satis/documentation/editors_controller.rb +12 -0
  613. data/app/controllers/satis/documentation/forms_controller.rb +14 -0
  614. data/app/controllers/satis/documentation/tabs_controller.rb +7 -0
  615. data/app/controllers/satis/documentation_controller.rb +6 -0
  616. data/app/controllers/satis/user_data_controller.rb +5 -4
  617. data/app/helpers/satis/showcases/avatars_helper.rb +4 -0
  618. data/app/javascript/satis/application.js +8 -0
  619. data/app/javascript/satis/controllers/application.js +12 -0
  620. data/app/javascript/satis/controllers/application_controller.js +71 -0
  621. data/app/javascript/satis/controllers/fields_for_controller.js +74 -0
  622. data/app/javascript/satis/controllers/file_controller.js +26 -0
  623. data/app/javascript/satis/controllers/form_controller.js +77 -0
  624. data/app/javascript/satis/controllers/index.js +70 -0
  625. data/app/javascript/satis/controllers/link_controller.js +34 -0
  626. data/app/javascript/satis/controllers/phone_number_controller.js +30 -0
  627. data/app/javascript/satis/elements/copyable_element.js +57 -0
  628. data/app/javascript/satis/utility_controllers/draggable_controller.js +144 -0
  629. data/app/javascript/satis/utility_controllers/help_controller.js +18 -0
  630. data/app/javascript/satis/utility_controllers/index.js +14 -0
  631. data/app/javascript/satis/utility_controllers/show_hide_controller.js +71 -0
  632. data/app/javascript/satis/utility_controllers/toggle_controller.js +100 -0
  633. data/app/javascript/satis/utils.js +41 -0
  634. data/app/models/satis/user_data.rb +3 -1
  635. data/app/views/satis/documentation/avatars/index.html.slim +39 -0
  636. data/app/views/satis/documentation/cards/index.html.slim +72 -0
  637. data/app/views/satis/documentation/editors/index.html.slim +44 -0
  638. data/app/views/satis/documentation/forms/index.html.slim +109 -0
  639. data/app/views/satis/documentation/forms/select.html.slim +7 -0
  640. data/app/views/satis/documentation/index.html.slim +6 -0
  641. data/app/views/satis/documentation/tabs/index.html.slim +31 -0
  642. data/app/views/shared/_fields_for.html.slim +3 -3
  643. data/config/importmap.rb +49 -0
  644. data/config/locales/en.yml +9 -0
  645. data/config/routes.rb +14 -0
  646. data/db/migrate/20221212083110_change_satis_user_data.rb +2 -2
  647. data/db/migrate/20230918115448_add_type_to_satis_user_data.rb +10 -0
  648. data/lib/generators/satis/install_generator.rb +22 -0
  649. data/lib/generators/satis/tailwind_config_generator.rb +24 -0
  650. data/lib/generators/satis/templates/config/initializers/satis.rb +13 -0
  651. data/lib/satis/concerns/contextual_translations.rb +58 -0
  652. data/lib/satis/configuration.rb +51 -30
  653. data/lib/satis/engine.rb +25 -10
  654. data/lib/satis/forms/builder.rb +130 -87
  655. data/lib/satis/forms/concerns/buttons.rb +2 -2
  656. data/lib/satis/forms/concerns/file.rb +1 -1
  657. data/lib/satis/helpers/container.rb +9 -7
  658. data/lib/satis/menus/item.rb +1 -1
  659. data/lib/satis/menus/menu.rb +3 -2
  660. data/lib/satis/version.rb +1 -1
  661. data/lib/satis.rb +2 -10
  662. data/lib/tasks/satis_tasks.rake +13 -4
  663. metadata +706 -20
  664. data/app/components/satis/card/component.md +0 -14
  665. data/app/components/satis/card/component.scss +0 -15
  666. /data/app/components/satis/breadcrumbs/{component.scss → component.css} +0 -0
  667. /data/app/components/satis/date_time_picker/{component.scss → component.css} +0 -0
  668. /data/app/components/satis/{sidebar_menu/component.scss → dialog/component.css} +0 -0
  669. /data/app/components/satis/input/{component.scss → component.css} +0 -0
  670. /data/app/components/satis/menu/{component.scss → component.css} +0 -0
  671. /data/app/components/satis/sidebar_menu_item/{component.scss → component.css} +0 -0
@@ -0,0 +1,22 @@
1
+ module Satis
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../templates", __FILE__)
4
+
5
+ def create_initializer_file
6
+ template "config/initializers/satis.rb"
7
+ end
8
+
9
+ def add_route
10
+ return if Rails.application.routes.routes.detect { |route| route.app.app == Satis::Engine }
11
+ route %(mount Satis::Engine => "/satis")
12
+ end
13
+
14
+ def copy_migrations
15
+ rake "satis:install:migrations"
16
+ end
17
+
18
+ def tailwindcss_config
19
+ rake "satis:tailwindcss:config"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'rails/generators/base'
2
+
3
+ module Satis
4
+ module Generators
5
+ class TailwindConfigGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('../templates', __dir__)
7
+ desc 'Configures tailwind.config.js and application.tailwindcss.css'
8
+
9
+ def add_content_to_tailwind_config
10
+ inject_into_file "config/tailwind.config.js", before: "],\n theme: {" do
11
+ " // Satis content\n" +
12
+ %w[/app/views/**/* /app/helpers/**/* /app/controllers/**/* /app/components/**/* /app/javascript/**/*.js /app/assets/**/*.css].map { |path| " \"#{Satis::Engine.root}#{path}\"" }.join(",\n") +
13
+ ",\n "
14
+ end
15
+ end
16
+
17
+ def add_content_application_tailwind_css
18
+ inject_into_file "app/assets/stylesheets/application.tailwind.css", before: "@tailwind base;" do
19
+ "@import '#{Satis::Engine.root}/app/assets/stylesheets/satis/application.css';\n"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ Satis.setup do |config|
4
+ config.submit_on_enter = false
5
+
6
+ config.logger = Rails.logger
7
+ config.confirm_before_leave = false
8
+ config.current_user = -> { Current.user }
9
+
10
+ config.default_help_text = lambda do |template, object, key, additional_scope|
11
+ I18n.t((["help"] + [key.to_s]).join("."), default: nil)
12
+ end
13
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
5
+ module Satis
6
+ module Concerns
7
+ module ContextualTranslations
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ #
12
+ # This provides us with a translation helper which scopes into the original view
13
+ # and thereby conveniently scopes the translations.
14
+ #
15
+ # In your component.html.slim you can use:
16
+ # ```slim
17
+ # = ct(".#{tab.name}", scope: [group.to_sym])
18
+ # ````
19
+ #
20
+ # It'll then try and find a translation with scope: en.admin.spaces.edit.tabs.main.admin_versions
21
+ #
22
+ # NOTE: Add your own original_view_context method to refer to the original view context,
23
+ # for components this is @template
24
+ #
25
+ def ct(key = nil, **options)
26
+ key = "#{full_i18n_scope(options).join('.')}#{key}" if key.start_with?('.')
27
+
28
+ original_view_context.t(key, **options)
29
+ end
30
+
31
+ def full_i18n_scope(options = {})
32
+ # NOTE: Caching this screws up the order
33
+ # return @full_i18n_scope if @full_i18n_scope
34
+
35
+ @full_i18n_scope = original_i18n_scope
36
+ @full_i18n_scope += Array.wrap(i18n_scope)
37
+ @full_i18n_scope += Array.wrap(@scope) if @scope
38
+ @full_i18n_scope += Array.wrap(options.delete(:scope))
39
+ @full_i18n_scope.flatten.compact!
40
+
41
+ @full_i18n_scope
42
+ end
43
+
44
+ def original_virtual_path
45
+ original_view_context.instance_variable_get(:@virtual_path)
46
+ end
47
+
48
+ def original_i18n_scope
49
+ original_virtual_path.sub(%r{^/}, '').gsub(%r{/_?}, '.').split('.')
50
+ end
51
+
52
+ def i18n_scope
53
+ self.class.name.split('::').second.underscore.to_sym
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,42 +1,52 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Satis
4
- class Configuration
5
- attr_accessor :submit_on_enter, :confirm_before_leave
6
- attr_writer :default_help_text, :current_user
7
- attr_writer :logger
8
-
9
- def initialize
10
- @logger = Logger.new(STDOUT)
11
- @submit_on_enter = true
12
- @confirm_before_leave = false
13
- @current_user = -> {}
14
-
15
- @default_help_text = lambda do |_template, _object, key, _additional_scope|
16
- scope = help_scope(template, object, additional_scope)
4
+ module Options
5
+ module ClassMethods
6
+ def option(name, default: nil)
7
+ attr_accessor(name)
8
+ schema[name] = default
9
+ end
17
10
 
18
- value = I18n.t((["help"] + scope + [key.to_s]).join("."))
11
+ def schema
12
+ @schema ||= {}
13
+ end
14
+ end
19
15
 
20
- if /translation missing: (.+)/.match?(value)
21
- nil
22
- else
23
- value
24
- end
16
+ def set_defaults!
17
+ self.class.schema.each do |name, default|
18
+ instance_variable_set("@#{name}", default)
25
19
  end
26
20
  end
27
21
 
28
- # Config: logger [Object].
29
- def logger
30
- @logger.is_a?(Proc) ? instance_exec(&@logger) : @logger
22
+ def self.included(cls)
23
+ cls.extend(ClassMethods)
31
24
  end
25
+ end
26
+
27
+ class Configuration
28
+ include Options
32
29
 
33
- def default_help_text(template, object, method, additional_scope)
34
- if @default_help_text.is_a?(Proc)
35
- instance_exec(template, object, method, additional_scope,
36
- &@default_help_text)
30
+ option :full_width_topbar, default: false
31
+ option :logger, default: Rails.logger
32
+ option :submit_on_enter, default: true
33
+ option :confirm_before_leave, default: false
34
+ option :current_user, default: lambda {}
35
+
36
+ option(:default_help_text, default: lambda do |template, object, key, additional_scope|
37
+ scope = help_scope(template, object, additional_scope)
38
+
39
+ value = I18n.t((["help"] + scope + [key.to_s]).join("."))
40
+
41
+ if /translation missing: (.+)/.match?(value)
42
+ nil
37
43
  else
38
- @default_help_text
44
+ value
39
45
  end
46
+ end)
47
+
48
+ def initialize
49
+ set_defaults!
40
50
  end
41
51
 
42
52
  # Maybe not the right place?
@@ -58,11 +68,22 @@ module Satis
58
68
 
59
69
  actions.map { |action| help_scope(template, object, additional_scope, action: action) }
60
70
  end
71
+ end
72
+
73
+ module Configurable
74
+ attr_writer :config
61
75
 
62
- def current_user
63
- raise 'current_user should be a Proc' unless @current_user.is_a? Proc
76
+ def config
77
+ @config ||= Configuration.new
78
+ end
79
+
80
+ def configure
81
+ yield(config)
82
+ end
83
+ alias setup configure
64
84
 
65
- instance_exec(&@current_user)
85
+ def reset_config!
86
+ @config = Configuration.new
66
87
  end
67
88
  end
68
89
  end
data/lib/satis/engine.rb CHANGED
@@ -2,12 +2,35 @@ require 'satis/forms/builder'
2
2
  require 'satis/helpers/container'
3
3
  require 'satis/menus/builder'
4
4
 
5
+ require 'view_component'
6
+ require 'browser'
7
+ require 'browser/aliases'
8
+ require 'jsonb_accessor'
9
+ require 'slim'
10
+ require 'tailwindcss-rails'
11
+ require "importmap-rails"
12
+ require "turbo-rails"
13
+ require "stimulus-rails"
14
+
5
15
  module Satis
6
16
  class Engine < ::Rails::Engine
7
17
  isolate_namespace Satis
8
18
 
9
- config.autoload_paths << "#{root}/app/components"
10
- config.autoload_paths << "#{root}/lib"
19
+ config.autoload_paths << root.join("lib")
20
+
21
+ initializer 'satis.assets' do |app|
22
+ app.config.assets.paths << root.join("app/javascript")
23
+ app.config.assets.paths << root.join("app/components")
24
+ app.config.assets.paths << Satis::Engine.root.join("vendor/javascript")
25
+ app.config.assets.precompile += %w[satis_manifest]
26
+ end
27
+
28
+ initializer 'satis.importmap', before: "importmap" do |app|
29
+ app.config.importmap.paths << root.join("config/importmap.rb")
30
+ app.config.importmap.cache_sweepers << root.join("app/javascript")
31
+ app.config.importmap.cache_sweepers << root.join("app/components")
32
+ app.config.importmap.cache_sweepers << Satis::Engine.root.join("vendor/javascript")
33
+ end
11
34
 
12
35
  initializer 'satis.helper' do
13
36
  Rails.application.reloader.to_prepare do
@@ -23,13 +46,5 @@ module Satis
23
46
  end
24
47
  end
25
48
  end
26
-
27
- initializer :append_migrations do |app|
28
- unless app.root.to_s.match? root.to_s
29
- config.paths['db/migrate'].expanded.each do |expanded_path|
30
- app.config.paths['db/migrate'] << expanded_path
31
- end
32
- end
33
- end
34
49
  end
35
50
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'satis/concerns/contextual_translations'
3
4
  require 'satis/forms/concerns/buttons'
4
5
  require 'satis/forms/concerns/file'
5
6
  require 'satis/forms/concerns/required'
@@ -19,6 +20,12 @@ module Satis
19
20
  include Concerns::Required
20
21
  include Concerns::Buttons
21
22
 
23
+ include Satis::Concerns::ContextualTranslations
24
+
25
+ def original_view_context
26
+ @template
27
+ end
28
+
22
29
  # Regular input
23
30
  def input(method, options = {}, &block)
24
31
  @form_options = options
@@ -29,6 +36,13 @@ module Satis
29
36
  send(input_type_for(method, options), method, options, &block)
30
37
  end
31
38
 
39
+ # NOTE: TDG - seems to be overwritten below
40
+ # def input_array(method, options = {}, &block)
41
+ # @form_options = options
42
+ #
43
+ # input_array(method, options, &block)
44
+ # end
45
+
32
46
  # A codemirror editor, backed by a text-area
33
47
  def editor(method, options = {}, &block)
34
48
  @form_options = options
@@ -106,9 +120,9 @@ module Satis
106
120
  class: 'invalid-feedback')
107
121
  end
108
122
  safe_join [
109
- invalid_feedback,
110
- rails_fields_for(*args, options, &block)
111
- ].compact
123
+ invalid_feedback,
124
+ rails_fields_for(*args, options, &block)
125
+ ].compact
112
126
  end
113
127
  end
114
128
 
@@ -116,9 +130,9 @@ module Satis
116
130
  options = args.extract_options!
117
131
  form_group(*args, options) do
118
132
  safe_join [
119
- (custom_label(*args, options[:label]) unless options[:label] == false),
120
- rich_text_area(*args, options)
121
- ]
133
+ (custom_label(*args, options[:label]) unless options[:label] == false),
134
+ rich_text_area(*args, options)
135
+ ]
122
136
  end
123
137
  end
124
138
 
@@ -159,12 +173,12 @@ module Satis
159
173
  end
160
174
 
161
175
  def form_group(method, options = {}, &block)
162
- tag.div(class: "form-group form-group-#{method}", data: options[:data]) do
176
+ tag.div(class: "form-group form-group-#{method}", data: options.delete(:data)) do
163
177
  safe_join [
164
- block.call,
165
- hint_text(options[:hint]),
166
- error_text(method)
167
- ].compact
178
+ block.call,
179
+ hint_text(options[:hint]),
180
+ error_text(method)
181
+ ].compact
168
182
  end
169
183
  end
170
184
 
@@ -206,11 +220,11 @@ module Satis
206
220
  all_classes = "#{options[:class]} form-label".strip
207
221
  label(method, title, class: all_classes, data: options[:data]) do |translation|
208
222
  safe_join [
209
- tag.span(title || translation, class: required?(method) ? 'required' : ''),
210
- ' ',
211
- required(method, options),
212
- help(method, options)
213
- ]
223
+ tag.span(title || translation, class: required?(method) ? 'required' : ''),
224
+ ' ',
225
+ required(method, options),
226
+ help(method, options)
227
+ ]
214
228
  end
215
229
  end
216
230
 
@@ -224,8 +238,8 @@ module Satis
224
238
  text = if options[:help].present?
225
239
  options[:help]
226
240
  else
227
- Satis.config.default_help_text(@template, @object, method,
228
- @options[:help_scope] || options[:help_scope])
241
+ Satis.config.default_help_text.call(@template, @object, method,
242
+ @options[:help_scope] || options[:help_scope])
229
243
  end
230
244
 
231
245
  return if text.blank?
@@ -239,73 +253,101 @@ module Satis
239
253
 
240
254
  # Inputs and helpers
241
255
  def string_input(method, options = {})
242
- form_group(method, options) do
256
+ orig_data = options.fetch(:data, {}).merge(controller: 'satis-input')
257
+ scrollable = options.fetch(:scrollable, false)
258
+
259
+ css_class = ["form-control"]
260
+ css_class << "is-invalid" if has_error?(method)
261
+ css_class << "noscroll" unless scrollable
262
+
263
+ data = options[:input_html].fetch(:data, {})
264
+ data = data.merge('satis-input-target' => 'input')
265
+ options[:input_html] = options[:input_html].merge(data: data)
266
+
267
+ form_group(method, options.merge(data: orig_data)) do
243
268
  safe_join [
244
- (custom_label(method, options[:label], options) unless options[:label] == false),
245
- string_field(method,
246
- merge_input_options({ as: options[:as], class: "form-control #{if has_error?(method)
247
- 'is-invalid'
248
- end}" }, options[:input_html]))
249
- ]
269
+ (custom_label(method, options[:label], options) unless options[:label] == false),
270
+ string_field(method, merge_input_options({ as: options[:as], class: "#{css_class.join(' ')}" }, options[:input_html]))
271
+ ]
250
272
  end
251
273
  end
252
274
 
253
275
  def number_input(method, options = {})
254
276
  form_group(method, options) do
255
277
  safe_join [
256
- (custom_label(method, options[:label], options) unless options[:label] == false),
257
- number_field(method,
258
- merge_input_options({ class: "form-control #{if has_error?(method)
259
- 'is-invalid'
260
- end}" }, options[:input_html]))
261
- ]
278
+ (custom_label(method, options[:label], options) unless options[:label] == false),
279
+ number_field(method,
280
+ merge_input_options({ class: "form-control #{
281
+ if has_error?(method)
282
+ 'is-invalid'
283
+ end}" }, options[:input_html]))
284
+ ]
262
285
  end
263
286
  end
264
287
 
265
288
  def text_input(method, options = {})
266
289
  form_group(method, options) do
267
290
  safe_join [
268
- (custom_label(method, options[:label], options) unless options[:label] == false),
269
- text_area(method,
270
- merge_input_options({ class: "form-control #{if has_error?(method)
271
- 'is-invalid'
272
- end}" }, options[:input_html]))
273
- ]
291
+ (custom_label(method, options[:label], options) unless options[:label] == false),
292
+ text_area(method,
293
+ merge_input_options({ class: "form-control #{
294
+ if has_error?(method)
295
+ 'is-invalid'
296
+ end}" }, options[:input_html]))
297
+ ]
274
298
  end
275
299
  end
276
300
 
277
- def editor_input(method, options = {})
301
+ def input_array(method, options = {})
278
302
  form_group(method, options) do
279
303
  safe_join [
280
- (custom_label(method, options[:label], options) unless options[:label] == false),
281
- tag.div(text_area(method,
282
- merge_input_options({
283
- class: 'form-control',
284
- data: {
285
- controller: 'satis-editor',
286
- 'satis-editor-target' => 'textarea',
287
- 'satis-editor-read-only-value' => options.delete(:read_only) || false,
288
- 'satis-editor-mode-value' => options.delete(:mode) || 'text/html',
289
- 'satis-editor-height-value' => options.delete(:height) || '200px',
290
- 'satis-editor-color-scheme-value' => options.delete(:color_scheme),
291
- 'satis-editor-color-scheme-dark-value' => options.delete(:color_scheme_dark) || 'lucario'
292
- }
293
-
294
- }, options[:input_html])), class: "editor #{if has_error?(method)
295
- 'is-invalid'
296
- end}"),
297
- hint_text(options[:hint] || '⌘-F/⌃-f: search; ⌥-g: goto line, ⌃-space: autocomplete')
298
- ]
304
+ (custom_label(method, options[:label], options) unless options[:label] == false),
305
+ render(Satis::InputArray::Component.new(form: self, attribute: method, **options))
306
+ ]
299
307
  end
300
308
  end
301
309
 
310
+ def editor_input(method, options = {}, &block)
311
+ form_group(method, options) do
312
+ safe_join [
313
+ (custom_label(method, options[:label], options) unless options[:label] == false),
314
+ @template.render(Satis::Editor::Component.new(form: self, attribute: method, **options, &block))
315
+ ]
316
+ end
317
+ # form_group(method, options) do
318
+ # safe_join [
319
+ # (custom_label(method, options[:label], options) unless options[:label] == false),
320
+ # tag.div(text_area(method,
321
+ # merge_input_options({
322
+ # class: 'form-control hidden',
323
+ # data: {
324
+ # # controller: 'satis-editor',
325
+ # 'satis-editor-target' => 'textarea',
326
+ # 'satis-editor-read-only-value' => options.delete(:read_only) || false,
327
+ # 'satis-editor-mode-value' => options.delete(:mode) || 'text/html',
328
+ # 'satis-editor-height-value' => options.delete(:height) || '200px',
329
+ # 'satis-editor-color-scheme-value' => options.delete(:color_scheme),
330
+ # 'satis-editor-color-scheme-dark-value' => options.delete(:color_scheme_dark) || 'lucario'
331
+ # }
332
+ #
333
+ # }, options[:input_html])), class: "editor #{
334
+ # if has_error?(method)
335
+ # 'is-invalid'
336
+ # end}", data: {
337
+ # controller: 'satis-editor'
338
+ # }),
339
+ # hint_text(options[:hint] || '⌘-F/⌃-f: search; ⌥-g: goto line, ⌃-space: autocomplete')
340
+ # ]
341
+ # end
342
+ end
343
+
302
344
  def boolean_input(method, options = {})
303
345
  form_group(method, options) do
304
346
  tag.div(class: 'custom-control custom-checkbox') do
305
347
  safe_join [
306
- check_box(method, merge_input_options({ class: 'custom-control-input' }, options[:input_html])),
307
- label(method, options[:label], class: 'custom-control-label')
308
- ]
348
+ check_box(method, merge_input_options({ class: 'custom-control-input' }, options[:input_html])),
349
+ label(method, options[:label], class: 'custom-control-label')
350
+ ]
309
351
  end
310
352
  end
311
353
  end
@@ -315,7 +357,7 @@ module Satis
315
357
  def switch_input(method, options = {}, &block)
316
358
  form_group(method, options) do
317
359
  render(Satis::Switch::Component.new(form: self, attribute: method, title: options[:label], **options,
318
- &block))
360
+ &block))
319
361
  end
320
362
  end
321
363
 
@@ -329,10 +371,10 @@ module Satis
329
371
  end
330
372
  form_group(method, options) do
331
373
  safe_join [
332
- (custom_label(method, options[:label], options) unless options[:label] == false),
333
- render(Satis::DateTimePicker::Component.new(form: self, attribute: method, title: options[:label], **options,
334
- &block))
335
- ]
374
+ (custom_label(method, options[:label], options) unless options[:label] == false),
375
+ render(Satis::DateTimePicker::Component.new(form: self, attribute: method, title: options[:label], **options,
376
+ &block))
377
+ ]
336
378
  end
337
379
  end
338
380
 
@@ -345,14 +387,15 @@ module Satis
345
387
 
346
388
  tag.div('data-controller' => 'phone-number') do
347
389
  safe_join [
348
- hidden_field(method,
349
- merge_input_options({ class: 'form-control', 'data-phone-number-target': 'hiddenInput' },
350
- options[:input_html])),
351
- @template.text_field_tag('dummy', @object.try(method), class: "form-control #{if has_error?(method)
352
- 'is-invalid'
353
- end}", 'data-phone-number-target': 'input',
354
- 'data-action': 'input->phone-number#change')
355
- ]
390
+ hidden_field(method,
391
+ merge_input_options({ class: 'form-control', 'data-phone-number-target': 'hiddenInput' },
392
+ options[:input_html])),
393
+ @template.text_field_tag('dummy', @object.try(method), class: "form-control #{
394
+ if has_error?(method)
395
+ 'is-invalid'
396
+ end}", 'data-phone-number-target': 'input',
397
+ 'data-action': 'input->phone-number#change')
398
+ ]
356
399
  end
357
400
  end
358
401
 
@@ -365,21 +408,21 @@ module Satis
365
408
  else raise 'Invalid input_type for collection_of, valid input_types are ":radio_buttons", ":check_boxes"'
366
409
  end
367
410
  options[:value_method] ||= :last
368
- options[:text_method] ||= options[:label_method] || :first
411
+ options[:text_method] ||= options[:label_method] || :first
369
412
  form_group(method, options) do
370
413
  safe_join [
371
- label(method, options[:label]),
372
- tag.br,
373
- (send(form_builder_method, method, options[:collection], options[:value_method],
374
- options[:text_method]) do |b|
375
- tag.div(class: "custom-control #{custom_class}") do
376
- safe_join [
377
- b.send(input_builder_method, options.fetch(:input_html, {}).merge(class: 'custom-control-input')),
378
- b.label(class: 'custom-control-label')
379
- ]
380
- end
381
- end)
382
- ]
414
+ label(method, options[:label]),
415
+ tag.br,
416
+ (send(form_builder_method, method, options[:collection], options[:value_method],
417
+ options[:text_method]) do |b|
418
+ tag.div(class: "custom-control #{custom_class}") do
419
+ safe_join [
420
+ b.send(input_builder_method, options.fetch(:input_html, {}).merge(class: 'custom-control-input')),
421
+ b.label(class: 'custom-control-label')
422
+ ]
423
+ end
424
+ end)
425
+ ]
383
426
  end
384
427
  end
385
428
 
@@ -403,7 +446,7 @@ module Satis
403
446
  else
404
447
  case method.to_s
405
448
  when /password/ then password_field(method, options)
406
- # FIXME: Possibly use time_zone_select with dropdown?
449
+ # FIXME: Possibly use time_zone_select with dropdown?
407
450
  when /time_zone/ then time_zone_select(method, options.delete(:priority_zones), options,
408
451
  { class: 'custom-select form-control' })
409
452
  # FIXME: Possibly use country_select with dropdown?
@@ -30,9 +30,9 @@ module Satis
30
30
  # A continue button
31
31
  def continue(value = nil, options = {}, &block)
32
32
  value ||= if !@object.persisted?
33
- t('.create_continue', default: 'Create and continue editing')
33
+ ct('create_continue')
34
34
  else
35
- t('.update_continue', default: 'Update and continue editing')
35
+ ct('update_continue')
36
36
  end
37
37
  button_button(value, options.reverse_merge(name: 'commit', value: 'continue', class: 'button secondary'),
38
38
  &block)
@@ -17,7 +17,7 @@ module Satis
17
17
  (custom_label(method, options[:label], options) unless options[:label] == false),
18
18
  tag.div(class: 'overflow-hidden relative inline-block -mb-2') do
19
19
  safe_join [
20
- tag.button((options[:multiple] ? t('choose_files') : t('choose_file')), type: 'button',
20
+ tag.button((options[:multiple] ? ct('choose_files') : ct('choose_file')), type: 'button',
21
21
  class: 'bg-white py-3 px-4 border border-gray-300 rounded-md shadow-sm text-sm leading-4 font-medium text-gray-700 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500'),
22
22
  file_field(method,
23
23
  options.merge(class: 'w-full cursor-pointer absolute block opacity-0 inset-0',