lookbook 2.0.5 → 2.3.2

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 (431) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -10
  3. data/app/components/lookbook/base_component.rb +1 -1
  4. data/app/components/lookbook/embed/inspector/component.html.erb +19 -4
  5. data/app/components/lookbook/embed/inspector/component.rb +1 -1
  6. data/app/components/lookbook/header/component.html.erb +5 -4
  7. data/app/components/lookbook/icon/component.html.erb +4 -2
  8. data/app/components/lookbook/icon/component.rb +0 -16
  9. data/app/components/lookbook/nav/entity/component.html.erb +3 -0
  10. data/app/components/lookbook/nav/item/component.js +8 -10
  11. data/app/components/lookbook/tag_component.rb +8 -1
  12. data/app/controllers/lookbook/application_controller.rb +11 -1
  13. data/app/controllers/lookbook/embeds_controller.rb +4 -4
  14. data/app/controllers/lookbook/inspector_controller.rb +1 -1
  15. data/app/controllers/lookbook/page_controller.rb +1 -1
  16. data/app/controllers/lookbook/pages_controller.rb +1 -1
  17. data/app/controllers/lookbook/previews_controller.rb +2 -2
  18. data/app/helpers/lookbook/application_helper.rb +10 -0
  19. data/app/views/layouts/lookbook/application.html.erb +102 -82
  20. data/app/views/layouts/lookbook/embed.html.erb +30 -12
  21. data/app/views/lookbook/index.html.erb +21 -11
  22. data/app/views/lookbook/inspector/show.html.erb +3 -3
  23. data/app/views/lookbook/previews/group.html.erb +1 -0
  24. data/assets/css/lookbook.css +2 -2
  25. data/assets/icons/activity-square.svg +1 -0
  26. data/assets/icons/ampersand.svg +1 -0
  27. data/assets/icons/ampersands.svg +1 -0
  28. data/assets/icons/antenna.svg +1 -0
  29. data/assets/icons/app-window.svg +1 -0
  30. data/assets/icons/archive-x.svg +1 -0
  31. data/assets/icons/area-chart.svg +1 -0
  32. data/assets/icons/arrow-big-down-dash.svg +1 -0
  33. data/assets/icons/arrow-big-left-dash.svg +1 -0
  34. data/assets/icons/arrow-big-right-dash.svg +1 -0
  35. data/assets/icons/arrow-big-up-dash.svg +1 -0
  36. data/assets/icons/arrow-down-0-1.svg +1 -0
  37. data/assets/icons/arrow-down-1-0.svg +1 -0
  38. data/assets/icons/arrow-down-a-z.svg +1 -0
  39. data/assets/icons/arrow-down-from-line.svg +1 -0
  40. data/assets/icons/arrow-down-left-from-circle.svg +1 -0
  41. data/assets/icons/arrow-down-left-square.svg +1 -0
  42. data/assets/icons/arrow-down-narrow-wide.svg +1 -0
  43. data/assets/icons/arrow-down-right-from-circle.svg +1 -0
  44. data/assets/icons/arrow-down-right-square.svg +1 -0
  45. data/assets/icons/arrow-down-square.svg +1 -0
  46. data/assets/icons/arrow-down-to-dot.svg +1 -0
  47. data/assets/icons/arrow-down-to-line.svg +1 -0
  48. data/assets/icons/arrow-down-up.svg +1 -0
  49. data/assets/icons/arrow-down-wide-narrow.svg +1 -0
  50. data/assets/icons/arrow-down-z-a.svg +1 -0
  51. data/assets/icons/arrow-left-from-line.svg +1 -0
  52. data/assets/icons/arrow-left-square.svg +1 -0
  53. data/assets/icons/arrow-left-to-line.svg +1 -0
  54. data/assets/icons/arrow-right-from-line.svg +1 -0
  55. data/assets/icons/arrow-right-left.svg +1 -0
  56. data/assets/icons/arrow-right-square.svg +1 -0
  57. data/assets/icons/arrow-right-to-line.svg +1 -0
  58. data/assets/icons/arrow-up-0-1.svg +1 -0
  59. data/assets/icons/arrow-up-1-0.svg +1 -0
  60. data/assets/icons/arrow-up-a-z.svg +1 -0
  61. data/assets/icons/arrow-up-from-dot.svg +1 -0
  62. data/assets/icons/arrow-up-from-line.svg +1 -0
  63. data/assets/icons/arrow-up-left-from-circle.svg +1 -0
  64. data/assets/icons/arrow-up-left-square.svg +1 -0
  65. data/assets/icons/arrow-up-narrow-wide.svg +1 -0
  66. data/assets/icons/arrow-up-right-from-circle.svg +1 -0
  67. data/assets/icons/arrow-up-right-square.svg +1 -0
  68. data/assets/icons/arrow-up-square.svg +1 -0
  69. data/assets/icons/arrow-up-to-line.svg +1 -0
  70. data/assets/icons/arrow-up-wide-narrow.svg +1 -0
  71. data/assets/icons/arrow-up-z-a.svg +1 -0
  72. data/assets/icons/arrows-up-from-line.svg +1 -0
  73. data/assets/icons/atom.svg +1 -0
  74. data/assets/icons/badge-alert.svg +1 -0
  75. data/assets/icons/badge-cent.svg +1 -0
  76. data/assets/icons/badge-check.svg +1 -0
  77. data/assets/icons/badge-dollar-sign.svg +1 -0
  78. data/assets/icons/badge-euro.svg +1 -0
  79. data/assets/icons/badge-help.svg +1 -0
  80. data/assets/icons/badge-indian-rupee.svg +1 -0
  81. data/assets/icons/badge-info.svg +1 -0
  82. data/assets/icons/badge-japanese-yen.svg +1 -0
  83. data/assets/icons/badge-minus.svg +1 -0
  84. data/assets/icons/badge-percent.svg +1 -0
  85. data/assets/icons/badge-plus.svg +1 -0
  86. data/assets/icons/badge-pound-sterling.svg +1 -0
  87. data/assets/icons/badge-russian-ruble.svg +1 -0
  88. data/assets/icons/badge-swiss-franc.svg +1 -0
  89. data/assets/icons/badge-x.svg +1 -0
  90. data/assets/icons/badge.svg +1 -0
  91. data/assets/icons/ban.svg +1 -0
  92. data/assets/icons/bar-chart-big.svg +1 -0
  93. data/assets/icons/bar-chart-horizontal-big.svg +1 -0
  94. data/assets/icons/bell-dot.svg +1 -0
  95. data/assets/icons/biohazard.svg +1 -0
  96. data/assets/icons/blocks.svg +1 -0
  97. data/assets/icons/book-copy.svg +1 -0
  98. data/assets/icons/book-down.svg +1 -0
  99. data/assets/icons/book-key.svg +1 -0
  100. data/assets/icons/book-lock.svg +1 -0
  101. data/assets/icons/book-marked.svg +1 -0
  102. data/assets/icons/book-minus.svg +1 -0
  103. data/assets/icons/book-plus.svg +1 -0
  104. data/assets/icons/book-template.svg +1 -0
  105. data/assets/icons/book-up-2.svg +1 -0
  106. data/assets/icons/book-up.svg +1 -0
  107. data/assets/icons/book-x.svg +1 -0
  108. data/assets/icons/bookmark-check.svg +1 -0
  109. data/assets/icons/bookmark-x.svg +1 -0
  110. data/assets/icons/boom-box.svg +1 -0
  111. data/assets/icons/braces.svg +1 -0
  112. data/assets/icons/brackets.svg +1 -0
  113. data/assets/icons/brain-circuit.svg +1 -0
  114. data/assets/icons/brain-cog.svg +1 -0
  115. data/assets/icons/brain.svg +1 -0
  116. data/assets/icons/bring-to-front.svg +1 -0
  117. data/assets/icons/bug-off.svg +1 -0
  118. data/assets/icons/bug-play.svg +1 -0
  119. data/assets/icons/bus-front.svg +1 -0
  120. data/assets/icons/cable-car.svg +1 -0
  121. data/assets/icons/cable.svg +1 -0
  122. data/assets/icons/cake-slice.svg +1 -0
  123. data/assets/icons/candlestick-chart.svg +1 -0
  124. data/assets/icons/candy-cane.svg +1 -0
  125. data/assets/icons/car-front.svg +1 -0
  126. data/assets/icons/car-taxi-front.svg +1 -0
  127. data/assets/icons/case-lower.svg +1 -0
  128. data/assets/icons/case-sensitive.svg +1 -0
  129. data/assets/icons/case-upper.svg +1 -0
  130. data/assets/icons/cassette-tape.svg +1 -0
  131. data/assets/icons/castle.svg +1 -0
  132. data/assets/icons/chevron-down-circle.svg +1 -0
  133. data/assets/icons/chevron-down-square.svg +1 -0
  134. data/assets/icons/chevron-left-circle.svg +1 -0
  135. data/assets/icons/chevron-left-square.svg +1 -0
  136. data/assets/icons/chevron-right-circle.svg +1 -0
  137. data/assets/icons/chevron-right-square.svg +1 -0
  138. data/assets/icons/chevron-up-circle.svg +1 -0
  139. data/assets/icons/chevron-up-square.svg +1 -0
  140. data/assets/icons/church.svg +1 -0
  141. data/assets/icons/circle-dashed.svg +1 -0
  142. data/assets/icons/circle-dollar-sign.svg +1 -0
  143. data/assets/icons/circle-dot-dashed.svg +1 -0
  144. data/assets/icons/circle-equal.svg +1 -0
  145. data/assets/icons/circle-off.svg +1 -0
  146. data/assets/icons/circle-slash-2.svg +1 -0
  147. data/assets/icons/circle-slash.svg +1 -0
  148. data/assets/icons/circuit-board.svg +1 -0
  149. data/assets/icons/clipboard-paste.svg +1 -0
  150. data/assets/icons/club.svg +1 -0
  151. data/assets/icons/combine.svg +1 -0
  152. data/assets/icons/computer.svg +1 -0
  153. data/assets/icons/contact-2.svg +1 -0
  154. data/assets/icons/container.svg +1 -0
  155. data/assets/icons/copy-check.svg +1 -0
  156. data/assets/icons/copy-minus.svg +1 -0
  157. data/assets/icons/copy-plus.svg +1 -0
  158. data/assets/icons/copy-slash.svg +1 -0
  159. data/assets/icons/copy-x.svg +1 -0
  160. data/assets/icons/database-zap.svg +1 -0
  161. data/assets/icons/dessert.svg +1 -0
  162. data/assets/icons/disc-2.svg +1 -0
  163. data/assets/icons/disc-3.svg +1 -0
  164. data/assets/icons/donut.svg +1 -0
  165. data/assets/icons/door-closed.svg +1 -0
  166. data/assets/icons/door-open.svg +1 -0
  167. data/assets/icons/dot.svg +1 -0
  168. data/assets/icons/drama.svg +1 -0
  169. data/assets/icons/ferris-wheel.svg +1 -0
  170. data/assets/icons/file-code-2.svg +1 -0
  171. data/assets/icons/file-stack.svg +1 -0
  172. data/assets/icons/fish-symbol.svg +1 -0
  173. data/assets/icons/fold-horizontal.svg +1 -0
  174. data/assets/icons/fold-vertical.svg +1 -0
  175. data/assets/icons/folder-dot.svg +1 -0
  176. data/assets/icons/folder-git-2.svg +1 -0
  177. data/assets/icons/folder-git.svg +1 -0
  178. data/assets/icons/folder-kanban.svg +1 -0
  179. data/assets/icons/folder-open-dot.svg +1 -0
  180. data/assets/icons/folder-root.svg +1 -0
  181. data/assets/icons/folder-sync.svg +1 -0
  182. data/assets/icons/gallery-horizontal-end.svg +1 -0
  183. data/assets/icons/gallery-horizontal.svg +1 -0
  184. data/assets/icons/gallery-thumbnails.svg +1 -0
  185. data/assets/icons/gallery-vertical-end.svg +1 -0
  186. data/assets/icons/gallery-vertical.svg +1 -0
  187. data/assets/icons/gantt-chart-square.svg +1 -0
  188. data/assets/icons/gantt-chart.svg +1 -0
  189. data/assets/icons/gauge-circle.svg +1 -0
  190. data/assets/icons/goal.svg +1 -0
  191. data/assets/icons/grid-2x2.svg +1 -0
  192. data/assets/icons/grid-3x3.svg +1 -0
  193. data/assets/icons/group.svg +1 -0
  194. data/assets/icons/hard-drive-download.svg +1 -0
  195. data/assets/icons/hard-drive-upload.svg +1 -0
  196. data/assets/icons/hdmi-port.svg +1 -0
  197. data/assets/icons/hotel.svg +1 -0
  198. data/assets/icons/iteration-ccw.svg +1 -0
  199. data/assets/icons/iteration-cw.svg +1 -0
  200. data/assets/icons/kanban-square-dashed.svg +1 -0
  201. data/assets/icons/kanban-square.svg +1 -0
  202. data/assets/icons/kanban.svg +1 -0
  203. data/assets/icons/key-round.svg +1 -0
  204. data/assets/icons/key-square.svg +1 -0
  205. data/assets/icons/layout-panel-left.svg +1 -0
  206. data/assets/icons/layout-panel-top.svg +1 -0
  207. data/assets/icons/leafy-green.svg +1 -0
  208. data/assets/icons/ligature.svg +1 -0
  209. data/assets/icons/list-filter.svg +1 -0
  210. data/assets/icons/list-restart.svg +1 -0
  211. data/assets/icons/list-todo.svg +1 -0
  212. data/assets/icons/list-tree.svg +1 -0
  213. data/assets/icons/lollipop.svg +1 -0
  214. data/assets/icons/m-square.svg +1 -0
  215. data/assets/icons/mailbox.svg +1 -0
  216. data/assets/icons/memory-stick.svg +1 -0
  217. data/assets/icons/menu-square.svg +1 -0
  218. data/assets/icons/merge.svg +1 -0
  219. data/assets/icons/message-square-dashed.svg +1 -0
  220. data/assets/icons/message-square-plus.svg +1 -0
  221. data/assets/icons/messages-square.svg +1 -0
  222. data/assets/icons/monitor-check.svg +1 -0
  223. data/assets/icons/monitor-dot.svg +1 -0
  224. data/assets/icons/monitor-down.svg +1 -0
  225. data/assets/icons/monitor-pause.svg +1 -0
  226. data/assets/icons/monitor-play.svg +1 -0
  227. data/assets/icons/monitor-stop.svg +1 -0
  228. data/assets/icons/monitor-up.svg +1 -0
  229. data/assets/icons/monitor-x.svg +1 -0
  230. data/assets/icons/moon-star.svg +1 -0
  231. data/assets/icons/mouse-pointer-square-dashed.svg +1 -0
  232. data/assets/icons/mouse-pointer-square.svg +1 -0
  233. data/assets/icons/move-down-left.svg +1 -0
  234. data/assets/icons/move-down-right.svg +1 -0
  235. data/assets/icons/move-down.svg +1 -0
  236. data/assets/icons/move-left.svg +1 -0
  237. data/assets/icons/move-right.svg +1 -0
  238. data/assets/icons/move-up-left.svg +1 -0
  239. data/assets/icons/move-up-right.svg +1 -0
  240. data/assets/icons/move-up.svg +1 -0
  241. data/assets/icons/orbit.svg +1 -0
  242. data/assets/icons/panel-bottom-close.svg +1 -0
  243. data/assets/icons/panel-bottom-inactive.svg +1 -0
  244. data/assets/icons/panel-bottom-open.svg +1 -0
  245. data/assets/icons/panel-bottom.svg +1 -0
  246. data/assets/icons/panel-left-close.svg +1 -0
  247. data/assets/icons/panel-left-inactive.svg +1 -0
  248. data/assets/icons/panel-left-open.svg +1 -0
  249. data/assets/icons/panel-left.svg +1 -0
  250. data/assets/icons/panel-right-close.svg +1 -0
  251. data/assets/icons/panel-right-inactive.svg +1 -0
  252. data/assets/icons/panel-right-open.svg +1 -0
  253. data/assets/icons/panel-right.svg +1 -0
  254. data/assets/icons/panel-top-close.svg +1 -0
  255. data/assets/icons/panel-top-inactive.svg +1 -0
  256. data/assets/icons/panel-top-open.svg +1 -0
  257. data/assets/icons/panel-top.svg +1 -0
  258. data/assets/icons/parentheses.svg +1 -0
  259. data/assets/icons/parking-circle-off.svg +1 -0
  260. data/assets/icons/parking-circle.svg +1 -0
  261. data/assets/icons/parking-meter.svg +1 -0
  262. data/assets/icons/parking-square-off.svg +1 -0
  263. data/assets/icons/parking-square.svg +1 -0
  264. data/assets/icons/paw-print.svg +1 -0
  265. data/assets/icons/pc-case.svg +1 -0
  266. data/assets/icons/pen-line.svg +1 -0
  267. data/assets/icons/pen-square.svg +1 -0
  268. data/assets/icons/pen.svg +1 -0
  269. data/assets/icons/pencil-line.svg +1 -0
  270. data/assets/icons/pencil-ruler.svg +1 -0
  271. data/assets/icons/percent-circle.svg +1 -0
  272. data/assets/icons/percent-diamond.svg +1 -0
  273. data/assets/icons/percent-square.svg +1 -0
  274. data/assets/icons/pi-square.svg +1 -0
  275. data/assets/icons/pi.svg +1 -0
  276. data/assets/icons/pilcrow-square.svg +1 -0
  277. data/assets/icons/plane-landing.svg +1 -0
  278. data/assets/icons/plane-takeoff.svg +1 -0
  279. data/assets/icons/play-square.svg +1 -0
  280. data/assets/icons/plug-zap-2.svg +1 -0
  281. data/assets/icons/pocket-knife.svg +1 -0
  282. data/assets/icons/popcorn.svg +1 -0
  283. data/assets/icons/popsicle.svg +1 -0
  284. data/assets/icons/presentation.svg +1 -0
  285. data/assets/icons/projector.svg +1 -0
  286. data/assets/icons/rabbit.svg +1 -0
  287. data/assets/icons/radar.svg +1 -0
  288. data/assets/icons/radiation.svg +1 -0
  289. data/assets/icons/radio-tower.svg +1 -0
  290. data/assets/icons/rail-symbol.svg +1 -0
  291. data/assets/icons/rainbow.svg +1 -0
  292. data/assets/icons/rat.svg +1 -0
  293. data/assets/icons/ratio.svg +1 -0
  294. data/assets/icons/receipt.svg +1 -0
  295. data/assets/icons/redo-dot.svg +1 -0
  296. data/assets/icons/refresh-ccw-dot.svg +1 -0
  297. data/assets/icons/refresh-cw-off.svg +1 -0
  298. data/assets/icons/repeat-2.svg +1 -0
  299. data/assets/icons/replace-all.svg +1 -0
  300. data/assets/icons/replace.svg +1 -0
  301. data/assets/icons/roller-coaster.svg +1 -0
  302. data/assets/icons/rows.svg +1 -0
  303. data/assets/icons/satellite-dish.svg +1 -0
  304. data/assets/icons/satellite.svg +1 -0
  305. data/assets/icons/save-all.svg +1 -0
  306. data/assets/icons/scatter-chart.svg +1 -0
  307. data/assets/icons/school-2.svg +1 -0
  308. data/assets/icons/school.svg +1 -0
  309. data/assets/icons/scissors-line-dashed.svg +1 -0
  310. data/assets/icons/scissors-square-dashed-bottom.svg +1 -0
  311. data/assets/icons/scissors-square.svg +1 -0
  312. data/assets/icons/scroll-text.svg +1 -0
  313. data/assets/icons/search-check.svg +1 -0
  314. data/assets/icons/search-code.svg +1 -0
  315. data/assets/icons/search-slash.svg +1 -0
  316. data/assets/icons/search-x.svg +1 -0
  317. data/assets/icons/send-horizontal.svg +1 -0
  318. data/assets/icons/send-to-back.svg +1 -0
  319. data/assets/icons/shapes.svg +1 -0
  320. data/assets/icons/shell.svg +1 -0
  321. data/assets/icons/shield-ban.svg +1 -0
  322. data/assets/icons/shield-ellipsis.svg +1 -0
  323. data/assets/icons/shield-half.svg +1 -0
  324. data/assets/icons/shield-minus.svg +1 -0
  325. data/assets/icons/shield-plus.svg +1 -0
  326. data/assets/icons/shield-question.svg +1 -0
  327. data/assets/icons/shield-x.svg +1 -0
  328. data/assets/icons/ship-wheel.svg +1 -0
  329. data/assets/icons/shopping-basket.svg +1 -0
  330. data/assets/icons/sigma-square.svg +1 -0
  331. data/assets/icons/snail.svg +1 -0
  332. data/assets/icons/space.svg +1 -0
  333. data/assets/icons/spade.svg +1 -0
  334. data/assets/icons/sparkle.svg +1 -0
  335. data/assets/icons/sparkles.svg +1 -0
  336. data/assets/icons/speech.svg +1 -0
  337. data/assets/icons/spell-check-2.svg +1 -0
  338. data/assets/icons/spell-check.svg +1 -0
  339. data/assets/icons/split.svg +1 -0
  340. data/assets/icons/spray-can.svg +1 -0
  341. data/assets/icons/square-asterisk.svg +1 -0
  342. data/assets/icons/square-code.svg +1 -0
  343. data/assets/icons/square-dashed-bottom-code.svg +1 -0
  344. data/assets/icons/square-dashed-bottom.svg +1 -0
  345. data/assets/icons/square-dot.svg +1 -0
  346. data/assets/icons/square-equal.svg +1 -0
  347. data/assets/icons/square-slash.svg +1 -0
  348. data/assets/icons/square-stack.svg +1 -0
  349. data/assets/icons/squirrel.svg +1 -0
  350. data/assets/icons/step-back.svg +1 -0
  351. data/assets/icons/step-forward.svg +1 -0
  352. data/assets/icons/store.svg +1 -0
  353. data/assets/icons/table-properties.svg +1 -0
  354. data/assets/icons/tablet-smartphone.svg +1 -0
  355. data/assets/icons/tally-1.svg +1 -0
  356. data/assets/icons/tally-2.svg +1 -0
  357. data/assets/icons/tally-3.svg +1 -0
  358. data/assets/icons/tally-4.svg +1 -0
  359. data/assets/icons/tally-5.svg +1 -0
  360. data/assets/icons/test-tube-2.svg +1 -0
  361. data/assets/icons/test-tube.svg +1 -0
  362. data/assets/icons/test-tubes.svg +1 -0
  363. data/assets/icons/text-quote.svg +1 -0
  364. data/assets/icons/text-select.svg +1 -0
  365. data/assets/icons/text.svg +1 -0
  366. data/assets/icons/theater.svg +1 -0
  367. data/assets/icons/touchpad-off.svg +1 -0
  368. data/assets/icons/touchpad.svg +1 -0
  369. data/assets/icons/tractor.svg +1 -0
  370. data/assets/icons/traffic-cone.svg +1 -0
  371. data/assets/icons/train-front-tunnel.svg +1 -0
  372. data/assets/icons/train-front.svg +1 -0
  373. data/assets/icons/train-track.svg +1 -0
  374. data/assets/icons/tram-front.svg +1 -0
  375. data/assets/icons/triangle-right.svg +1 -0
  376. data/assets/icons/turtle.svg +1 -0
  377. data/assets/icons/undo-dot.svg +1 -0
  378. data/assets/icons/unfold-horizontal.svg +1 -0
  379. data/assets/icons/unfold-vertical.svg +1 -0
  380. data/assets/icons/ungroup.svg +1 -0
  381. data/assets/icons/unplug.svg +1 -0
  382. data/assets/icons/user-2.svg +1 -0
  383. data/assets/icons/user-check-2.svg +1 -0
  384. data/assets/icons/user-circle-2.svg +1 -0
  385. data/assets/icons/user-circle.svg +1 -0
  386. data/assets/icons/user-cog-2.svg +1 -0
  387. data/assets/icons/user-minus-2.svg +1 -0
  388. data/assets/icons/user-plus-2.svg +1 -0
  389. data/assets/icons/user-square-2.svg +1 -0
  390. data/assets/icons/user-square.svg +1 -0
  391. data/assets/icons/user-x-2.svg +1 -0
  392. data/assets/icons/users-2.svg +1 -0
  393. data/assets/icons/variable.svg +1 -0
  394. data/assets/icons/videotape.svg +1 -0
  395. data/assets/icons/wallet-2.svg +1 -0
  396. data/assets/icons/wallet-cards.svg +1 -0
  397. data/assets/icons/wallpaper.svg +1 -0
  398. data/assets/icons/warehouse.svg +1 -0
  399. data/assets/icons/whole-word.svg +1 -0
  400. data/assets/icons/workflow.svg +1 -0
  401. data/assets/js/app.js +13 -4
  402. data/assets/js/helpers/request.js +2 -2
  403. data/config/app.yml +6 -1
  404. data/lib/lookbook/cable/cable.rb +2 -2
  405. data/lib/lookbook/engine.rb +3 -1
  406. data/lib/lookbook/entities/collections/preview_collection.rb +1 -4
  407. data/lib/lookbook/entities/entity.rb +4 -0
  408. data/lib/lookbook/entities/page_entity.rb +1 -1
  409. data/lib/lookbook/entities/scenario_entity.rb +1 -1
  410. data/lib/lookbook/entities/scenario_group_entity.rb +1 -1
  411. data/lib/lookbook/file_watcher.rb +1 -1
  412. data/lib/lookbook/helpers/ui_elements_helper.rb +3 -3
  413. data/lib/lookbook/param.rb +1 -1
  414. data/lib/lookbook/preview.rb +1 -0
  415. data/lib/lookbook/preview_controller_actions.rb +19 -16
  416. data/lib/lookbook/services/data/resolvers/data_resolver.rb +1 -1
  417. data/lib/lookbook/services/templates/action_view_config_handler.rb +50 -0
  418. data/lib/lookbook/stores/config_store.rb +4 -0
  419. data/lib/lookbook/theme.rb +2 -6
  420. data/lib/lookbook/version.rb +1 -1
  421. data/lib/lookbook/websocket.rb +1 -1
  422. data/public/lookbook-assets/css/lookbook.css +555 -394
  423. data/public/lookbook-assets/css/lookbook.css.map +1 -1
  424. data/public/lookbook-assets/img/lucide-sprite.svg +1 -1
  425. data/public/lookbook-assets/js/iframe.js.map +1 -1
  426. data/public/lookbook-assets/js/index.js +792 -637
  427. data/public/lookbook-assets/js/index.js.map +1 -1
  428. data/public/lookbook-assets/js/lookbook-core.js +38 -1
  429. data/public/lookbook-assets/js/lookbook.js +121 -84
  430. metadata +383 -7
  431. data/lib/lookbook/services/templates/action_view_annotations_handler.rb +0 -21
