lookbook 1.5.5 → 2.0.0.beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,82 +1,107 @@
1
- <% content_for :shell do %>
2
- <% if @previews.any? || @pages.any? %>
3
-
4
- <%= lookbook_render :split_layout,
5
- alpine_data: "$store.layout.main",
6
- ":class": "$store.layout.mobile && '!block'" do |layout| %>
1
+ <% content_for :body do %>
2
+ <div
3
+ id="app"
4
+ x-data="app"
5
+ x-cloak
6
+ @popstate.window="handleNavigation"
7
+ @click.document="hijax"
8
+ @navigation:start="closeMobileSidebar"
9
+ class="w-screen h-screen grid grid-rows-[40px_1fr] relative">
7
10
 
8
- <% layout.with_pane id: "app-sidebar", class: "flex flex-col bg-lookbook-sidebar-bg relative translate-x-0",
9
- ":class": "{
10
- 'transition': $store.layout.mobile,
11
- 'translate-x-full': $store.layout.mobile && sidebarHidden,
12
- '!absolute right-0 bottom-0 top-[40px] h-[calc(100%_-_40px)] w-full max-w-[420px] z-50 border-l border-lookbook-divider': $store.layout.mobile
13
- }",
14
- "@click.outside": "closeMobileSidebar",
15
- cloak: true do %>
16
- <% cache Lookbook::Engine.last_changed do %>
17
- <%= lookbook_render :split_layout,
18
- alpine_data: "$store.layout.#{@pages.any? && @previews.any? ? "sidebar" : "singleSectionSidebar"}",
19
- style: "height: calc(100vh - 2.5rem);" do |layout| %>
11
+ <%= render "lookbook/partials/user_styles" %>
20
12
 
21
- <% if @previews.any? %>
22
- <% layout.with_pane class: "overflow-hidden" do %>
23
- <%= lookbook_render :nav,
24
- id: "previews-nav",
25
- tree: @previews.to_tree,
26
- alpine_data: "$store.nav.previews" do |nav| %>
27
- <%= nav.with_toolbar do |toolbar| %>
28
- <% toolbar.with_section padded: true do %>
29
- <h4 class="pt-1">Previews</h4>
30
- <% end %>
31
- <% toolbar.with_section align: :right, padded: false do %>
32
- <%= lookbook_render :button_group, size: :xs do |group| %>
33
- <% group.with_button icon: :minus_square,
34
- tooltip: "Collapse all",
35
- "@click": "closeAll" %>
13
+ <%= lookbook_render :header, id: "app-header", debug_menu: @config.debug_menu do |header| %>
14
+ <% header.branding { @config.project_name } %>
15
+ <% end %>
16
+
17
+ <% if @previews.any? || @pages.any? %>
18
+
19
+ <%= lookbook_render :split_layout,
20
+ alpine_data: "$store.layout.main",
21
+ ":class": "$store.layout.mobile && '!block'" do |layout| %>
22
+
23
+ <% layout.with_pane id: "app-sidebar", class: "flex flex-col bg-lookbook-sidebar-bg relative translate-x-0",
24
+ ":class": "{
25
+ 'transition': $store.layout.mobile,
26
+ 'translate-x-full': $store.layout.mobile && sidebarHidden,
27
+ '!absolute right-0 bottom-0 top-[40px] h-[calc(100%_-_40px)] w-full max-w-[420px] z-50 border-l border-lookbook-divider': $store.layout.mobile
28
+ }",
29
+ "@click.outside": "closeMobileSidebar",
30
+ cloak: true do %>
31
+
32
+ <% cache do %>
33
+
34
+ <%= lookbook_render :split_layout,
35
+ alpine_data: "$store.layout.#{@pages.any? && @previews.any? ? "sidebar" : "singleSectionSidebar"}",
36
+ style: "height: calc(100vh - 2.5rem);" do |layout| %>
37
+
38
+ <% if @previews.any? %>
39
+ <% layout.with_pane class: "overflow-hidden" do %>
40
+ <%= lookbook_render :nav,
41
+ id: "previews-nav",
42
+ tree: @previews.to_tree,
43
+ alpine_data: "$store.nav.previews" do |nav| %>
44
+ <%= nav.with_toolbar do |toolbar| %>
45
+ <% toolbar.with_section padded: true do %>
46
+ <h4 class="pt-1">Previews</h4>
47
+ <% end %>
48
+ <% toolbar.with_section align: :right, padded: false do %>
49
+ <%= lookbook_render :button_group, size: :xs do |group| %>
50
+ <% group.with_button icon: :minus_square,
51
+ tooltip: "Collapse all",
52
+ "@click": "closeAll" %>
53
+ <% end %>
36
54
  <% end %>
