@windrun-huaiin/third-ui 5.14.0 → 5.14.2

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.
@@ -2744,19 +2744,22 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2744
2744
  }, [chart, id, resolvedTheme, watermarkEnabled, watermarkText]);
2745
2745
  const clamp = (v, min, max) => Math.min(Math.max(v, min), max);
2746
2746
  const resetTransform = useCallback(() => {
2747
- setScale(1);
2747
+ setScale(4);
2748
2748
  setTranslate({ x: 0, y: 0 });
2749
2749
  }, []);
2750
2750
  const zoomBy = useCallback((delta) => {
2751
- setScale((prev) => clamp(prev + delta, 0.25, 6));
2751
+ setScale((prev) => clamp(prev + delta, 0.25, 10));
2752
2752
  }, []);
2753
2753
  const onWheel = useCallback((e) => {
2754
2754
  if (e.metaKey || e.ctrlKey) {
2755
2755
  e.preventDefault();
2756
+ e.stopPropagation();
2756
2757
  const delta = e.deltaY > 0 ? -0.1 : 0.1;
2757
- setScale((prev) => clamp(prev + delta, 0.25, 6));
2758
+ setScale((prev) => clamp(prev + delta, 0.25, 10));
2758
2759
  } else {
2759
- setTranslate((prev) => ({ x: prev.x, y: prev.y - e.deltaY }));
2760
+ e.preventDefault();
2761
+ e.stopPropagation();
2762
+ setTranslate((prev) => ({ x: prev.x - e.deltaX, y: prev.y - e.deltaY }));
2760
2763
  }
2761
2764
  }, []);
2762
2765
  const onPointerDown = useCallback((e) => {
@@ -2775,6 +2778,57 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2775
2778
  isPanningRef.current = false;
2776
2779
  e.currentTarget.releasePointerCapture(e.pointerId);
2777
2780
  }, []);
