lookbook 2.3.4 → 2.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/components/lookbook/base_component.rb +1 -0
  4. data/app/components/lookbook/button/component.html.erb +1 -1
  5. data/app/components/lookbook/button/component.js +10 -3
  6. data/app/components/lookbook/display_options/editor/component.html.erb +1 -1
  7. data/app/components/lookbook/filter/component.html.erb +2 -2
  8. data/app/components/lookbook/params/editor/component.rb +1 -1
  9. data/app/components/lookbook/params/field/component.rb +1 -1
  10. data/app/components/lookbook/tab_panels/component.rb +1 -1
  11. data/app/controllers/lookbook/previews_controller.rb +11 -7
  12. data/app/views/layouts/lookbook/skeleton.html.erb +2 -0
  13. data/app/views/lookbook/inspector/panels/_notes.html.erb +1 -1
  14. data/app/views/lookbook/previews/preview.html.erb +5 -1
  15. data/config/app.yml +1 -0
  16. data/lib/lookbook/engine.rb +42 -18
  17. data/lib/lookbook/preview_controller_actions.rb +7 -2
  18. data/lib/lookbook/preview_parser.rb +2 -4
  19. data/lib/lookbook/stores/config_store.rb +4 -0
  20. data/lib/lookbook/support/errors/config_error.rb +1 -1
  21. data/lib/lookbook/support/errors/parser_error.rb +1 -1
  22. data/lib/lookbook/support/errors/preview_template_error.rb +1 -1
  23. data/lib/lookbook/support/errors/template_error.rb +1 -1
  24. data/lib/lookbook/support/store.rb +1 -1
  25. data/lib/lookbook/support/utils/utils.rb +1 -1
  26. data/lib/lookbook/tags/param_tag.rb +4 -1
  27. data/lib/lookbook/tags/yard_tag.rb +1 -1
  28. data/lib/lookbook/version.rb +1 -1
  29. data/public/lookbook-assets/css/lookbook.css +57 -37
  30. data/public/lookbook-assets/css/lookbook.css.map +1 -1
  31. data/public/lookbook-assets/css/themes/blue.css +0 -1
  32. data/public/lookbook-assets/css/themes/green.css +0 -1
  33. data/public/lookbook-assets/css/themes/indigo.css +0 -1
  34. data/public/lookbook-assets/css/themes/rose.css +0 -1
  35. data/public/lookbook-assets/css/themes/zinc.css +0 -1
  36. data/public/lookbook-assets/js/iframe.js +193 -193
  37. data/public/lookbook-assets/js/index.js +717 -711
  38. data/public/lookbook-assets/js/index.js.map +1 -1
  39. data/public/lookbook-assets/js/lookbook-core.js +0 -37
  40. data/public/lookbook-assets/js/lookbook.js +252 -289
  41. metadata +4 -385
  42. data/assets/icons/activity-square.svg +0 -1
  43. data/assets/icons/ampersand.svg +0 -1
  44. data/assets/icons/ampersands.svg +0 -1
  45. data/assets/icons/antenna.svg +0 -1
  46. data/assets/icons/app-window.svg +0 -1
  47. data/assets/icons/archive-x.svg +0 -1
  48. data/assets/icons/area-chart.svg +0 -1
  49. data/assets/icons/arrow-big-down-dash.svg +0 -1
  50. data/assets/icons/arrow-big-left-dash.svg +0 -1
  51. data/assets/icons/arrow-big-right-dash.svg +0 -1
  52. data/assets/icons/arrow-big-up-dash.svg +0 -1
  53. data/assets/icons/arrow-down-0-1.svg +0 -1
  54. data/assets/icons/arrow-down-1-0.svg +0 -1
  55. data/assets/icons/arrow-down-a-z.svg +0 -1
  56. data/assets/icons/arrow-down-from-line.svg +0 -1
  57. data/assets/icons/arrow-down-left-from-circle.svg +0 -1
  58. data/assets/icons/arrow-down-left-square.svg +0 -1
  59. data/assets/icons/arrow-down-narrow-wide.svg +0 -1
  60. data/assets/icons/arrow-down-right-from-circle.svg +0 -1
  61. data/assets/icons/arrow-down-right-square.svg +0 -1
  62. data/assets/icons/arrow-down-square.svg +0 -1
  63. data/assets/icons/arrow-down-to-dot.svg +0 -1
  64. data/assets/icons/arrow-down-to-line.svg +0 -1
  65. data/assets/icons/arrow-down-up.svg +0 -1
  66. data/assets/icons/arrow-down-wide-narrow.svg +0 -1
  67. data/assets/icons/arrow-down-z-a.svg +0 -1
  68. data/assets/icons/arrow-left-from-line.svg +0 -1
  69. data/assets/icons/arrow-left-square.svg +0 -1
  70. data/assets/icons/arrow-left-to-line.svg +0 -1
  71. data/assets/icons/arrow-right-from-line.svg +0 -1
  72. data/assets/icons/arrow-right-left.svg +0 -1
  73. data/assets/icons/arrow-right-square.svg +0 -1
  74. data/assets/icons/arrow-right-to-line.svg +0 -1
  75. data/assets/icons/arrow-up-0-1.svg +0 -1
  76. data/assets/icons/arrow-up-1-0.svg +0 -1
  77. data/assets/icons/arrow-up-a-z.svg +0 -1
  78. data/assets/icons/arrow-up-from-dot.svg +0 -1
  79. data/assets/icons/arrow-up-from-line.svg +0 -1
  80. data/assets/icons/arrow-up-left-from-circle.svg +0 -1
  81. data/assets/icons/arrow-up-left-square.svg +0 -1
  82. data/assets/icons/arrow-up-narrow-wide.svg +0 -1
  83. data/assets/icons/arrow-up-right-from-circle.svg +0 -1
  84. data/assets/icons/arrow-up-right-square.svg +0 -1
  85. data/assets/icons/arrow-up-square.svg +0 -1
  86. data/assets/icons/arrow-up-to-line.svg +0 -1
  87. data/assets/icons/arrow-up-wide-narrow.svg +0 -1
  88. data/assets/icons/arrow-up-z-a.svg +0 -1
  89. data/assets/icons/arrows-up-from-line.svg +0 -1
  90. data/assets/icons/atom.svg +0 -1
  91. data/assets/icons/badge-alert.svg +0 -1
  92. data/assets/icons/badge-cent.svg +0 -1
  93. data/assets/icons/badge-check.svg +0 -1
  94. data/assets/icons/badge-dollar-sign.svg +0 -1
  95. data/assets/icons/badge-euro.svg +0 -1
  96. data/assets/icons/badge-help.svg +0 -1
  97. data/assets/icons/badge-indian-rupee.svg +0 -1
  98. data/assets/icons/badge-info.svg +0 -1
  99. data/assets/icons/badge-japanese-yen.svg +0 -1
  100. data/assets/icons/badge-minus.svg +0 -1
  101. data/assets/icons/badge-percent.svg +0 -1
  102. data/assets/icons/badge-plus.svg +0 -1
  103. data/assets/icons/badge-pound-sterling.svg +0 -1
  104. data/assets/icons/badge-russian-ruble.svg +0 -1
  105. data/assets/icons/badge-swiss-franc.svg +0 -1
  106. data/assets/icons/badge-x.svg +0 -1
  107. data/assets/icons/badge.svg +0 -1
  108. data/assets/icons/ban.svg +0 -1
  109. data/assets/icons/bar-chart-big.svg +0 -1
  110. data/assets/icons/bar-chart-horizontal-big.svg +0 -1
  111. data/assets/icons/bell-dot.svg +0 -1
  112. data/assets/icons/biohazard.svg +0 -1
  113. data/assets/icons/blocks.svg +0 -1
  114. data/assets/icons/book-copy.svg +0 -1
  115. data/assets/icons/book-down.svg +0 -1
  116. data/assets/icons/book-key.svg +0 -1
  117. data/assets/icons/book-lock.svg +0 -1
  118. data/assets/icons/book-marked.svg +0 -1
  119. data/assets/icons/book-minus.svg +0 -1
  120. data/assets/icons/book-plus.svg +0 -1
  121. data/assets/icons/book-template.svg +0 -1
  122. data/assets/icons/book-up-2.svg +0 -1
  123. data/assets/icons/book-up.svg +0 -1
  124. data/assets/icons/book-x.svg +0 -1
  125. data/assets/icons/bookmark-check.svg +0 -1
  126. data/assets/icons/bookmark-x.svg +0 -1
  127. data/assets/icons/boom-box.svg +0 -1
  128. data/assets/icons/braces.svg +0 -1
  129. data/assets/icons/brackets.svg +0 -1
  130. data/assets/icons/brain-circuit.svg +0 -1
  131. data/assets/icons/brain-cog.svg +0 -1
  132. data/assets/icons/brain.svg +0 -1
  133. data/assets/icons/bring-to-front.svg +0 -1
  134. data/assets/icons/bug-off.svg +0 -1
  135. data/assets/icons/bug-play.svg +0 -1
  136. data/assets/icons/bus-front.svg +0 -1
  137. data/assets/icons/cable-car.svg +0 -1
  138. data/assets/icons/cable.svg +0 -1
  139. data/assets/icons/cake-slice.svg +0 -1
  140. data/assets/icons/candlestick-chart.svg +0 -1
  141. data/assets/icons/candy-cane.svg +0 -1
  142. data/assets/icons/car-front.svg +0 -1
  143. data/assets/icons/car-taxi-front.svg +0 -1
  144. data/assets/icons/case-lower.svg +0 -1
  145. data/assets/icons/case-sensitive.svg +0 -1
  146. data/assets/icons/case-upper.svg +0 -1
  147. data/assets/icons/cassette-tape.svg +0 -1
  148. data/assets/icons/castle.svg +0 -1
  149. data/assets/icons/chevron-down-circle.svg +0 -1
  150. data/assets/icons/chevron-down-square.svg +0 -1
  151. data/assets/icons/chevron-left-circle.svg +0 -1
  152. data/assets/icons/chevron-left-square.svg +0 -1
  153. data/assets/icons/chevron-right-circle.svg +0 -1
  154. data/assets/icons/chevron-right-square.svg +0 -1
  155. data/assets/icons/chevron-up-circle.svg +0 -1
  156. data/assets/icons/chevron-up-square.svg +0 -1
  157. data/assets/icons/church.svg +0 -1
  158. data/assets/icons/circle-dashed.svg +0 -1
  159. data/assets/icons/circle-dollar-sign.svg +0 -1
  160. data/assets/icons/circle-dot-dashed.svg +0 -1
  161. data/assets/icons/circle-equal.svg +0 -1
  162. data/assets/icons/circle-off.svg +0 -1
  163. data/assets/icons/circle-slash-2.svg +0 -1
  164. data/assets/icons/circle-slash.svg +0 -1
  165. data/assets/icons/circuit-board.svg +0 -1
  166. data/assets/icons/clipboard-paste.svg +0 -1
  167. data/assets/icons/club.svg +0 -1
  168. data/assets/icons/combine.svg +0 -1
  169. data/assets/icons/computer.svg +0 -1
  170. data/assets/icons/contact-2.svg +0 -1
  171. data/assets/icons/container.svg +0 -1
  172. data/assets/icons/copy-check.svg +0 -1
  173. data/assets/icons/copy-minus.svg +0 -1
  174. data/assets/icons/copy-plus.svg +0 -1
  175. data/assets/icons/copy-slash.svg +0 -1
  176. data/assets/icons/copy-x.svg +0 -1
  177. data/assets/icons/database-zap.svg +0 -1
  178. data/assets/icons/dessert.svg +0 -1
  179. data/assets/icons/disc-2.svg +0 -1
  180. data/assets/icons/disc-3.svg +0 -1
  181. data/assets/icons/donut.svg +0 -1
  182. data/assets/icons/door-closed.svg +0 -1
  183. data/assets/icons/door-open.svg +0 -1
  184. data/assets/icons/dot.svg +0 -1
  185. data/assets/icons/drama.svg +0 -1
  186. data/assets/icons/ferris-wheel.svg +0 -1
  187. data/assets/icons/file-code-2.svg +0 -1
  188. data/assets/icons/file-stack.svg +0 -1
  189. data/assets/icons/fish-symbol.svg +0 -1
  190. data/assets/icons/fold-horizontal.svg +0 -1
  191. data/assets/icons/fold-vertical.svg +0 -1
  192. data/assets/icons/folder-dot.svg +0 -1
  193. data/assets/icons/folder-git-2.svg +0 -1
  194. data/assets/icons/folder-git.svg +0 -1
  195. data/assets/icons/folder-kanban.svg +0 -1
  196. data/assets/icons/folder-open-dot.svg +0 -1
  197. data/assets/icons/folder-root.svg +0 -1
  198. data/assets/icons/folder-sync.svg +0 -1
  199. data/assets/icons/gallery-horizontal-end.svg +0 -1
  200. data/assets/icons/gallery-horizontal.svg +0 -1
  201. data/assets/icons/gallery-thumbnails.svg +0 -1
  202. data/assets/icons/gallery-vertical-end.svg +0 -1
  203. data/assets/icons/gallery-vertical.svg +0 -1
  204. data/assets/icons/gantt-chart-square.svg +0 -1
  205. data/assets/icons/gantt-chart.svg +0 -1
  206. data/assets/icons/gauge-circle.svg +0 -1
  207. data/assets/icons/goal.svg +0 -1
  208. data/assets/icons/grid-2x2.svg +0 -1
  209. data/assets/icons/grid-3x3.svg +0 -1
  210. data/assets/icons/group.svg +0 -1
  211. data/assets/icons/hard-drive-download.svg +0 -1
  212. data/assets/icons/hard-drive-upload.svg +0 -1
  213. data/assets/icons/hdmi-port.svg +0 -1
  214. data/assets/icons/hotel.svg +0 -1
  215. data/assets/icons/iteration-ccw.svg +0 -1
  216. data/assets/icons/iteration-cw.svg +0 -1
  217. data/assets/icons/kanban-square-dashed.svg +0 -1
  218. data/assets/icons/kanban-square.svg +0 -1
  219. data/assets/icons/kanban.svg +0 -1
  220. data/assets/icons/key-round.svg +0 -1
  221. data/assets/icons/key-square.svg +0 -1
  222. data/assets/icons/layout-panel-left.svg +0 -1
  223. data/assets/icons/layout-panel-top.svg +0 -1
  224. data/assets/icons/leafy-green.svg +0 -1
  225. data/assets/icons/ligature.svg +0 -1
  226. data/assets/icons/list-filter.svg +0 -1
  227. data/assets/icons/list-restart.svg +0 -1
  228. data/assets/icons/list-todo.svg +0 -1
  229. data/assets/icons/list-tree.svg +0 -1
  230. data/assets/icons/lollipop.svg +0 -1
  231. data/assets/icons/m-square.svg +0 -1
  232. data/assets/icons/mailbox.svg +0 -1
  233. data/assets/icons/memory-stick.svg +0 -1
  234. data/assets/icons/menu-square.svg +0 -1
  235. data/assets/icons/merge.svg +0 -1
  236. data/assets/icons/message-square-dashed.svg +0 -1
  237. data/assets/icons/message-square-plus.svg +0 -1
  238. data/assets/icons/messages-square.svg +0 -1
  239. data/assets/icons/monitor-check.svg +0 -1
  240. data/assets/icons/monitor-dot.svg +0 -1
  241. data/assets/icons/monitor-down.svg +0 -1
  242. data/assets/icons/monitor-pause.svg +0 -1
  243. data/assets/icons/monitor-play.svg +0 -1
  244. data/assets/icons/monitor-stop.svg +0 -1
  245. data/assets/icons/monitor-up.svg +0 -1
  246. data/assets/icons/monitor-x.svg +0 -1
  247. data/assets/icons/moon-star.svg +0 -1
  248. data/assets/icons/mouse-pointer-square-dashed.svg +0 -1
  249. data/assets/icons/mouse-pointer-square.svg +0 -1
  250. data/assets/icons/move-down-left.svg +0 -1
  251. data/assets/icons/move-down-right.svg +0 -1
  252. data/assets/icons/move-down.svg +0 -1
  253. data/assets/icons/move-left.svg +0 -1
  254. data/assets/icons/move-right.svg +0 -1
  255. data/assets/icons/move-up-left.svg +0 -1
  256. data/assets/icons/move-up-right.svg +0 -1
  257. data/assets/icons/move-up.svg +0 -1
  258. data/assets/icons/orbit.svg +0 -1
  259. data/assets/icons/panel-bottom-close.svg +0 -1
  260. data/assets/icons/panel-bottom-inactive.svg +0 -1
  261. data/assets/icons/panel-bottom-open.svg +0 -1
  262. data/assets/icons/panel-bottom.svg +0 -1
  263. data/assets/icons/panel-left-close.svg +0 -1
  264. data/assets/icons/panel-left-inactive.svg +0 -1
  265. data/assets/icons/panel-left-open.svg +0 -1
  266. data/assets/icons/panel-left.svg +0 -1
  267. data/assets/icons/panel-right-close.svg +0 -1
  268. data/assets/icons/panel-right-inactive.svg +0 -1
  269. data/assets/icons/panel-right-open.svg +0 -1
  270. data/assets/icons/panel-right.svg +0 -1
  271. data/assets/icons/panel-top-close.svg +0 -1
  272. data/assets/icons/panel-top-inactive.svg +0 -1
  273. data/assets/icons/panel-top-open.svg +0 -1
  274. data/assets/icons/panel-top.svg +0 -1
  275. data/assets/icons/parentheses.svg +0 -1
  276. data/assets/icons/parking-circle-off.svg +0 -1
  277. data/assets/icons/parking-circle.svg +0 -1
  278. data/assets/icons/parking-meter.svg +0 -1
  279. data/assets/icons/parking-square-off.svg +0 -1
  280. data/assets/icons/parking-square.svg +0 -1
  281. data/assets/icons/paw-print.svg +0 -1
  282. data/assets/icons/pc-case.svg +0 -1
  283. data/assets/icons/pen-line.svg +0 -1
  284. data/assets/icons/pen-square.svg +0 -1
  285. data/assets/icons/pen.svg +0 -1
  286. data/assets/icons/pencil-line.svg +0 -1
  287. data/assets/icons/pencil-ruler.svg +0 -1
  288. data/assets/icons/percent-circle.svg +0 -1
  289. data/assets/icons/percent-diamond.svg +0 -1
  290. data/assets/icons/percent-square.svg +0 -1
  291. data/assets/icons/pi-square.svg +0 -1
  292. data/assets/icons/pi.svg +0 -1
  293. data/assets/icons/pilcrow-square.svg +0 -1
  294. data/assets/icons/plane-landing.svg +0 -1
  295. data/assets/icons/plane-takeoff.svg +0 -1
  296. data/assets/icons/play-square.svg +0 -1
  297. data/assets/icons/plug-zap-2.svg +0 -1
  298. data/assets/icons/pocket-knife.svg +0 -1
  299. data/assets/icons/popcorn.svg +0 -1
  300. data/assets/icons/popsicle.svg +0 -1
  301. data/assets/icons/presentation.svg +0 -1
  302. data/assets/icons/projector.svg +0 -1
  303. data/assets/icons/rabbit.svg +0 -1
  304. data/assets/icons/radar.svg +0 -1
  305. data/assets/icons/radiation.svg +0 -1
  306. data/assets/icons/radio-tower.svg +0 -1
  307. data/assets/icons/rail-symbol.svg +0 -1
  308. data/assets/icons/rainbow.svg +0 -1
  309. data/assets/icons/rat.svg +0 -1
  310. data/assets/icons/ratio.svg +0 -1
  311. data/assets/icons/receipt.svg +0 -1
  312. data/assets/icons/redo-dot.svg +0 -1
  313. data/assets/icons/refresh-ccw-dot.svg +0 -1
  314. data/assets/icons/refresh-cw-off.svg +0 -1
  315. data/assets/icons/repeat-2.svg +0 -1
  316. data/assets/icons/replace-all.svg +0 -1
  317. data/assets/icons/replace.svg +0 -1
  318. data/assets/icons/roller-coaster.svg +0 -1
  319. data/assets/icons/rows.svg +0 -1
  320. data/assets/icons/satellite-dish.svg +0 -1
  321. data/assets/icons/satellite.svg +0 -1
  322. data/assets/icons/save-all.svg +0 -1
  323. data/assets/icons/scatter-chart.svg +0 -1
  324. data/assets/icons/school-2.svg +0 -1
  325. data/assets/icons/school.svg +0 -1
  326. data/assets/icons/scissors-line-dashed.svg +0 -1
  327. data/assets/icons/scissors-square-dashed-bottom.svg +0 -1
  328. data/assets/icons/scissors-square.svg +0 -1
  329. data/assets/icons/scroll-text.svg +0 -1
  330. data/assets/icons/search-check.svg +0 -1
  331. data/assets/icons/search-code.svg +0 -1
  332. data/assets/icons/search-slash.svg +0 -1
  333. data/assets/icons/search-x.svg +0 -1
  334. data/assets/icons/send-horizontal.svg +0 -1
  335. data/assets/icons/send-to-back.svg +0 -1
  336. data/assets/icons/shapes.svg +0 -1
  337. data/assets/icons/shell.svg +0 -1
  338. data/assets/icons/shield-ban.svg +0 -1
  339. data/assets/icons/shield-ellipsis.svg +0 -1
  340. data/assets/icons/shield-half.svg +0 -1
  341. data/assets/icons/shield-minus.svg +0 -1
  342. data/assets/icons/shield-plus.svg +0 -1
  343. data/assets/icons/shield-question.svg +0 -1
  344. data/assets/icons/shield-x.svg +0 -1
  345. data/assets/icons/ship-wheel.svg +0 -1
  346. data/assets/icons/shopping-basket.svg +0 -1
  347. data/assets/icons/sigma-square.svg +0 -1
  348. data/assets/icons/snail.svg +0 -1
  349. data/assets/icons/space.svg +0 -1
  350. data/assets/icons/spade.svg +0 -1
  351. data/assets/icons/sparkle.svg +0 -1
  352. data/assets/icons/sparkles.svg +0 -1
  353. data/assets/icons/speech.svg +0 -1
  354. data/assets/icons/spell-check-2.svg +0 -1
  355. data/assets/icons/spell-check.svg +0 -1
  356. data/assets/icons/split.svg +0 -1
  357. data/assets/icons/spray-can.svg +0 -1
  358. data/assets/icons/square-asterisk.svg +0 -1
  359. data/assets/icons/square-code.svg +0 -1
  360. data/assets/icons/square-dashed-bottom-code.svg +0 -1
  361. data/assets/icons/square-dashed-bottom.svg +0 -1
  362. data/assets/icons/square-dot.svg +0 -1
  363. data/assets/icons/square-equal.svg +0 -1
  364. data/assets/icons/square-slash.svg +0 -1
  365. data/assets/icons/square-stack.svg +0 -1
  366. data/assets/icons/squirrel.svg +0 -1
  367. data/assets/icons/step-back.svg +0 -1
  368. data/assets/icons/step-forward.svg +0 -1
  369. data/assets/icons/store.svg +0 -1
  370. data/assets/icons/table-properties.svg +0 -1
  371. data/assets/icons/tablet-smartphone.svg +0 -1
  372. data/assets/icons/tally-1.svg +0 -1
  373. data/assets/icons/tally-2.svg +0 -1
  374. data/assets/icons/tally-3.svg +0 -1
  375. data/assets/icons/tally-4.svg +0 -1
  376. data/assets/icons/tally-5.svg +0 -1
  377. data/assets/icons/test-tube-2.svg +0 -1
  378. data/assets/icons/test-tube.svg +0 -1
  379. data/assets/icons/test-tubes.svg +0 -1
  380. data/assets/icons/text-quote.svg +0 -1
  381. data/assets/icons/text-select.svg +0 -1
  382. data/assets/icons/text.svg +0 -1
  383. data/assets/icons/theater.svg +0 -1
  384. data/assets/icons/touchpad-off.svg +0 -1
  385. data/assets/icons/touchpad.svg +0 -1
  386. data/assets/icons/tractor.svg +0 -1
  387. data/assets/icons/traffic-cone.svg +0 -1
  388. data/assets/icons/train-front-tunnel.svg +0 -1
  389. data/assets/icons/train-front.svg +0 -1
  390. data/assets/icons/train-track.svg +0 -1
  391. data/assets/icons/tram-front.svg +0 -1
  392. data/assets/icons/triangle-right.svg +0 -1
  393. data/assets/icons/turtle.svg +0 -1
  394. data/assets/icons/undo-dot.svg +0 -1
  395. data/assets/icons/unfold-horizontal.svg +0 -1
  396. data/assets/icons/unfold-vertical.svg +0 -1
  397. data/assets/icons/ungroup.svg +0 -1
  398. data/assets/icons/unplug.svg +0 -1
  399. data/assets/icons/user-2.svg +0 -1
  400. data/assets/icons/user-check-2.svg +0 -1
  401. data/assets/icons/user-circle-2.svg +0 -1
  402. data/assets/icons/user-circle.svg +0 -1
  403. data/assets/icons/user-cog-2.svg +0 -1
  404. data/assets/icons/user-minus-2.svg +0 -1
  405. data/assets/icons/user-plus-2.svg +0 -1
  406. data/assets/icons/user-square-2.svg +0 -1
  407. data/assets/icons/user-square.svg +0 -1
  408. data/assets/icons/user-x-2.svg +0 -1
  409. data/assets/icons/users-2.svg +0 -1
  410. data/assets/icons/variable.svg +0 -1
  411. data/assets/icons/videotape.svg +0 -1
  412. data/assets/icons/wallet-2.svg +0 -1
  413. data/assets/icons/wallet-cards.svg +0 -1
  414. data/assets/icons/wallpaper.svg +0 -1
  415. data/assets/icons/warehouse.svg +0 -1
  416. data/assets/icons/whole-word.svg +0 -1
  417. data/assets/icons/workflow.svg +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 699b3598051a4b9f584d5c0bb703142b16988603b8cc2c99dcd0d2dee5191aa9