data/assets/js/app.js CHANGED
@@ -25,6 +25,12 @@ export default function app() {
25
25
  const socket = createSocket(window.SOCKET_PATH);
26
26
  socket.addListener("Lookbook::ReloadChannel", () => this.updateDOM());
27
27
  }
28
+
29
+ this.$watch("$store.layout.mobile", (mobile) => {
30
+ if (!mobile) {
31
+ this.$store.layout.sidebar.hidden = true;
32
+ }
33
+ });
28
34
  },
29
35
 
30
36
  navigateTo(path) {
@@ -37,7 +43,9 @@ export default function app() {
37
43
  this.debug("Navigating to ", window.location.pathname);
38
44
  this.$dispatch("navigation:start");
39
45
  this.location = window.location;
40
- await this.updateDOM();
46
+ await this.updateDOM("#app-main", {
47
+ headers: { "X-Lookbook-Frame": "main" },
48
+ });
41
49
  this.$dispatch("navigation:complete");
42
50
  },
43
51
 
@@ -59,16 +67,17 @@ export default function app() {
59
67
  }
60
68
  },
61
69
 
62
- async updateDOM() {
70
+ async updateDOM(rootSelector = `#${this.$root.id}`, options = {}) {
63
71
  this.debug("Starting DOM update");
64
72
  this.$dispatch("dom:update-start");
65
73
  this.requestStart();
66
74
  try {
67
75
  const { fragment, title } = await fetchHTML(
68
76
  window.location,
69
- `#${this.$root.id}`
77
+ rootSelector,
78
+ options
70
79
  );
71
- morph(this.$root, fragment);
80
+ morph(document.querySelector(rootSelector), fragment);
72
81
  document.title = title;
73
82
  this.requestEnd();
74
83
  this.$dispatch("dom:update-complete");
@@ -1,5 +1,5 @@
1
- async function fetchHTML(url, selector) {
2
- const response = await fetch(url || window.document.location);
1
+ async function fetchHTML(url, selector, options = {}) {
2
+ const response = await fetch(url || window.document.location, options);
3
3
  const html = await response.text();
4
4
  const doc = new DOMParser().parseFromString(html, "text/html");
5
5
  return {
data/config/app.yml CHANGED
@@ -3,6 +3,7 @@ shared:
3
3
  project_logo: ~
4
4
 
5
5
  preview_collection_label: "Previews"
6
+ preview_nav_filter: true
6
7
  preview_paths: [test/components/previews]
7
8
  preview_display_options: {}
8
9
  preview_controller: "Lookbook::PreviewController"
@@ -10,6 +11,7 @@ shared:
10
11
  preview_inspector:
11
12
  main_panels: [preview, output]
12
13
  drawer_panels: [source, notes, params, "*"]
14
+ sidebar_panels: [previews, pages]
13
15
  preview_embeds:
14
16
  enabled: true
15
17
  policy: SAMEORIGIN
@@ -19,10 +21,13 @@ shared:
19
21
  display_option_controls: true
20
22
  preview_layout: ~
21
23
  preview_disable_action_view_annotations: true
24
+ preview_disable_action_view_partial_prefixes: true
22
25
  preview_type_default: view_component
23
26
  preview_sort_scenarios: false
27
+ preview_disable_error_handling: false
24
28
 
25
29
  page_collection_label: "Pages"
30
+ page_nav_filter: false
26
31
  page_controller: "Lookbook::PageController"
27
32
  page_route: pages
28
33
  page_paths: [test/components/docs]
@@ -62,7 +67,7 @@ shared:
62
67
  links:
63
68
  docs: https://v2.lookbook.build
64
69
  demo: https://v2-demo.lookbook.build
65
- repo: https://github.com/ViewComponent/lookbook/tree/v2
70
+ repo: https://github.com/lookbook-hq/lookbook/tree/v2
66
71
 
67
72
  development:
68
73
  debug_menu: true
@@ -1,6 +1,6 @@
1
1
  require "action_cable/engine"
2
- require_relative "./connection"
3
- require_relative "./reload_channel"
2
+ require_relative "connection"
3
+ require_relative "reload_channel"
4
4
 
5
5
  module Lookbook
6
6
  class Cable
@@ -62,7 +62,9 @@ module Lookbook
62
62
  ViewComponent::Preview.extend(Lookbook::PreviewAfterRender)
63
63
  end
64
64
 
65
- opts.reload_on_change = host_config.reload_classes_only_on_change if opts.reload_on_change.nil?
65
+ if opts.reload_on_change.nil?
66
+ opts.reload_on_change = !host_config.cache_classes && host_config.reload_classes_only_on_change
67
+ end
66
68
  end
67
69
 
68
70
  config.after_initialize do
@@ -44,10 +44,7 @@ module Lookbook
44
44
  end
45
45
 
46
46
  def entities
47
- @_cache[:entities] ||= begin
48
- all = collect_ordered_entities(to_tree(include_hidden: true))
49
- all.filter { _1.is_a?(Lookbook::PreviewEntity) }
50
- end
47
+ @_cache[:entities] ||= collect_ordered_entities(to_tree(include_hidden: true)).grep(Lookbook::PreviewEntity)
51
48
  end
52
49
 
53
50
  class << self
@@ -65,6 +65,10 @@ module Lookbook
65
65
  alias_method :path, :lookup_path
66
66
  deprecate path: :lookup_path, deprecator: Deprecation
67
67
 
68
+ def search_terms
69
+ @_search_terms ||= lookup_path.split("/").map(&:titleize)
70
+ end
71
+
68
72
  # @!endgroup
69
73
 
70
74
  def <=>(other)
@@ -105,7 +105,7 @@ module Lookbook
105
105
 
106
106
  # @api private
107
107
  def search_terms
108
- label
108
+ lookup_path.split("/") << label
109
109
  end
110
110
 
111
111
  # @api private
@@ -134,7 +134,7 @@ module Lookbook
134
134
 
135
135
  # @api private
136
136
  def search_terms
137
- [parent.label, label]
137
+ [parent.search_terms, parent.label, label]
138
138
  end
139
139
 
140
140
  alias_method :lang, :source_lang
@@ -124,7 +124,7 @@ module Lookbook
124
124
 
125
125
  # @api private
126
126
  def search_terms
127
- [parent.label, label]
127
+ [parent.search_terms, parent.label, label]
128
128
  end
129
129
 
130
130
  # @api private
@@ -13,7 +13,7 @@ module Lookbook
13
13
 
14
14
  def file_watcher
15
15
  @_file_watcher ||= begin
16
- require_relative "./support/evented_file_update_checker"
16
+ require_relative "support/evented_file_update_checker"
17
17
 
18
18
  EventedFileUpdateChecker
19
19
  rescue LoadError
@@ -18,7 +18,7 @@ module Lookbook
18
18
  # @param name [Symbol, String] Name of the icon
19
19
  # @param opts [Hash] Options hash
20
20
  def icon(name, **opts)
21
- lookbook_render :icon, name: name, **opts
21
+ lookbook_render(:icon, name: name, **opts)
22
22
  end
23
23
 
24
24
  # Display a syntax-highlighted block of code.
@@ -36,12 +36,12 @@ module Lookbook
36
36
 
37
37
  # @api private
38
38
  def prose(**opts, &block)
39
- lookbook_render :prose, **opts, &block
39
+ lookbook_render(:prose, **opts, &block)
40
40
  end
41
41
 
42
42
  # @api private
43
43
  def lookbook_tag(tag = :div, **attrs, &block)
44
- lookbook_render :tag, tag: tag, **attrs, &block
44
+ lookbook_render(:tag, tag: tag, **attrs, &block)
45
45
  end
46
46
 
47
47
  # @api private
@@ -28,7 +28,7 @@ module Lookbook
28
28
  val = @value || value_default
29
29
  if value_type == "datetime"
30
30
  formatter = (input == "datetime-local") ? "%Y-%m-%dT%T" : "%Y-%m-%d"
31
- StringValueCaster.call(val, "datetime").strftime(formatter)
31
+ StringValueCaster.call(val, "datetime")&.strftime(formatter)
32
32
  else
33
33
  val
34
34
  end
@@ -11,6 +11,7 @@ module Lookbook
11
11
  template: args[:template] || Lookbook.config.preview_template,
12
12
  args: args,
13
13
  locals: args[:locals] || {},
14
+ assigns: args[:assigns] || {},
14
15
  block: block
15
16
  }
16
17
  else
@@ -4,7 +4,7 @@ module Lookbook
4
4
 
5
5
  included do
6
6
  helper PreviewHelper
7
- helper Rails.application.routes.url_helpers
7
+ send(:helper, Rails.application.routes.url_helpers) # YARD parsing workaround: https://github.com/lsegal/yard/issues/546
8
8
  prepend_view_path Engine.root.join("app/views")
9
9
 
10
10
  def render_scenario_to_string(preview, scenario)
@@ -18,26 +18,26 @@ module Lookbook
18
18
  locals = @render_args[:locals]
19
19
  opts = {}
20
20
  opts[:layout] = nil
21
+ opts[:assigns] = @render_args[:assigns] || {}
21
22
  opts[:locals] = locals if locals.present?
22
23
 
23
- rendered = render_to_string(template, **opts)
24
+ with_action_view_settings do
25
+ rendered = render_to_string(template, **opts)
24
26
 
25
- if scenario.after_render_method.present?
26
- render_context = Store.new({
27
- preview: preview,
28
- scenario: scenario,
29
- params: user_request_parameters
30
- })
31
- rendered = @preview.after_render(method: scenario.after_render_method, html: rendered, context: render_context)
32
- end
33
-
34
- with_optional_action_view_annotations do
27
+ if scenario.after_render_method.present?
28
+ render_context = Store.new({
29
+ preview: preview,
30
+ scenario: scenario,
31
+ params: user_request_parameters
32
+ })
33
+ rendered = @preview.after_render(method: scenario.after_render_method, html: rendered, context: render_context)
34
+ end
35
35
  render html: rendered
36
36
  end
37
37
  end
38
38
 
39
39
  def render_in_layout_to_string(template, locals, opts = {})
40
- with_optional_action_view_annotations do
40
+ with_action_view_settings do
41
41
  html = render_to_string(template, locals: locals, **determine_layout(opts[:layout]))
42
42
  if opts[:append_html].present?
43
43
  html += opts[:append_html]
@@ -48,9 +48,12 @@ module Lookbook
48
48
 
49
49
  protected
50
50
 
51
- def with_optional_action_view_annotations(&block)
52
- disable = Lookbook.config.preview_disable_action_view_annotations
53
- ActionViewAnnotationsHandler.call(disable_annotations: disable, &block)
51
+ def with_action_view_settings(&block)
52
+ ActionViewConfigHandler.call(
53
+ disable_annotations: Lookbook.config.preview_disable_action_view_annotations,
54
+ disable_partial_prefixes: Lookbook.config.preview_disable_action_view_partial_prefixes,
55
+ &block
56
+ )
54
57
  end
55
58
 
56
59
  def user_request_parameters
@@ -47,7 +47,7 @@ module Lookbook
47
47
  eval_context.instance_eval(input.to_s)
48
48
  }.call
49
49
  rescue => exception
50
- raise_error "Could not evaluate statetment (#{exception.message})", exception
50
+ raise_error "Could not evaluate statement (#{exception.message})", exception
51
51
  end
52
52
  else
53
53
  Lookbook.logger.debug "Data cannot be evaluated (Input: '#{input}')"
@@ -0,0 +1,50 @@
1
+ module Lookbook
2
+ class ActionViewConfigHandler < Service
3
+ attr_reader :disable_annotations, :disable_partial_prefixes
4
+
5
+ def initialize(disable_annotations: true, disable_partial_prefixes: true)
6
+ @disable_annotations = disable_annotations
7
+ @disable_partial_prefixes = disable_partial_prefixes
8
+ end
9
+
10
+ def call
11
+ handle_annotations
12
+ handle_partial_prefixes
13
+
14
+ yield
15
+ ensure
16
+ restore_annotations
17
+ restore_partial_prefixes
18
+ end
19
+
20
+ private
21
+
22
+ def handle_annotations
23
+ return unless disable_annotations && ActionView::Base.respond_to?(:annotate_rendered_view_with_filenames)
24
+
25
+ @original_annotations_value = ActionView::Base.annotate_rendered_view_with_filenames
26
+ ActionView::Base.annotate_rendered_view_with_filenames = false
27
+ end
28
+
29
+ def restore_annotations
30
+ return if @original_annotations_value.nil?
31
+
32
+ ActionView::Base.annotate_rendered_view_with_filenames = @original_annotations_value
33
+ @original_annotations_value = nil
34
+ end
35
+
36
+ def handle_partial_prefixes
37
+ return unless disable_partial_prefixes && ActionView::Base.respond_to?(:prefix_partial_path_with_controller_namespace)
38
+
39
+ @original_partial_prefix_value = ActionView::Base.prefix_partial_path_with_controller_namespace
40
+ ActionView::Base.prefix_partial_path_with_controller_namespace = false
41
+ end
42
+
43
+ def restore_partial_prefixes
44
+ return if @original_partial_prefix_value.nil?
45
+
46
+ ActionView::Base.prefix_partial_path_with_controller_namespace = @original_partial_prefix_value
47
+ @original_partial_prefix_value = nil
48
+ end
49
+ end
50
+ end
@@ -59,6 +59,10 @@ module Lookbook
59
59
  store[:highlighter_options].merge!(options.to_h)
60
60
  end
61
61
 
62
+ def preview_disable_error_handling=(value)
63
+ store[:preview_disable_error_handling] = value
64
+ end
65
+
62
66
  def ui_theme=(name)
63
67
  name = name.to_s
64
68
  if Theme.valid_theme?(name)
@@ -30,19 +30,15 @@ module Lookbook
30
30
  end
31
31
 
32
32
  def favicon_light_mode
33
- (
34
- @overrides[:favicon_light_mode].presence ||
33
+ @overrides[:favicon_light_mode].presence ||
35
34
  @overrides[:favicon].presence ||
36
35
  BASE_THEMES[@base_theme.to_sym][:favicon_light_mode]
37
- )
38
36
  end
39
37
 
40
38
  def favicon_dark_mode
41
- (
42
- @overrides[:favicon_dark_mode].presence ||
39
+ @overrides[:favicon_dark_mode].presence ||
43
40
  @overrides[:favicon].presence ||
44
41
  BASE_THEMES[@base_theme.to_sym][:favicon_dark_mode]
45
- )
46
42
  end
47
43
 
48
44
  def to_css
@@ -1,3 +1,3 @@
1
1
  module Lookbook
2
- VERSION = "2.0.5"
2
+ VERSION = "2.3.2"
3
3
  end
@@ -2,7 +2,7 @@ module Lookbook
2
2
  class Websocket
3
3
  class << self
4
4
  def new(mount_path, **kwargs)
5
- require_relative "./cable/cable"
5
+ require_relative "cable/cable"
6
6
 
7
7
  Cable.new(mount_path, **kwargs)
8
8
  rescue LoadError