37
55
  <% end %>
56
+ <% nav.filter store: "$store.nav.previews.filter", placeholder: "Filter previews by name&hellip;" %>
38
57
  <% end %>
39
- <% nav.with_filter store: "$store.nav.previews.filter", placeholder: "Filter previews by name&hellip;" %>
40
58
  <% end %>
41
59
  <% end %>
42
- <% end %>
43
60
 
44
- <% if @pages.any? %>
45
- <% layout.with_pane class: "overflow-hidden" do %>
46
- <%= lookbook_render :nav,
47
- id: "pages-nav",
48
- tree: @pages.to_tree,
49
- alpine_data: "$store.nav.pages" do |nav| %>
50
- <%= nav.with_toolbar do |toolbar| %>
51
- <% toolbar.with_section padded: true do %>
52
- <h4 class="pt-1">Pages</h4>
53
- <% end %>
54
- <% toolbar.with_section align: :right, padded: false do %>
55
- <%= lookbook_render :button_group, size: :xs do |group| %>
56
- <% group.with_button icon: :minus_square,
57
- tooltip: "Collapse all",
58
- "@click": "closeAll" %>
61
+ <% if @pages.any? %>
62
+ <% layout.with_pane class: "overflow-hidden" do %>
63
+ <%= lookbook_render :nav,
64
+ id: "pages-nav",
65
+ tree: @pages.to_tree,
66
+ alpine_data: "$store.nav.pages" do |nav| %>
67
+ <%= nav.with_toolbar do |toolbar| %>
68
+ <% toolbar.with_section padded: true do %>
69
+ <h4 class="pt-1">Pages</h4>
70
+ <% end %>
71
+ <% toolbar.with_section align: :right, padded: false do %>
72
+ <%= lookbook_render :button_group, size: :xs do |group| %>
73
+ <% group.with_button icon: :minus_square,
74
+ tooltip: "Collapse all",
75
+ "@click": "closeAll" %>
76
+ <% end %>
59
77
  <% end %>
60
78
  <% end %>
61
79
  <% end %>
62
80
  <% end %>
63
81
  <% end %>
64
82
  <% end %>
83
+
65
84
  <% end %>
66
85
  <% end %>
67
- <% end %>
68
86
 
69
- <% layout.with_pane id: "app-main", class: "overflow-hidden h-full", ":class": "$store.layout.mobile && 'w-screen'" do %>
70
- <%= content_for?(:main) ? yield(:main) : yield %>
87
+ <% layout.with_pane id: "app-main", class: "overflow-hidden h-full", ":class": "$store.layout.mobile && 'w-screen'" do %>
88
+ <%= content_for?(:main) ? yield(:main) : yield %>
89
+ <% end %>
71
90
  <% end %>
91
+ <% else %>
92
+ <div id="app-main" class="w-screen h-full overflow-hidden">
93
+ <%= content_for?(:main) ? yield(:main) : yield %>
94
+ </div>
72
95
  <% end %>
73
96
 