4
- data.tar.gz: f6893f9ffb913df5b41fe54db42f8491d2169c8ba2b4de66ba8c13eac5cce8a6
3
+ metadata.gz: 634043098ae2ae2c1e529d8ab5359e8b4894cc56679e47b71cc48da249c521ca
4
+ data.tar.gz: cd679fad55997bf1fc1c0163d0b32b2511f1ce3320190976c878305913fe80b9
5
5
  SHA512:
6
- metadata.gz: bcca11383c011dd7044d2291f8d39f806624e73281c5df0f60ea5face46e2171222cd9d7d6222fe4a9da5275452ac5f8a8ff95ea3edc0af064232e64e96eb378
7
- data.tar.gz: 732624f41ad1a0cbd895a27348cc0cf10373fb823c5f0f36618c9cb1c464ce03baa962754c9c63078c56c681a0aca9be084ffcd5fb7f7bca6897788d50c2b22b
6
+ metadata.gz: f0d330de3e7379c0f549b713dc61d762fc88af7a5015f57ab3fc4e71b4b74fe8ca66d506177e84d661048196ed07d12abdef2d5e087e9b54468d427356220119
7
+ data.tar.gz: 37d98a9697d647294fcb4b2f8c718452b57d9a1b4d6941a32a3d8576a42e788ef673b328455cf22a8cbc4fa8afd529a6354034944c1536a9773629b61999cbf1
data/README.md CHANGED
@@ -49,9 +49,9 @@ To preview changes locally you can run a development version of the docs site:
49
49
 
