lookbook 3.0.0.alpha.1 → 3.0.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -261
  3. data/app/components/lookbook/ui/app/router/router.html.erb +1 -0
  4. data/app/components/lookbook/ui/app/router/router.js +29 -3
  5. data/app/components/lookbook/ui/elements/nav/nav_item/nav_item.js +2 -4
  6. data/app/components/lookbook/ui/elements/viewport/viewport.css +1 -0
  7. data/app/components/lookbook/ui/elements/viewport/viewport.html.erb +0 -1
  8. data/app/components/lookbook/ui/elements/viewport/viewport.rb +1 -6
  9. data/app/components/lookbook/ui/previews/preview_embed/preview_embed.html.erb +1 -2
  10. data/app/components/lookbook/ui/previews/preview_embed/preview_embed.rb +5 -4
  11. data/app/components/lookbook/ui/previews/preview_inspector/preview_inspector.html.erb +2 -2
  12. data/app/components/lookbook/ui/previews/preview_inspector/preview_inspector.rb +3 -2
  13. data/app/controllers/lookbook/events_controller.rb +4 -0
  14. data/app/controllers/lookbook/previews_controller.rb +1 -1
  15. data/app/views/layouts/lookbook/embed.html.erb +1 -1
  16. data/app/views/lookbook/inspector/panels/_preview.html.erb +1 -2
  17. data/app/views/lookbook/previews/embed.html.erb +1 -1
  18. data/app/views/lookbook/previews/inspect.html.erb +1 -0
  19. data/app/views/lookbook/previews/scenario.html.erb +5 -1
  20. data/config/initializers/05_autoload_previews.rb +2 -2
  21. data/config/routes.rb +2 -1
  22. data/lib/lookbook/concerns/feature_checks.rb +17 -0
  23. data/lib/lookbook/config.rb +2 -3
  24. data/lib/lookbook/directory_entity.rb +72 -0
  25. data/lib/lookbook/engine.rb +1 -1
  26. data/lib/lookbook/entity.rb +4 -2
  27. data/lib/lookbook/entity_tree.rb +17 -2
  28. data/lib/lookbook/pages/page_directories.rb +20 -0
  29. data/lib/lookbook/pages/page_directory_entity.rb +9 -40
  30. data/lib/lookbook/pages/page_entity.rb +4 -2
  31. data/lib/lookbook/pages/pages.rb +5 -14
  32. data/lib/lookbook/previews/preview_directories.rb +20 -0
  33. data/lib/lookbook/previews/preview_directory_entity.rb +8 -35
  34. data/lib/lookbook/previews/preview_entity.rb +7 -8
  35. data/lib/lookbook/previews/previews.rb +14 -15
  36. data/lib/lookbook/previews/scenario_entity.rb +1 -1
  37. data/lib/lookbook/reloader.rb +3 -6
  38. data/lib/lookbook/services/list_resolver.rb +13 -2
  39. data/lib/lookbook/services/styles_extractor.rb +1 -1
  40. data/lib/lookbook/utils.rb +4 -0
  41. data/lib/lookbook/version.rb +1 -1
  42. data/lib/lookbook.rb +0 -1
  43. data/public/lookbook-assets/app.css +2 -0
  44. data/public/lookbook-assets/app.js +48 -8
  45. metadata +6 -17
  46. data/lib/lookbook/previews/tags/priority_tag.rb +0 -11
@@ -7942,16 +7942,19 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
7942
7942
  constructor(endpoint) {
7943
7943
  this.endpoint = endpoint;
7944
7944
  this.source = null;
7945
+ this.broadcastChannel = this.initBroadCastChannel();
7945
7946
  this.handlers = [];
7946
7947
  this.$logger = new Logger("EventsListener");
7947
7948
  addEventListener("visibilitychange", () => {
7948
- document.hidden ? this.stop() : this.start();
7949
+ if (!document.hidden)
7950
+ this.start();
7949
7951
  });
7950
7952
  }
7951
7953
  start() {
7952
7954
  if (!this.source) {
7953
7955
  this.$logger.debug(`Starting`);
7954
7956
  this.source = this.initSource();
7957
+ this.broadcastStart();
7955
7958
  }
7956
7959
  }
7957
7960
  stop() {
@@ -7984,6 +7987,21 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
7984
7987
  window.onbeforeunload = () => this.stop();
7985
7988
  return source;
7986
7989
  }
7990
+ initBroadCastChannel() {
7991
+ const bc = new BroadcastChannel("lookbook_events");
7992
+ bc.addEventListener("message", (event) => {
7993
+ const data2 = JSON.parse(event.data);
7994
+ if (data2.type === "event-source-start") {
7995
+ this.stop();
7996
+ }
7997
+ });
7998
+ return bc;
7999
+ }
8000
+ broadcastStart() {
8001
+ this.broadcastChannel.postMessage(
8002
+ JSON.stringify({ type: "event-source-start" })
8003
+ );
8004
+ }
7987
8005
  };
7988
8006
 
7989
8007
  // assets/js/helpers.js