74
- <% else %>
75
- <div id="app-main" class="w-screen h-full overflow-hidden">
76
- <%= content_for?(:main) ? yield(:main) : yield %>
77
- </div>
78
- <% end %>
79
- <div class="absolute opacity-0 bg-black inset-0 top-[39px] z-[-1] transition-opacity" :class="($store.layout.mobile && !sidebarHidden) && '!opacity-30 !z-40'" data-cloak></div>
97
+ <div class="absolute opacity-0 bg-black inset-0 top-[39px] z-[-1] transition-opacity" :class="($store.layout.mobile && !sidebarHidden) && '!opacity-30 !z-40'" data-cloak></div>
98
+
99
+ <% if content_for? :dropdowns %>
100
+ <div class="hidden">
101
+ <%= content_for :dropdowns -%>
102
+ </div>
103
+ <% end %>
104
+ </div>
80
105
  <% end %>
81
106
 
82
- <%= render template: "layouts/lookbook/shell" %>
107
+ <%= render template: "layouts/lookbook/skeleton" %>
@@ -0,0 +1,16 @@
1
+ <% content_for :body do %>
2
+ <div
3
+ id="app"
4
+ x-data="app"
5
+ x-cloak
6
+ @popstate.window="handleNavigation"
7
+ @click.document="hijax"
8
+ class="overflow-hidden">
9
+
10
+ <%= render "lookbook/partials/user_styles" %>
11
+
12
+ <%= content_for?(:main) ? yield(:main) : yield %>
13
+ </div>
14
+ <% end %>
15
+
16
+ <%= render template: "layouts/lookbook/skeleton" %>
@@ -15,7 +15,7 @@
15
15
  <% end %>
16
16
 
17
17
  <%= lookbook_render :header, id: "app-header", debug_menu: @config.debug_menu do |header| %>
18
- <% header.with_branding { @config.project_name } %>
18
+ <% header.branding { @config.project_name } %>
19
19
  <% end %>
20
20
 
21
21
  <%= content_for?(:shell) ? yield(:shell) : yield %>
@@ -5,8 +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
- <link href="<%= asset_path("/css/lookbook.css") %>" rel="stylesheet">
9
- <link href="<%= asset_path("/css/themes/#{@config.ui_theme}.css") %>" rel="stylesheet">
8
+ <link href="<%= lookbook_asset_path("/css/lookbook.css") %>" rel="stylesheet">
9
+ <link href="<%= lookbook_asset_path("/css/themes/#{@config.ui_theme}.css") %>" rel="stylesheet">
10
10
 
11
11
  <%- if @theme_overrides.present? %>
12
12
  <style media="all">
@@ -17,11 +17,11 @@
17
17
  <% if @config.ui_favicon == true %>
18
18
  <link
19
19
  rel="icon"
20
- href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode theme.favicon_dark_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
20
+ href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode @theme.favicon_dark_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
21
21
  media="(prefers-color-scheme: dark)">
22
22
  <link
23
23
  rel="icon"
24
- href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode theme.favicon_light_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
24
+ href="data:image/svg+xml,%3Csvg width='96' height='84' viewBox='0 0 96 84' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath d='M96 0v84H0V0h96Z'/%3E%3C/clipPath%3E%3CclipPath id='b'%3E%3Cpath d='M71.897 0a1.5 1.5 0 0 1 1.31.769l22.605 40.5a1.5 1.5 0 0 1 0 1.462l-22.605 40.5a1.5 1.5 0 0 1-1.31.769H49.481a1 1 0 0 1-.873-1.487L70.812 42.73a1.5 1.5 0 0 0 0-1.462L48.608 1.487A1 1 0 0 1 49.481 0ZM24.655.564l22.72 40.705a1.5 1.5 0 0 1 0 1.462l-22.72 40.705a1 1 0 0 1-1.746 0L.19 42.73a1.5 1.5 0 0 1 0-1.462L22.91.564a1 1 0 0 1 1.746 0Z'/%3E%3C/clipPath%3E%3C/defs%3E%3Cg clip-path='url(%23a)'%3E%3Cg clip-path='url(%23b)'%3E%3Cpath fill='<%= url_encode @theme.favicon_light_mode %>' d='M0 0h96v84H0V0z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"
25
25
  media="(prefers-color-scheme: light)">
