lookbook 0.2.3 → 0.3.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +93 -0
  3. data/app/assets/lookbook/css/app.css +28 -0
  4. data/app/assets/lookbook/js/app.js +49 -24
  5. data/app/assets/lookbook/js/nav/leaf.js +20 -0
  6. data/app/assets/lookbook/js/nav/node.js +31 -0
  7. data/app/assets/lookbook/js/nav.js +39 -0
  8. data/app/assets/lookbook/js/page.js +33 -0
  9. data/app/assets/lookbook/js/utils/clipboard.js +13 -0
  10. data/app/assets/lookbook/js/utils/morph.js +16 -0
  11. data/app/assets/lookbook/js/{reloader.js → utils/reloader.js} +0 -0
  12. data/app/assets/lookbook/js/utils/screen.js +44 -0
  13. data/app/assets/lookbook/js/{size_observer.js → utils/size_observer.js} +1 -1
  14. data/app/assets/lookbook/js/{split.js → utils/split.js} +4 -4
  15. data/app/assets/lookbook/js/workbench/inspector.js +11 -0
  16. data/app/assets/lookbook/js/workbench/preview.js +39 -0
  17. data/app/assets/lookbook/js/workbench.js +14 -0
  18. data/app/controllers/lookbook/{browser_controller.rb → app_controller.rb} +58 -31
  19. data/app/helpers/lookbook/application_helper.rb +1 -1
  20. data/app/views/lookbook/_sidebar.html.erb +45 -0
  21. data/app/views/lookbook/_workbench.html.erb +12 -0
  22. data/app/views/lookbook/{browser → app}/error.html.erb +0 -0
  23. data/app/views/lookbook/app/index.html.erb +11 -0
  24. data/app/views/lookbook/{browser → app}/not_found.html.erb +1 -1
  25. data/app/views/lookbook/app/show.html.erb +1 -0
  26. data/app/views/lookbook/layouts/app.html.erb +16 -26
  27. data/app/views/lookbook/nav/_collection.html.erb +5 -0
  28. data/app/views/lookbook/nav/_leaf.html.erb +21 -0
  29. data/app/views/lookbook/nav/_node.html.erb +19 -0
  30. data/app/views/lookbook/nav/_preview.html.erb +11 -0
  31. data/app/views/lookbook/preview_group.html.erb +8 -0
  32. data/app/views/lookbook/shared/_clipboard.html.erb +11 -0
  33. data/app/views/lookbook/shared/_header.html.erb +8 -0
  34. data/app/views/lookbook/workbench/_header.html.erb +37 -0
  35. data/app/views/lookbook/workbench/_inspector.html.erb +32 -0
  36. data/app/views/lookbook/workbench/_preview.html.erb +24 -0
  37. data/app/views/lookbook/workbench/inspector/_code.html.erb +3 -0
  38. data/app/views/lookbook/workbench/inspector/_notes.html.erb +24 -0
  39. data/app/views/lookbook/{partials → workbench}/inspector/_plain.html.erb +0 -0
  40. data/config/routes.rb +3 -3
  41. data/lib/lookbook/engine.rb +1 -0
  42. data/lib/lookbook/preview.rb +26 -3
  43. data/lib/lookbook/preview_controller.rb +6 -1
  44. data/lib/lookbook/preview_example.rb +3 -2
  45. data/lib/lookbook/preview_group.rb +37 -0
  46. data/lib/lookbook/taggable.rb +5 -1
  47. data/lib/lookbook/version.rb +1 -1
  48. data/lib/lookbook.rb +1 -0
  49. data/lib/tasks/lookbook_tasks.rake +1 -1
  50. data/public/lookbook-assets/app.css +229 -99
  51. data/public/lookbook-assets/app.js +882 -56
  52. data/{app/views/lookbook/partials/_icon_sprite.html.erb → public/lookbook-assets/feather-sprite.svg} +1 -1
  53. metadata +53 -24
  54. data/app/assets/lookbook/js/preview.js +0 -76
  55. data/app/views/lookbook/browser/index.html.erb +0 -8
  56. data/app/views/lookbook/browser/show.html.erb +0 -33
  57. data/app/views/lookbook/partials/_preview.html.erb +0 -18
  58. data/app/views/lookbook/partials/_sidebar.html.erb +0 -21
  59. data/app/views/lookbook/partials/inspector/_code.html.erb +0 -1
  60. data/app/views/lookbook/partials/inspector/_inspector.html.erb +0 -43
  61. data/app/views/lookbook/partials/inspector/_prose.html.erb +0 -3
  62. data/app/views/lookbook/partials/nav/_collection.html.erb +0 -17
  63. data/app/views/lookbook/partials/nav/_label.html.erb +0 -13
  64. data/app/views/lookbook/partials/nav/_nav.html.erb +0 -27
  65. data/app/views/lookbook/partials/nav/_preview.html.erb +0 -48
@@ -631,6 +631,138 @@
631
631
  }
632
632
  });
633
633
 
