@ohhwells/bridge 0.1.11 → 0.1.13

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.
package/dist/index.js CHANGED
@@ -3396,7 +3396,9 @@ function ToggleGroupItem({
3396
3396
  Toggle,
3397
3397
  {
3398
3398
  pressed: groupValue === value,
3399
- onPressedChange: () => onValueChange(value),
3399
+ onPressedChange: (pressed) => {
3400
+ if (pressed) onValueChange(value);
3401
+ },
3400
3402
  className: cn(
3401
3403
  "text-foreground cursor-pointer hover:bg-transparent hover:text-foreground",
3402
3404
  "data-[state=on]:bg-background data-[state=on]:shadow-sm",
@@ -4088,8 +4090,6 @@ function OhhwellsBridge() {
4088
4090
  [data-ohw-editable-state], [data-ohw-editable-state] * { pointer-events: none !important; }
4089
4091
  [data-ohw-editable-state][data-ohw-active-state] [data-ohw-editable] { pointer-events: auto !important; }
4090
4092
  [data-ohw-editable-state][data-ohw-active-state][data-ohw-editable] { pointer-events: auto !important; }
4091
- [data-ohw-editable-state] [data-ohw-editable="image"],
4092
- [data-ohw-editable-state][data-ohw-editable="image"] { pointer-events: auto !important; }
4093
4093
  `;
4094
4094
  const forceHover = document.createElement("style");
4095
4095
  forceHover.setAttribute("data-ohw-active-state-style", "");
@@ -4116,10 +4116,12 @@ function OhhwellsBridge() {
4116
4116
  if (editable) {
4117
4117
  if (editable.dataset.ohwEditable === "image" || editable.dataset.ohwEditable === "bg-image") {
4118
4118
  e.preventDefault();
4119
+ e.stopPropagation();
4119
4120
  postToParentRef.current({ type: "ow:image-pick", key: editable.dataset.ohwKey ?? "" });
4120
4121
  return;
4121
4122
  }
4122
4123
  e.preventDefault();
4124
+ e.stopPropagation();
4123
4125
  activateRef.current(editable);
4124
4126
  return;
4125
4127
  }
@@ -4184,7 +4186,7 @@ function OhhwellsBridge() {
4184
4186
  };
4185
4187
  const postImageHover = (imgEl, isDragOver = false, forceTextOverlap) => {
4186
4188
  const r2 = getVisibleRect(imgEl);
4187
- const hasTextOverlap = forceTextOverlap ?? (imgEl.dataset.ohwEditable === "bg-image" || imgEl.hasAttribute("data-ohw-editable-state"));
4189
+ const hasTextOverlap = forceTextOverlap ?? false;
4188
4190
  hoveredImageHasTextOverlapRef.current = hasTextOverlap;
4189
4191
  postToParentRef.current({
4190
4192
  type: "ow:image-hover",
@@ -4394,7 +4396,8 @@ function OhhwellsBridge() {
4394
4396
  e.dataTransfer.dropEffect = "copy";
4395
4397
  if (hoveredImageRef.current !== el) {
4396
4398
  hoveredImageRef.current = el;
4397
- postImageHover(el, true);
4399
+ const isStateCard = !!el.closest("[data-ohw-editable-state]");
4400
+ postImageHover(el, true, isStateCard ? true : void 0);
4398
4401
  }
4399
4402
  };
4400
4403
  const handleDragLeave = (e) => {
@@ -4582,12 +4585,11 @@ function OhhwellsBridge() {
4582
4585
  if (hoveredImageRef.current) {
4583
4586
  const el = hoveredImageRef.current;
4584
4587
  const r2 = el.getBoundingClientRect();
4585
- const hasTextOverlap = el.dataset.ohwEditable === "bg-image" || el.hasAttribute("data-ohw-editable-state");
4586
4588
  postToParentRef.current({
4587
4589
  type: "ow:image-hover",
4588
4590
  key: el.dataset.ohwKey ?? "",
4589
4591
  rect: { top: r2.top, left: r2.left, width: r2.width, height: r2.height },
4590
- hasTextOverlap
4592
+ hasTextOverlap: hoveredImageHasTextOverlapRef.current
4591
4593
  });
4592
4594
  }
4593
4595
  };
@@ -4661,12 +4663,49 @@ function OhhwellsBridge() {
4661
4663
  parentScrollRef.current = { iframeOffsetTop, headerH, canvasH };
4662
4664
  if (activeElRef.current) applyToolbarPos(activeElRef.current.getBoundingClientRect());
4663
4665
  };
4666
+ const handleClickAt = (e) => {
4667
+ if (e.data?.type !== "ow:click-at") return;
4668
+ const { clientX, clientY } = e.data;
4669
+ const allImages = Array.from(
4670
+ document.querySelectorAll('[data-ohw-editable="image"], [data-ohw-editable="bg-image"]')
4671
+ ).filter((el) => !!el.closest("[data-ohw-editable-state]"));
4672
+ const stateCardImage = allImages.find((el) => {
4673
+ const ownerCard = el.closest("[data-ohw-editable-state]");
4674
+ if (ownerCard) {
4675
+ const inHoverState = ownerCard.getAttribute("data-ohw-active-state") === "hover";
4676
+ const elState = el.dataset.ohwState;
4677
+ if (el === ownerCard && inHoverState) return false;
4678
+ if (elState === "default" && inHoverState) return false;
4679
+ if (elState === "hover" && !inHoverState) return false;
4680
+ }
4681
+ const r2 = el.getBoundingClientRect();
4682
+ return clientX >= r2.left && clientX <= r2.right && clientY >= r2.top && clientY <= r2.bottom;
4683
+ });
4684
+ if (stateCardImage) {
4685
+ postToParentRef.current({ type: "ow:image-pick", key: stateCardImage.dataset.ohwKey ?? "" });
4686
+ return;
4687
+ }
4688
+ const textEditable = Array.from(
4689
+ document.querySelectorAll(
4690
+ '[data-ohw-editable]:not([data-ohw-editable="image"]):not([data-ohw-editable="bg-image"])'
4691
+ )
4692
+ ).find((el) => {
4693
+ const r2 = el.getBoundingClientRect();
4694
+ return clientX >= r2.left && clientX <= r2.right && clientY >= r2.top && clientY <= r2.bottom;
4695
+ });
4696
+ if (textEditable) {
4697
+ activateRef.current(textEditable);
4698
+ return;
4699
+ }
4700
+ deactivateRef.current();
4701
+ };
4664
4702
  window.addEventListener("message", handleSave);
4665
4703
  window.addEventListener("message", handleImageUrl);
4666
4704
  window.addEventListener("message", handleAnimLock);
4667
4705
  window.addEventListener("message", handleCanvasHeight);
4668
4706
  window.addEventListener("message", handleParentScroll);
4669
4707
  window.addEventListener("message", handlePointerSync);
4708
+ window.addEventListener("message", handleClickAt);
4670
4709
  document.addEventListener("click", handleClick, true);
4671
4710
  document.addEventListener("paste", handlePaste, true);
4672
4711
  document.addEventListener("input", handleInput, true);
@@ -4700,6 +4739,7 @@ function OhhwellsBridge() {
4700
4739
  window.removeEventListener("message", handleCanvasHeight);
4701
4740
  window.removeEventListener("message", handleParentScroll);
4702
4741
  window.removeEventListener("message", handlePointerSync);
4742
+ window.removeEventListener("message", handleClickAt);
4703
4743
  window.removeEventListener("message", handleHydrate);
4704
4744
  window.removeEventListener("message", handleDeactivate);
4705
4745
  autoSaveTimers.current.forEach(clearTimeout);