26
26
  <% end %>
27
27
 
@@ -32,15 +32,20 @@
32
32
  window.SOCKET_PATH = "<%= @engine.websocket.full_mount_path %>";
33
33
  <% end %>
34
34
  </script>
35
+
36
+ <script src="<%= lookbook_asset_path("/js/index.js") %>" defer></script>
35
37
 
36
- <script src="<%= asset_path("/js/lookbook.js") %>" defer></script>
37
- <% if params[:lookbook_embed] %>
38
- <script src="<%= asset_path("/js/embed.js") %>" defer></script>
38
+ <% if @embed %>
39
+ <%= render "lookbook/partials/iframe_content_scripts" %>
40
+ <% else %>
41
+ <script src="<%= lookbook_asset_path("/js/lookbook.js") %>" defer></script>
39
42
  <% end %>
40
43
 
44
+ <%= content_for :scripts %>
45
+
41
46
  <title><%= [@title, @config.project_name || "Lookbook"].compact.join(" :: ") %></title>
42
47
  </head>
43
48
  <body>
44
- <%= yield :body %>
49
+ <%= content_for?(:body) ? yield(:body) : yield %>
45
50
  </body>
46
51
  </html>
@@ -3,11 +3,11 @@
3
3
  <%= icon :alert_triangle, size: 10, class: "text-red-300 mx-auto" %>
4
4
  <div class="mt-3">
5
5
  <h5 class="text-base">
6
- <%= message %>
6
+ <%== message %>
7
7
  </h5>
8
8
  <% if defined?(description) %>
9
9
  <p class="mt-2 opacity-50 text-sm">
10
- <%= description %>
10
+ <%== description %>
11
11
  </p>
12
12
  <% end %>
13
13
  </div>
@@ -0,0 +1,12 @@
1
+ <%= lookbook_render "embed/inspector",
2
+ target: @target,
3
+ scenarios: @scenario_choices,
4
+ panels: @panels,
5
+ actions: @actions,
6
+ options: @options,
7
+ context: {
8
+ data: @inspector_data,
9
+ params: @passed_params,
10
+ dynamic_display_options: @dynamic_display_options,
11
+ static_display_options: @static_display_options
12
+ } %>
@@ -1,4 +1,4 @@
1
- <% items = examples.select { |example| example.notes.present? } %>
1
+ <% items = scenarios.select { |scenario| scenario.notes.present? } %>
2
2
  <% if items.many? %>
3
3
  <div class="divide-y divide-dashed divide-lookbook-divider bg-lookbook-prose-bg h-full w-full">
4
4
  <% items.each do |item| %>
@@ -1,7 +1,7 @@
1
1
  <%= lookbook_render :code, line_numbers: true, full_height: true do -%>
2
- <% if examples.many? -%>
3
- <% examples.each do |example| -%><%== "<!-- #{example.label} -->\n#{beautify(example.output)}\n\n" -%><% end %>
2
+ <% if scenarios.many? -%>
3
+ <% scenarios.each do |scenario| -%><%== "<!-- #{scenario.label} -->\n#{scenario.output}\n\n" -%><% end %>
4
4
  <%- else -%>
5
- <%== beautify(examples.first.output) -%>
5
+ <%== scenarios.first.output -%>
6
6
  <%- end %>
7
7
  <% end %>
@@ -1,11 +1,11 @@
1
1
  <div class="h-full">