634
+ // node_modules/@github/hotkey/dist/index.js
635
+ var Leaf = class {
636
+ constructor(trie) {
637
+ this.children = [];
638
+ this.parent = trie;
639
+ }
640
+ delete(value) {
641
+ const index2 = this.children.indexOf(value);
642
+ if (index2 === -1)
643
+ return false;
644
+ this.children = this.children.slice(0, index2).concat(this.children.slice(index2 + 1));
645
+ if (this.children.length === 0) {
646
+ this.parent.delete(this);
647
+ }
648
+ return true;
649
+ }
650
+ add(value) {
651
+ this.children.push(value);
652
+ return this;
653
+ }
654
+ };
655
+ var RadixTrie = class {
656
+ constructor(trie) {
657
+ this.parent = null;
658
+ this.children = {};
659
+ this.parent = trie || null;
660
+ }
661
+ get(edge) {
662
+ return this.children[edge];
663
+ }
664
+ insert(edges) {
665
+ let currentNode = this;
666
+ for (let i = 0; i < edges.length; i += 1) {
667
+ const edge = edges[i];
668
+ let nextNode = currentNode.get(edge);
669
+ if (i === edges.length - 1) {
670
+ if (nextNode instanceof RadixTrie) {
671
+ currentNode.delete(nextNode);
672
+ nextNode = null;
673
+ }
674
+ if (!nextNode) {
675
+ nextNode = new Leaf(currentNode);
676
+ currentNode.children[edge] = nextNode;
677
+ }
678
+ return nextNode;
679
+ } else {
680
+ if (nextNode instanceof Leaf)
681
+ nextNode = null;
682
+ if (!nextNode) {
683
+ nextNode = new RadixTrie(currentNode);
684
+ currentNode.children[edge] = nextNode;
685
+ }
686
+ }
687
+ currentNode = nextNode;
688
+ }
689
+ return currentNode;
690
+ }
691
+ delete(node) {
692
+ for (const edge in this.children) {
693
+ const currentNode = this.children[edge];
694
+ if (currentNode === node) {
695
+ const success = delete this.children[edge];
696
+ if (Object.keys(this.children).length === 0 && this.parent) {
697
+ this.parent.delete(this);
698
+ }
699
+ return success;
700
+ }
701
+ }
702
+ return false;
703
+ }
704
+ };
705
+ function isFormField(element) {
706
+ if (!(element instanceof HTMLElement)) {
707
+ return false;
708
+ }
709
+ const name = element.nodeName.toLowerCase();
710
+ const type = (element.getAttribute("type") || "").toLowerCase();
711
+ return name === "select" || name === "textarea" || name === "input" && type !== "submit" && type !== "reset" && type !== "checkbox" && type !== "radio" || element.isContentEditable;
712
+ }
713
+ function fireDeterminedAction(el) {
714
+ if (isFormField(el)) {
715
+ el.focus();
716
+ } else {
717
+ el.click();
718
+ }
719
+ }
720
+ function expandHotkeyToEdges(hotkey2) {
721
+ return hotkey2.split(",").map((edge) => edge.split(" "));
722
+ }
723
+ function hotkey(event) {
724
+ const elideShift = event.code.startsWith("Key") && event.shiftKey && event.key.toUpperCase() === event.key;
725
+ return `${event.ctrlKey ? "Control+" : ""}${event.altKey ? "Alt+" : ""}${event.metaKey ? "Meta+" : ""}${event.shiftKey && !elideShift ? "Shift+" : ""}${event.key}`;
726
+ }
727
+ var hotkeyRadixTrie = new RadixTrie();
728
+ var elementsLeaves = new WeakMap();
729
+ var currentTriePosition = hotkeyRadixTrie;
730
+ var resetTriePositionTimer = null;
731
+ function resetTriePosition() {
732
+ resetTriePositionTimer = null;
733
+ currentTriePosition = hotkeyRadixTrie;
734
+ }
735
+ function keyDownHandler(event) {
736
+ if (event.defaultPrevented)
737
+ return;
738
+ if (event.target instanceof Node && isFormField(event.target))
739
+ return;
740
+ if (resetTriePositionTimer != null) {
741
+ window.clearTimeout(resetTriePositionTimer);
742
+ }
743
+ resetTriePositionTimer = window.setTimeout(resetTriePosition, 1500);
744
+ const newTriePosition = currentTriePosition.get(hotkey(event));
745
+ if (!newTriePosition) {
746
+ resetTriePosition();
747
+ return;
748
+ }
749
+ currentTriePosition = newTriePosition;
750
+ if (newTriePosition instanceof Leaf) {
751
+ fireDeterminedAction(newTriePosition.children[newTriePosition.children.length - 1]);
752
+ event.preventDefault();
753
+ resetTriePosition();
754
+ return;
755
+ }
756
+ }
757
+ function install(element, hotkey2) {
758
+ if (Object.keys(hotkeyRadixTrie.children).length === 0) {
759
+ document.addEventListener("keydown", keyDownHandler);
760
+ }
761
+ const hotkeys = expandHotkeyToEdges(hotkey2 || element.getAttribute("data-hotkey") || "");
762
+ const leaves = hotkeys.map((h) => hotkeyRadixTrie.insert(h).add(element));
763
+ elementsLeaves.set(element, leaves);
764
+ }
765
+
634
766
  // node_modules/alpinejs/dist/module.esm.js
635
767
  var __create2 = Object.create;
636
768
  var __defProp2 = Object.defineProperty;
@@ -691,7 +823,7 @@
691
823
  };
692
824
  var GLOBALS_WHITE_LISTED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt";
693
825
  var isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);