@@ -8017,6 +8035,8 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8017
8035
  return {
8018
8036
  serverEventsListener: null,
8019
8037
  routerLogger: null,
8038
+ lastUpdate: Date.now(),
8039
+ morphing: false,
8020
8040
  init() {
8021
8041
  this.routerLogger = new Logger("Router");
8022
8042
  if (sseEndpoint) {
@@ -8034,6 +8054,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8034
8054
  await this.updateDOM(location, "router", {
8035
8055
  headers: { "X-Lookbook-Frame": "root" }
8036
8056
  });
8057
+ this.lastUpdate = Date.now();
8037
8058
  this.routerLogger.info(`Page updated`);
8038
8059
  this.$dispatch("page-update:complete");
8039
8060
  },
@@ -8045,15 +8066,31 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8045
8066
  if (updateHistory) {
8046
8067
  history.pushState({}, "", result.url);
8047
8068
  }
8069
+ this.lastUpdate = Date.now();
8048
8070
  this.routerLogger.debug(`Page loaded`);
8049
8071
  this.$dispatch("page-load:complete");
8050
8072
  },
8073
+ async handleError(error2) {
8074
+ if (this.morphing) {
8075
+ const { stack } = error2.error;
8076
+ if (stack.indexOf("Alpine") >= 0) {
8077
+ window.location.reload();
8078
+ }
8079
+ }
8080
+ },
8051
8081
  async updateDOM(url, selector, options = {}) {
8082
+ if (this.morphing) {
8083
+ return;
8084
+ }
8052
8085
  const result = await fetchHTML(url, selector, options);
8053
8086
  if (result.status < 500) {
8087
+ this.morphing = true;
8054
8088
  document.dispatchEvent(new CustomEvent("morph:start"));
8055
8089
  Alpine.morph(document.querySelector(selector), result.fragment);
8056
- document.dispatchEvent(new CustomEvent("morph:complete"));
8090
+ this.$nextTick(() => {
8091
+ document.dispatchEvent(new CustomEvent("morph:complete"));
8092
+ this.morphing = false;
8093
+ });
8057
8094
  } else {
8058
8095
  location.href = url;
8059
8096
  }
@@ -8069,9 +8106,13 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8069
8106
  }
8070
8107
  }
8071
8108
  },
8072
- handleVisibilityChange() {
8073
- if (this.serverEventsListener && !document.hidden)
8074
- this.updatePage();
8109
+ async handleVisibilityChange() {
8110
+ if (this.serverEventsListener && !document.hidden) {
8111
+ const response = await fetch(`${sseEndpoint}/ping`);
8112
+ const lastServerUpdate = Date.parse(await response.text());
8113
+ if (lastServerUpdate > this.lastUpdate)
8114
+ this.updatePage();
8115
+ }
8075
8116
  },
8076
8117
  destroy() {
8077
8118
  this.routerLogger.error(`Router instance destroyed!`);
@@ -17830,11 +17871,13 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
17830
17871
  });
17831
17872
  var nav_item_default = AlpineComponent("navItem", ({ keywords, collection }) => {
17832
17873
  return {
17874
+ key: null,
17833
17875
  keywords: [],
17834
17876
  isCollection: false,
17835
17877
  filteredOut: false,
17836
17878
  selected: false,
17837
17879
  init() {
17880
+ this.key = this.$el.getAttribute("key");
17838
17881
  this.keywords = keywords || [];
17839
17882
  this.isCollection = collection || false;
17840
17883
  this.setSelectionState();
@@ -17872,9 +17915,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
17872
17915
  get targetUrl() {
17873
17916
  return this.$root.getAttribute("data-url");
17874
17917
  },
17875
- get key() {
17876
- return this.$root.getAttribute("key");
17877
- },
17878
17918
  get expanded() {
17879
17919
  return this.expandedItems && this.key && this.expandedItems.includes(this.key);
17880
17920
  },
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lookbook
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.alpha.1
4
+ version: 3.0.0.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Perkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-06 00:00:00.000000000 Z
11
+ date: 2024-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: css_parser
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: actionmailer
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: yard
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -281,9 +267,11 @@ files:
281
267
  - lib/lookbook/component/compile_cache.rb
282
268
  - lib/lookbook/component/compiler.rb
283
269
  - lib/lookbook/concerns/entity_tree_node.rb
270
+ - lib/lookbook/concerns/feature_checks.rb
284
271
  - lib/lookbook/concerns/loggable.rb
285
272
  - lib/lookbook/config.rb
286
273
  - lib/lookbook/data_object.rb
274
+ - lib/lookbook/directory_entity.rb
287
275
  - lib/lookbook/engine.rb
288
276
  - lib/lookbook/entity.rb
289
277
  - lib/lookbook/entity_store.rb
@@ -304,6 +292,7 @@ files:
304
292
  - lib/lookbook/markdown/markdown.rb
305
293
  - lib/lookbook/markdown/markdown_renderer.rb
306
294
  - lib/lookbook/notifications.rb
295
+ - lib/lookbook/pages/page_directories.rb
307
296
  - lib/lookbook/pages/page_directory_entity.rb
308
297
  - lib/lookbook/pages/page_entity.rb
309
298
  - lib/lookbook/pages/page_metadata.rb
@@ -313,6 +302,7 @@ files:
313
302
  - lib/lookbook/previews/inspector.rb
314
303
  - lib/lookbook/previews/inspector_target_entity.rb
315
304
  - lib/lookbook/previews/preview.rb
305
+ - lib/lookbook/previews/preview_directories.rb
316
306
  - lib/lookbook/previews/preview_directory_entity.rb
317
307
  - lib/lookbook/previews/preview_entity.rb
318
308
  - lib/lookbook/previews/preview_metadata.rb
@@ -327,7 +317,6 @@ files:
327
317
  - lib/lookbook/previews/tags/label_tag.rb
328
318
  - lib/lookbook/previews/tags/location_tag.rb
329
319
  - lib/lookbook/previews/tags/param_tag.rb
330
- - lib/lookbook/previews/tags/priority_tag.rb
331
320
  - lib/lookbook/previews/tags/status_tag.rb
332
321
  - lib/lookbook/previews/tags/yard_tag.rb
333
322
  - lib/lookbook/project.rb
@@ -1,11 +0,0 @@
1
- module Lookbook
2
- class PriorityTag < YardTag
3
- TAG_NAME = "priority"
4
-
5
- def value
6
- if @text.present?
7
- text.to_i
8
- end
9
- end
10
- end
11
- end