2
- <% if examples.many? %>
3
- <%= lookbook_render :code, language: examples.first.source_lang[:name], line_numbers: true, full_height: true do -%>
4
- <%- examples.each.with_index(1) do |example, i| -%>
5
- <%== "#{sprintf example.source_lang[:comment], example.label}\n#{example.source}\n#{"\n" if i < examples.size}" %><% end %>
2
+ <% if scenarios.many? %>
3
+ <%= lookbook_render :code, language: scenarios.first.source_lang[:name], line_numbers: true, full_height: true do -%>
4
+ <%- scenarios.each.with_index(1) do |scenario, i| -%>
5
+ <%== "#{sprintf scenario.source_lang[:comment], scenario.label}\n#{scenario.source}\n#{"\n" if i < scenarios.size}" %><% end %>
6
6
  <% end %>
7
7
  <% else %>
8
- <% example = examples.first %>
9
- <%= lookbook_render :code, language: example.source_lang[:name], line_numbers: true, full_height: true do %><%== example.source %><% end %>
8
+ <% scenario = scenarios.first %>
9
+ <%= lookbook_render :code, language: scenario.source_lang[:name], line_numbers: true, full_height: true do %><%== scenario.source %><% end %>
10
10
  <% end %>
11
11
  </div>
@@ -1,150 +1,157 @@
1
- <%= lookbook_render :split_layout,
2
- alpine_data: "$store.layout.inspector",
3
- ":class": "($store.inspector.drawer.hidden || #{@drawer_panels.none?}) && '!grid-rows-[1fr] !grid-cols-[1fr]'",
4
- data: {
5
- "preview-target": @target.id
6
- } do |layout| %>
7
-
8
- <%= layout.with_pane class: "flex flex-col h-full overflow-hidden",
9
- "x-effect": "forceOrientation = (layoutWidth < $store.inspector.minVerticalSplitWidth) ? 'horizontal' : null" do %>
10
-
11
- <%= lookbook_render :toolbar, id: "main-toolbar" do |toolbar| %>
12
- <% toolbar.with_section ":class": "layoutResizing && 'overflow-hidden'" do %>
13
- <%= lookbook_render :tabs, alpine_data: "$store.inspector.main", id: "inspector-tabs-main" do |tabs| %>
14
- <%= @main_panels.each do |panel| %>
15
- <% tabs.with_tab name: panel.name,
16
- label: panel.label,
17
- hotkey: panel.hotkey,
18
- disabled: panel.disabled %>
1
+ <main class="h-[calc(100vh_-_2.5rem)]">
2
+ <%= lookbook_render :split_layout,
3
+ alpine_data: "$store.layout.inspector",
4
+ ":class": "($store.inspector.drawer.hidden || #{@drawer_panels.none?}) && '!grid-rows-[1fr] !grid-cols-[1fr]'",
5
+ data: {
6
+ "preview-target": @target.id
7
+ } do |layout| %>
8
+
9
+ <%= layout.with_pane class: "flex flex-col h-full overflow-hidden",
10
+ "x-effect": "forceOrientation = (layoutWidth < $store.inspector.minVerticalSplitWidth) ? 'horizontal' : null" do %>
11
+
12
+ <%= lookbook_render :toolbar, id: "main-toolbar" do |toolbar| %>
13
+ <% toolbar.with_section ":class": "layoutResizing && 'overflow-hidden'" do %>
14
+ <%= lookbook_render :tabs, alpine_data: "$store.inspector.main", id: "inspector-tabs-main" do |tabs| %>
15
+ <%= @main_panels.each do |panel| %>
16
+ <% tabs.with_tab name: panel.name,
17
+ label: panel.label,
18
+ hotkey: panel.hotkey,
19
+ disabled: panel.disabled %>
20
+ <% end %>
19
21
  <% end %>
20
22
  <% end %>
21
- <% end %>
22
23
 