694
- var range = 2;
826
+ var range2 = 2;
695
827
  function generateCodeFrame(source, start2 = 0, end = source.length) {
696
828
  const lines = source.split(/\r?\n/);
697
829
  let count = 0;
@@ -699,7 +831,7 @@
699
831
  for (let i = 0; i < lines.length; i++) {
700
832
  count += lines[i].length + 1;
701
833
  if (count >= start2) {
702
- for (let j = i - range; j <= i + range || end > count; j++) {
834
+ for (let j = i - range2; j <= i + range2 || end > count; j++) {
703
835
  if (j < 0 || j >= lines.length)
704
836
  continue;
705
837
  const line = j + 1;
@@ -2314,9 +2446,9 @@ Expression: "${expression}"
2314
2446
  stopDeferring();
2315
2447
  }
2316
2448
  function getDirectiveHandler(el, directive2) {
2317
- let noop = () => {
2449
+ let noop2 = () => {
2318
2450
  };
2319
- let handler3 = directiveHandlers[directive2.type] || noop;
2451
+ let handler3 = directiveHandlers[directive2.type] || noop2;
2320
2452
  let cleanups = [];
2321
2453
  let cleanup2 = (callback) => cleanups.push(callback);
2322
2454
  let [effect3, cleanupEffect] = elementBoundEffect(el);
@@ -5791,18 +5923,18 @@ Expression: "${expression}"
5791
5923
  didTouchMove = false;
5792
5924
  }
5793
5925
  function addDocumentPress() {
5794
- var doc = getDocument();
5795
- doc.addEventListener("mousedown", onDocumentPress, true);
5796
- doc.addEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5797
- doc.addEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5798
- doc.addEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5926
+ var doc2 = getDocument();
5927
+ doc2.addEventListener("mousedown", onDocumentPress, true);
5928
+ doc2.addEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5929
+ doc2.addEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5930
+ doc2.addEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5799
5931
  }
5800
5932
  function removeDocumentPress() {
5801
- var doc = getDocument();
5802
- doc.removeEventListener("mousedown", onDocumentPress, true);
5803
- doc.removeEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5804
- doc.removeEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5805
- doc.removeEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5933
+ var doc2 = getDocument();
5934
+ doc2.removeEventListener("mousedown", onDocumentPress, true);
5935
+ doc2.removeEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5936
+ doc2.removeEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5937
+ doc2.removeEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5806
5938
  }
5807
5939
  function onTransitionedOut(duration, callback) {
5808
5940
  onTransitionEnd(duration, function() {
@@ -6697,18 +6829,18 @@ Expression: "${expression}"
6697
6829
  clientY
6698
6830
  };
6699
6831
  }
6700
- function addMouseCoordsListener(doc) {
6701
- doc.addEventListener("mousemove", storeMouseCoords);
6832
+ function addMouseCoordsListener(doc2) {
6833
+ doc2.addEventListener("mousemove", storeMouseCoords);
6702
6834
  }
6703
- function removeMouseCoordsListener(doc) {
6704
- doc.removeEventListener("mousemove", storeMouseCoords);
6835
+ function removeMouseCoordsListener(doc2) {
6836
+ doc2.removeEventListener("mousemove", storeMouseCoords);
6705
6837
  }
6706
6838
  var followCursor2 = {
6707
6839
  name: "followCursor",
6708
6840
  defaultValue: false,
6709
6841
  fn: function fn(instance) {
6710
6842
  var reference = instance.reference;
6711
- var doc = getOwnerDocument(instance.props.triggerTarget || reference);
6843
+ var doc2 = getOwnerDocument(instance.props.triggerTarget || reference);
6712
6844
  var isInternalUpdate = false;
6713
6845
  var wasFocusEvent = false;
6714
6846
  var isUnmounted = true;
@@ -6717,10 +6849,10 @@ Expression: "${expression}"
6717
6849
  return instance.props.followCursor === "initial" && instance.state.isVisible;
6718
6850
  }
6719
6851
  function addListener() {
6720
- doc.addEventListener("mousemove", onMouseMove);
6852
+ doc2.addEventListener("mousemove", onMouseMove);
6721
6853
  }
6722
6854
  function removeListener() {
6723
- doc.removeEventListener("mousemove", onMouseMove);
6855
+ doc2.removeEventListener("mousemove", onMouseMove);
6724
6856
  }
6725
6857
  function unsetGetReferenceClientRect() {
6726
6858
  isInternalUpdate = true;
@@ -6766,9 +6898,9 @@ Expression: "${expression}"
6766
6898
  if (instance.props.followCursor) {
6767
6899
  activeInstances.push({
6768
6900
  instance,
6769
- doc
6901
+ doc: doc2
6770
6902
  });
6771
- addMouseCoordsListener(doc);
6903
+ addMouseCoordsListener(doc2);
6772
6904
  }
6773
6905
  }
6774
6906
  function destroy3() {
@@ -6776,9 +6908,9 @@ Expression: "${expression}"
6776
6908
  return data2.instance !== instance;
6777
6909
  });
6778
6910
  if (activeInstances.filter(function(data2) {
6779
- return data2.doc === doc;
6911
+ return data2.doc === doc2;
6780
6912
  }).length === 0) {
6781
- removeMouseCoordsListener(doc);
6913
+ removeMouseCoordsListener(doc2);
6782
6914
  }
6783
6915
  }
6784
6916
  return {
@@ -7098,6 +7230,32 @@ Expression: "${expression}"
7098
7230
  });
7099
7231
  }
7100
7232
 
7233
+ // app/assets/lookbook/js/utils/screen.js
7234
+ function screen_default(Alpine3) {
7235
+ let data2 = Alpine3.reactive({ screensize: window.innerWidth });
7236
+ const defaultBreakpoints = {
7237
+ xs: 0,
7238
+ sm: 640,
7239
+ md: 768,
7240
+ lg: 1024,
7241
+ xl: 1280,
7242
+ "2xl": 1536
7243
+ };
7244
+ const breakpoints = window.AlpineMagicHelpersConfig && window.AlpineMagicHelpersConfig.breakpoints ? window.AlpineMagicHelpersConfig.breakpoints : defaultBreakpoints;
7245
+ window.addEventListener("resize", () => {
7246
+ data2.screensize = window.innerWidth;
7247
+ });
7248
+ Alpine3.magic("screen", () => (breakpoint) => {
7249
+ let width = data2.screensize;
7250
+ if (Number.isInteger(breakpoint))
7251
+ return breakpoint <= width;
7252
+ if (breakpoints[breakpoint] === void 0) {
7253
+ throw Error("Undefined $screen property: " + breakpoint + ". Supported properties: " + Object.keys(breakpoints).join(", "));
7254
+ }
7255
+ return breakpoints[breakpoint] <= width;
7256
+ });
7257
+ }
7258
+
7101
7259
  // node_modules/split-grid/dist/split-grid.mjs
7102
7260
  var numeric = function(value, unit) {
7103
7261
  return Number(value.slice(0, -1 * unit.length));
@@ -7575,9 +7733,9 @@ Expression: "${expression}"
7575
7733
  }
7576
7734
  var split_grid_default = index;
7577
7735
 
7578
- // app/assets/lookbook/js/split.js
7736
+ // app/assets/lookbook/js/utils/split.js
7579
7737
  function split_default(props) {
7580
- const app = Alpine.store("app");
7738
+ const page2 = Alpine.store("page");
7581
7739
  return {
7582
7740
  init() {
7583
7741
  split_grid_default({
@@ -7588,23 +7746,562 @@ Expression: "${expression}"
7588
7746
  writeStyle() {
7589
7747
  },
7590
7748
  onDrag(dir, track, style) {
7591
- splits = style.split(" ").map((num) => parseInt(num));
7749
+ const splits = style.split(" ").map((num) => parseInt(num));
7592
7750
  props.onDrag(splits);
7593
7751
  },
7594
7752
  onDragStart() {
7595
- app.reflowing = true;
7753
+ page2.reflowing = true;
7596
7754
  },
7597
7755
  onDragEnd() {
7598
- app.reflowing = false;
7756
+ page2.reflowing = false;
7757
+ }
7758
+ });
7759
+ }
7760
+ };
7761
+ }
7762
+
7763
+ // node_modules/morphdom/dist/morphdom-esm.js
7764
+ var DOCUMENT_FRAGMENT_NODE = 11;
7765
+ function morphAttrs(fromNode, toNode) {
7766
+ var toNodeAttrs = toNode.attributes;
7767
+ var attr;
7768
+ var attrName;
7769
+ var attrNamespaceURI;
7770
+ var attrValue;
7771
+ var fromValue;
7772
+ if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {
7773
+ return;
7774
+ }
7775
+ for (var i = toNodeAttrs.length - 1; i >= 0; i--) {
7776
+ attr = toNodeAttrs[i];
7777
+ attrName = attr.name;
7778
+ attrNamespaceURI = attr.namespaceURI;
7779
+ attrValue = attr.value;
7780
+ if (attrNamespaceURI) {
7781
+ attrName = attr.localName || attrName;
7782
+ fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);
7783
+ if (fromValue !== attrValue) {
7784
+ if (attr.prefix === "xmlns") {
7785
+ attrName = attr.name;
7786
+ }
7787
+ fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);
7788
+ }
7789
+ } else {
7790
+ fromValue = fromNode.getAttribute(attrName);
7791
+ if (fromValue !== attrValue) {
7792
+ fromNode.setAttribute(attrName, attrValue);
7793
+ }
7794
+ }
7795
+ }
7796
+ var fromNodeAttrs = fromNode.attributes;
7797
+ for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {
7798
+ attr = fromNodeAttrs[d];
7799
+ attrName = attr.name;
7800
+ attrNamespaceURI = attr.namespaceURI;
7801
+ if (attrNamespaceURI) {
7802
+ attrName = attr.localName || attrName;
7803
+ if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {
7804
+ fromNode.removeAttributeNS(attrNamespaceURI, attrName);
7805
+ }
7806
+ } else {
7807
+ if (!toNode.hasAttribute(attrName)) {
7808
+ fromNode.removeAttribute(attrName);
7809
+ }
7810
+ }
7811
+ }
7812
+ }
7813
+ var range;
7814
+ var NS_XHTML = "http://www.w3.org/1999/xhtml";
7815
+ var doc = typeof document === "undefined" ? void 0 : document;
7816
+ var HAS_TEMPLATE_SUPPORT = !!doc && "content" in doc.createElement("template");
7817
+ var HAS_RANGE_SUPPORT = !!doc && doc.createRange && "createContextualFragment" in doc.createRange();
7818
+ function createFragmentFromTemplate(str) {
7819
+ var template = doc.createElement("template");
7820
+ template.innerHTML = str;
7821
+ return template.content.childNodes[0];
7822
+ }
7823
+ function createFragmentFromRange(str) {
7824
+ if (!range) {
7825
+ range = doc.createRange();
7826
+ range.selectNode(doc.body);
7827
+ }
7828
+ var fragment = range.createContextualFragment(str);
7829
+ return fragment.childNodes[0];
7830
+ }
7831
+ function createFragmentFromWrap(str) {
7832
+ var fragment = doc.createElement("body");
7833
+ fragment.innerHTML = str;
7834
+ return fragment.childNodes[0];
7835
+ }
7836
+ function toElement(str) {
7837
+ str = str.trim();
7838
+ if (HAS_TEMPLATE_SUPPORT) {
7839
+ return createFragmentFromTemplate(str);
7840
+ } else if (HAS_RANGE_SUPPORT) {
7841
+ return createFragmentFromRange(str);
7842
+ }
7843
+ return createFragmentFromWrap(str);
7844
+ }
7845
+ function compareNodeNames(fromEl, toEl) {
7846
+ var fromNodeName = fromEl.nodeName;
7847
+ var toNodeName = toEl.nodeName;
7848
+ var fromCodeStart, toCodeStart;
7849
+ if (fromNodeName === toNodeName) {
7850
+ return true;
7851
+ }
7852
+ fromCodeStart = fromNodeName.charCodeAt(0);
7853
+ toCodeStart = toNodeName.charCodeAt(0);
7854
+ if (fromCodeStart <= 90 && toCodeStart >= 97) {
7855
+ return fromNodeName === toNodeName.toUpperCase();
7856
+ } else if (toCodeStart <= 90 && fromCodeStart >= 97) {
7857
+ return toNodeName === fromNodeName.toUpperCase();
7858
+ } else {
7859
+ return false;
7860
+ }
7861
+ }
7862
+ function createElementNS(name, namespaceURI) {
7863
+ return !namespaceURI || namespaceURI === NS_XHTML ? doc.createElement(name) : doc.createElementNS(namespaceURI, name);
7864
+ }
7865
+ function moveChildren(fromEl, toEl) {
7866
+ var curChild = fromEl.firstChild;
7867
+ while (curChild) {
7868
+ var nextChild = curChild.nextSibling;
7869
+ toEl.appendChild(curChild);
7870
+ curChild = nextChild;
7871
+ }
7872
+ return toEl;
7873
+ }
7874
+ function syncBooleanAttrProp(fromEl, toEl, name) {
7875
+ if (fromEl[name] !== toEl[name]) {
7876
+ fromEl[name] = toEl[name];
7877
+ if (fromEl[name]) {
7878
+ fromEl.setAttribute(name, "");
7879
+ } else {
7880
+ fromEl.removeAttribute(name);
7881
+ }
7882
+ }
7883
+ }
7884
+ var specialElHandlers = {
7885
+ OPTION: function(fromEl, toEl) {
7886
+ var parentNode = fromEl.parentNode;
7887
+ if (parentNode) {
7888
+ var parentName = parentNode.nodeName.toUpperCase();
7889
+ if (parentName === "OPTGROUP") {
7890
+ parentNode = parentNode.parentNode;
7891
+ parentName = parentNode && parentNode.nodeName.toUpperCase();
7892
+ }
7893
+ if (parentName === "SELECT" && !parentNode.hasAttribute("multiple")) {
7894
+ if (fromEl.hasAttribute("selected") && !toEl.selected) {
7895
+ fromEl.setAttribute("selected", "selected");
7896
+ fromEl.removeAttribute("selected");
7897
+ }
7898
+ parentNode.selectedIndex = -1;
7899
+ }
7900
+ }
7901
+ syncBooleanAttrProp(fromEl, toEl, "selected");
7902
+ },
7903
+ INPUT: function(fromEl, toEl) {
7904
+ syncBooleanAttrProp(fromEl, toEl, "checked");
7905
+ syncBooleanAttrProp(fromEl, toEl, "disabled");
7906
+ if (fromEl.value !== toEl.value) {
7907
+ fromEl.value = toEl.value;
7908
+ }
7909
+ if (!toEl.hasAttribute("value")) {
7910
+ fromEl.removeAttribute("value");
7911
+ }
7912
+ },
7913
+ TEXTAREA: function(fromEl, toEl) {
7914
+ var newValue = toEl.value;
7915
+ if (fromEl.value !== newValue) {
7916
+ fromEl.value = newValue;
7917
+ }
7918
+ var firstChild = fromEl.firstChild;
7919
+ if (firstChild) {
7920
+ var oldValue = firstChild.nodeValue;
7921
+ if (oldValue == newValue || !newValue && oldValue == fromEl.placeholder) {
7922
+ return;
7923
+ }
7924
+ firstChild.nodeValue = newValue;
7925
+ }
7926
+ },
7927
+ SELECT: function(fromEl, toEl) {
7928
+ if (!toEl.hasAttribute("multiple")) {
7929
+ var selectedIndex = -1;
7930
+ var i = 0;
7931
+ var curChild = fromEl.firstChild;
7932
+ var optgroup;
7933
+ var nodeName;
7934
+ while (curChild) {
7935
+ nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();
7936
+ if (nodeName === "OPTGROUP") {
7937
+ optgroup = curChild;
7938
+ curChild = optgroup.firstChild;
7939
+ } else {
7940
+ if (nodeName === "OPTION") {
7941
+ if (curChild.hasAttribute("selected")) {
7942
+ selectedIndex = i;
7943
+ break;
7944
+ }
7945
+ i++;
7946
+ }
7947
+ curChild = curChild.nextSibling;
7948
+ if (!curChild && optgroup) {
7949
+ curChild = optgroup.nextSibling;
7950
+ optgroup = null;
7951
+ }
7952
+ }
7953
+ }
7954
+ fromEl.selectedIndex = selectedIndex;
7955
+ }
7956
+ }
7957
+ };
7958
+ var ELEMENT_NODE = 1;
7959
+ var DOCUMENT_FRAGMENT_NODE$1 = 11;
7960
+ var TEXT_NODE = 3;
7961
+ var COMMENT_NODE = 8;
7962
+ function noop() {
7963
+ }
7964
+ function defaultGetNodeKey(node) {
7965
+ if (node) {
7966
+ return node.getAttribute && node.getAttribute("id") || node.id;
7967
+ }
7968
+ }
7969
+ function morphdomFactory(morphAttrs2) {
7970
+ return function morphdom2(fromNode, toNode, options) {
7971
+ if (!options) {
7972
+ options = {};
7973
+ }
7974
+ if (typeof toNode === "string") {
7975
+ if (fromNode.nodeName === "#document" || fromNode.nodeName === "HTML" || fromNode.nodeName === "BODY") {
7976
+ var toNodeHtml = toNode;
7977
+ toNode = doc.createElement("html");
7978
+ toNode.innerHTML = toNodeHtml;
7979
+ } else {
7980
+ toNode = toElement(toNode);
7981
+ }
7982
+ }
7983
+ var getNodeKey = options.getNodeKey || defaultGetNodeKey;
7984
+ var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;
7985
+ var onNodeAdded = options.onNodeAdded || noop;
7986
+ var onBeforeElUpdated = options.onBeforeElUpdated || noop;
7987
+ var onElUpdated = options.onElUpdated || noop;
7988
+ var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;
7989
+ var onNodeDiscarded = options.onNodeDiscarded || noop;
7990
+ var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;
7991
+ var childrenOnly = options.childrenOnly === true;
7992
+ var fromNodesLookup = Object.create(null);
7993
+ var keyedRemovalList = [];
7994
+ function addKeyedRemoval(key) {
7995
+ keyedRemovalList.push(key);
7996
+ }
7997
+ function walkDiscardedChildNodes(node, skipKeyedNodes) {
7998
+ if (node.nodeType === ELEMENT_NODE) {
7999
+ var curChild = node.firstChild;
8000
+ while (curChild) {
8001
+ var key = void 0;
8002
+ if (skipKeyedNodes && (key = getNodeKey(curChild))) {
8003
+ addKeyedRemoval(key);
8004
+ } else {
8005
+ onNodeDiscarded(curChild);
8006
+ if (curChild.firstChild) {
8007
+ walkDiscardedChildNodes(curChild, skipKeyedNodes);
8008
+ }
8009
+ }
8010
+ curChild = curChild.nextSibling;
8011
+ }
8012
+ }
8013
+ }
8014
+ function removeNode(node, parentNode, skipKeyedNodes) {
8015
+ if (onBeforeNodeDiscarded(node) === false) {
8016
+ return;
8017
+ }
8018
+ if (parentNode) {
8019
+ parentNode.removeChild(node);
8020
+ }
8021
+ onNodeDiscarded(node);
8022
+ walkDiscardedChildNodes(node, skipKeyedNodes);
8023
+ }
8024
+ function indexTree(node) {
8025
+ if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {
8026
+ var curChild = node.firstChild;
8027
+ while (curChild) {
8028
+ var key = getNodeKey(curChild);
8029
+ if (key) {
8030
+ fromNodesLookup[key] = curChild;
8031
+ }
8032
+ indexTree(curChild);
8033
+ curChild = curChild.nextSibling;
8034
+ }
8035
+ }
8036
+ }
8037
+ indexTree(fromNode);
8038
+ function handleNodeAdded(el) {
8039
+ onNodeAdded(el);
8040
+ var curChild = el.firstChild;
8041
+ while (curChild) {
8042
+ var nextSibling = curChild.nextSibling;
8043
+ var key = getNodeKey(curChild);
8044
+ if (key) {
8045
+ var unmatchedFromEl = fromNodesLookup[key];
8046
+ if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {
8047
+ curChild.parentNode.replaceChild(unmatchedFromEl, curChild);
8048
+ morphEl(unmatchedFromEl, curChild);
8049
+ } else {
8050
+ handleNodeAdded(curChild);
8051
+ }
8052
+ } else {
8053
+ handleNodeAdded(curChild);
8054
+ }
8055
+ curChild = nextSibling;
8056
+ }
8057
+ }
8058
+ function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {
8059
+ while (curFromNodeChild) {
8060
+ var fromNextSibling = curFromNodeChild.nextSibling;
8061
+ if (curFromNodeKey = getNodeKey(curFromNodeChild)) {
8062
+ addKeyedRemoval(curFromNodeKey);
8063
+ } else {
8064
+ removeNode(curFromNodeChild, fromEl, true);
8065
+ }
8066
+ curFromNodeChild = fromNextSibling;
8067
+ }
8068
+ }
8069
+ function morphEl(fromEl, toEl, childrenOnly2) {
8070
+ var toElKey = getNodeKey(toEl);
8071
+ if (toElKey) {
8072
+ delete fromNodesLookup[toElKey];
8073
+ }
8074
+ if (!childrenOnly2) {
8075
+ if (onBeforeElUpdated(fromEl, toEl) === false) {
8076
+ return;
8077
+ }
8078
+ morphAttrs2(fromEl, toEl);
8079
+ onElUpdated(fromEl);
8080
+ if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {
8081
+ return;
8082
+ }
8083
+ }
8084
+ if (fromEl.nodeName !== "TEXTAREA") {
8085
+ morphChildren(fromEl, toEl);
8086
+ } else {
8087
+ specialElHandlers.TEXTAREA(fromEl, toEl);
8088
+ }
8089
+ }
8090
+ function morphChildren(fromEl, toEl) {
8091
+ var curToNodeChild = toEl.firstChild;
8092
+ var curFromNodeChild = fromEl.firstChild;
8093
+ var curToNodeKey;
8094
+ var curFromNodeKey;
8095
+ var fromNextSibling;
8096
+ var toNextSibling;
8097
+ var matchingFromEl;
8098
+ outer:
8099
+ while (curToNodeChild) {
8100
+ toNextSibling = curToNodeChild.nextSibling;
8101
+ curToNodeKey = getNodeKey(curToNodeChild);
8102
+ while (curFromNodeChild) {
8103
+ fromNextSibling = curFromNodeChild.nextSibling;
8104
+ if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {
8105
+ curToNodeChild = toNextSibling;
8106
+ curFromNodeChild = fromNextSibling;
8107
+ continue outer;
8108
+ }
8109
+ curFromNodeKey = getNodeKey(curFromNodeChild);
8110
+ var curFromNodeType = curFromNodeChild.nodeType;
8111
+ var isCompatible = void 0;
8112
+ if (curFromNodeType === curToNodeChild.nodeType) {
8113
+ if (curFromNodeType === ELEMENT_NODE) {
8114
+ if (curToNodeKey) {
8115
+ if (curToNodeKey !== curFromNodeKey) {
8116
+ if (matchingFromEl = fromNodesLookup[curToNodeKey]) {
8117
+ if (fromNextSibling === matchingFromEl) {
8118
+ isCompatible = false;
8119
+ } else {
8120
+ fromEl.insertBefore(matchingFromEl, curFromNodeChild);
8121
+ if (curFromNodeKey) {
8122
+ addKeyedRemoval(curFromNodeKey);
8123
+ } else {
8124
+ removeNode(curFromNodeChild, fromEl, true);
8125
+ }
8126
+ curFromNodeChild = matchingFromEl;
8127
+ }
8128
+ } else {
8129
+ isCompatible = false;
8130
+ }
8131
+ }
8132
+ } else if (curFromNodeKey) {
8133
+ isCompatible = false;
8134
+ }
8135
+ isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);
8136
+ if (isCompatible) {
8137
+ morphEl(curFromNodeChild, curToNodeChild);
8138
+ }
8139
+ } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {
8140
+ isCompatible = true;
8141
+ if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {
8142
+ curFromNodeChild.nodeValue = curToNodeChild.nodeValue;
8143
+ }
8144
+ }
8145
+ }
8146
+ if (isCompatible) {
8147
+ curToNodeChild = toNextSibling;
8148
+ curFromNodeChild = fromNextSibling;
8149
+ continue outer;
8150
+ }
8151
+ if (curFromNodeKey) {
8152
+ addKeyedRemoval(curFromNodeKey);
8153
+ } else {
8154
+ removeNode(curFromNodeChild, fromEl, true);
8155
+ }
8156
+ curFromNodeChild = fromNextSibling;
8157
+ }
8158
+ if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {
8159
+ fromEl.appendChild(matchingFromEl);
8160
+ morphEl(matchingFromEl, curToNodeChild);
8161
+ } else {
8162
+ var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);
8163
+ if (onBeforeNodeAddedResult !== false) {
8164
+ if (onBeforeNodeAddedResult) {
8165
+ curToNodeChild = onBeforeNodeAddedResult;
8166
+ }
8167
+ if (curToNodeChild.actualize) {
8168
+ curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);
8169
+ }
8170
+ fromEl.appendChild(curToNodeChild);
8171
+ handleNodeAdded(curToNodeChild);
8172
+ }
8173
+ }
8174
+ curToNodeChild = toNextSibling;
8175
+ curFromNodeChild = fromNextSibling;
8176
+ }
8177
+ cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);
8178
+ var specialElHandler = specialElHandlers[fromEl.nodeName];
8179
+ if (specialElHandler) {
8180
+ specialElHandler(fromEl, toEl);
8181
+ }
8182
+ }
8183
+ var morphedNode = fromNode;
8184
+ var morphedNodeType = morphedNode.nodeType;
8185
+ var toNodeType = toNode.nodeType;
8186
+ if (!childrenOnly) {
8187
+ if (morphedNodeType === ELEMENT_NODE) {
8188
+ if (toNodeType === ELEMENT_NODE) {
8189
+ if (!compareNodeNames(fromNode, toNode)) {
8190
+ onNodeDiscarded(fromNode);
8191
+ morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));
8192
+ }
8193
+ } else {
8194
+ morphedNode = toNode;
8195
+ }
8196
+ } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) {
8197
+ if (toNodeType === morphedNodeType) {
8198
+ if (morphedNode.nodeValue !== toNode.nodeValue) {
8199
+ morphedNode.nodeValue = toNode.nodeValue;
8200
+ }
8201
+ return morphedNode;
8202
+ } else {
8203
+ morphedNode = toNode;
8204
+ }
8205
+ }
8206
+ }
8207
+ if (morphedNode === toNode) {
8208
+ onNodeDiscarded(fromNode);
8209
+ } else {
8210
+ if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {
8211
+ return;
8212
+ }
8213
+ morphEl(morphedNode, toNode, childrenOnly);
8214
+ if (keyedRemovalList) {
8215
+ for (var i = 0, len = keyedRemovalList.length; i < len; i++) {
8216
+ var elToRemove = fromNodesLookup[keyedRemovalList[i]];
8217
+ if (elToRemove) {
8218
+ removeNode(elToRemove, elToRemove.parentNode, false);
8219
+ }
7599
8220
  }
8221
+ }
8222
+ }
8223
+ if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {
8224
+ if (morphedNode.actualize) {
8225
+ morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);
8226
+ }
8227
+ fromNode.parentNode.replaceChild(morphedNode, fromNode);
8228
+ }
8229
+ return morphedNode;
8230
+ };
8231
+ }
8232
+ var morphdom = morphdomFactory(morphAttrs);
8233
+ var morphdom_esm_default = morphdom;
8234
+
8235
+ // app/assets/lookbook/js/utils/morph.js
8236
+ function morph_default(from, to, opts = {}) {
8237
+ morphdom_esm_default(from, to, __spreadValues({
8238
+ onBeforeElUpdated: function(fromEl, toEl) {
8239
+ if (fromEl._x_dataStack) {
8240
+ Alpine.clone(fromEl, toEl);
8241
+ }
8242
+ if (fromEl.isEqualNode(toEl)) {
8243
+ return false;
8244
+ }
8245
+ return true;
8246
+ }
8247
+ }, opts));
8248
+ }
8249
+
8250
+ // app/assets/lookbook/js/page.js
8251
+ function page() {
8252
+ const store2 = Alpine.store("page");
8253
+ return {
8254
+ ready: false,
8255
+ sidebarOpenMobile: false,
8256
+ init() {
8257
+ this.$nextTick(() => this.ready = true);
8258
+ },
8259
+ splitProps: {
8260
+ minSize: 200,
8261
+ onDrag(splits) {
8262
+ Alpine.store("nav").width = Math.min(splits[0], 500);
8263
+ }
8264
+ },
8265
+ fetchHTML() {
8266
+ return __async(this, null, function* () {
8267
+ const response = yield fetch(window.document.location);
8268
+ if (!response.ok)
8269
+ return window.location.reload();
8270
+ const html = yield response.text();
8271
+ store2.doc = new DOMParser().parseFromString(html, "text/html");
8272
+ return store2.doc;
7600
8273
  });
8274
+ },
8275
+ updateTitle() {
8276
+ document.title = store2.doc.title;
8277
+ },
8278
+ render() {
8279
+ if (this.ready) {
8280
+ morph_default(this.$el, store2.doc.getElementById(this.$el.id));
8281
+ }
7601
8282
  }
7602
8283
  };
7603
8284
  }
