lookbook 0.2.2 → 0.3.0.beta.1

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 (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 +36 -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/layouts/group.html.erb +6 -0
  28. data/app/views/lookbook/nav/_collection.html.erb +5 -0
  29. data/app/views/lookbook/nav/_node.html.erb +19 -0
  30. data/app/views/lookbook/nav/_preview.html.erb +29 -0
  31. data/app/views/lookbook/shared/_clipboard.html.erb +11 -0
  32. data/app/views/lookbook/shared/_header.html.erb +8 -0
  33. data/app/views/lookbook/workbench/_header.html.erb +37 -0
  34. data/app/views/lookbook/workbench/_inspector.html.erb +32 -0
  35. data/app/views/lookbook/workbench/_preview.html.erb +24 -0
  36. data/app/views/lookbook/workbench/inspector/_code.html.erb +3 -0
  37. data/app/views/lookbook/workbench/inspector/_notes.html.erb +24 -0
  38. data/app/views/lookbook/{partials → workbench}/inspector/_plain.html.erb +0 -0
  39. data/config/routes.rb +3 -3
  40. data/lib/lookbook/engine.rb +2 -2
  41. data/lib/lookbook/preview.rb +25 -3
  42. data/lib/lookbook/preview_controller.rb +6 -1
  43. data/lib/lookbook/preview_example.rb +3 -2
  44. data/lib/lookbook/preview_group.rb +37 -0
  45. data/lib/lookbook/taggable.rb +5 -1
  46. data/lib/lookbook/version.rb +1 -1
  47. data/lib/lookbook.rb +1 -0
  48. data/lib/tasks/lookbook_tasks.rake +1 -1
  49. data/public/lookbook-assets/app.css +256 -102
  50. data/public/lookbook-assets/app.js +964 -95
  51. data/{app/views/lookbook/partials/_icon_sprite.html.erb → public/lookbook-assets/feather-sprite.svg} +1 -1
  52. metadata +52 -25
  53. data/app/assets/lookbook/js/preview.js +0 -76
  54. data/app/views/lookbook/browser/index.html.erb +0 -8
  55. data/app/views/lookbook/browser/show.html.erb +0 -33
  56. data/app/views/lookbook/partials/_preview.html.erb +0 -18
  57. data/app/views/lookbook/partials/_sidebar.html.erb +0 -21
  58. data/app/views/lookbook/partials/inspector/_code.html.erb +0 -1
  59. data/app/views/lookbook/partials/inspector/_inspector.html.erb +0 -43
  60. data/app/views/lookbook/partials/inspector/_prose.html.erb +0 -3
  61. data/app/views/lookbook/partials/nav/_collection.html.erb +0 -17
  62. data/app/views/lookbook/partials/nav/_label.html.erb +0 -13
  63. data/app/views/lookbook/partials/nav/_nav.html.erb +0 -27
  64. data/app/views/lookbook/partials/nav/_preview.html.erb +0 -48
  65. data/config/lookbook_cable.yml +0 -8
@@ -20,7 +20,10 @@
20
20
  return a;
21
21
  };
22
22
  var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
23
- var __commonJS = (cb, mod) => function __require() {
23
+ var __require = typeof require !== "undefined" ? require : (x) => {
24
+ throw new Error('Dynamic require of "' + x + '" is not supported');
25
+ };
26
+ var __commonJS = (cb, mod) => function __require2() {
24
27
  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
25
28
  };
26
29
  var __reExport = (target, module, desc) => {
@@ -631,6 +634,138 @@
631
634
  }
632
635
  });
633
636
 
637
+ // node_modules/@github/hotkey/dist/index.js
638
+ var Leaf = class {
639
+ constructor(trie) {
640
+ this.children = [];
641
+ this.parent = trie;
642
+ }
643
+ delete(value) {
644
+ const index2 = this.children.indexOf(value);
645
+ if (index2 === -1)
646
+ return false;
647
+ this.children = this.children.slice(0, index2).concat(this.children.slice(index2 + 1));
648
+ if (this.children.length === 0) {
649
+ this.parent.delete(this);
650
+ }
651
+ return true;
652
+ }
653
+ add(value) {
654
+ this.children.push(value);
655
+ return this;
656
+ }
657
+ };
658
+ var RadixTrie = class {
659
+ constructor(trie) {
660
+ this.parent = null;
661
+ this.children = {};
662
+ this.parent = trie || null;
663
+ }
664
+ get(edge) {
665
+ return this.children[edge];
666
+ }
667
+ insert(edges) {
668
+ let currentNode = this;
669
+ for (let i = 0; i < edges.length; i += 1) {
670
+ const edge = edges[i];
671
+ let nextNode = currentNode.get(edge);
672
+ if (i === edges.length - 1) {
673
+ if (nextNode instanceof RadixTrie) {
674
+ currentNode.delete(nextNode);
675
+ nextNode = null;
676
+ }
677
+ if (!nextNode) {
678
+ nextNode = new Leaf(currentNode);
679
+ currentNode.children[edge] = nextNode;
680
+ }
681
+ return nextNode;
682
+ } else {
683
+ if (nextNode instanceof Leaf)
684
+ nextNode = null;
685
+ if (!nextNode) {
686
+ nextNode = new RadixTrie(currentNode);
687
+ currentNode.children[edge] = nextNode;
688
+ }
689
+ }
690
+ currentNode = nextNode;
691
+ }
692
+ return currentNode;
693
+ }
694
+ delete(node) {
695
+ for (const edge in this.children) {
696
+ const currentNode = this.children[edge];
697
+ if (currentNode === node) {
698
+ const success = delete this.children[edge];
699
+ if (Object.keys(this.children).length === 0 && this.parent) {
700
+ this.parent.delete(this);
701
+ }
702
+ return success;
703
+ }
704
+ }
705
+ return false;
706
+ }
707
+ };
708
+ function isFormField(element) {
709
+ if (!(element instanceof HTMLElement)) {
710
+ return false;
711
+ }
712
+ const name = element.nodeName.toLowerCase();
713
+ const type = (element.getAttribute("type") || "").toLowerCase();
714
+ return name === "select" || name === "textarea" || name === "input" && type !== "submit" && type !== "reset" && type !== "checkbox" && type !== "radio" || element.isContentEditable;
715
+ }
716
+ function fireDeterminedAction(el) {
717
+ if (isFormField(el)) {
718
+ el.focus();
719
+ } else {
720
+ el.click();
721
+ }
722
+ }
723
+ function expandHotkeyToEdges(hotkey2) {
724
+ return hotkey2.split(",").map((edge) => edge.split(" "));
725
+ }
726
+ function hotkey(event) {
727
+ const elideShift = event.code.startsWith("Key") && event.shiftKey && event.key.toUpperCase() === event.key;
728
+ return `${event.ctrlKey ? "Control+" : ""}${event.altKey ? "Alt+" : ""}${event.metaKey ? "Meta+" : ""}${event.shiftKey && !elideShift ? "Shift+" : ""}${event.key}`;
729
+ }
730
+ var hotkeyRadixTrie = new RadixTrie();
731
+ var elementsLeaves = new WeakMap();
732
+ var currentTriePosition = hotkeyRadixTrie;
733
+ var resetTriePositionTimer = null;
734
+ function resetTriePosition() {
735
+ resetTriePositionTimer = null;
736
+ currentTriePosition = hotkeyRadixTrie;
737
+ }
738
+ function keyDownHandler(event) {
739
+ if (event.defaultPrevented)
740
+ return;
741
+ if (event.target instanceof Node && isFormField(event.target))
742
+ return;
743
+ if (resetTriePositionTimer != null) {
744
+ window.clearTimeout(resetTriePositionTimer);
745
+ }
746
+ resetTriePositionTimer = window.setTimeout(resetTriePosition, 1500);
747
+ const newTriePosition = currentTriePosition.get(hotkey(event));
748
+ if (!newTriePosition) {
749
+ resetTriePosition();
750
+ return;
751
+ }
752
+ currentTriePosition = newTriePosition;
753
+ if (newTriePosition instanceof Leaf) {
754
+ fireDeterminedAction(newTriePosition.children[newTriePosition.children.length - 1]);
755
+ event.preventDefault();
756
+ resetTriePosition();
757
+ return;
758
+ }
759
+ }
760
+ function install(element, hotkey2) {
761
+ if (Object.keys(hotkeyRadixTrie.children).length === 0) {
762
+ document.addEventListener("keydown", keyDownHandler);
763
+ }
764
+ const hotkeys = expandHotkeyToEdges(hotkey2 || element.getAttribute("data-hotkey") || "");
765
+ const leaves = hotkeys.map((h) => hotkeyRadixTrie.insert(h).add(element));
766
+ elementsLeaves.set(element, leaves);
767
+ }
768
+
634
769
  // node_modules/alpinejs/dist/module.esm.js