23
- <% toolbar.with_section align: :right, class: "flex-none" do %>
24
- <% if @dynamic_display_options.any? %>
25
- <%= lookbook_render "display_options/editor" do |editor| %>
26
- <% @dynamic_display_options.each do |key, opts| %>
27
- <% editor.with_field name: key, opts: opts, value: @static_display_options[key] %>
24
+ <% toolbar.with_section align: :right, class: "flex-none" do %>
25
+ <% if @dynamic_display_options.any? %>
26
+ <%= lookbook_render "display_options/editor" do |editor| %>
27
+ <% @dynamic_display_options.each do |key, opts| %>
28
+ <% editor.with_field name: key, opts: opts, value: @static_display_options[key] %>
29
+ <% end %>
28
30
  <% end %>
29
31
  <% end %>
30
32
  <% end %>
31
- <% end %>
32
-
33
- <% toolbar.with_section divide: :left, class: "flex-none relative z-10" do %>
34
- <%= lookbook_render :button_group do |group| %>
35
- <% group.with_button icon: :link,
36
- tooltip: "Copy preview URL",
37
- copy: true do %>
38
- <%= lookbook_inspect_url(@target.lookup_path, request.query_parameters) %>
39
- <% end %>
40
33
 
41
- <% if @pages.any? %>
42
- <% group.with_button icon: :code,
43
- tooltip: "Copy page embed code",
34
+ <% toolbar.with_section divide: :left, class: "flex-none relative z-10" do %>
35
+ <%= lookbook_render :button_group do |group| %>
36
+ <%= group.with_button id: "embed-generator-dropdown-button", icon: :code_2, tooltip: "Get embed code" do |button| %>
37
+ <% button.with_dropdown.with_content(lookbook_render :embed_code_dropdown,
38
+ pages: @pages,
39
+ preview: @preview,
40
+ target: @target,
41
+ params: request.query_parameters
42
+ ) %>
43
+ <% end %>
44
+ <% group.with_button id: "copy-preview-url-button",
45
+ icon: :link,
46
+ tooltip: "Copy preview URL",
44
47
  copy: true do %>
45
- &lt;%= embed <%= @preview.preview_class_name %>, :<%= @target.name %>, params: <%= request.query_parameters.deep_symbolize_keys.to_s %> %&gt;
48
+ <%= lookbook_inspect_url(@target.lookup_path, request.query_parameters) %>
46
49
  <% end %>
50
+
51
+ <% group.with_button id: "refresh-preview-button",
52
+ icon: :refresh_cw,
53
+ tooltip: "Refresh preview",
54
+ "@click.stop": "startSpin(); $dispatch('viewport:reload'); stopSpin(500);" %>
55
+
56
+ <% group.with_button id: "open-preview-button",
57
+ icon: :external_link,
58
+ href: lookbook_preview_path(@target.lookup_path, request.query_parameters),
59
+ tooltip: "Open preview in new window",
60
+ target: "_blank" %>
61
+
62
+ <% group.with_button id: "show-drawer-button",
63
+ icon: "vertical ? 'sidebar' : 'credit-card'",
64
+ tooltip: "Show drawer",
65
+ "@click": "$store.inspector.drawer.hidden = false",
66
+ class: "rotate-180",
67
+ "x-show": "$store.inspector.drawer.hidden",
68
+ cloak: true %>
47
69
  <% end %>
48
-
49
- <% group.with_button icon: :refresh_cw,
50
- tooltip: "Refresh preview",
51
- "@click.stop": "startSpin(); $dispatch('viewport:reload'); stopSpin(500);" %>
52
-
53
- <% group.with_button icon: :external_link,
54
- href: lookbook_preview_path(@target.lookup_path, request.query_parameters),
55
- tooltip: "Open preview in new window",
56
- target: "_blank" %>
57
-
58
- <% group.with_button icon: "vertical ? 'sidebar' : 'credit-card'",
59
- tooltip: "Show drawer",
60
- "@click": "$store.inspector.drawer.hidden = false",
61
- class: "rotate-180",
62
- "x-show": "$store.inspector.drawer.hidden",
63
- cloak: true %>
64
70
  <% end %>