7604
8285
 
7605
- // app/assets/lookbook/js/preview.js
8286
+ // app/assets/lookbook/js/workbench.js
8287
+ function workbench() {
8288
+ const inspector2 = Alpine.store("inspector");
8289
+ return {
8290
+ previewViewportHeight: 0,
8291
+ previewViewportWidth: 0,
8292
+ splitProps: {
8293
+ direction: "vertical",
8294
+ minSize: 200,
8295
+ onDrag(splits) {
8296
+ inspector2.height = splits[2];
8297
+ }
8298
+ }
8299
+ };
8300
+ }
8301
+
8302
+ // app/assets/lookbook/js/workbench/preview.js
7606
8303
  function preview() {
7607
- const app = Alpine.store("app");
8304
+ const app = Alpine.store("page");
7608
8305
  const preview2 = Alpine.store("preview");
7609
8306
  return {
7610
8307
  init() {
@@ -7626,27 +8323,129 @@ Expression: "${expression}"
7626
8323
  window.addEventListener("pointermove", this.onResize);
7627
8324
  window.addEventListener("pointerup", this.onResizeEnd);
7628
8325
  },
7629
- onResizeEnd(e) {
8326
+ onResizeEnd() {
7630
8327
  window.removeEventListener("pointermove", this.onResize);
7631
8328
  window.removeEventListener("pointerup", this.onResizeEnd);
7632
8329
  app.reflowing = false;
7633
8330
  },
7634
- handle: {
7635
- ["@pointerdown"]: "onResizeStart",
7636
- ["@dblclick"]() {
7637
- if (preview2.width === "100%" && preview2.lastWidth) {
7638
- preview2.width = preview2.lastWidth;
7639
- } else {
7640
- preview2.lastWidth = preview2.width;
7641
- preview2.width = "100%";
8331
+ toggleFullWidth() {
8332
+ if (preview2.width === "100%" && preview2.lastWidth) {
8333
+ preview2.width = preview2.lastWidth;
8334
+ } else {
8335
+ preview2.lastWidth = preview2.width;
8336
+ preview2.width = "100%";
8337
+ }
8338
+ }
8339
+ };
8340
+ }
8341
+
8342
+ // app/assets/lookbook/js/workbench/inspector.js
8343
+ function inspector() {
8344
+ const inspector2 = Alpine.store("inspector");
8345
+ return {
8346
+ switchTo(id) {
8347
+ inspector2.active = id;
8348
+ },
8349
+ active(id) {
8350
+ return inspector2.active === id;
8351
+ }
8352
+ };
8353
+ }
8354
+
8355
+ // app/assets/lookbook/js/nav.js
8356
+ function nav_default() {
8357
+ return {
8358
+ clearFilter() {
8359
+ this.$store.nav.filter = "";
8360
+ },
8361
+ init() {
8362
+ this.$watch("$store.nav.filter", (value) => {
8363
+ const nav = this.$store.nav;
8364
+ nav.filterText = value.replace(/\s/g, "").toLowerCase();
8365
+ nav.filtering = nav.filterText.length > 0;
8366
+ });
8367
+ },
8368
+ updateNav(event) {
8369
+ const nav = document.getElementById("nav");
8370
+ nav.style.height = `${this.$refs.shim.offsetHeight}px`;
8371
+ morph_default(nav, event.detail.doc.getElementById("nav"));
8372
+ Promise.resolve().then(() => {
8373
+ this.$refs.shim.style.height = "auto";
8374
+ this.$dispatch("nav:updated");
8375
+ });
8376
+ },
8377
+ navigate(path) {
8378
+ if (path instanceof Event) {
8379
+ path = path.currentTarget.href;
8380
+ }
8381
+ history.pushState({}, null, path);
8382
+ this.$dispatch("popstate");
8383
+ },
8384
+ focusFilter() {
8385
+ this.currentFocus = this.$refs.filter;
8386
+ setTimeout(() => this.$refs.filter.focus(), 0);
8387
+ },
8388
+ unfocusFilter() {
8389
+ this.$refs.filter.blur();
8390
+ }
8391
+ };
8392
+ }
8393
+
8394
+ // app/assets/lookbook/js/nav/node.js
8395
+ function navNode() {
8396
+ return {
8397
+ id: null,
8398
+ hidden: true,
8399
+ children: [],
8400
+ init() {
8401
+ this.id = this.$el.id;
8402
+ },
8403
+ open() {
8404
+ return this.$store.nav.open[this.id];
8405
+ },
8406
+ getChildren() {
8407
+ return this.$refs.items ? Array.from(this.$refs.items.querySelectorAll(":scope > li")) : [];
8408
+ },
8409
+ filter() {
8410
+ this.hidden = true;
8411
+ this.getChildren().forEach((child) => {
8412
+ const data2 = child._x_dataStack[0];
8413
+ data2.filter();
8414
+ if (!data2.hidden) {
8415
+ this.hidden = false;
7642
8416
  }
8417
+ });
8418
+ },
8419
+ toggle() {
8420
+ this.$store.nav.open[this.id] = !this.$store.nav.open[this.id];
8421
+ }
8422
+ };
8423
+ }
8424
+
8425
+ // app/assets/lookbook/js/nav/leaf.js
8426
+ function navLeaf() {
8427
+ return {
8428
+ path: null,
8429
+ matchers: [],
8430
+ active: false,
8431
+ hidden: false,
8432
+ setActive() {
8433
+ this.active = this.path === window.location.pathname;
8434
+ },
8435
+ filter() {
8436
+ if (this.$store.nav.filtering) {
8437
+ const text = this.$store.nav.filterText;
8438
+ const matched = this.matchers.map((m) => m.includes(text));
8439
+ this.hidden = !matched.filter((m) => m).length;
8440
+ } else {
8441
+ this.hidden = false;
7643
8442
  }
7644
8443
  }
7645
8444
  };
7646
8445
  }
7647
8446
 
7648
- // app/assets/lookbook/js/size_observer.js
7649
- function size_observer_default() {
8447
+ // app/assets/lookbook/js/utils/size_observer.js
8448
+ function sizeObserver() {
7650
8449
  return {
7651
8450
  observedWidth: 0,
7652
8451
  observedHeight: 0,
@@ -7663,7 +8462,7 @@ Expression: "${expression}"
7663
8462
  };
7664
8463
  }
7665
8464
 
7666
- // app/assets/lookbook/js/reloader.js
8465
+ // app/assets/lookbook/js/utils/reloader.js
7667
8466
  var import_actioncable = __toModule(require_action_cable());
7668
8467
  var import_debounce = __toModule(require_debounce());
7669
8468
  function reloader_default(endpoint) {
@@ -7690,32 +8489,59 @@ Expression: "${expression}"
7690
8489
  };
7691
8490
  }
7692
8491
 
8492
+ // app/assets/lookbook/js/utils/clipboard.js
8493
+ function clipboard() {
8494
+ return {
8495
+ content: null,
8496
+ done: false,
8497
+ save() {
8498
+ this.$clipboard(this.content);
8499
+ this.done = true;
8500
+ setTimeout(() => {
8501
+ this.done = false;
8502
+ }, 1e3);
8503
+ }
8504
+ };
8505
+ }
8506
+
7693
8507
  // app/assets/lookbook/js/app.js
8508
+ window.Alpine = module_default;
7694
8509
  module_default.plugin(module_default2);
7695
8510
  module_default.plugin(module_default3);
7696
8511
  module_default.plugin(src_default4);
7697
- module_default.data("preview", preview);
7698
- module_default.data("sizeObserver", size_observer_default);
7699
- module_default.data("split", split_default);
7700
- module_default.store("app", { reflowing: false });
8512
+ module_default.plugin(screen_default);
8513
+ module_default.store("page", {
8514
+ reflowing: false,
8515
+ doc: window.document
8516
+ });
7701
8517
  module_default.persistedStore("nav", {
7702
8518
  width: 280,
7703
8519
  filter: "",
7704
- open: {},
7705
- scrollTop: 0,
7706
- shouldDisplay(previewName) {
7707
- const cleanFilter = this.filter.replace(/\s/g, "");
7708
- return cleanFilter === "" || previewName.includes(cleanFilter.toLowerCase());
7709
- }
8520
+ open: {}
7710
8521
  });
7711
- module_default.persistedStore("preview", {});
7712
8522
  module_default.persistedStore("inspector", {
7713
8523
  height: 200,
7714
8524
  active: "source"
7715
8525
  });
7716
- window.Alpine = module_default;
8526
+ module_default.persistedStore("preview", {
8527
+ width: "100%"
8528
+ });
8529
+ module_default.data("page", page);
8530
+ module_default.data("nav", nav_default);
8531
+ module_default.data("navNode", navNode);
8532
+ module_default.data("navLeaf", navLeaf);
8533
+ module_default.data("workbench", workbench);
8534
+ module_default.data("preview", preview);
8535
+ module_default.data("inspector", inspector);
8536
+ module_default.data("clipboard", clipboard);
8537
+ module_default.data("sizeObserver", sizeObserver);
8538
+ module_default.data("split", split_default);
8539
+ for (const el of document.querySelectorAll("[data-hotkey]")) {
8540
+ install(el);
8541
+ }
7717
8542
  if (window.SOCKET_PATH) {
7718
8543
  reloader_default(window.SOCKET_PATH).start();
7719
8544
  }
8545
+ window.Alpine = module_default;
7720
8546
  module_default.start();
7721
8547
  })();