lookbook 1.5.5 → 2.0.0.beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -31
  3. data/app/assets/lookbook/css/lookbook.css +9 -0
  4. data/app/assets/lookbook/css/themes/blue.css +7 -0
  5. data/app/assets/lookbook/css/themes/green.css +7 -0
  6. data/app/assets/lookbook/css/themes/indigo.css +7 -0
  7. data/app/assets/lookbook/css/themes/rose.css +7 -0
  8. data/app/assets/lookbook/css/themes/zinc.css +7 -0
  9. data/app/assets/lookbook/css/tooltip.css +9 -6
  10. data/app/assets/lookbook/img/lucide-sprite.svg +4960 -0
  11. data/app/assets/lookbook/js/app.js +22 -4
  12. data/app/assets/lookbook/js/helpers/dom.js +4 -7
  13. data/app/assets/lookbook/js/helpers/string.js +4 -11
  14. data/app/assets/lookbook/js/index.js +61 -0
  15. data/app/assets/lookbook/js/lib/lookbook.js +113 -0
  16. data/app/assets/lookbook/js/lib/tippy.js +1 -0
  17. data/app/assets/lookbook/js/lookbook-core.js +1 -0
  18. data/app/assets/lookbook/js/lookbook.js +2 -61
  19. data/app/components/lookbook/base_component.rb +3 -1
  20. data/app/components/lookbook/button/component.html.erb +13 -24
  21. data/app/components/lookbook/button/component.js +13 -3
  22. data/app/components/lookbook/button/component.rb +16 -25
  23. data/app/components/lookbook/code/component.rb +0 -2
  24. data/app/components/lookbook/copy_button/component.html.erb +5 -5
  25. data/app/components/lookbook/copy_button/component.rb +6 -3
  26. data/app/components/lookbook/debug_menu/component.html.erb +1 -0
  27. data/app/components/lookbook/debug_menu/component.rb +12 -1
  28. data/app/components/lookbook/display_options/editor/component.html.erb +1 -1
  29. data/app/components/lookbook/display_options/field/component.css +0 -26
  30. data/app/components/lookbook/display_options/field/component.html.erb +1 -1
  31. data/app/components/lookbook/embed/component.html.erb +6 -51
  32. data/app/components/lookbook/embed/component.rb +17 -16
  33. data/app/components/lookbook/embed/inspector/component.html.erb +102 -0
  34. data/app/components/lookbook/embed/inspector/component.js +46 -0
  35. data/app/components/lookbook/embed/inspector/component.rb +64 -0
  36. data/app/components/lookbook/embed_code_dropdown/component.css +12 -0
  37. data/app/components/lookbook/embed_code_dropdown/component.html.erb +19 -0
  38. data/app/components/lookbook/embed_code_dropdown/component.js +26 -0
  39. data/app/components/lookbook/embed_code_dropdown/component.rb +41 -0
  40. data/app/components/lookbook/header/component.html.erb +7 -6
  41. data/app/components/lookbook/header/component.rb +5 -1
  42. data/app/components/lookbook/icon/component.html.erb +1 -1
  43. data/app/components/lookbook/icon_button/component.html.erb +20 -0
  44. data/app/components/lookbook/icon_button/component.rb +46 -0
  45. data/app/components/lookbook/nav/component.html.erb +0 -1
  46. data/app/components/lookbook/nav/entity/component.rb +2 -2
  47. data/app/components/lookbook/nav/item/component.rb +1 -1
  48. data/app/components/lookbook/page_tabs/component.html.erb +2 -2
  49. data/app/components/lookbook/params/editor/component.rb +1 -0
  50. data/app/components/lookbook/prose/component.rb +1 -3
  51. data/app/components/lookbook/tabs/component.html.erb +2 -2
  52. data/app/components/lookbook/tabs/component.js +1 -1
  53. data/app/components/lookbook/tag_component.rb +2 -1
  54. data/app/components/lookbook/text_button/component.html.erb +26 -0
  55. data/app/components/lookbook/text_button/component.rb +42 -0
  56. data/app/components/lookbook/toolbar/component.html.erb +1 -1
  57. data/app/components/lookbook/viewport/component.rb +0 -4
  58. data/app/controllers/concerns/lookbook/targetable_concern.rb +26 -22
  59. data/app/controllers/concerns/lookbook/with_panels_concern.rb +30 -0
  60. data/app/controllers/concerns/lookbook/with_preview_controller_concern.rb +4 -3
  61. data/app/controllers/lookbook/application_controller.rb +9 -12
  62. data/app/controllers/lookbook/embeds_controller.rb +148 -0
  63. data/app/controllers/lookbook/inspector_controller.rb +3 -22
  64. data/app/controllers/lookbook/page_controller.rb +7 -6
  65. data/app/controllers/lookbook/pages_controller.rb +3 -4
  66. data/app/controllers/lookbook/preview_controller.rb +17 -0
  67. data/app/controllers/lookbook/previews_controller.rb +10 -30
  68. data/app/helpers/lookbook/application_helper.rb +3 -19
  69. data/app/views/layouts/lookbook/application.html.erb +85 -60
  70. data/app/views/layouts/lookbook/embed.html.erb +16 -0
  71. data/app/views/layouts/lookbook/shell.html.erb +1 -1
  72. data/app/views/layouts/lookbook/skeleton.html.erb +13 -8
  73. data/app/views/lookbook/404.html.erb +2 -2
  74. data/app/views/lookbook/embeds/show.html.erb +12 -0
  75. data/app/views/lookbook/inspector/panels/_notes.html.erb +1 -1
  76. data/app/views/lookbook/inspector/panels/_output.html.erb +3 -3
  77. data/app/views/lookbook/inspector/panels/_source.html.erb +6 -6
  78. data/app/views/lookbook/inspector/show.html.erb +130 -123
  79. data/app/views/lookbook/pages/show.html.erb +81 -34
  80. data/app/views/lookbook/partials/_iframe_content_scripts.html.erb +1 -0
  81. data/app/views/lookbook/partials/_user_styles.html.erb +5 -0
  82. data/app/views/lookbook/previews/group.html.erb +14 -0
  83. data/app/views/lookbook/previews/preview.html.erb +5 -0
  84. data/app/views/lookbook/previews/show.html.erb +1 -0
  85. data/config/app.yml +31 -16
  86. data/config/panels.yml +23 -25
  87. data/config/routes.rb +3 -1
  88. data/config/tags.yml +6 -2
  89. data/lib/lookbook/cable/cable.rb +53 -0
  90. data/lib/lookbook/engine.rb +105 -93
  91. data/lib/lookbook/entities/collections/entity_collection.rb +11 -6
  92. data/lib/lookbook/entities/collections/page_collection.rb +33 -8
  93. data/lib/lookbook/entities/collections/preview_collection.rb +42 -17
  94. data/lib/lookbook/entities/collections/render_target_collection.rb +4 -0
  95. data/lib/lookbook/entities/collections/scenario_collection.rb +4 -0
  96. data/lib/lookbook/entities/concerns/{annotatable.rb → annotatable_entity.rb} +7 -6
  97. data/lib/lookbook/entities/concerns/{inspectable.rb → inspectable_entity.rb} +2 -1
  98. data/lib/lookbook/entities/concerns/{locatable.rb → locatable_entity.rb} +8 -14
  99. data/lib/lookbook/entities/concerns/navigable_entity.rb +44 -0
  100. data/lib/lookbook/entities/entity.rb +7 -2
  101. data/lib/lookbook/entities/{page.rb → page_entity.rb} +10 -6
  102. data/lib/lookbook/entities/{page_section.rb → page_section_entity.rb} +1 -1
  103. data/lib/lookbook/entities/preview_entity.rb +99 -0
  104. data/lib/lookbook/entities/renderable_entity.rb +50 -0
  105. data/lib/lookbook/entities/rendered_scenario_entity.rb +53 -0
  106. data/lib/lookbook/entities/scenario_entity.rb +112 -0
  107. data/lib/lookbook/entities/scenario_group_entity.rb +53 -0
  108. data/lib/lookbook/error.rb +5 -5
  109. data/lib/lookbook/file_watcher.rb +19 -35
  110. data/lib/lookbook/helpers/class_names_helper.rb +28 -0
  111. data/lib/lookbook/helpers/page_helper.rb +18 -0
  112. data/{app/helpers/lookbook → lib/lookbook/helpers}/preview_helper.rb +3 -0
  113. data/lib/lookbook/helpers/ui_elements_helper.rb +115 -0
  114. data/lib/lookbook/preview.rb +79 -0
  115. data/lib/lookbook/preview_controller_actions.rb +50 -0
  116. data/lib/lookbook/preview_parser.rb +4 -2
  117. data/lib/lookbook/reloaders.rb +71 -0
  118. data/lib/lookbook/runtime_context.rb +49 -0
  119. data/lib/lookbook/services/data/resolvers/data_resolver.rb +4 -6
  120. data/lib/lookbook/services/entities/entity_tree_builder.rb +6 -6
  121. data/lib/lookbook/services/list_resolver.rb +35 -0
  122. data/lib/lookbook/services/markdown_renderer.rb +12 -2
  123. data/lib/lookbook/services/priority_prefix_parser.rb +16 -0
  124. data/lib/lookbook/services/urls/search_param_encoder.rb +16 -0
  125. data/lib/lookbook/services/urls/search_param_parser.rb +7 -6
  126. data/lib/lookbook/stores/config_store.rb +16 -16
  127. data/lib/lookbook/stores/input_store.rb +1 -3
  128. data/lib/lookbook/stores/panel_store.rb +28 -50
  129. data/lib/lookbook/support/deprecation.rb +5 -0
  130. data/lib/lookbook/support/errors/preview_template_error.rb +7 -0
  131. data/lib/lookbook/support/evented_file_update_checker.rb +69 -0
  132. data/lib/lookbook/support/null_websocket.rb +9 -0
  133. data/lib/lookbook/support/store.rb +9 -0
  134. data/lib/lookbook/support/tree_node.rb +7 -7
  135. data/lib/lookbook/support/utils/path_utils.rb +7 -1
  136. data/lib/lookbook/support/utils/utils.rb +8 -0
  137. data/lib/lookbook/tags/{position_tag.rb → priority_tag.rb} +4 -4
  138. data/lib/lookbook/tags/renders_tag.rb +4 -0
  139. data/lib/lookbook/tags/tag_provider.rb +3 -0
  140. data/lib/lookbook/tags/type_tag.rb +7 -0
  141. data/lib/lookbook/tags/yard_tag.rb +1 -2
  142. data/lib/lookbook/version.rb +1 -1
  143. data/lib/lookbook/websocket.rb +6 -53
  144. data/lib/lookbook.rb +179 -53
  145. data/public/lookbook-assets/css/lookbook.css +432 -376
  146. data/public/lookbook-assets/css/lookbook.css.map +1 -1
  147. data/public/lookbook-assets/css/themes/blue.css +7 -0
  148. data/public/lookbook-assets/css/themes/blue.css.map +1 -1
  149. data/public/lookbook-assets/css/themes/green.css +7 -0
  150. data/public/lookbook-assets/css/themes/green.css.map +1 -1
  151. data/public/lookbook-assets/css/themes/indigo.css +7 -0
  152. data/public/lookbook-assets/css/themes/indigo.css.map +1 -1
  153. data/public/lookbook-assets/css/themes/rose.css +7 -0
  154. data/public/lookbook-assets/css/themes/rose.css.map +1 -1
  155. data/public/lookbook-assets/css/themes/zinc.css +7 -0
  156. data/public/lookbook-assets/css/themes/zinc.css.map +1 -1
  157. data/public/lookbook-assets/img/lucide-sprite.svg +4960 -0
  158. data/public/lookbook-assets/js/embed.js +1363 -843
  159. data/public/lookbook-assets/js/embed.js.map +1 -1
  160. data/public/lookbook-assets/js/iframe.js +906 -0
  161. data/public/lookbook-assets/js/iframe.js.map +1 -0
  162. data/public/lookbook-assets/js/index.js +13567 -0
  163. data/public/lookbook-assets/js/index.js.map +1 -0
  164. data/public/lookbook-assets/js/lookbook-core.js +85 -0
  165. data/public/lookbook-assets/js/lookbook-core.js.map +1 -0
  166. data/public/lookbook-assets/js/lookbook.js +151 -12726
  167. data/public/lookbook-assets/js/lookbook.js.map +1 -1
  168. data/public/lookbook-assets/lookbook-esm.js +1427 -0
  169. data/public/lookbook-assets/lookbook-esm.js.map +1 -0
  170. data/public/lookbook-assets/lookbook-global.js +1427 -0
  171. data/public/lookbook-assets/lookbook-global.js.map +1 -0
  172. data/public/lookbook-assets/lookbook.js +1427 -0
  173. data/public/lookbook-assets/lookbook.js.map +1 -0
  174. metadata +85 -77
  175. data/app/components/lookbook/embed/component.js +0 -39
  176. data/app/helpers/lookbook/component_helper.rb +0 -84
  177. data/app/helpers/lookbook/output_helper.rb +0 -19
  178. data/app/helpers/lookbook/page_helper.rb +0 -34
  179. data/app/views/layouts/lookbook/inspector.html.erb +0 -7
  180. data/app/views/layouts/lookbook/page.html.erb +0 -53
  181. data/app/views/layouts/lookbook/standalone.html.erb +0 -5
  182. data/app/views/lookbook/preview.html.erb +0 -14
  183. data/lib/lookbook/entities/collections/component_collection.rb +0 -4
  184. data/lib/lookbook/entities/collections/preview_example_collection.rb +0 -4
  185. data/lib/lookbook/entities/component.rb +0 -31
  186. data/lib/lookbook/entities/concerns/navigable.rb +0 -43
  187. data/lib/lookbook/entities/preview.rb +0 -87
  188. data/lib/lookbook/entities/preview_example.rb +0 -104
  189. data/lib/lookbook/entities/preview_group.rb +0 -52
  190. data/lib/lookbook/preview_actions.rb +0 -43
  191. data/lib/lookbook/process.rb +0 -21
  192. data/lib/lookbook/rendered_example.rb +0 -37
  193. data/lib/lookbook/services/position_prefix_parser.rb +0 -16
  194. data/lib/lookbook/services/urls/search_param_builder.rb +0 -13
  195. data/lib/lookbook/tags/component_tag.rb +0 -13
  196. /data/app/assets/lookbook/js/{embed.js → iframe.js} +0 -0
  197. /data/{app/channels/lookbook → lib/lookbook/cable}/connection.rb +0 -0
  198. /data/{app/channels/lookbook → lib/lookbook/cable}/reload_channel.rb +0 -0