65
71
  <% end %>
66
- <% end %>
67
72
 
68
- <div class="h-full relative overflow-auto">
69
- <%= lookbook_render :tab_panels, alpine_data: "$store.inspector.main", id: "inspector-panels-main" do |tabs| %>
70
- <% @main_panels.each do |panel| %>
71
- <% tabs.with_panel name: panel.name do %>
72
- <%= lookbook_render :inspector_panel, name: panel.name do %>
73
- <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
73
+ <div class="h-full relative overflow-auto">
74
+ <%= lookbook_render :tab_panels, alpine_data: "$store.inspector.main", id: "inspector-panels-main" do |tabs| %>
75
+ <% @main_panels.each do |panel| %>
76
+ <% tabs.with_panel name: panel.name do %>
77
+ <%= lookbook_render :inspector_panel, name: panel.name do %>
78
+ <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
79
+ <% end %>
74
80
  <% end %>
75
81
  <% end %>
76
82
  <% end %>
77
- <% end %>
78
- </div>
79
- <% end %>
80
-
81
- <%= layout.with_pane class: "flex flex-col h-full overflow-hidden bg-lookbook-drawer-bg",
82
- "x-show": "!$store.inspector.drawer.hidden && #{@drawer_panels.any?}" do %>
83
+ </div>
84
+ <% end %>
83
85
 
84
- <%= lookbook_render :toolbar, id: "drawer-toolbar" do |toolbar| %>
85
- <% toolbar.with_section ":class": "layoutResizing && 'overflow-hidden'" do %>
86
- <%= lookbook_render :tabs, alpine_data: "$store.inspector.drawer", id: "inspector-tabs-drawer" do |tabs| %>
87
- <%= @drawer_panels.each do |panel| %>
88
- <% tabs.with_tab name: panel.name,
89
- label: panel.label,
90
- hotkey: panel.hotkey,
91
- disabled: panel.disabled %>
86
+ <%= layout.with_pane class: "flex flex-col h-full overflow-hidden bg-lookbook-drawer-bg",
87
+ "x-show": "!$store.inspector.drawer.hidden && #{@drawer_panels.any?}" do %>
88
+
89
+ <%= lookbook_render :toolbar, id: "drawer-toolbar" do |toolbar| %>
90
+ <% toolbar.with_section ":class": "layoutResizing && 'overflow-hidden'" do %>
91
+ <%= lookbook_render :tabs, alpine_data: "$store.inspector.drawer", id: "inspector-tabs-drawer" do |tabs| %>
92
+ <%= @drawer_panels.each do |panel| %>
93
+ <% tabs.with_tab name: panel.name,
94
+ label: panel.label,
95
+ hotkey: panel.hotkey,
96
+ disabled: panel.disabled %>
97
+ <% end %>
92
98
  <% end %>
93
99
  <% end %>
94
- <% end %>
95
100
 
96
- <% toolbar.with_section align: :right, class: "flex-none relative z-10" do %>
97
- <%= lookbook_render :button_group do |group| %>
98
- <%= @drawer_panels.select { |p| !p.disabled && p.copy }.each do |panel| %>
99
- <% group.with_button icon: :copy,
100
- tooltip: "Copy panel contents",
101
- copy: !!panel.copy,
102
- "x-show": "$store.inspector.drawer.activeTab === '#{panel.name}'",
103
- cloak: true do %>
104
- <%= panel.copy ? panel.copy : "" %>
105
- <% end %>
106
- <% end %>
101
+ <% toolbar.with_section align: :right, class: "flex-none relative z-10" do %>
102
+ <%= lookbook_render :button_group do |group| %>
103
+ <%= @drawer_panels.select { |p| !p.disabled && p.copy }.each do |panel| %>
104
+ <% group.with_button id: "copy-panel-contents-button",
105
+ icon: :copy,
106
+ tooltip: "Copy panel contents",
107
+ copy: !!panel.copy,
108
+ "x-show": "$store.inspector.drawer.activeTab === '#{panel.name}'",
109
+ cloak: true do %>
110
+ <%= panel.copy ? panel.copy : "" %>
111
+ <% end %>
112
+ <% end %>
113
+ <% end %>
107
114
  <% end %>