2781
+ useEffect(() => {
2782
+ if (!open) return;
2783
+ resetTransform();
2784
+ const onGlobalWheel = (ev) => {
2785
+ if (ev.ctrlKey || ev.metaKey) {
2786
+ ev.preventDefault();
2787
+ }
2788
+ };
2789
+ const onKeyDown = (ev) => {
2790
+ if (!(ev.ctrlKey || ev.metaKey)) return;
2791
+ const k = ev.key;
2792
+ if (k === "=" || k === "+") {
2793
+ ev.preventDefault();
2794
+ setScale((prev) => clamp(prev + 0.2, 0.25, 10));
2795
+ } else if (k === "-") {
2796
+ ev.preventDefault();
2797
+ setScale((prev) => clamp(prev - 0.2, 0.25, 10));
2798
+ } else if (k === "0") {
2799
+ ev.preventDefault();
2800
+ resetTransform();
2801
+ }
2802
+ };
2803
+ window.addEventListener("wheel", onGlobalWheel, { passive: false, capture: true });
2804
+ window.addEventListener("keydown", onKeyDown, { capture: true });
2805
+ return () => {
2806
+ window.removeEventListener("wheel", onGlobalWheel, true);
2807
+ window.removeEventListener("keydown", onKeyDown, true);
2808
+ };
2809
+ }, [open, resetTransform]);
2810
+ useEffect(() => {
2811
+ if (!open) return;
2812
+ const previousPosition = document.body.style.position;
2813
+ const previousTop = document.body.style.top;
2814
+ const previousLeft = document.body.style.left;
2815
+ const previousRight = document.body.style.right;
2816
+ const previousWidth = document.body.style.width;
2817
+ const scrollY = window.scrollY;
2818
+ document.body.style.position = "fixed";
2819
+ document.body.style.top = `-${scrollY}px`;
2820
+ document.body.style.left = "0";
2821
+ document.body.style.right = "0";
2822
+ document.body.style.width = "100%";
2823
+ return () => {
2824
+ document.body.style.position = previousPosition;
2825
+ document.body.style.top = previousTop;
2826
+ document.body.style.left = previousLeft;
2827
+ document.body.style.right = previousRight;
2828
+ document.body.style.width = previousWidth;
2829
+ window.scrollTo(0, scrollY);
2830
+ };
2831
+ }, [open]);
2778
2832
  return /* @__PURE__ */ jsxs10("div", { children: [
2779
2833
  /* @__PURE__ */ jsxs10(
2780
2834
  "div",
@@ -2805,10 +2859,24 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2805
2859
  "aria-label": typeof title === "string" ? title : "Mermaid Preview",
2806
2860
  className: "fixed inset-0 z-[9999] flex items-center justify-center",
2807
2861
  children: [
2808
- /* @__PURE__ */ jsx33("div", { className: "absolute inset-0 bg-black/60", onClick: () => {
2809
- setOpen(false);
2810
- resetTransform();
2811
- } }),
2862
+ /* @__PURE__ */ jsx33(
2863
+ "div",
2864
+ {
2865
+ className: "absolute inset-0 bg-black/60",
2866
+ onClick: () => {
2867
+ setOpen(false);
2868
+ resetTransform();
2869
+ },
2870
+ onWheel: (e) => {
2871
+ e.preventDefault();
2872
+ e.stopPropagation();
2873
+ },
2874
+ onTouchMove: (e) => {
2875
+ e.preventDefault();
2876
+ e.stopPropagation();
2877
+ }
2878
+ }
2879
+ ),
2812
2880
  /* @__PURE__ */ jsxs10("div", { className: "relative z-[1] max-w-[95vw] w-[95vw] h-[88vh] p-0 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-700 rounded-md shadow-2xl overflow-hidden", children: [
2813
2881
  /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between px-3 py-2 border-b border-neutral-200 dark:border-neutral-700", children: [
2814
2882
  /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2 text-sm text-neutral-600 dark:text-neutral-300", children: [
@@ -2821,7 +2889,7 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2821
2889
  {
2822
2890
  "aria-label": "Zoom out",
2823
2891
  className: "flex h-6 w-6 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 text-[13px]",
2824
- onClick: () => zoomBy(-0.2),
2892
+ onClick: () => zoomBy(-0.5),
2825
2893
  children: "\uFF0D"
2826
2894
  }
2827
2895
  ),
@@ -2834,10 +2902,47 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2834
2902
  {
2835
2903
  "aria-label": "Zoom in",
2836
2904
  className: "flex h-6 w-6 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 text-[13px]",
2837
- onClick: () => zoomBy(0.2),
2905
+ onClick: () => zoomBy(0.5),
2838
2906
  children: "\uFF0B"
2839
2907
  }
2840
2908
  ),
2909
+ /* @__PURE__ */ jsx33("div", { className: "mx-1 h-4 w-px bg-neutral-300 dark:bg-neutral-700" }),
2910
+ /* @__PURE__ */ jsx33(
2911
+ "button",
2912
+ {
2913
+ "aria-label": "Zoom 100%",
2914
+ className: "inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]",
2915
+ onClick: () => setScale(1),
2916
+ children: "X1"
2917
+ }
2918
+ ),
2919
+ /* @__PURE__ */ jsx33(
2920
+ "button",
2921
+ {
2922
+ "aria-label": "Zoom 200%",
2923
+ className: "ml-1 inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]",
2924
+ onClick: () => setScale(2),
2925
+ children: "X2"
2926
+ }
2927
+ ),
2928
+ /* @__PURE__ */ jsx33(
2929
+ "button",
2930
+ {
2931
+ "aria-label": "Zoom 300%",
2932
+ className: "ml-1 inline-flex h-6 min-w-8 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]",
2933
+ onClick: () => setScale(3),
2934
+ children: "X3"
2935
+ }
2936
+ ),
2937
+ /* @__PURE__ */ jsx33(
2938
+ "button",
2939
+ {
2940
+ "aria-label": "Zoom 1000%",
2941
+ className: "ml-1 inline-flex h-6 min-w-10 items-center justify-center rounded border border-neutral-300 dark:border-neutral-600 px-1.5 text-[12px]",
2942
+ onClick: () => setScale(10),
2943
+ children: "X10"
2944
+ }
2945
+ ),
2841
2946
  /* @__PURE__ */ jsx33(
2842
2947
  "button",
2843
2948
  {
@@ -2864,7 +2969,7 @@ function Mermaid({ chart, title, watermarkEnabled, watermarkText, enablePreview
2864
2969
  /* @__PURE__ */ jsxs10(
2865
2970
  "div",
2866
2971
  {
2867
- className: "relative h-[calc(88vh-40px)] w-full overflow-hidden bg-white dark:bg-neutral-900",
2972
+ className: "relative h-[calc(88vh-40px)] w-full overflow-hidden bg-white dark:bg-neutral-900 touch-none overscroll-contain",
2868
2973
  onWheel,
2869
2974
  onPointerDown,
2870
2975
  onPointerMove,