50
50
  ### Testing
51
51
 
52
- Lookbook uses [RSpec](https://relishapp.com/rspec) for testing.
52
+ Lookbook uses [RSpec](https://relishapp.com/rspec). [Appraisal](https://github.com/thoughtbot/appraisal) is used to run tests against different Ruby and Rails versions.
53
53
 
54
- Tests can be run using the `rake spec` or `bundle exec rspec` commands.
54
+ Tests can be run using the `bundle exec appraisal rspec` command.
55
55
 
56
56
  The dummy app that the tests are being run against can be viewed by running the `bin/dummy` command and then browsing to http://localhost:9292/lookbook
57
57
 
@@ -3,6 +3,7 @@ module Lookbook
3
3
  send(:include, Lookbook::Engine.routes.url_helpers) # YARD parsing workaround: https://github.com/lsegal/yard/issues/546
4
4
  include Lookbook::UiElementsHelper
5
5
  include Lookbook::ClassNamesHelper if Engine.runtime_context.rails_older_than?("6.1.0")
6
+ include ERB::Util # for json_escape
6
7
 
7
8
  def initialize(alpine_data: [], **html_attrs)
8
9
  @alpine_data ||= alpine_data
@@ -2,7 +2,7 @@
2
2
  id: id,
3
3
  icon: icon,
4
4
  **button_attrs,
5
- "x-on:keydown.esc.stop": "hideDropdown",
5
+ "x-on:keydown.esc.stop.document": "hideDropdown",
6
6
  "x-on:navigation:complete.window": "updateDropdown") do %>
7
7
  <%= content %>
8
8
  <% end %>
@@ -6,7 +6,12 @@ export default function buttonComponent() {
6
6
  let dropdown = null;
7
7
 
8
8
  return {
9
+ updateAfterNavigate: true,
10
+
9
11
  init() {
12
+ this.updateAfterNavigate =
13
+ this.$el.dataset.updateAfterNavigate !== "false";
14
+
10
15
  if (this.$refs.tooltip) {
11
16
  tooltip = initTooltip(this, {
12
17
  target: this.$refs.icon,
@@ -51,9 +56,11 @@ export default function buttonComponent() {
51
56
  updateDropdown() {
52
57
  if (dropdown) {
53
58
  dropdown.hide();
54
- this.$nextTick(() => {
55
- dropdown.setContent(this.dropdownContent);
56
- });
59
+ if (this.updateAfterNavigate) {
60
+ this.$nextTick(() => {
61
+ dropdown.setContent(this.dropdownContent);
62
+ });
63
+ }
57
64
  }
58
65
  },
59
66
 
@@ -1,6 +1,6 @@
1
1
  <%= render_component_tag class: "px-2" do %>
2
2
  <% if fields.many? %>
3
- <%= lookbook_render :button, id: "display-options-dropdown-button", icon: :settings, tooltip: "Display options" do |button| %>
3
+ <%= lookbook_render :button, id: "display-options-dropdown-button", icon: :settings, tooltip: "Display options", data: {update_after_navigate: false} do |button| %>
4
4
  <% button.with_dropdown do %>
5
5
  <div class="p-3 space-y-3">
6
6
  <%= safe_join(fields) %>
@@ -11,7 +11,7 @@
11
11
  x-on:keydown.f.window="if (!($event.shiftKey || $event.metaKey || $event.ctrlKey || $event.altKey)) { focus(); $event.preventDefault(); $event.stopPropagation(); }"
12
12
  x-on:keydown.stop>
13
13
  <button class="text-lookbook-icon-button-stroke hover:text-lookbook-icon-button-stroke-hover focus:ring-0 focus:outline-none absolute top-1/2 right-3 -translate-y-1/2" x-on:click="clear" x-bind:class="{hidden: !active}">
14
- <%= icon :x, size: 3 %>
14
+ <%= icon :x, size: 4 %>
15
15
  </button>
16
16
  </div>
17
- <% end %>
17
+ <% end %>
@@ -9,7 +9,7 @@ module Lookbook
9
9
  def initialize(**html_attrs)
10
10
  @field_count = -1
11
11
  @@input_styles = {}
12
- super(**html_attrs)
12
+ super
13
13
  end
14
14
 
15
15
  def before_render
@@ -14,7 +14,7 @@ module Lookbook
14
14
  styles, html = StylesExtractor.call(render_input)
15
15
  Editor::Component.add_styles(param.input, styles)
16
16
 
17
- escaped_value = json_escape(param.value.to_s).gsub("\n", '\n')
17
+ escaped_value = html_escape(json_escape(param.value.to_s).gsub("\n", '\n'))
18
18
  wrapper_attrs = {
19
19
  data: {"param-input": param.input},
20
20
  "x-data": "paramsInputComponent({name: \"#{param.name}\", value: \"#{escaped_value}\"})"
@@ -8,7 +8,7 @@ module Lookbook
8
8
 
9
9
  def initialize(**html_attrs)
10
10
  @panel_counter = 0
11
- super(**html_attrs)
11
+ super
12
12
  end
13
13
 
14
14
  protected
@@ -39,13 +39,17 @@ module Lookbook
39
39
  def show
40
40
  raise_not_found("Preview not found") unless @target
41
41
 
42
- @preview_html = preview_controller.process(
43
- :render_in_layout_to_string,
44
- "lookbook/previews/group",
45
- inspector_data,
46
- layout: @preview.layout,
47
- append_html: (iframe_content_scripts if embedded?)
48
- )
42
+ @preview_html = if Lookbook.config.preview_single_pass_rendering && !inspector_data.scenarios.many?
43
+ inspector_data.scenarios.first.output + (iframe_content_scripts if embedded?)
44
+ else
45
+ preview_controller.process(
46
+ :render_in_layout_to_string,
47
+ "lookbook/previews/group",
48
+ inspector_data,
49
+ layout: @preview.layout,
50
+ append_html: (iframe_content_scripts if embedded?)
51
+ )
52
+ end
49
53
  end
50
54
 
51
55
  private
@@ -5,6 +5,8 @@
5
5
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
7
7
 
8
+ <%= csrf_meta_tags %>
9
+
8
10
  <link href="<%= lookbook_asset_path("/css/lookbook.css") %>" rel="stylesheet">
9
11
  <link href="<%= lookbook_asset_path("/css/themes/#{@config.ui_theme}.css") %>" rel="stylesheet">
10
12
 
@@ -11,7 +11,7 @@
11
11
  <% end %>
12
12
  </div>
13
13
  <% else %>
14
- <div class="p-4 w-full h-full bg-lookbook-prose-bg">
14
+ <div class="p-4 w-full min-h-full h-max bg-lookbook-prose-bg">
15
15
  <%= lookbook_render :prose do %>
16
16
  <%== items.any? ? items.first.notes : "<em class='opacity-50'>No notes provided.</em>" %>
17
17
  <% end %>
@@ -1,6 +1,10 @@
1
1
  <% if @render_args[:component] %>
2
2
  <% if defined?(Phlex::SGML) && @render_args[:component].is_a?(Phlex::SGML) %>
3
- <%= raw(@render_args[:component].call(view_context: self, &@render_args[:block])) %>
3
+ <% if defined?(Phlex::VERSION) && Gem::Version.new(Phlex::VERSION) >= Gem::Version.new("2.0.0") %>
4
+ <%= raw(@render_args[:component].call(context: { rails_view_context: self }, &@render_args[:block])) %>
5
+ <% else %>
6
+ <%= raw(@render_args[:component].call(view_context: self, &@render_args[:block])) %>
7
+ <% end %>
4
8
  <% else %>
5
9
  <%= render(@render_args[:component], @render_args[:args], &@render_args[:block]) %>
6
10
  <% end %>
data/config/app.yml CHANGED
@@ -25,6 +25,7 @@ shared:
25
25
  preview_type_default: view_component
26
26
  preview_sort_scenarios: false
27
27
  preview_disable_error_handling: false
28
+ preview_single_pass_rendering: false
28
29
 
29
30
  page_collection_label: "Pages"
30
31
  page_nav_filter: false
@@ -14,11 +14,11 @@ module Lookbook
14
14
  )
15
15
  end
16
16
 
17
- initializer "lookbook.set_autoload_paths" do
17
+ initializer "lookbook.set_autoload_paths", before: :set_autoload_paths do |app|
18
18
  if opts.autoload_previews && opts.preview_paths.any?
19
- paths_to_add = opts.preview_paths - ActiveSupport::Dependencies.autoload_paths
19
+ paths_to_add = opts.preview_paths - app.config.autoload_paths
20
20
  filtered_paths = paths_to_add.filter { |p| !Engine.component_paths.include?(p) }
21
- ActiveSupport::Dependencies.autoload_paths.concat(filtered_paths) if filtered_paths.any?
21
+ app.config.autoload_paths.concat(filtered_paths) if filtered_paths.any?
22
22
  end
23
23
  end
24
24
 
@@ -37,26 +37,50 @@ module Lookbook
37
37
  if opts.using_view_component
38
38
  vc_config = Engine.host_config.view_component
39
39
 
40
- opts.preview_paths += vc_config.preview_paths
40
+ if vc_config.key?(:previews)
41
+ # New config style (ViewComponent >= 4.0)
42
+ opts.preview_paths += vc_config.previews.paths
41
43
 
42
- # sync preview controller and layout setting between Lookbook and ViewComponent
43
- if opts.preview_controller == "Lookbook::PreviewController" ||
44
- vc_config.preview_controller != ViewComponent::Config.defaults.preview_controller
45
- opts.preview_controller = vc_config.preview_controller
46
- else
47
- vc_config.preview_controller = opts.preview_controller
48
- end
44
+ if opts.preview_controller == "Lookbook::PreviewController" ||
45
+ vc_config.previews.controller != "ViewComponentsController"
46
+ opts.preview_controller = vc_config.previews.controller
47
+ else
48
+ vc_config.previews.controller = opts.preview_controller
49
+ end
49
50
 
50
- if opts.preview_layout.nil? || vc_config.default_preview_layout.present?
51
- opts.preview_layout = vc_config.default_preview_layout
51
+ if opts.preview_layout.nil? || vc_config.previews.default_layout.present?
52
+ opts.preview_layout = vc_config.previews.default_layout
53
+ else
54
+ vc_config.previews.default_layout = opts.preview_layout
55
+ end
56
+
57
+ vc_config.previews.enabled = true
58
+
59
+ if vc_config.generate.path.present?
60
+ opts.component_paths << vc_config.generate.path
61
+ end
52
62
  else
53
- vc_config.default_preview_layout = opts.preview_layout
54
- end
63
+ # Legacy config style (ViewComponent < 4.0)
64
+ opts.preview_paths += vc_config.preview_paths
65
+
66
+ if opts.preview_controller == "Lookbook::PreviewController" ||
67
+ vc_config.preview_controller != ViewComponent::Config.defaults.preview_controller
68
+ opts.preview_controller = vc_config.preview_controller
69
+ else
70
+ vc_config.preview_controller = opts.preview_controller
71
+ end
55
72
 
56
- vc_config.show_previews = true
73
+ if opts.preview_layout.nil? || vc_config.default_preview_layout.present?
74
+ opts.preview_layout = vc_config.default_preview_layout
75
+ else
76
+ vc_config.default_preview_layout = opts.preview_layout
77
+ end
57
78
 
58
- if vc_config.view_component_path.present?
59
- opts.component_paths << vc_config.view_component_path
79
+ vc_config.show_previews = true
80
+
81
+ if vc_config.view_component_path.present?
82
+ opts.component_paths << vc_config.view_component_path
83
+ end
60
84
  end
61
85
 
62
86
  ViewComponent::Preview.extend(Lookbook::PreviewAfterRender)
@@ -16,8 +16,13 @@ module Lookbook
16
16
  @render_args = @preview.render_args(@scenario_name, params: params.permit!)
17
17
  template = @render_args[:template]
18
18
  locals = @render_args[:locals]
19
- opts = {}
20
- opts[:layout] = nil
19
+
20
+ opts = if Lookbook.config.preview_single_pass_rendering && !scenario.group.present?
21
+ determine_layout(preview.layout)
22
+ else
23
+ {layout: nil}
24
+ end
25
+
21
26
  opts[:assigns] = @render_args[:assigns] || {}
22
27
  opts[:locals] = locals if locals.present?
23
28
 
@@ -6,15 +6,14 @@ module Lookbook
6
6
  @paths = paths
7
7
  @after_parse_callbacks = []
8
8
  @after_parse_once_callbacks = []
9
- @parsing = false
9
+ @parsing = Mutex.new
10
10
 
11
11
  define_tags(tags)
12
12
  YARD::Parser::SourceParser.after_parse_list { run_callbacks }
13
13
  end
14
14
 
15
15
  def parse(files = nil, &block)
16
- unless @parsing
17
- @parsing = true
16
+ @parsing.synchronize do
18
17
  @after_parse_once_callbacks << block if block
19
18
  files_list = files ? files.select { |file| file.to_s.end_with?(".rb") } : paths
20
19
 
@@ -43,7 +42,6 @@ module Lookbook
43
42
  def run_callbacks
44
43
  callbacks.each { |cb| cb.call(YARD::Registry) }
45
44
  @after_parse_once_callbacks = []
46
- @parsing = false
47
45
  end
48
46
 
49
47
  def define_tags(tags = nil)
@@ -63,6 +63,10 @@ module Lookbook
63
63
  store[:preview_disable_error_handling] = value
64
64
  end
65
65
 
66
+ def preview_single_pass_rendering=(value)
67
+ store[:preview_single_pass_rendering] = value
68
+ end
69
+
66
70
  def ui_theme=(name)
67
71
  name = name.to_s
68
72
  if Theme.valid_theme?(name)
@@ -1,7 +1,7 @@
1
1
  module Lookbook
2
2
  class ConfigError < Error
3
3
  def initialize(msg = nil, scope: "config", **kwargs)
4
- super(msg, scope: scope, **kwargs)
4
+ super
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module Lookbook
2
2
  class ParserError < Error
3
3
  def initialize(msg = nil, scope: "parser", **kwargs)
4
- super(msg, scope: scope, **kwargs)
4
+ super
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module Lookbook
2
2
  class PreviewTemplateError < Error
3
3
  def initialize(msg = nil, scope: "preview", **kwargs)
4
- super(msg, scope: scope, **kwargs)
4
+ super
5
5
  end
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  module Lookbook
2
2
  class TemplateError < Error
3
3
  def initialize(msg = nil, scope: "template", **kwargs)
4
- super(msg, scope: scope, **kwargs)
4
+ super
5
5
  end
6
6
  end
7
7
  end
@@ -27,7 +27,7 @@ module Lookbook
27
27
  if name.to_s.end_with?("=")
28
28
  args[0] = normalize_value(args[0])
29
29
  end
30
- super(name, *args)
30
+ super
31
31
  end
32
32
 
33
33
  def respond_to_missing?(name, include_private)
@@ -12,7 +12,7 @@ module Lookbook
12
12
  end
13
13
 
14
14
  def name(str)
15
- str.to_s.parameterize.tr("-", "_")
15
+ str.to_s.dup.force_encoding("UTF-8").parameterize.tr("-", "_")
16
16
  end
17
17
 
18
18
  def symbolize_name(str)
@@ -28,7 +28,10 @@ module Lookbook
28
28
  def value_default
29
29
  default_value_parts = object.parameters.find { |parts| parts[0].chomp(":") == name }
30
30
  if default_value_parts
31
- host_class_instance.instance_eval(default_value_parts[1])
31
+ # fix issue with YARD argument parser not splitting args correctly (leaving a trailing comma or bracket)
32
+ # when one or more of the argument values is a negative number.
33
+ cleaned_value = default_value_parts[1].start_with?("-") ? default_value_parts[1].sub(/[,\)]$/, "") : default_value_parts[1]
34
+ host_class_instance.instance_eval(cleaned_value)
32
35
  else
33
36
  raise ParserError.new "Unknown method parameter '#{name}'"
34
37
  end
@@ -5,7 +5,7 @@ module Lookbook
5
5
  tag_name = self.class.name.demodulize.underscore.chomp("_tag")
6
6
  super(tag_name, args.first, nil, @name)
7
7
  else
8
- super(*args)
8
+ super
9
9
  end
10
10
  end
11
11
 
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "2.3.4"
2
+ VERSION = "2.3.12"
3
3
  end