108
- <% end %>
109
-
110
- <% toolbar.with_section divide: :left, class: "flex-none relative z-10" do %>
111
- <%= lookbook_render :button_group do |group| %>
112
-
113
- <% group.with_button icon: :corner_up_right,
114
- tooltip: "Move drawer to right",
115
- "@click": "switchOrientation",
116
- "x-show": "horizontal && layoutWidth > $store.inspector.minVerticalSplitWidth",
117
- cloak: true %>
118
-
119
- <% group.with_button icon: :corner_up_right,
120
- "x-show": "horizontal && layoutWidth <= $store.inspector.minVerticalSplitWidth",
121
- disabled: true,
122
- cloak: true %>
123
115
 
124
- <% group.with_button icon: :corner_left_down,
125
- tooltip: "Move drawer to bottom",
126
- "@click": "switchOrientation",
127
- "x-show": "vertical",
128
- cloak: true %>
129
-
130
- <% group.with_button icon: :x_circle,
131
- tooltip: "Hide drawer",
132
- "@click": "$store.inspector.drawer.hidden = true",
133
- cloak: true %>
116
+ <% toolbar.with_section divide: :left, class: "flex-none relative z-10" do %>
117
+ <%= lookbook_render :button_group do |group| %>
118
+
119
+ <% group.with_button id: "drawer-to-right-button",
120
+ icon: :sidebar_open,
121
+ tooltip: "Pin drawer on right",
122
+ "@click": "switchOrientation",
123
+ "x-show": "horizontal",
124
+ ":class": "{'pointer-events-none opacity-50 !cursor-not-allowed': horizontal && layoutWidth <= $store.inspector.minVerticalSplitWidth}",
125
+ cloak: true %>
126
+
127
+ <% group.with_button id: "drawer-to-bottom-button",
128
+ icon: :sidebar_open,
129
+ tooltip: "Pin drawer on bottom",
130
+ "@click": "switchOrientation",
131
+ "x-show": "vertical",
132
+ class: "rotate-90",
133
+ cloak: true %>
134
+
135
+ <% group.with_button id: "hide-drawer-button",
136
+ icon: :x_circle,
137
+ tooltip: "Hide drawer",
138
+ "@click": "$store.inspector.drawer.hidden = true",
139
+ cloak: true %>
140
+ <% end %>
134
141
  <% end %>
135
- <% end %>
136
- <% end %>
137
-
138
- <div class="h-full overflow-auto">
139
- <%= lookbook_render :tab_panels, alpine_data: "$store.inspector.drawer", id: "inspector-panels-drawer" do |tabs| %>
140
- <% @drawer_panels.each do |panel| %>
141
- <% tabs.with_panel name: panel.name do %>
142
- <%= lookbook_render :inspector_panel, name: panel.name do %>
143
- <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
142
+ <% end %>
143
+
144
+ <div class="h-full overflow-auto">
145
+ <%= lookbook_render :tab_panels, alpine_data: "$store.inspector.drawer", id: "inspector-panels-drawer" do |tabs| %>
146
+ <% @drawer_panels.each do |panel| %>
147
+ <% tabs.with_panel name: panel.name do %>
148
+ <%= lookbook_render :inspector_panel, name: panel.name do %>
149
+ <%= render panel.partial, **@inspector_data, panel: panel, **panel.locals %>
150
+ <% end %>
144
151
  <% end %>
145
152
  <% end %>
146
153
  <% end %>
147
- <% end %>
148
- </div>
154
+ </div>
155
+ <% end %>
149
156
  <% end %>
150
- <% end %>
157
+ </main>