635
770
  var __create2 = Object.create;
636
771
  var __defProp2 = Object.defineProperty;
@@ -691,7 +826,7 @@
691
826
  };
692
827
  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
828
  var isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);
694
- var range = 2;
829
+ var range2 = 2;
695
830
  function generateCodeFrame(source, start2 = 0, end = source.length) {
696
831
  const lines = source.split(/\r?\n/);
697
832
  let count = 0;
@@ -699,7 +834,7 @@
699
834
  for (let i = 0; i < lines.length; i++) {
700
835
  count += lines[i].length + 1;
701
836
  if (count >= start2) {
702
- for (let j = i - range; j <= i + range || end > count; j++) {
837
+ for (let j = i - range2; j <= i + range2 || end > count; j++) {
703
838
  if (j < 0 || j >= lines.length)
704
839
  continue;
705
840
  const line = j + 1;
@@ -2087,7 +2222,7 @@
2087
2222
  function closestDataStack(node) {
2088
2223
  if (node._x_dataStack)
2089
2224
  return node._x_dataStack;
2090
- if (node instanceof ShadowRoot) {
2225
+ if (typeof ShadowRoot === "function" && node instanceof ShadowRoot) {
2091
2226
  return closestDataStack(node.host);
2092
2227
  }
2093
2228
  if (!node.parentNode) {
@@ -2293,6 +2428,9 @@ Expression: "${expression}"
2293
2428
  return getDirectiveHandler(el, directive2);
2294
2429
  });
2295
2430
  }
2431
+ function attributesOnly(attributes) {
2432
+ return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));
2433
+ }
2296
2434
  var isDeferringHandlers = false;
2297
2435
  var directiveHandlerStacks = new Map();
2298
2436
  var currentHandlerStackKey = Symbol();
@@ -2314,9 +2452,9 @@ Expression: "${expression}"
2314
2452
  stopDeferring();
2315
2453
  }
2316
2454
  function getDirectiveHandler(el, directive2) {
2317
- let noop = () => {
2455
+ let noop2 = () => {
2318
2456
  };
2319
- let handler3 = directiveHandlers[directive2.type] || noop;
2457
+ let handler3 = directiveHandlers[directive2.type] || noop2;
2320
2458
  let cleanups = [];
2321
2459
  let cleanup2 = (callback) => cleanups.push(callback);
2322
2460
  let [effect3, cleanupEffect] = elementBoundEffect(el);
@@ -2346,7 +2484,8 @@ Expression: "${expression}"
2346
2484
  return { name, value };
2347
2485
  };
2348
2486
  var into = (i) => i;
2349
- function toTransformedAttributes(callback) {
2487
+ function toTransformedAttributes(callback = () => {
2488
+ }) {
2350
2489
  return ({ name, value }) => {
2351
2490
  let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {
2352
2491
  return transform(carry);
@@ -2426,7 +2565,7 @@ Expression: "${expression}"
2426
2565
  isHolding = true;
2427
2566
  }
2428
2567
  function walk(el, callback) {
2429
- if (el instanceof ShadowRoot) {
2568
+ if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) {
2430
2569
  Array.from(el.children).forEach((el2) => walk(el2, callback));
2431
2570
  return;
2432
2571
  }
@@ -2454,7 +2593,7 @@ Expression: "${expression}"
2454
2593
  onAttributesAdded((el, attrs) => {
2455
2594
  directives(el, attrs).forEach((handle) => handle());
2456
2595
  });
2457
- let outNestedComponents = (el) => !closestRoot(el.parentElement);
2596
+ let outNestedComponents = (el) => !closestRoot(el.parentElement, true);
2458
2597
  Array.from(document.querySelectorAll(allSelectors())).filter(outNestedComponents).forEach((el) => {
2459
2598
  initTree(el);
2460
2599
  });
@@ -2474,14 +2613,15 @@ Expression: "${expression}"
2474
2613
  function addInitSelector(selectorCallback) {
2475
2614
  initSelectorCallbacks.push(selectorCallback);
2476
2615
  }
2477
- function closestRoot(el) {
2616
+ function closestRoot(el, includeInitSelectors = false) {
2478
2617
  if (!el)
2479
2618
  return;
2480
- if (rootSelectors().some((selector) => el.matches(selector)))
2619
+ const selectors = includeInitSelectors ? allSelectors() : rootSelectors();
2620
+ if (selectors.some((selector) => el.matches(selector)))
2481
2621
  return el;
2482
2622
  if (!el.parentElement)
2483
2623
  return;
2484
- return closestRoot(el.parentElement);
2624
+ return closestRoot(el.parentElement, includeInitSelectors);
2485
2625
  }
2486
2626
  function isRoot(el) {
2487
2627
  return rootSelectors().some((selector) => el.matches(selector));
@@ -2497,6 +2637,29 @@ Expression: "${expression}"
2497
2637
  function destroyTree(root) {
2498
2638
  walk(root, (el) => cleanupAttributes(el));
2499
2639
  }
2640
+ function debounce(func, wait) {
2641
+ var timeout;
2642
+ return function() {
2643
+ var context = this, args = arguments;
2644
+ var later = function() {
2645
+ timeout = null;
2646
+ func.apply(context, args);
2647
+ };
2648
+ clearTimeout(timeout);
2649
+ timeout = setTimeout(later, wait);
2650
+ };
2651
+ }
2652
+ function throttle(func, limit) {
2653
+ let inThrottle;
2654
+ return function() {
2655
+ let context = this, args = arguments;
2656
+ if (!inThrottle) {
2657
+ func.apply(context, args);
2658
+ inThrottle = true;
2659
+ setTimeout(() => inThrottle = false, limit);
2660
+ }
2661
+ };
2662
+ }
2500
2663
  function plugin(callback) {
2501
2664
  callback(alpine_default);
2502
2665
  }
@@ -2583,7 +2746,7 @@ Expression: "${expression}"
2583
2746
  get raw() {
2584
2747
  return raw;
2585
2748
  },
2586
- version: "3.2.4",
2749
+ version: "3.4.0",
2587
2750
  disableEffectScheduling,
2588
2751
  setReactivityEngine,
2589
2752
  addRootSelector,
@@ -2594,6 +2757,8 @@ Expression: "${expression}"
2594
2757
  interceptor,
2595
2758
  mutateDom,
2596
2759
  directive,
2760
+ throttle,
2761
+ debounce,
2597
2762
  evaluate,
2598
2763
  initTree,
2599
2764
  nextTick,
@@ -2628,7 +2793,23 @@ Expression: "${expression}"
2628
2793
  }));
2629
2794
  });
2630
2795
  magic("store", getStores);
2631
- magic("refs", (el) => closestRoot(el)._x_refs || {});
2796
+ magic("root", (el) => closestRoot(el));
2797
+ magic("refs", (el) => {
2798
+ if (el._x_refs_proxy)
2799
+ return el._x_refs_proxy;
2800
+ el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));
2801
+ return el._x_refs_proxy;
2802
+ });
2803
+ function getArrayOfRefObject(el) {
2804
+ let refObjects = [];
2805
+ let currentEl = el;
2806
+ while (currentEl) {
2807
+ if (currentEl._x_refs)
2808
+ refObjects.push(currentEl._x_refs);
2809
+ currentEl = currentEl.parentNode;
2810
+ }
2811
+ return refObjects;
2812
+ }
2632
2813
  magic("el", (el) => el);
2633
2814
  function setClasses(el, value) {
2634
2815
  if (Array.isArray(value)) {
@@ -2836,7 +3017,9 @@ Expression: "${expression}"
2836
3017
  };
2837
3018
  }
2838
3019
  window.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {
2839
- let clickAwayCompatibleShow = () => requestAnimationFrame(show);
3020
+ let clickAwayCompatibleShow = () => {
3021
+ document.visibilityState === "visible" ? requestAnimationFrame(show) : setTimeout(show);
3022
+ };
2840
3023
  if (value) {
2841
3024
  el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();
2842
3025
  return;
@@ -3116,7 +3299,7 @@ Expression: "${expression}"
3116
3299
  return booleanAttributes.includes(attrName);
3117
3300
  }
3118
3301
  function attributeShouldntBePreservedIfFalsy(name) {
3119
- return !["aria-pressed", "aria-checked"].includes(name);
3302
+ return !["aria-pressed", "aria-checked", "aria-expanded"].includes(name);
3120
3303
  }
3121
3304
  function on(el, event, modifiers, callback) {
3122
3305
  let listenerTarget = el;
@@ -3168,12 +3351,12 @@ Expression: "${expression}"
3168
3351
  if (modifiers.includes("debounce")) {
3169
3352
  let nextModifier = modifiers[modifiers.indexOf("debounce") + 1] || "invalid-wait";
3170
3353
  let wait = isNumeric(nextModifier.split("ms")[0]) ? Number(nextModifier.split("ms")[0]) : 250;
3171
- handler3 = debounce(handler3, wait, this);
3354
+ handler3 = debounce(handler3, wait);
3172
3355
  }
3173
3356
  if (modifiers.includes("throttle")) {
3174
3357
  let nextModifier = modifiers[modifiers.indexOf("throttle") + 1] || "invalid-wait";
3175
3358
  let wait = isNumeric(nextModifier.split("ms")[0]) ? Number(nextModifier.split("ms")[0]) : 250;
3176
- handler3 = throttle(handler3, wait, this);
3359
+ handler3 = throttle(handler3, wait);
3177
3360
  }
3178
3361
  if (modifiers.includes("once")) {
3179
3362
  handler3 = wrapHandler(handler3, (next, e) => {
@@ -3192,29 +3375,6 @@ Expression: "${expression}"
3192
3375
  function camelCase2(subject) {
3193
3376
  return subject.toLowerCase().replace(/-(\w)/g, (match, char) => char.toUpperCase());
3194
3377
  }
3195
- function debounce(func, wait) {
3196
- var timeout;
3197
- return function() {
3198
- var context = this, args = arguments;
3199
- var later = function() {
3200
- timeout = null;
3201
- func.apply(context, args);
3202
- };
3203
- clearTimeout(timeout);
3204
- timeout = setTimeout(later, wait);
3205
- };
3206
- }
3207
- function throttle(func, limit) {
3208
- let inThrottle;
3209
- return function() {
3210
- let context = this, args = arguments;
3211
- if (!inThrottle) {
3212
- func.apply(context, args);
3213
- inThrottle = true;
3214
- setTimeout(() => inThrottle = false, limit);
3215
- }
3216
- };
3217
- }
3218
3378
  function isNumeric(subject) {
3219
3379
  return !Array.isArray(subject) && !isNaN(subject);
3220
3380
  }
@@ -3266,7 +3426,9 @@ Expression: "${expression}"
3266
3426
  up: "arrow-up",
3267
3427
  down: "arrow-down",
3268
3428
  left: "arrow-left",
3269
- right: "arrow-right"
3429
+ right: "arrow-right",
3430
+ period: ".",
3431
+ equal: "="
3270
3432
  };
3271
3433
  modifierToKeyMap[key] = key;
3272
3434
  return Object.keys(modifierToKeyMap).map((modifier) => {
@@ -3347,7 +3509,12 @@ Expression: "${expression}"
3347
3509
  }
3348
3510
  directive("cloak", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix("cloak")))));
3349
3511
  addInitSelector(() => `[${prefix("init")}]`);
3350
- directive("init", skipDuringClone((el, { expression }) => evaluate(el, expression, {}, false)));
3512
+ directive("init", skipDuringClone((el, { expression }) => {
3513
+ if (typeof expression === "string") {
3514
+ return !!expression.trim() && evaluate(el, expression, {}, false);
3515
+ }
3516
+ return evaluate(el, expression, {}, false);
3517
+ }));
3351
3518
  directive("text", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {
3352
3519
  let evaluate2 = evaluateLater2(expression);
3353
3520
  effect3(() => {
@@ -3387,6 +3554,12 @@ Expression: "${expression}"
3387
3554
  cleanupRunners.pop()();
3388
3555
  getBindings((bindings) => {
3389
3556
  let attributes = Object.entries(bindings).map(([name, value]) => ({ name, value }));
3557
+ attributesOnly(attributes).forEach(({ name, value }, index2) => {
3558
+ attributes[index2] = {
3559
+ name: `x-bind:${name}`,
3560
+ value: `"${value}"`
3561
+ };
3562
+ });
3390
3563
  directives(el, attributes, original).map((handle) => {
3391
3564
  cleanupRunners.push(handle.runCleanups);
3392
3565
  handle();
@@ -3586,6 +3759,11 @@ Expression: "${expression}"
3586
3759
  names.forEach((name, i) => {
3587
3760
  scopeVariables[name] = item[i];
3588
3761
  });
3762
+ } else if (/^\{.*\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === "object") {
3763
+ let names = iteratorNames.item.replace("{", "").replace("}", "").split(",").map((i) => i.trim());
3764
+ names.forEach((name) => {
3765
+ scopeVariables[name] = item[name];
3766
+ });
3589
3767
  } else {
3590
3768
  scopeVariables[iteratorNames.item] = item;
3591
3769
  }
@@ -5791,18 +5969,18 @@ Expression: "${expression}"
5791
5969
  didTouchMove = false;
5792
5970
  }
5793
5971
  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);
5972
+ var doc2 = getDocument();
5973
+ doc2.addEventListener("mousedown", onDocumentPress, true);
5974
+ doc2.addEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5975
+ doc2.addEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5976
+ doc2.addEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5799
5977
  }
5800
5978
  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);
5979
+ var doc2 = getDocument();
5980
+ doc2.removeEventListener("mousedown", onDocumentPress, true);
5981
+ doc2.removeEventListener("touchend", onDocumentPress, TOUCH_OPTIONS);
5982
+ doc2.removeEventListener("touchstart", onTouchStart, TOUCH_OPTIONS);
5983
+ doc2.removeEventListener("touchmove", onTouchMove, TOUCH_OPTIONS);
5806
5984
  }
5807
5985
  function onTransitionedOut(duration, callback) {
5808
5986
  onTransitionEnd(duration, function() {
@@ -6697,18 +6875,18 @@ Expression: "${expression}"
6697
6875
  clientY
6698
6876
  };
6699
6877
  }
6700
- function addMouseCoordsListener(doc) {
6701
- doc.addEventListener("mousemove", storeMouseCoords);
6878
+ function addMouseCoordsListener(doc2) {
6879
+ doc2.addEventListener("mousemove", storeMouseCoords);
6702
6880
  }
6703
- function removeMouseCoordsListener(doc) {
6704
- doc.removeEventListener("mousemove", storeMouseCoords);
6881
+ function removeMouseCoordsListener(doc2) {
6882
+ doc2.removeEventListener("mousemove", storeMouseCoords);
6705
6883
  }
6706
6884
  var followCursor2 = {
6707
6885
  name: "followCursor",
6708
6886
  defaultValue: false,
6709
6887
  fn: function fn(instance) {
6710
6888
  var reference = instance.reference;
6711
- var doc = getOwnerDocument(instance.props.triggerTarget || reference);
6889
+ var doc2 = getOwnerDocument(instance.props.triggerTarget || reference);
6712
6890
  var isInternalUpdate = false;
6713
6891
  var wasFocusEvent = false;
6714
6892
  var isUnmounted = true;
@@ -6717,10 +6895,10 @@ Expression: "${expression}"
6717
6895
  return instance.props.followCursor === "initial" && instance.state.isVisible;
6718
6896
  }
6719
6897
  function addListener() {
6720
- doc.addEventListener("mousemove", onMouseMove);
6898
+ doc2.addEventListener("mousemove", onMouseMove);
6721
6899
  }
6722
6900
  function removeListener() {
6723
- doc.removeEventListener("mousemove", onMouseMove);
6901
+ doc2.removeEventListener("mousemove", onMouseMove);
6724
6902
  }
6725
6903
  function unsetGetReferenceClientRect() {
6726
6904
  isInternalUpdate = true;
@@ -6766,9 +6944,9 @@ Expression: "${expression}"
6766
6944
  if (instance.props.followCursor) {
6767
6945
  activeInstances.push({
6768
6946
  instance,
6769
- doc
6947
+ doc: doc2
6770
6948
  });
6771
- addMouseCoordsListener(doc);
6949
+ addMouseCoordsListener(doc2);
6772
6950
  }
6773
6951
  }
6774
6952
  function destroy3() {
@@ -6776,9 +6954,9 @@ Expression: "${expression}"
6776
6954
  return data2.instance !== instance;
6777
6955
  });
6778
6956
  if (activeInstances.filter(function(data2) {
6779
- return data2.doc === doc;
6957
+ return data2.doc === doc2;
6780
6958
  }).length === 0) {
6781
- removeMouseCoordsListener(doc);
6959
+ removeMouseCoordsListener(doc2);
6782
6960
  }
6783
6961
  }
6784
6962
  return {
@@ -7098,6 +7276,32 @@ Expression: "${expression}"
7098
7276
  });
7099
7277
  }
7100
7278
 
7279
+ // app/assets/lookbook/js/utils/screen.js
7280
+ function screen_default(Alpine3) {
7281
+ let data2 = Alpine3.reactive({ screensize: window.innerWidth });
7282
+ const defaultBreakpoints = {
7283
+ xs: 0,
7284
+ sm: 640,
7285
+ md: 768,
7286
+ lg: 1024,
7287
+ xl: 1280,
7288
+ "2xl": 1536
7289
+ };
7290
+ const breakpoints = window.AlpineMagicHelpersConfig && window.AlpineMagicHelpersConfig.breakpoints ? window.AlpineMagicHelpersConfig.breakpoints : defaultBreakpoints;
7291
+ window.addEventListener("resize", () => {
7292
+ data2.screensize = window.innerWidth;
7293
+ });
7294
+ Alpine3.magic("screen", () => (breakpoint) => {
7295
+ let width = data2.screensize;
7296
+ if (Number.isInteger(breakpoint))
7297
+ return breakpoint <= width;
7298
+ if (breakpoints[breakpoint] === void 0) {
7299
+ throw Error("Undefined $screen property: " + breakpoint + ". Supported properties: " + Object.keys(breakpoints).join(", "));
7300
+ }
7301
+ return breakpoints[breakpoint] <= width;
7302
+ });
7303
+ }
7304
+
7101
7305
  // node_modules/split-grid/dist/split-grid.mjs
7102
7306
  var numeric = function(value, unit) {
7103
7307
  return Number(value.slice(0, -1 * unit.length));
@@ -7575,9 +7779,9 @@ Expression: "${expression}"
7575
7779
  }
7576
7780
  var split_grid_default = index;
7577
7781
 
7578
- // app/assets/lookbook/js/split.js
7782
+ // app/assets/lookbook/js/utils/split.js
7579
7783
  function split_default(props) {
7580
- const app = Alpine.store("app");
7784
+ const page2 = Alpine.store("page");
7581
7785
  return {
7582
7786
  init() {
7583
7787
  split_grid_default({
@@ -7588,23 +7792,562 @@ Expression: "${expression}"
7588
7792
  writeStyle() {
7589
7793
  },
7590
7794
  onDrag(dir, track, style) {
7591
- splits = style.split(" ").map((num) => parseInt(num));
7795
+ const splits = style.split(" ").map((num) => parseInt(num));
7592
7796
  props.onDrag(splits);
7593
7797
  },
7594
7798
  onDragStart() {
7595
- app.reflowing = true;
7799
+ page2.reflowing = true;
7596
7800
  },
7597
7801
  onDragEnd() {
7598
- app.reflowing = false;
7802
+ page2.reflowing = false;
7599
7803
  }
7600
7804
  });
7601
7805
  }
7602
7806
  };
7603
7807
  }
7604
7808
 
7605
- // app/assets/lookbook/js/preview.js
7809
+ // node_modules/morphdom/dist/morphdom-esm.js
7810
+ var DOCUMENT_FRAGMENT_NODE = 11;
7811
+ function morphAttrs(fromNode, toNode) {
7812
+ var toNodeAttrs = toNode.attributes;
7813
+ var attr;
7814
+ var attrName;
7815
+ var attrNamespaceURI;
7816
+ var attrValue;
7817
+ var fromValue;
7818
+ if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {
7819
+ return;
7820
+ }
7821
+ for (var i = toNodeAttrs.length - 1; i >= 0; i--) {
7822
+ attr = toNodeAttrs[i];
7823
+ attrName = attr.name;
7824
+ attrNamespaceURI = attr.namespaceURI;
7825
+ attrValue = attr.value;
7826
+ if (attrNamespaceURI) {
7827
+ attrName = attr.localName || attrName;
7828
+ fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);
7829
+ if (fromValue !== attrValue) {
7830
+ if (attr.prefix === "xmlns") {
7831
+ attrName = attr.name;
7832
+ }
7833
+ fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);
7834
+ }
7835
+ } else {
7836
+ fromValue = fromNode.getAttribute(attrName);
7837
+ if (fromValue !== attrValue) {
7838
+ fromNode.setAttribute(attrName, attrValue);
7839
+ }
7840
+ }
7841
+ }
7842
+ var fromNodeAttrs = fromNode.attributes;
7843
+ for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {
7844
+ attr = fromNodeAttrs[d];
7845
+ attrName = attr.name;
7846
+ attrNamespaceURI = attr.namespaceURI;
7847
+ if (attrNamespaceURI) {
7848
+ attrName = attr.localName || attrName;
7849
+ if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {
7850
+ fromNode.removeAttributeNS(attrNamespaceURI, attrName);
7851
+ }
7852
+ } else {
7853
+ if (!toNode.hasAttribute(attrName)) {
7854
+ fromNode.removeAttribute(attrName);
7855
+ }
7856
+ }
7857
+ }
7858
+ }
7859
+ var range;
7860
+ var NS_XHTML = "http://www.w3.org/1999/xhtml";
7861
+ var doc = typeof document === "undefined" ? void 0 : document;
7862
+ var HAS_TEMPLATE_SUPPORT = !!doc && "content" in doc.createElement("template");
7863
+ var HAS_RANGE_SUPPORT = !!doc && doc.createRange && "createContextualFragment" in doc.createRange();
7864
+ function createFragmentFromTemplate(str) {
7865
+ var template = doc.createElement("template");
7866
+ template.innerHTML = str;
7867
+ return template.content.childNodes[0];
7868
+ }
7869
+ function createFragmentFromRange(str) {
7870
+ if (!range) {
7871
+ range = doc.createRange();
7872
+ range.selectNode(doc.body);
7873
+ }
7874
+ var fragment = range.createContextualFragment(str);
7875
+ return fragment.childNodes[0];
7876
+ }
7877
+ function createFragmentFromWrap(str) {
7878
+ var fragment = doc.createElement("body");
7879
+ fragment.innerHTML = str;
7880
+ return fragment.childNodes[0];
7881
+ }
7882
+ function toElement(str) {
7883
+ str = str.trim();
7884
+ if (HAS_TEMPLATE_SUPPORT) {
7885
+ return createFragmentFromTemplate(str);
7886
+ } else if (HAS_RANGE_SUPPORT) {
7887
+ return createFragmentFromRange(str);
7888
+ }
7889
+ return createFragmentFromWrap(str);
7890
+ }
7891
+ function compareNodeNames(fromEl, toEl) {
7892
+ var fromNodeName = fromEl.nodeName;
7893
+ var toNodeName = toEl.nodeName;
7894
+ var fromCodeStart, toCodeStart;
7895
+ if (fromNodeName === toNodeName) {
7896
+ return true;
7897
+ }
7898
+ fromCodeStart = fromNodeName.charCodeAt(0);
7899
+ toCodeStart = toNodeName.charCodeAt(0);
7900
+ if (fromCodeStart <= 90 && toCodeStart >= 97) {
7901
+ return fromNodeName === toNodeName.toUpperCase();
7902
+ } else if (toCodeStart <= 90 && fromCodeStart >= 97) {
7903
+ return toNodeName === fromNodeName.toUpperCase();
7904
+ } else {
7905
+ return false;
7906
+ }
7907
+ }
7908
+ function createElementNS(name, namespaceURI) {
7909
+ return !namespaceURI || namespaceURI === NS_XHTML ? doc.createElement(name) : doc.createElementNS(namespaceURI, name);
7910
+ }
7911
+ function moveChildren(fromEl, toEl) {
7912
+ var curChild = fromEl.firstChild;
7913
+ while (curChild) {
7914
+ var nextChild = curChild.nextSibling;
7915
+ toEl.appendChild(curChild);
7916
+ curChild = nextChild;
7917
+ }
7918
+ return toEl;
7919
+ }
7920
+ function syncBooleanAttrProp(fromEl, toEl, name) {
7921
+ if (fromEl[name] !== toEl[name]) {
7922
+ fromEl[name] = toEl[name];
7923
+ if (fromEl[name]) {
7924
+ fromEl.setAttribute(name, "");
7925
+ } else {
7926
+ fromEl.removeAttribute(name);
7927
+ }
7928
+ }
7929
+ }
7930
+ var specialElHandlers = {
7931
+ OPTION: function(fromEl, toEl) {
7932
+ var parentNode = fromEl.parentNode;
7933
+ if (parentNode) {
7934
+ var parentName = parentNode.nodeName.toUpperCase();
7935
+ if (parentName === "OPTGROUP") {
7936
+ parentNode = parentNode.parentNode;
7937
+ parentName = parentNode && parentNode.nodeName.toUpperCase();
7938
+ }
7939
+ if (parentName === "SELECT" && !parentNode.hasAttribute("multiple")) {
7940
+ if (fromEl.hasAttribute("selected") && !toEl.selected) {
7941
+ fromEl.setAttribute("selected", "selected");
7942
+ fromEl.removeAttribute("selected");
7943
+ }
7944
+ parentNode.selectedIndex = -1;
7945
+ }
7946
+ }
7947
+ syncBooleanAttrProp(fromEl, toEl, "selected");
7948
+ },
7949
+ INPUT: function(fromEl, toEl) {
7950
+ syncBooleanAttrProp(fromEl, toEl, "checked");
7951
+ syncBooleanAttrProp(fromEl, toEl, "disabled");
7952
+ if (fromEl.value !== toEl.value) {
7953
+ fromEl.value = toEl.value;
7954
+ }
7955
+ if (!toEl.hasAttribute("value")) {
7956
+ fromEl.removeAttribute("value");
7957
+ }
7958
+ },
7959
+ TEXTAREA: function(fromEl, toEl) {
7960
+ var newValue = toEl.value;
7961
+ if (fromEl.value !== newValue) {
7962
+ fromEl.value = newValue;
7963
+ }
7964
+ var firstChild = fromEl.firstChild;
7965
+ if (firstChild) {
7966
+ var oldValue = firstChild.nodeValue;
7967
+ if (oldValue == newValue || !newValue && oldValue == fromEl.placeholder) {
7968
+ return;
7969
+ }
7970
+ firstChild.nodeValue = newValue;
7971
+ }
7972
+ },
7973
+ SELECT: function(fromEl, toEl) {
7974
+ if (!toEl.hasAttribute("multiple")) {
7975
+ var selectedIndex = -1;
7976
+ var i = 0;
7977
+ var curChild = fromEl.firstChild;
7978
+ var optgroup;
7979
+ var nodeName;
7980
+ while (curChild) {
7981
+ nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();
7982
+ if (nodeName === "OPTGROUP") {
7983
+ optgroup = curChild;
7984
+ curChild = optgroup.firstChild;
7985
+ } else {
7986
+ if (nodeName === "OPTION") {
7987
+ if (curChild.hasAttribute("selected")) {
7988
+ selectedIndex = i;
7989
+ break;
7990
+ }
7991
+ i++;
7992
+ }
7993
+ curChild = curChild.nextSibling;
7994
+ if (!curChild && optgroup) {
7995
+ curChild = optgroup.nextSibling;
7996
+ optgroup = null;
7997
+ }
7998
+ }
7999
+ }
8000
+ fromEl.selectedIndex = selectedIndex;
8001
+ }
8002
+ }
8003
+ };
8004
+ var ELEMENT_NODE = 1;
8005
+ var DOCUMENT_FRAGMENT_NODE$1 = 11;
8006
+ var TEXT_NODE = 3;
8007
+ var COMMENT_NODE = 8;
8008
+ function noop() {
8009
+ }
8010
+ function defaultGetNodeKey(node) {
8011
+ if (node) {
8012
+ return node.getAttribute && node.getAttribute("id") || node.id;
8013
+ }
8014
+ }
8015
+ function morphdomFactory(morphAttrs2) {
8016
+ return function morphdom2(fromNode, toNode, options) {
8017
+ if (!options) {
8018
+ options = {};
8019
+ }
8020
+ if (typeof toNode === "string") {
8021
+ if (fromNode.nodeName === "#document" || fromNode.nodeName === "HTML" || fromNode.nodeName === "BODY") {
8022
+ var toNodeHtml = toNode;
8023
+ toNode = doc.createElement("html");
8024
+ toNode.innerHTML = toNodeHtml;
8025
+ } else {
8026
+ toNode = toElement(toNode);
8027
+ }
8028
+ }
8029
+ var getNodeKey = options.getNodeKey || defaultGetNodeKey;
8030
+ var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;
8031
+ var onNodeAdded = options.onNodeAdded || noop;
8032
+ var onBeforeElUpdated = options.onBeforeElUpdated || noop;
8033
+ var onElUpdated = options.onElUpdated || noop;
8034
+ var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;
8035
+ var onNodeDiscarded = options.onNodeDiscarded || noop;
8036
+ var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;
8037
+ var childrenOnly = options.childrenOnly === true;
8038
+ var fromNodesLookup = Object.create(null);
8039
+ var keyedRemovalList = [];
8040
+ function addKeyedRemoval(key) {
8041
+ keyedRemovalList.push(key);
8042
+ }
8043
+ function walkDiscardedChildNodes(node, skipKeyedNodes) {
8044
+ if (node.nodeType === ELEMENT_NODE) {
8045
+ var curChild = node.firstChild;
8046
+ while (curChild) {
8047
+ var key = void 0;
8048
+ if (skipKeyedNodes && (key = getNodeKey(curChild))) {
8049
+ addKeyedRemoval(key);
8050
+ } else {
8051
+ onNodeDiscarded(curChild);
8052
+ if (curChild.firstChild) {
8053
+ walkDiscardedChildNodes(curChild, skipKeyedNodes);
8054
+ }
8055
+ }
8056
+ curChild = curChild.nextSibling;
8057
+ }
8058
+ }
8059
+ }
8060
+ function removeNode(node, parentNode, skipKeyedNodes) {
8061
+ if (onBeforeNodeDiscarded(node) === false) {
8062
+ return;
8063
+ }
8064
+ if (parentNode) {
8065
+ parentNode.removeChild(node);
8066
+ }
8067
+ onNodeDiscarded(node);
8068
+ walkDiscardedChildNodes(node, skipKeyedNodes);
8069
+ }
8070
+ function indexTree(node) {
8071
+ if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {
8072
+ var curChild = node.firstChild;
8073
+ while (curChild) {
8074
+ var key = getNodeKey(curChild);
8075
+ if (key) {
8076
+ fromNodesLookup[key] = curChild;
8077
+ }
8078
+ indexTree(curChild);
8079
+ curChild = curChild.nextSibling;
8080
+ }
8081
+ }
8082
+ }
8083
+ indexTree(fromNode);
8084
+ function handleNodeAdded(el) {
8085
+ onNodeAdded(el);
8086
+ var curChild = el.firstChild;
8087
+ while (curChild) {
8088
+ var nextSibling = curChild.nextSibling;
8089
+ var key = getNodeKey(curChild);
8090
+ if (key) {
8091
+ var unmatchedFromEl = fromNodesLookup[key];
8092
+ if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {
8093
+ curChild.parentNode.replaceChild(unmatchedFromEl, curChild);
8094
+ morphEl(unmatchedFromEl, curChild);
8095
+ } else {
8096
+ handleNodeAdded(curChild);
8097
+ }
8098
+ } else {
8099
+ handleNodeAdded(curChild);
8100
+ }
8101
+ curChild = nextSibling;
8102
+ }
8103
+ }
8104
+ function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {
8105
+ while (curFromNodeChild) {
8106
+ var fromNextSibling = curFromNodeChild.nextSibling;
8107
+ if (curFromNodeKey = getNodeKey(curFromNodeChild)) {
8108
+ addKeyedRemoval(curFromNodeKey);
8109
+ } else {
8110
+ removeNode(curFromNodeChild, fromEl, true);
8111
+ }
8112
+ curFromNodeChild = fromNextSibling;
8113
+ }
8114
+ }
8115
+ function morphEl(fromEl, toEl, childrenOnly2) {
8116
+ var toElKey = getNodeKey(toEl);
8117
+ if (toElKey) {
8118
+ delete fromNodesLookup[toElKey];
8119
+ }
8120
+ if (!childrenOnly2) {
8121
+ if (onBeforeElUpdated(fromEl, toEl) === false) {
8122
+ return;
8123
+ }
8124
+ morphAttrs2(fromEl, toEl);
8125
+ onElUpdated(fromEl);
8126
+ if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {
8127
+ return;
8128
+ }
8129
+ }
8130
+ if (fromEl.nodeName !== "TEXTAREA") {
8131
+ morphChildren(fromEl, toEl);
8132
+ } else {
8133
+ specialElHandlers.TEXTAREA(fromEl, toEl);
8134
+ }
8135
+ }
8136
+ function morphChildren(fromEl, toEl) {
8137
+ var curToNodeChild = toEl.firstChild;
8138
+ var curFromNodeChild = fromEl.firstChild;
8139
+ var curToNodeKey;
8140
+ var curFromNodeKey;
8141
+ var fromNextSibling;
8142
+ var toNextSibling;
8143
+ var matchingFromEl;
8144
+ outer:
8145
+ while (curToNodeChild) {
8146
+ toNextSibling = curToNodeChild.nextSibling;
8147
+ curToNodeKey = getNodeKey(curToNodeChild);
8148
+ while (curFromNodeChild) {
8149
+ fromNextSibling = curFromNodeChild.nextSibling;
8150
+ if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {
8151
+ curToNodeChild = toNextSibling;
8152
+ curFromNodeChild = fromNextSibling;
8153
+ continue outer;
8154
+ }
8155
+ curFromNodeKey = getNodeKey(curFromNodeChild);
8156
+ var curFromNodeType = curFromNodeChild.nodeType;
8157
+ var isCompatible = void 0;
8158
+ if (curFromNodeType === curToNodeChild.nodeType) {
8159
+ if (curFromNodeType === ELEMENT_NODE) {
8160
+ if (curToNodeKey) {
8161
+ if (curToNodeKey !== curFromNodeKey) {
8162
+ if (matchingFromEl = fromNodesLookup[curToNodeKey]) {
8163
+ if (fromNextSibling === matchingFromEl) {
8164
+ isCompatible = false;
8165
+ } else {
8166
+ fromEl.insertBefore(matchingFromEl, curFromNodeChild);
8167
+ if (curFromNodeKey) {
8168
+ addKeyedRemoval(curFromNodeKey);
8169
+ } else {
8170
+ removeNode(curFromNodeChild, fromEl, true);
8171
+ }
8172
+ curFromNodeChild = matchingFromEl;
8173
+ }
8174
+ } else {
8175
+ isCompatible = false;
8176
+ }
8177
+ }
8178
+ } else if (curFromNodeKey) {
8179
+ isCompatible = false;
8180
+ }
8181
+ isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);
8182
+ if (isCompatible) {
8183
+ morphEl(curFromNodeChild, curToNodeChild);
8184
+ }
8185
+ } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {
8186
+ isCompatible = true;
8187
+ if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {
8188
+ curFromNodeChild.nodeValue = curToNodeChild.nodeValue;
8189
+ }
8190
+ }
8191
+ }
8192
+ if (isCompatible) {
8193
+ curToNodeChild = toNextSibling;
8194
+ curFromNodeChild = fromNextSibling;
8195
+ continue outer;
8196
+ }
8197
+ if (curFromNodeKey) {
8198
+ addKeyedRemoval(curFromNodeKey);
8199
+ } else {
8200
+ removeNode(curFromNodeChild, fromEl, true);
8201
+ }
8202
+ curFromNodeChild = fromNextSibling;
8203
+ }
8204
+ if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {
8205
+ fromEl.appendChild(matchingFromEl);
8206
+ morphEl(matchingFromEl, curToNodeChild);
8207
+ } else {
8208
+ var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);
8209
+ if (onBeforeNodeAddedResult !== false) {
8210
+ if (onBeforeNodeAddedResult) {
8211
+ curToNodeChild = onBeforeNodeAddedResult;
8212
+ }
8213
+ if (curToNodeChild.actualize) {
8214
+ curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);
8215
+ }
8216
+ fromEl.appendChild(curToNodeChild);
8217
+ handleNodeAdded(curToNodeChild);
8218
+ }
8219
+ }
8220
+ curToNodeChild = toNextSibling;
8221
+ curFromNodeChild = fromNextSibling;
8222
+ }
8223
+ cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);
8224
+ var specialElHandler = specialElHandlers[fromEl.nodeName];
8225
+ if (specialElHandler) {
8226
+ specialElHandler(fromEl, toEl);
8227
+ }
8228
+ }
8229
+ var morphedNode = fromNode;
8230
+ var morphedNodeType = morphedNode.nodeType;
8231
+ var toNodeType = toNode.nodeType;
8232
+ if (!childrenOnly) {
8233
+ if (morphedNodeType === ELEMENT_NODE) {
8234
+ if (toNodeType === ELEMENT_NODE) {
8235
+ if (!compareNodeNames(fromNode, toNode)) {
8236
+ onNodeDiscarded(fromNode);
8237
+ morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));
8238
+ }
8239
+ } else {
8240
+ morphedNode = toNode;
8241
+ }
8242
+ } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) {
8243
+ if (toNodeType === morphedNodeType) {
8244
+ if (morphedNode.nodeValue !== toNode.nodeValue) {
8245
+ morphedNode.nodeValue = toNode.nodeValue;
8246
+ }
8247
+ return morphedNode;
8248
+ } else {
8249
+ morphedNode = toNode;
8250
+ }
8251
+ }
8252
+ }
8253
+ if (morphedNode === toNode) {
8254
+ onNodeDiscarded(fromNode);
8255
+ } else {
8256
+ if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {
8257
+ return;
8258
+ }
8259
+ morphEl(morphedNode, toNode, childrenOnly);
8260
+ if (keyedRemovalList) {
8261
+ for (var i = 0, len = keyedRemovalList.length; i < len; i++) {
8262
+ var elToRemove = fromNodesLookup[keyedRemovalList[i]];
8263
+ if (elToRemove) {
8264
+ removeNode(elToRemove, elToRemove.parentNode, false);
8265
+ }
8266
+ }
8267
+ }
8268
+ }
8269
+ if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {
8270
+ if (morphedNode.actualize) {
8271
+ morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);
8272
+ }
8273
+ fromNode.parentNode.replaceChild(morphedNode, fromNode);
8274
+ }
8275
+ return morphedNode;
8276
+ };
8277
+ }
8278
+ var morphdom = morphdomFactory(morphAttrs);
8279
+ var morphdom_esm_default = morphdom;
8280
+
8281
+ // app/assets/lookbook/js/utils/morph.js
8282
+ function morph_default(from, to, opts = {}) {
8283
+ morphdom_esm_default(from, to, __spreadValues({
8284
+ onBeforeElUpdated: function(fromEl, toEl) {
8285
+ if (fromEl._x_dataStack) {
8286
+ Alpine.clone(fromEl, toEl);
8287
+ }
8288
+ if (fromEl.isEqualNode(toEl)) {
8289
+ return false;
8290
+ }
8291
+ return true;
8292
+ }
8293
+ }, opts));
8294
+ }
8295
+
8296
+ // app/assets/lookbook/js/page.js
8297
+ function page() {
8298
+ const store2 = Alpine.store("page");
8299
+ return {
8300
+ ready: false,
8301
+ sidebarOpenMobile: false,
8302
+ init() {
8303
+ this.$nextTick(() => this.ready = true);
8304
+ },
8305
+ splitProps: {
8306
+ minSize: 200,
8307
+ onDrag(splits) {
8308
+ Alpine.store("nav").width = Math.min(splits[0], 500);
8309
+ }
8310
+ },
8311
+ fetchHTML() {
8312
+ return __async(this, null, function* () {
8313
+ const response = yield fetch(window.document.location);
8314
+ if (!response.ok)
8315
+ return window.location.reload();
8316
+ const html = yield response.text();
8317
+ store2.doc = new DOMParser().parseFromString(html, "text/html");
8318
+ return store2.doc;
8319
+ });
8320
+ },
8321
+ updateTitle() {
8322
+ document.title = store2.doc.title;
8323
+ },
8324
+ render() {
8325
+ if (this.ready) {
8326
+ morph_default(this.$el, store2.doc.getElementById(this.$el.id));
8327
+ }
8328
+ }
8329
+ };
8330
+ }
8331
+
8332
+ // app/assets/lookbook/js/workbench.js
8333
+ function workbench() {
8334
+ const inspector2 = Alpine.store("inspector");
8335
+ return {
8336
+ previewViewportHeight: 0,
8337
+ previewViewportWidth: 0,
8338
+ splitProps: {
8339
+ direction: "vertical",
8340
+ minSize: 200,
8341
+ onDrag(splits) {
8342
+ inspector2.height = splits[2];
8343
+ }
8344
+ }
8345
+ };
8346
+ }
8347
+
8348
+ // app/assets/lookbook/js/workbench/preview.js
7606
8349
  function preview() {
7607
- const app = Alpine.store("app");
8350
+ const app = Alpine.store("page");
7608
8351
  const preview2 = Alpine.store("preview");
7609
8352
  return {
7610
8353
  init() {
@@ -7626,27 +8369,126 @@ Expression: "${expression}"
7626
8369
  window.addEventListener("pointermove", this.onResize);
7627
8370
  window.addEventListener("pointerup", this.onResizeEnd);
7628
8371
  },
7629
- onResizeEnd(e) {
8372
+ onResizeEnd() {
7630
8373
  window.removeEventListener("pointermove", this.onResize);
7631
8374
  window.removeEventListener("pointerup", this.onResizeEnd);
7632
8375
  app.reflowing = false;
7633
8376
  },
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%";
8377
+ toggleFullWidth() {
8378
+ if (preview2.width === "100%" && preview2.lastWidth) {
8379
+ preview2.width = preview2.lastWidth;
8380
+ } else {
8381
+ preview2.lastWidth = preview2.width;
8382
+ preview2.width = "100%";
8383
+ }
8384
+ }
8385
+ };
8386
+ }
8387
+
8388
+ // app/assets/lookbook/js/workbench/inspector.js
8389
+ function inspector() {
8390
+ const inspector2 = Alpine.store("inspector");
8391
+ return {
8392
+ switchTo(id) {
8393
+ inspector2.active = id;
8394
+ },
8395
+ active(id) {
8396
+ return inspector2.active === id;
8397
+ }
8398
+ };
8399
+ }
8400
+
8401
+ // app/assets/lookbook/js/nav.js
8402
+ function nav_default() {
8403
+ return {
8404
+ clearFilter() {
8405
+ this.$store.nav.filter = "";
8406
+ },
8407
+ init() {
8408
+ this.$watch("$store.nav.filter", (value) => {
8409
+ const nav = this.$store.nav;
8410
+ nav.filterText = value.replace(/\s/g, "").toLowerCase();
8411
+ nav.filtering = nav.filterText.length > 0;
8412
+ });
8413
+ },
8414
+ updateNav(event) {
8415
+ const nav = document.getElementById("nav");
8416
+ nav.style.height = `${this.$refs.shim.offsetHeight}px`;
8417
+ morph_default(nav, event.detail.doc.getElementById("nav"));
8418
+ Promise.resolve().then(() => {
8419
+ this.$refs.shim.style.height = "auto";
8420
+ this.$dispatch("nav:updated");
8421
+ });
8422
+ },
8423
+ navigate($event) {
8424
+ history.pushState({}, null, $event.currentTarget.href);
8425
+ this.$dispatch("popstate");
8426
+ },
8427
+ focusFilter() {
8428
+ this.currentFocus = this.$refs.filter;
8429
+ setTimeout(() => this.$refs.filter.focus(), 0);
8430
+ },
8431
+ unfocusFilter() {
8432
+ this.$refs.filter.blur();
8433
+ }
8434
+ };
8435
+ }
8436
+
8437
+ // app/assets/lookbook/js/nav/node.js
8438
+ function navNode() {
8439
+ return {
8440
+ id: null,
8441
+ hidden: true,
8442
+ children: [],
8443
+ init() {
8444
+ this.id = this.$el.id;
8445
+ },
8446
+ open() {
8447
+ return this.$store.nav.open[this.id];
8448
+ },
8449
+ getChildren() {
8450
+ return this.$refs.items ? Array.from(this.$refs.items.querySelectorAll(":scope > li")) : [];
8451
+ },
8452
+ filter() {
8453
+ this.hidden = true;
8454
+ this.getChildren().forEach((child) => {
8455
+ const data2 = child._x_dataStack[0];
8456
+ data2.filter();
8457
+ if (!data2.hidden) {
8458
+ this.hidden = false;
7642
8459
  }
8460
+ });
8461
+ },
8462
+ toggle() {
8463
+ this.$store.nav.open[this.id] = !this.$store.nav.open[this.id];
8464
+ }
8465
+ };
8466
+ }
8467
+
8468
+ // app/assets/lookbook/js/nav/leaf.js
8469
+ function navLeaf() {
8470
+ return {
8471
+ path: null,
8472
+ matchers: [],
8473
+ active: false,
8474
+ hidden: false,
8475
+ setActive() {
8476
+ this.active = this.path === window.location.pathname;
8477
+ },
8478
+ filter() {
8479
+ if (this.$store.nav.filtering) {
8480
+ const text = this.$store.nav.filterText;
8481
+ const matched = this.matchers.map((m) => m.includes(text));
8482
+ this.hidden = !matched.filter((m) => m).length;
8483
+ } else {
8484
+ this.hidden = false;
7643
8485
  }
7644
8486
  }
7645
8487
  };
7646
8488
  }
7647
8489
 
7648
- // app/assets/lookbook/js/size_observer.js
7649
- function size_observer_default() {
8490
+ // app/assets/lookbook/js/utils/size_observer.js
8491
+ function sizeObserver() {
7650
8492
  return {
7651
8493
  observedWidth: 0,
7652
8494
  observedHeight: 0,
@@ -7663,7 +8505,7 @@ Expression: "${expression}"
7663
8505
  };
7664
8506
  }
7665
8507
 
7666
- // app/assets/lookbook/js/reloader.js
8508
+ // app/assets/lookbook/js/utils/reloader.js
7667
8509
  var import_actioncable = __toModule(require_action_cable());
7668
8510
  var import_debounce = __toModule(require_debounce());
7669
8511
  function reloader_default(endpoint) {
@@ -7690,32 +8532,59 @@ Expression: "${expression}"
7690
8532
  };
7691
8533
  }
7692
8534
 
8535
+ // app/assets/lookbook/js/utils/clipboard.js
8536
+ function clipboard() {
8537
+ return {
8538
+ content: null,
8539
+ done: false,
8540
+ save() {
8541
+ this.$clipboard(this.content);
8542
+ this.done = true;
8543
+ setTimeout(() => {
8544
+ this.done = false;
8545
+ }, 1e3);
8546
+ }
8547
+ };
8548
+ }
8549
+
7693
8550
  // app/assets/lookbook/js/app.js
8551
+ window.Alpine = module_default;
7694
8552
  module_default.plugin(module_default2);
7695
8553
  module_default.plugin(module_default3);
7696
8554
  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 });