@@ -0,0 +1,85 @@
1
+ (() => {
2
+ window.Lookbook = window.Lookbook || {};
3
+ window.Lookbook.initEmbeds = $8c6f87050723dba0$var$initEmbeds;
4
+ const $8c6f87050723dba0$var$embedUrlPrefix = "embed";
5
+ const $8c6f87050723dba0$var$whiteListedAttributes = [
6
+ "preview",
7
+ "scenario",
8
+ "panels",
9
+ "actions",
10
+ "param-*"
11
+ ];
12
+ function $8c6f87050723dba0$var$initEmbeds() {
13
+ if (typeof window.iFrameResize !== "function") {
14
+ console.error("Lookbook embeds require the 'iframe-resizer' library to be available. Skipping embed instantiation.");
15
+ return;
16
+ }
17
+ const embeds = Array.from(document.querySelectorAll("lookbook-embed"));
18
+ embeds.forEach((embed)=>{
19
+ const attrs = Array.from(embed.attributes);
20
+ const wrapper = $8c6f87050723dba0$var$createWrapper();
21
+ const iframe = $8c6f87050723dba0$var$createIframe(attrs);
22
+ wrapper.appendChild(iframe);
23
+ embed.replaceWith(wrapper);
24
+ });
25
+ window.iFrameResize({
26
+ checkOrigin: false
27
+ }, "[data-lookbook-embed-iframe]");
28
+ }
29
+ function $8c6f87050723dba0$var$createWrapper() {
30
+ const wrapper = document.createElement("div");
31
+ wrapper.setAttribute("data-lookbook-embed", "");
32
+ wrapper.classList.add("lookbook-embed");
33
+ return wrapper;
34
+ }
35
+ function $8c6f87050723dba0$var$createIframe(attrs) {
36
+ const src = $8c6f87050723dba0$var$buildSrc(attrs);
37
+ const id = $8c6f87050723dba0$var$attrValue(attrs, "id");
38
+ const styles = $8c6f87050723dba0$var$attrValue(attrs, "style");
39
+ const classes = $8c6f87050723dba0$var$attrValue(attrs, "class", "").split(" ").map((c)=>c.trim()).filter((c)=>c.length);
40
+ const iframe = document.createElement("iframe");
41
+ iframe.src = src;
42
+ if (id) iframe.id = id;
43
+ iframe.setAttribute("frameborder", 0);
44
+ iframe.setAttribute("data-lookbook-embed-iframe", "");
45
+ if (classes.length) iframe.classList.add(...classes);
46
+ if (styles) iframe.style.cssText = styles;
47
+ iframe.style.width = "100%";
48
+ iframe.style.transition = "height 0.3s";
49
+ return iframe;
50
+ }
51
+ function $8c6f87050723dba0$var$buildSrc(attrs) {
52
+ const appPath = $8c6f87050723dba0$var$attrValue(attrs, "app") || $8c6f87050723dba0$var$guessBasePath();
53
+ const props = {};
54
+ $8c6f87050723dba0$var$permittedAttrs(attrs).forEach(({ name: name , value: value })=>{
55
+ name = name.replace("-", "_").toLowerCase();
56
+ props[name] = value;
57
+ });
58
+ return encodeURI([
59
+ appPath,
60
+ $8c6f87050723dba0$var$embedUrlPrefix
61
+ ].join("/") + `?props=${JSON.stringify(props)}`);
62
+ }
63
+ function $8c6f87050723dba0$var$attrValue(attrs, name, fallback = null) {
64
+ const attr = attrs.find((attr)=>attr.name === name);
65
+ return attr ? attr.value : fallback;
66
+ }
67
+ function $8c6f87050723dba0$var$permittedAttrs(attrs) {
68
+ return attrs.filter((attr)=>{
69
+ return $8c6f87050723dba0$var$whiteListedAttributes.find((key)=>{
70
+ const name = attr.name;
71
+ return key === name || key.includes("*") && name.startsWith(key.replace("*", ""));
72
+ });
73
+ });
74
+ }
75
+ function $8c6f87050723dba0$var$guessBasePath() {
76
+ const script = document.currentScript || document.querySelector('script[src*="lookbook.js"]');
77
+ const scriptSrc = script.src;
78
+ if (scriptSrc && scriptSrc.includes("lookbook-assets")) return scriptSrc.replace("lookbook-assets/js/lookbook.js", "lookbook");
79
+ return `//${location.host}/lookbook`;
80
+ }
81
+ document.addEventListener("DOMContentLoaded", ()=>$8c6f87050723dba0$var$initEmbeds());
82
+
83
+
84
+
85
+ })();
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["app/assets/lookbook/js/lookbook-core.js","app/assets/lookbook/js/lib/lookbook.js"],"sourcesContent":["import \"./lib/lookbook\";\n","window.Lookbook = window.Lookbook || {};\nwindow.Lookbook.initEmbeds = initEmbeds;\n\nconst embedUrlPrefix = \"embed\";\nconst whiteListedAttributes = [\n \"preview\",\n \"scenario\",\n \"panels\",\n \"actions\",\n \"param-*\",\n];\n\nfunction initEmbeds() {\n if (typeof window.iFrameResize !== \"function\") {\n console.error(\n \"Lookbook embeds require the 'iframe-resizer' library to be available. Skipping embed instantiation.\"\n );\n return;\n }\n\n const embeds = Array.from(document.querySelectorAll(\"lookbook-embed\"));\n\n embeds.forEach((embed) => {\n const attrs = Array.from(embed.attributes);\n const wrapper = createWrapper();\n const iframe = createIframe(attrs);\n\n wrapper.appendChild(iframe);\n embed.replaceWith(wrapper);\n });\n\n window.iFrameResize({ checkOrigin: false }, \"[data-lookbook-embed-iframe]\");\n}\n\nfunction createWrapper() {\n const wrapper = document.createElement(\"div\");\n\n wrapper.setAttribute(\"data-lookbook-embed\", true);\n wrapper.classList.add(\"lookbook-embed\");\n\n return wrapper;\n}\n\nfunction createIframe(attrs) {\n const src = buildSrc(attrs);\n const id = attrValue(attrs, \"id\");\n const styles = attrValue(attrs, \"style\");\n const classes = attrValue(attrs, \"class\", \"\")\n .split(\" \")\n .map((c) => c.trim())\n .filter((c) => c.length);\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = src;\n if (id) iframe.id = id;\n\n iframe.setAttribute(\"frameborder\", 0);\n iframe.setAttribute(\"data-lookbook-embed-iframe\", true);\n\n if (classes.length) iframe.classList.add(...classes);\n if (styles) iframe.style.cssText = styles;\n\n iframe.style.width = \"100%\";\n iframe.style.transition = \"height 0.3s\";\n\n return iframe;\n}\n\nfunction buildSrc(attrs) {\n const appPath = attrValue(attrs, \"app\") || guessBasePath();\n const props = {};\n\n permittedAttrs(attrs).forEach(({ name, value }) => {\n console.log(name, value);\n name = name.replace(\"-\", \"_\").toLowerCase();\n props[name] = value;\n });\n\n return encodeURI(\n [appPath, embedUrlPrefix].join(\"/\") + `?props=${JSON.stringify(props)}`\n );\n}\n\nfunction attrValue(attrs, name, fallback = null) {\n const attr = attrs.find((attr) => attr.name === name);\n return attr ? attr.value : fallback;\n}\n\nfunction permittedAttrs(attrs) {\n return attrs.filter((attr) => {\n return whiteListedAttributes.find((key) => {\n const name = attr.name;\n return (\n key === name ||\n (key.includes(\"*\") && name.startsWith(key.replace(\"*\", \"\")))\n );\n });\n });\n}\n\nfunction guessBasePath() {\n const script =\n document.currentScript ||\n document.querySelector('script[src*=\"lookbook.js\"]');\n const scriptSrc = script.src;\n\n if (scriptSrc && scriptSrc.includes(\"lookbook-assets\")) {\n return scriptSrc.replace(\"lookbook-assets/js/lookbook.js\", \"lookbook\");\n }\n\n return `//${location.host}/lookbook`;\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => initEmbeds());\n"],"names":[],"version":3,"file":"lookbook-core.js.map"}