8555
+ module_default.plugin(screen_default);
8556
+ module_default.store("page", {
8557
+ reflowing: false,
8558
+ doc: window.document
8559
+ });
7701
8560
  module_default.persistedStore("nav", {
7702
8561
  width: 280,
7703
8562
  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
- }
8563
+ open: {}
7710
8564
  });
7711
- module_default.persistedStore("preview", {});
7712
8565
  module_default.persistedStore("inspector", {
7713
8566
  height: 200,
7714
8567
  active: "source"
7715
8568
  });
7716
- window.Alpine = module_default;
8569
+ module_default.persistedStore("preview", {
8570
+ width: "100%"
8571
+ });
8572
+ module_default.data("page", page);
8573
+ module_default.data("nav", nav_default);
8574
+ module_default.data("navNode", navNode);
8575
+ module_default.data("navLeaf", navLeaf);
8576
+ module_default.data("workbench", workbench);
8577
+ module_default.data("preview", preview);
8578
+ module_default.data("inspector", inspector);
8579
+ module_default.data("clipboard", clipboard);
8580
+ module_default.data("sizeObserver", sizeObserver);
8581
+ module_default.data("split", split_default);
8582
+ for (const el of document.querySelectorAll("[data-hotkey]")) {
8583
+ install(el);
8584
+ }
7717
8585
  if (window.SOCKET_PATH) {
7718
8586
  reloader_default(window.SOCKET_PATH).start();
7719
8587
  }
8588
+ window.Alpine = module_default;
7720
8589
  module_default.start();
7721
8590
  })();