markdown-flow-ui 0.1.100-beta.27 → 0.1.100-beta.28
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/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-object@1.0.11/node_modules/style-to-object/cjs/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/style-to-object@1.0.11/node_modules/style-to-object/cjs/index.es.js +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs7.js +1 -1
- package/dist/_virtual/index.es6.js +2 -5
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/_virtual/index.es7.js +5 -2
- package/dist/_virtual/index.es7.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.es.js +29 -27
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/dist/components/Slide/Slide.cjs.js +1 -1
- package/dist/components/Slide/Slide.cjs.js.map +1 -1
- package/dist/components/Slide/Slide.es.js +117 -109
- package/dist/components/Slide/Slide.es.js.map +1 -1
- package/dist/components/ui/inputGroup/textarea.cjs.js +1 -1
- package/dist/components/ui/inputGroup/textarea.es.js +1 -1
- package/dist/markdown-flow-ui-lib.css +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const H=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),te=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),i=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),oe=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),u=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const H=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),te=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),i=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),oe=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),u=require("../../../../../../../../../_virtual/index.cjs7.js"),n=require("react"),T=require("./utils/commonUtils.cjs.js");var de=n.forwardRef(function(e,U){var p,x,y,$=e.inputElement,N=e.children,r=e.prefixCls,k=e.prefix,f=e.suffix,C=e.addonBefore,W=e.addonAfter,z=e.className,J=e.style,m=e.disabled,I=e.readOnly,K=e.focused,E=e.triggerFocus,d=e.allowClear,b=e.value,h=e.handleReset,L=e.hidden,t=e.classes,a=e.classNames,g=e.dataAttrs,o=e.styles,l=e.components,w=e.onClear,M=N??$,Q=l?.affixWrapper||"span",V=l?.groupWrapper||"span",X=l?.wrapper||"span",S=l?.groupAddon||"span",A=n.useRef(null),Y=function(s){var q;(q=A.current)!==null&&q!==void 0&&q.contains(s.target)&&E?.()},j=T.hasPrefixSuffix(e),c=n.cloneElement(M,{value:b,className:u.default((p=M.props)===null||p===void 0?void 0:p.className,!j&&a?.variant)||null}),B=n.useRef(null);if(n.useImperativeHandle(U,function(){return{nativeElement:B.current||A.current}}),j){var D=null;if(d){var Z=!m&&!I&&b,R="".concat(r,"-clear-icon"),P=oe.default(d)==="object"&&d!==null&&d!==void 0&&d.clearIcon?d.clearIcon:"✖";D=n.createElement("button",{type:"button",tabIndex:-1,onClick:function(s){h?.(s),w?.()},onMouseDown:function(s){return s.preventDefault()},className:u.default(R,i.default(i.default({},"".concat(R,"-hidden"),!Z),"".concat(R,"-has-suffix"),!!f))},P)}var v="".concat(r,"-affix-wrapper"),ee=u.default(v,i.default(i.default(i.default(i.default(i.default({},"".concat(r,"-disabled"),m),"".concat(v,"-disabled"),m),"".concat(v,"-focused"),K),"".concat(v,"-readonly"),I),"".concat(v,"-input-with-clear-btn"),f&&d&&b),t?.affixWrapper,a?.affixWrapper,a?.variant),ae=(f||d)&&n.createElement("span",{className:u.default("".concat(r,"-suffix"),a?.suffix),style:o?.suffix},D,f);c=n.createElement(Q,te.default({className:ee,style:o?.affixWrapper,onClick:Y},g?.affixWrapper,{ref:A}),k&&n.createElement("span",{className:u.default("".concat(r,"-prefix"),a?.prefix),style:o?.prefix},k),c,ae)}if(T.hasAddon(e)){var _="".concat(r,"-group"),O="".concat(_,"-addon"),F="".concat(_,"-wrapper"),ne=u.default("".concat(r,"-wrapper"),_,t?.wrapper,a?.wrapper),le=u.default(F,i.default({},"".concat(F,"-disabled"),m),t?.group,a?.groupWrapper);c=n.createElement(V,{className:le,ref:B},n.createElement(X,{className:ne},C&&n.createElement(S,{className:O},C),c,W&&n.createElement(S,{className:O},W)))}return n.cloneElement(c,{className:u.default((x=c.props)===null||x===void 0?void 0:x.className,z)||null,style:H.default(H.default({},(y=c.props)===null||y===void 0?void 0:y.style),J),hidden:L})});exports.default=de;
|
|
2
2
|
//# sourceMappingURL=BaseInput.cjs.js.map
|
|
@@ -2,7 +2,7 @@ import $ from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/hel
|
|
|
2
2
|
import oe from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.es.js";
|
|
3
3
|
import r from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.es.js";
|
|
4
4
|
import te from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.es.js";
|
|
5
|
-
import d from "../../../../../../../../../_virtual/index.
|
|
5
|
+
import d from "../../../../../../../../../_virtual/index.es7.js";
|
|
6
6
|
import l, { useRef as q, cloneElement as ie } from "react";
|
|
7
7
|
import { hasPrefixSuffix as re, hasAddon as de } from "./utils/commonUtils.es.js";
|
|
8
8
|
var xe = /* @__PURE__ */ l.forwardRef(function(e, z) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const Y=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),F=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),N=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),J=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),f=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.cjs.js"),K=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.cjs.js"),Q=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const Y=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),F=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),N=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),J=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),f=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.cjs.js"),K=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.cjs.js"),Q=require("../../../../../../../../../_virtual/index.cjs7.js"),ee=require("../../../../rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.cjs.js"),j=require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.cjs.js"),te=require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useMergedState.cjs.js"),w=require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.cjs.js"),ae=require("react"),re=require("./calculateNodeHeight.cjs.js");function ne(n){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(o,e,s.get?s:{enumerable:!0,get:()=>n[e]})}}return o.default=n,Object.freeze(o)}const t=ne(ae);var ue=["prefixCls","defaultValue","value","autoSize","onResize","className","style","disabled","onChange","onInternalAutoSize"],g=0,m=1,_=2,le=t.forwardRef(function(n,o){var e=n,s=e.prefixCls,O=e.defaultValue,p=e.value,a=e.autoSize,i=e.onResize,T=e.className,$=e.style,b=e.disabled,c=e.onChange,d=e.onInternalAutoSize,P=K.default(e,ue),V=te.default(O,{value:p,postState:function(r){return r??""}}),y=f.default(V,2),D=y[0],Z=y[1],H=function(r){Z(r.target.value),c?.(r)},S=t.useRef();t.useImperativeHandle(o,function(){return{textArea:S.current}});var L=t.useMemo(function(){return a&&J.default(a)==="object"?[a.minRows,a.maxRows]:[]},[a]),E=f.default(L,2),q=E[0],x=E[1],R=!!a,k=t.useState(_),A=f.default(k,2),u=A[0],v=A[1],B=t.useState(),I=f.default(B,2),G=I[0],U=I[1],M=function(){v(g),process.env.NODE_ENV==="test"&&d?.()};j.default(function(){R&&M()},[p,q,x,R]),j.default(function(){if(u===g)v(m);else if(u===m){var l=re.default(S.current,!1,q,x);v(_),U(l)}},[u]);var h=t.useRef(),C=function(){w.default.cancel(h.current)},W=function(r){u===_&&(i?.(r),a&&(C(),h.current=w.default(function(){M()})))};t.useEffect(function(){return C},[]);var X=R?G:null,z=N.default(N.default({},$),X);return(u===g||u===m)&&(z.overflowY="hidden",z.overflowX="hidden"),t.createElement(ee.default,{onResize:W,disabled:!(a||i)},t.createElement("textarea",Y.default({},P,{ref:S,style:z,className:Q.default(s,T,F.default({},"".concat(s,"-disabled"),b)),disabled:b,value:D,onChange:H})))});exports.default=le;
|
|
2
2
|
//# sourceMappingURL=ResizableTextArea.cjs.js.map
|
|
@@ -4,7 +4,7 @@ import w from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/hel
|
|
|
4
4
|
import J from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.es.js";
|
|
5
5
|
import s from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.es.js";
|
|
6
6
|
import K from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.es.js";
|
|
7
|
-
import Q from "../../../../../../../../../_virtual/index.
|
|
7
|
+
import Q from "../../../../../../../../../_virtual/index.es7.js";
|
|
8
8
|
import ee from "../../../../rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.es.js";
|
|
9
9
|
import M from "../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.es.js";
|
|
10
10
|
import te from "../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useMergedState.es.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const be=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),X=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),d=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),ze=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/toConsumableArray.cjs.js"),x=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.cjs.js"),qe=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.cjs.js"),g=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const be=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.cjs.js"),X=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/defineProperty.cjs.js"),d=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectSpread2.cjs.js"),ze=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/toConsumableArray.cjs.js"),x=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.cjs.js"),qe=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.cjs.js"),g=require("../../../../../../../../../_virtual/index.cjs7.js"),Te=require("../../../../rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.cjs.js"),Ae=require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useMergedState.cjs.js"),n=require("react"),Fe=require("../../../../rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/hooks/useCount.cjs.js"),Y=require("../../../../rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/utils/commonUtils.cjs.js"),Ne=require("./ResizableTextArea.cjs.js");var Oe=["defaultValue","value","onFocus","onBlur","onChange","allowClear","maxLength","onCompositionStart","onCompositionEnd","suffix","prefixCls","showCount","count","className","style","disabled","hidden","classNames","styles","onResize","onClear","onPressEnter","readOnly","autoSize","onKeyDown"],$e=n.forwardRef(function(t,Z){var C,B=t.defaultValue,_=t.value,p=t.onFocus,y=t.onBlur,L=t.onChange,R=t.allowClear,M=t.maxLength,S=t.onCompositionStart,w=t.onCompositionEnd,ee=t.suffix,P=t.prefixCls,s=P===void 0?"rc-textarea":P,E=t.showCount,te=t.count,ae=t.className,v=t.style,m=t.disabled,ne=t.hidden,l=t.classNames,i=t.styles,b=t.onResize,oe=t.onClear,D=t.onPressEnter,K=t.readOnly,V=t.autoSize,z=t.onKeyDown,le=qe.default(t,Oe),re=Ae.default(B,{value:_,defaultValue:B}),W=x.default(re,2),q=W[0],j=W[1],T=q==null?"":String(q),ue=n.useState(!1),k=x.default(ue,2),se=k[0],A=k[1],F=n.useRef(!1),ie=n.useState(null),H=x.default(ie,2),de=H[0],ce=H[1],U=n.useRef(null),N=n.useRef(null),r=function(){var e;return(e=N.current)===null||e===void 0?void 0:e.textArea},G=function(){r().focus()};n.useImperativeHandle(Z,function(){var a;return{resizableTextArea:N.current,focus:G,blur:function(){r().blur()},nativeElement:((a=U.current)===null||a===void 0?void 0:a.nativeElement)||r()}}),n.useEffect(function(){A(function(a){return!m&&a})},[m]);var fe=n.useState(null),J=x.default(fe,2),O=J[0],ve=J[1];n.useEffect(function(){if(O){var a;(a=r()).setSelectionRange.apply(a,ze.default(O))}},[O]);var o=Fe.default(te,E),c=(C=o.max)!==null&&C!==void 0?C:M,me=Number(c)>0,$=o.strategy(T),he=!!c&&$>c,Q=function(e,u){var h=u;!F.current&&o.exceedFormatter&&o.max&&o.strategy(u)>o.max&&(h=o.exceedFormatter(u,{max:o.max}),u!==h&&ve([r().selectionStart||0,r().selectionEnd||0])),j(h),Y.resolveOnChange(e.currentTarget,e,L,h)},xe=function(e){F.current=!0,S?.(e)},ge=function(e){F.current=!1,Q(e,e.currentTarget.value),w?.(e)},Ce=function(e){Q(e,e.target.value)},pe=function(e){e.key==="Enter"&&D&&D(e),z?.(e)},ye=function(e){A(!0),p?.(e)},Re=function(e){A(!1),y?.(e)},Se=function(e){j(""),G(),Y.resolveOnChange(r(),e,L)},I=ee,f;o.show&&(o.showFormatter?f=o.showFormatter({value:T,count:$,maxLength:c}):f="".concat($).concat(me?" / ".concat(c):""),I=n.createElement(n.Fragment,null,I,n.createElement("span",{className:g.default("".concat(s,"-data-count"),l?.count),style:i?.count},f)));var we=function(e){var u;b?.(e),(u=r())!==null&&u!==void 0&&u.style.height&&ce(!0)},Ee=!V&&!E&&!R;return n.createElement(Te.default,{ref:U,value:T,allowClear:R,handleReset:Se,suffix:I,prefixCls:s,classNames:d.default(d.default({},l),{},{affixWrapper:g.default(l?.affixWrapper,X.default(X.default({},"".concat(s,"-show-count"),E),"".concat(s,"-textarea-allow-clear"),R))}),disabled:m,focused:se,className:g.default(ae,he&&"".concat(s,"-out-of-range")),style:d.default(d.default({},v),de&&!Ee?{height:"auto"}:{}),dataAttrs:{affixWrapper:{"data-count":typeof f=="string"?f:void 0}},hidden:ne,readOnly:K,onClear:oe},n.createElement(Ne.default,be.default({},le,{autoSize:V,maxLength:M,onKeyDown:pe,onChange:Ce,onFocus:ye,onBlur:Re,onCompositionStart:xe,onCompositionEnd:ge,className:g.default(l?.textarea),style:d.default(d.default({},i?.textarea),{},{resize:v?.resize}),disabled:m,prefixCls:s,onResize:we,ref:N,readOnly:K})))});exports.default=$e;
|
|
2
2
|
//# sourceMappingURL=TextArea.cjs.js.map
|
|
@@ -4,7 +4,7 @@ import d from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/hel
|
|
|
4
4
|
import Ae from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/toConsumableArray.es.js";
|
|
5
5
|
import x from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/slicedToArray.es.js";
|
|
6
6
|
import Fe from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.es.js";
|
|
7
|
-
import h from "../../../../../../../../../_virtual/index.
|
|
7
|
+
import h from "../../../../../../../../../_virtual/index.es7.js";
|
|
8
8
|
import Ne from "../../../../rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.es.js";
|
|
9
9
|
import Te from "../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useMergedState.es.js";
|
|
10
10
|
import o, { useRef as Y, useImperativeHandle as $e, useEffect as Ie } from "react";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./TextArea.cjs.js");require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./TextArea.cjs.js");require("../../../../../../../../../_virtual/index.cjs7.js");require("../../../../rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.cjs.js");require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.cjs.js");require("react");require("../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.cjs.js");exports.default=e.default;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import t from "./TextArea.es.js";
|
|
2
|
-
import "../../../../../../../../../_virtual/index.
|
|
2
|
+
import "../../../../../../../../../_virtual/index.es7.js";
|
|
3
3
|
import "../../../../rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.es.js";
|
|
4
4
|
import "../../../../rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.es.js";
|
|
5
5
|
import "react";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../../../../../../../../_virtual/index.cjs6.js"),a=require("../../../../inline-style-parser@0.2.4/node_modules/inline-style-parser/index.cjs.js");var i;function d(){if(i)return t.__exports;i=1;var s=t.__exports&&t.__exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t.__exports,"__esModule",{value:!0}),t.__exports.default=l;const f=s(a.__require());function l(e,o){let r=null;if(!e||typeof e!="string")return r;const c=(0,f.default)(e),p=typeof o=="function";return c.forEach(u=>{if(u.type!=="declaration")return;const{property:_,value:n}=u;p?o(_,n,u):n&&(r=r||{},r[_]=n)}),r}return t.__exports}exports.__require=d;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __exports as r } from "../../../../../../../../../_virtual/index.
|
|
1
|
+
import { __exports as r } from "../../../../../../../../../_virtual/index.es6.js";
|
|
2
2
|
import { __require as p } from "../../../../inline-style-parser@0.2.4/node_modules/inline-style-parser/index.es.js";
|
|
3
3
|
var f;
|
|
4
4
|
function q() {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={};exports.__exports=e;
|
|
2
2
|
//# sourceMappingURL=index.cjs6.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./_commonjsHelpers.cjs.js"),r=require("../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.cjs.js");var s=r.__require();const t=e.getDefaultExportFromCjs(s);exports.default=t;
|
|
2
2
|
//# sourceMappingURL=index.cjs7.js.map
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import { __require as s } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
|
|
3
|
-
var e = s();
|
|
4
|
-
const t = /* @__PURE__ */ r(e);
|
|
1
|
+
var r = {};
|
|
5
2
|
export {
|
|
6
|
-
|
|
3
|
+
r as __exports
|
|
7
4
|
};
|
|
8
5
|
//# sourceMappingURL=index.es6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { getDefaultExportFromCjs as r } from "./_commonjsHelpers.es.js";
|
|
2
|
+
import { __require as s } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js";
|
|
3
|
+
var e = s();
|
|
4
|
+
const t = /* @__PURE__ */ r(e);
|
|
2
5
|
export {
|
|
3
|
-
|
|
6
|
+
t as default
|
|
4
7
|
};
|
|
5
8
|
//# sourceMappingURL=index.es7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es7.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es7.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("../../_virtual/jsx-runtime.cjs.js"),r=require("react"),Ne=require("react-dom/client"),_e=require("./SandboxApp.cjs.js"),Pe=require("./utils/split-content.cjs.js"),Ve=require("./ContentRender.cjs.js"),de=require("../../lib/sandboxInteraction.cjs.js");let K=null;const ge=()=>(K||(K=Promise.resolve().then(()=>require("./blackboard-vendor.cjs.js")).then(e=>e.injectBlackboardLibraries)),K);typeof window<"u"&&ge();const Fe=/<img\b[^>]*>/i,je=180,Oe=240,ke=/<img\b[^>]*\bsrc\s*=\s*["']([^"']+)["'][^>]*>/gi,he=new Map,k=new Set,De=e=>{const t=Array.from(e.matchAll(ke));return Array.from(new Set(t.map(n=>n[1]?.trim()).filter(n=>!!n)))},Be=e=>{if(!e)return Promise.resolve();const t=he.get(e);if(t)return t;const n=new Promise(i=>{if(typeof window>"u"){k.add(e),i();return}const s=new window.Image;s.decoding="sync",s.loading="eager",s.fetchPriority="high";const c=()=>{(typeof s.decode=="function"?s.decode().catch(()=>{}):Promise.resolve()).finally(()=>{k.add(e),i()})};s.onload=()=>{c()},s.onerror=()=>{k.add(e),i()},s.src=e,s.complete&&s.naturalWidth>0&&c()});return he.set(e,n),n},me=(e=[])=>Promise.allSettled(e.map(t=>Be(t))),pe=e=>e.split(/\s+/).filter(Boolean).map(t=>t.split(":").pop()||t),D=e=>{const t=e.trim().toLowerCase();if(!t)return null;const n=t.match(/^([0-9.]+)(vh|dvh|svh|lvh)$/i);return n?`${n[1]}${n[2].toLowerCase()}`:null},Q=e=>{if(!e.trim())return null;const t=pe(e);if(t.includes("h-screen")||t.includes("h-dvh"))return"100dvh";if(t.includes("h-svh"))return"100svh";if(t.includes("h-lvh"))return"100lvh";const n=t.find(s=>/^h-\[[0-9.]+(vh|dvh|svh|lvh)\]$/i.test(s));if(!n)return null;const i=n.match(/^h-\[([0-9.]+)(vh|dvh|svh|lvh)\]$/i);return i?`${i[
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const w=require("../../_virtual/jsx-runtime.cjs.js"),r=require("react"),Ne=require("react-dom/client"),_e=require("./SandboxApp.cjs.js"),Pe=require("./utils/split-content.cjs.js"),Ve=require("./ContentRender.cjs.js"),de=require("../../lib/sandboxInteraction.cjs.js");let K=null;const ge=()=>(K||(K=Promise.resolve().then(()=>require("./blackboard-vendor.cjs.js")).then(e=>e.injectBlackboardLibraries)),K);typeof window<"u"&&ge();const Fe=/<img\b[^>]*>/i,je=180,Oe=240,ke=/<img\b[^>]*\bsrc\s*=\s*["']([^"']+)["'][^>]*>/gi,he=new Map,k=new Set,De=e=>{const t=Array.from(e.matchAll(ke));return Array.from(new Set(t.map(n=>n[1]?.trim()).filter(n=>!!n)))},Be=e=>{if(!e)return Promise.resolve();const t=he.get(e);if(t)return t;const n=new Promise(i=>{if(typeof window>"u"){k.add(e),i();return}const s=new window.Image;s.decoding="sync",s.loading="eager",s.fetchPriority="high";const c=()=>{(typeof s.decode=="function"?s.decode().catch(()=>{}):Promise.resolve()).finally(()=>{k.add(e),i()})};s.onload=()=>{c()},s.onerror=()=>{k.add(e),i()},s.src=e,s.complete&&s.naturalWidth>0&&c()});return he.set(e,n),n},me=(e=[])=>Promise.allSettled(e.map(t=>Be(t))),pe=e=>e.split(/\s+/).filter(Boolean).map(t=>t.split(":").pop()||t),D=e=>{const t=e.trim().toLowerCase();if(!t)return null;const n=t.match(/^([0-9.]+)(vh|dvh|svh|lvh)$/i);return n?`${n[1]}${n[2].toLowerCase()}`:null},Q=e=>{if(!e.trim())return null;const t=pe(e);if(t.includes("h-screen")||t.includes("h-dvh")||t.includes("min-h-screen")||t.includes("min-h-dvh"))return"100dvh";if(t.includes("h-svh")||t.includes("min-h-svh"))return"100svh";if(t.includes("h-lvh")||t.includes("min-h-lvh"))return"100lvh";const n=t.find(s=>/^(h|min-h)-\[[0-9.]+(vh|dvh|svh|lvh)\]$/i.test(s));if(!n)return null;const i=n.match(/^(h|min-h)-\[([0-9.]+)(vh|dvh|svh|lvh)\]$/i);return i?`${i[2]}${i[3].toLowerCase()}`:null},Le=new Set(["base","link","meta","script","style","template","title"]),be=e=>!Le.has(e.tagName.toLowerCase()),$e=e=>Array.from(e.childNodes).find(t=>t.nodeType===Node.ELEMENT_NODE&&be(t))||null,qe=e=>{const t=[];let n=$e(e);for(;n;){t.push(n);const i=Array.from(n.children).filter(s=>be(s));if(i.length!==1)break;n=i[0]}return t},ze=e=>{const t=e.getAttribute("height"),n=t?D(t):null;if(n)return n;const i=e.getAttribute("style")?.match(/\bheight\s*:\s*([^;]+)/i)?.[1]||null,s=i?D(i):null;return s||Q(e.getAttribute("class")||"")},we=e=>e==="100vh"||e==="100dvh"||e==="100svh"||e==="100lvh",ve=e=>{const t=qe(e);let n=null,i=!1;return t.forEach(s=>{const c=ze(s);!n&&c&&(n=c),we(c)&&(i=!0)}),{viewportHeightCss:n,hasFullViewportHeight:i}},Ge=e=>{const t=e.trim();if(!t)return{viewportHeightCss:null,hasFullViewportHeight:!1};const i=t.match(/^<([a-zA-Z][\w:-]*)(\s[^>]*?)?>/)?.[2]||"",s=i.match(/\bheight\s*=\s*["']([^"']+)["']/i)?.[1],m=i.match(/\bstyle\s*=\s*["']([^"']+)["']/i)?.[1]?.match(/\bheight\s*:\s*([^;]+)/i)?.[1],y=i.match(/\bclass\s*=\s*["']([^"']+)["']/i)?.[1],h=(s?D(s):null)||(m?D(m):null)||(y?Q(y):null);return{viewportHeightCss:h,hasFullViewportHeight:we(h)}},fe=e=>{const t=e.trim();if(!t)return{viewportHeightCss:null,hasFullViewportHeight:!1};if(typeof document>"u")return Ge(t);const n=document.createElement("template");return n.innerHTML=t,ve(n.content)},Xe=e=>e.split(/\s+/).filter(Boolean).map(t=>{const n=t.split(":");return n[n.length-1]!=="h-screen"&&n[n.length-1]!=="min-h-screen"?t:(n[n.length-1]="h-full",n.join(":"))}).join(" "),Ue=(e,t)=>!t||!e.trim()?e:e.replace(/^(\s*<[a-zA-Z][\w:-]*)(\s[^>]*?)?>/,(n,i,s="")=>{const c=s.match(/\bclass\s*=\s*(["'])([^"']*)\1/i);if(!c)return n;const m=Xe(c[2]);return m===c[2]?n:`${i}${s.replace(c[0],`class=${c[1]}${m}${c[1]}`)}>`}),We=({content:e,type:t,className:n,loadingText:i,styleLoadingText:s,scriptLoadingText:c,fullScreenButtonText:m,hideFullScreen:y=!1,mode:h="content",replaceRootScreenHeightWithFull:N=!1})=>{const ee=r.useRef(null),H=r.useRef(null),B=r.useRef(null),te=r.useRef(null),L=r.useRef(()=>{}),[Ee,xe]=r.useState(480),ne=r.useRef(0),[re,Re]=r.useState(0),[He,Ce]=r.useState(!1),[,$]=r.useState(!0),ye=t==="sandbox",q=h==="blackboard",z=r.useRef(""),_=r.useMemo(()=>{const o=Pe.splitContentSegments(e).filter(p=>p.type==="sandbox");return(h==="blackboard"?o[o.length-1]?.value||"":o.map(p=>p.value).join(`
|
|
2
2
|
`))||""},[e,h]),u=r.useMemo(()=>Ue(_,N),[_,N]),S=r.useMemo(()=>De(u),[u]),oe=r.useMemo(()=>fe(_),[_]),se=r.useMemo(()=>N&&oe.hasFullViewportHeight,[oe.hasFullViewportHeight,N]),[P,G]=r.useState(u),ie=r.useRef(u),X=r.useRef(u),A=r.useRef(null),T=r.useRef(null),U=r.useRef(null),W=r.useRef(0),C=r.useCallback(l=>{if(typeof window>"u")return;const o=Date.now();o-ne.current<Oe||(ne.current=o,window.postMessage({source:de.SANDBOX_INTERACTION_MESSAGE_SOURCE,type:de.SANDBOX_INTERACTION_MESSAGE_TYPE,eventType:l},window.location.origin))},[]),le=()=>{A.current!==null&&(window.clearTimeout(A.current),A.current=null)},Se=()=>{T.current!==null&&(window.cancelAnimationFrame(T.current),T.current=null),U.current!==null&&(window.cancelAnimationFrame(U.current),U.current=null)};r.useEffect(()=>()=>{le(),Se()},[]),r.useEffect(()=>{me(S)},[S]),r.useEffect(()=>{const l=ie.current;ie.current=u;const o=!!l&&u.length>l.length&&u.startsWith(l),g=Fe.test(u),p=o&&g&&S.some(v=>!k.has(v)),V=o&&g;if(X.current=u,le(),p){const v=W.current+1;W.current=v,me(S).then(()=>{W.current===v&&G(X.current)});return}if(!V){G(u);return}A.current=window.setTimeout(()=>{G(X.current),A.current=null},je)},[S,u]);const ce=r.useMemo(()=>fe(P).viewportHeightCss,[P]),ue=!!ce,M=q&&t==="sandbox"?se?"100%":ce??`${Ee}px`:void 0;r.useEffect(()=>{if(h!=="blackboard"){z.current=u;return}const l=z.current;!(l&&u.startsWith(l))&&l&&Re(g=>g+1),z.current=u},[h,u]),r.useEffect(()=>{const l=H.current;if(!l)return;const o=l.contentDocument;if(!o)return;o.open(),o.write(`<!DOCTYPE html>
|
|
3
3
|
<html${h==="blackboard"?' style="height: 100%;"':""}>
|
|
4
4
|
<head>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeSandbox.cjs.js","sources":["../../../src/components/ContentRender/IframeSandbox.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport { Loader2 } from \"lucide-react\";\nimport SandboxApp from \"./SandboxApp\";\nimport { splitContentSegments } from \"./utils/split-content\";\nimport ContentRender from \"./ContentRender\";\nimport {\n SANDBOX_INTERACTION_MESSAGE_SOURCE,\n SANDBOX_INTERACTION_MESSAGE_TYPE,\n} from \"../../lib/sandboxInteraction\";\n\ntype InjectBlackboardLibraries =\n typeof import(\"./blackboard-vendor\").injectBlackboardLibraries;\n\n// Cache the sandbox vendor loader so every iframe reuses the same preload request.\nlet blackboardVendorPromise: Promise<InjectBlackboardLibraries> | null = null;\n\nconst loadBlackboardVendor = () => {\n if (!blackboardVendorPromise) {\n blackboardVendorPromise = import(\"./blackboard-vendor\").then(\n (m) => m.injectBlackboardLibraries\n );\n }\n\n return blackboardVendorPromise;\n};\n\n// Warm the sandbox vendor chunk as early as possible in the browser.\nif (typeof window !== \"undefined\") {\n void loadBlackboardVendor();\n}\n\nconst COMPLETE_IMAGE_TAG_PATTERN = /<img\\b[^>]*>/i;\nconst POST_IMAGE_STREAM_DEBOUNCE_MS = 180;\nconst SANDBOX_INTERACTION_THROTTLE_MS = 240;\nconst COMPLETE_IMAGE_SOURCE_PATTERN =\n /<img\\b[^>]*\\bsrc\\s*=\\s*[\"']([^\"']+)[\"'][^>]*>/gi;\nconst SANDBOX_IMAGE_PRELOAD_CACHE = new Map<string, Promise<void>>();\nconst SANDBOX_IMAGE_READY_CACHE = new Set<string>();\n\nconst extractCompleteImageSources = (html: string) => {\n const matches = Array.from(html.matchAll(COMPLETE_IMAGE_SOURCE_PATTERN));\n return Array.from(\n new Set(\n matches\n .map((match) => match[1]?.trim())\n .filter((src): src is string => Boolean(src))\n )\n );\n};\n\nconst preloadSandboxImage = (src: string) => {\n if (!src) {\n return Promise.resolve();\n }\n\n const cached = SANDBOX_IMAGE_PRELOAD_CACHE.get(src);\n if (cached) {\n return cached;\n }\n\n const nextPromise = new Promise<void>((resolve) => {\n if (typeof window === \"undefined\") {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n return;\n }\n\n const image = new window.Image();\n image.decoding = \"sync\";\n image.loading = \"eager\";\n image.fetchPriority = \"high\";\n\n const settleWhenRenderable = () => {\n const decodePromise =\n typeof image.decode === \"function\"\n ? image.decode().catch(() => undefined)\n : Promise.resolve();\n\n void decodePromise.finally(() => {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n });\n };\n\n image.onload = () => {\n settleWhenRenderable();\n };\n image.onerror = () => {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n };\n image.src = src;\n\n if (image.complete && image.naturalWidth > 0) {\n settleWhenRenderable();\n }\n });\n\n SANDBOX_IMAGE_PRELOAD_CACHE.set(src, nextPromise);\n return nextPromise;\n};\n\nconst preloadSandboxImages = (sources: string[] = []) =>\n Promise.allSettled(sources.map((source) => preloadSandboxImage(source)));\n\nexport interface IframeSandboxProps {\n content: string;\n className?: string;\n loadingText?: string;\n styleLoadingText?: string;\n scriptLoadingText?: string;\n fullScreenButtonText?: string;\n hideFullScreen?: boolean;\n mode?: \"content\" | \"blackboard\";\n type: \"sandbox\" | \"markdown\";\n replaceRootScreenHeightWithFull?: boolean;\n}\n\nconst normalizeTailwindHeightTokens = (className: string) =>\n className\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => token.split(\":\").pop() || token);\n\nconst parseViewportHeightCss = (value: string) => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n const matched = normalized.match(/^([0-9.]+)(vh|dvh|svh|lvh)$/i);\n if (!matched) return null;\n return `${matched[1]}${matched[2].toLowerCase()}`;\n};\n\nconst extractViewportHeightFromTailwindClass = (className: string) => {\n if (!className.trim()) return null;\n const normalizedTokens = normalizeTailwindHeightTokens(className);\n if (\n normalizedTokens.includes(\"h-screen\") ||\n normalizedTokens.includes(\"h-dvh\")\n ) {\n return \"100dvh\";\n }\n if (normalizedTokens.includes(\"h-svh\")) {\n return \"100svh\";\n }\n if (normalizedTokens.includes(\"h-lvh\")) {\n return \"100lvh\";\n }\n const arbitraryToken = normalizedTokens.find((token) =>\n /^h-\\[[0-9.]+(vh|dvh|svh|lvh)\\]$/i.test(token)\n );\n if (!arbitraryToken) return null;\n const matched = arbitraryToken.match(/^h-\\[([0-9.]+)(vh|dvh|svh|lvh)\\]$/i);\n if (!matched) return null;\n return `${matched[1]}${matched[2].toLowerCase()}`;\n};\n\nconst SANDBOX_IGNORED_TAG_NAMES = new Set([\n \"base\",\n \"link\",\n \"meta\",\n \"script\",\n \"style\",\n \"template\",\n \"title\",\n]);\n\nconst isSandboxRenderableElement = (element: Element) =>\n !SANDBOX_IGNORED_TAG_NAMES.has(element.tagName.toLowerCase());\n\nconst getFirstRenderableElementChild = (root: ParentNode) =>\n Array.from(root.childNodes).find(\n (node): node is HTMLElement =>\n node.nodeType === Node.ELEMENT_NODE &&\n isSandboxRenderableElement(node as HTMLElement)\n ) || null;\n\nconst getInspectableSandboxElementChain = (root: ParentNode) => {\n const chain: HTMLElement[] = [];\n let current = getFirstRenderableElementChild(root);\n\n while (current) {\n chain.push(current);\n\n const childElements = Array.from(current.children).filter(\n (element): element is HTMLElement => isSandboxRenderableElement(element)\n );\n\n if (childElements.length !== 1) {\n break;\n }\n\n current = childElements[0];\n }\n\n return chain;\n};\n\nconst extractViewportHeightFromElement = (element: HTMLElement) => {\n const heightAttrValue = element.getAttribute(\"height\");\n const attrViewportHeight = heightAttrValue\n ? parseViewportHeightCss(heightAttrValue)\n : null;\n\n if (attrViewportHeight) {\n return attrViewportHeight;\n }\n\n const styleHeightValue =\n element.getAttribute(\"style\")?.match(/\\bheight\\s*:\\s*([^;]+)/i)?.[1] ||\n null;\n const styleViewportHeight = styleHeightValue\n ? parseViewportHeightCss(styleHeightValue)\n : null;\n\n if (styleViewportHeight) {\n return styleViewportHeight;\n }\n\n return extractViewportHeightFromTailwindClass(\n element.getAttribute(\"class\") || \"\"\n );\n};\n\nconst isFullViewportHeightCss = (value: string | null) =>\n value === \"100vh\" ||\n value === \"100dvh\" ||\n value === \"100svh\" ||\n value === \"100lvh\";\n\nconst inspectSandboxPrimaryHeight = (root: ParentNode) => {\n const inspectableElements = getInspectableSandboxElementChain(root);\n let viewportHeightCss: string | null = null;\n let hasFullViewportHeight = false;\n\n inspectableElements.forEach((element) => {\n const elementViewportHeight = extractViewportHeightFromElement(element);\n\n if (!viewportHeightCss && elementViewportHeight) {\n viewportHeightCss = elementViewportHeight;\n }\n\n if (isFullViewportHeightCss(elementViewportHeight)) {\n hasFullViewportHeight = true;\n }\n });\n\n return {\n viewportHeightCss,\n hasFullViewportHeight,\n };\n};\n\nconst inspectRootHeightFromHtmlString = (html: string) => {\n const normalized = html.trim();\n\n if (!normalized) {\n return {\n viewportHeightCss: null,\n hasFullViewportHeight: false,\n };\n }\n\n const rootMatch = normalized.match(/^<([a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/);\n const attrs = rootMatch?.[2] || \"\";\n const heightAttrValue = attrs.match(/\\bheight\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleAttrValue = attrs.match(/\\bstyle\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleHeightValue = styleAttrValue?.match(\n /\\bheight\\s*:\\s*([^;]+)/i\n )?.[1];\n const classAttrValue = attrs.match(/\\bclass\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const viewportHeightCss =\n (heightAttrValue ? parseViewportHeightCss(heightAttrValue) : null) ||\n (styleHeightValue ? parseViewportHeightCss(styleHeightValue) : null) ||\n (classAttrValue\n ? extractViewportHeightFromTailwindClass(classAttrValue)\n : null);\n\n return {\n viewportHeightCss,\n hasFullViewportHeight: isFullViewportHeightCss(viewportHeightCss),\n };\n};\n\nconst inspectSandboxPrimaryHeightFromHtml = (html: string) => {\n const normalized = html.trim();\n\n if (!normalized) {\n return {\n viewportHeightCss: null,\n hasFullViewportHeight: false,\n };\n }\n\n if (typeof document === \"undefined\") {\n return inspectRootHeightFromHtmlString(normalized);\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = normalized;\n\n return inspectSandboxPrimaryHeight(template.content);\n};\n\nconst replaceRootScreenHeightToken = (className: string) =>\n className\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => {\n const segments = token.split(\":\");\n if (segments[segments.length - 1] !== \"h-screen\") {\n return token;\n }\n segments[segments.length - 1] = \"h-full\";\n return segments.join(\":\");\n })\n .join(\" \");\n\nconst replaceRootScreenHeightWithFullClass = (\n html: string,\n enabled: boolean\n) => {\n if (!enabled || !html.trim()) {\n return html;\n }\n\n return html.replace(\n /^(\\s*<[a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/,\n (match, tagStart: string, attrs = \"\") => {\n const classMatch = attrs.match(/\\bclass\\s*=\\s*([\"'])([^\"']*)\\1/i);\n\n if (!classMatch) {\n return match;\n }\n\n const nextClassName = replaceRootScreenHeightToken(classMatch[2]);\n\n if (nextClassName === classMatch[2]) {\n return match;\n }\n\n return `${tagStart}${attrs.replace(\n classMatch[0],\n `class=${classMatch[1]}${nextClassName}${classMatch[1]}`\n )}>`;\n }\n );\n};\n\nconst IframeSandbox: React.FC<IframeSandboxProps> = ({\n content,\n type,\n className,\n loadingText,\n styleLoadingText,\n scriptLoadingText,\n fullScreenButtonText,\n hideFullScreen = false,\n mode = \"content\",\n replaceRootScreenHeightWithFull = false,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const rootRef = useRef<Root | null>(null);\n const docRef = useRef<Document | null>(null);\n const updateHeightRef = useRef<() => void>(() => {});\n const [height, setHeight] = useState(480);\n const lastSandboxInteractionTimeRef = useRef(0);\n const [resetToken, setResetToken] = useState(0);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [, setIsSandboxVendorReady] = useState(true);\n const shouldInjectSandboxVendor = type === \"sandbox\";\n\n const isBlackboardMode = mode === \"blackboard\";\n const prevHtmlRef = useRef<string>(\"\");\n const htmlContent = React.useMemo(() => {\n const segments = splitContentSegments(content);\n // console.log('segments=====', segments);\n const sandboxSegments = segments.filter((seg) => seg.type === \"sandbox\");\n const sandboxContent =\n mode === \"blackboard\"\n ? sandboxSegments[sandboxSegments.length - 1]?.value || \"\"\n : sandboxSegments.map((seg) => seg.value).join(\"\\n\");\n return sandboxContent || \"\";\n }, [content, mode]);\n const normalizedHtmlContent = React.useMemo(\n () =>\n replaceRootScreenHeightWithFullClass(\n htmlContent,\n replaceRootScreenHeightWithFull\n ),\n [htmlContent, replaceRootScreenHeightWithFull]\n );\n const completeImageSources = React.useMemo(\n () => extractCompleteImageSources(normalizedHtmlContent),\n [normalizedHtmlContent]\n );\n const htmlHeightMeta = React.useMemo(\n () => inspectSandboxPrimaryHeightFromHtml(htmlContent),\n [htmlContent]\n );\n const shouldStretchRootHeight = React.useMemo(\n () =>\n replaceRootScreenHeightWithFull && htmlHeightMeta.hasFullViewportHeight,\n [htmlHeightMeta.hasFullViewportHeight, replaceRootScreenHeightWithFull]\n );\n const [renderHtmlContent, setRenderHtmlContent] = useState(\n normalizedHtmlContent\n );\n const prevIncomingHtmlRef = useRef(normalizedHtmlContent);\n const pendingHtmlRef = useRef(normalizedHtmlContent);\n const deferRenderTimerRef = useRef<number | null>(null);\n const initialPaintFrameRef = useRef<number | null>(null);\n const initialPaintCommitFrameRef = useRef<number | null>(null);\n const imagePreloadRequestIdRef = useRef(0);\n\n const emitSandboxInteraction = useCallback((eventType: string) => {\n if (typeof window === \"undefined\") {\n return;\n }\n const now = Date.now();\n if (\n now - lastSandboxInteractionTimeRef.current <\n SANDBOX_INTERACTION_THROTTLE_MS\n ) {\n return;\n }\n lastSandboxInteractionTimeRef.current = now;\n window.postMessage(\n {\n source: SANDBOX_INTERACTION_MESSAGE_SOURCE,\n type: SANDBOX_INTERACTION_MESSAGE_TYPE,\n eventType,\n },\n window.location.origin\n );\n }, []);\n\n const clearDeferredRenderTimer = () => {\n if (deferRenderTimerRef.current === null) return;\n window.clearTimeout(deferRenderTimerRef.current);\n deferRenderTimerRef.current = null;\n };\n\n const clearInitialPaintFrames = () => {\n if (initialPaintFrameRef.current !== null) {\n window.cancelAnimationFrame(initialPaintFrameRef.current);\n initialPaintFrameRef.current = null;\n }\n if (initialPaintCommitFrameRef.current !== null) {\n window.cancelAnimationFrame(initialPaintCommitFrameRef.current);\n initialPaintCommitFrameRef.current = null;\n }\n };\n\n useEffect(\n () => () => {\n clearDeferredRenderTimer();\n clearInitialPaintFrames();\n },\n []\n );\n\n useEffect(() => {\n void preloadSandboxImages(completeImageSources);\n }, [completeImageSources]);\n\n useEffect(() => {\n const prevIncomingHtml = prevIncomingHtmlRef.current;\n prevIncomingHtmlRef.current = normalizedHtmlContent;\n\n const isAppendOnlyStream =\n !!prevIncomingHtml &&\n normalizedHtmlContent.length > prevIncomingHtml.length &&\n normalizedHtmlContent.startsWith(prevIncomingHtml);\n const containsCompleteImage = COMPLETE_IMAGE_TAG_PATTERN.test(\n normalizedHtmlContent\n );\n const hasPendingImagePreload =\n isAppendOnlyStream &&\n containsCompleteImage &&\n completeImageSources.some(\n (source) => !SANDBOX_IMAGE_READY_CACHE.has(source)\n );\n const shouldDeferRender = isAppendOnlyStream && containsCompleteImage;\n\n pendingHtmlRef.current = normalizedHtmlContent;\n clearDeferredRenderTimer();\n\n if (hasPendingImagePreload) {\n const requestId = imagePreloadRequestIdRef.current + 1;\n imagePreloadRequestIdRef.current = requestId;\n\n void preloadSandboxImages(completeImageSources).then(() => {\n if (imagePreloadRequestIdRef.current !== requestId) {\n return;\n }\n\n setRenderHtmlContent(pendingHtmlRef.current);\n });\n return;\n }\n\n if (!shouldDeferRender) {\n setRenderHtmlContent(normalizedHtmlContent);\n return;\n }\n\n deferRenderTimerRef.current = window.setTimeout(() => {\n setRenderHtmlContent(pendingHtmlRef.current);\n deferRenderTimerRef.current = null;\n }, POST_IMAGE_STREAM_DEBOUNCE_MS);\n }, [completeImageSources, normalizedHtmlContent]);\n\n const rootViewportHeightCss = React.useMemo(\n () =>\n inspectSandboxPrimaryHeightFromHtml(renderHtmlContent).viewportHeightCss,\n [renderHtmlContent]\n );\n const hasRootVhHeight = Boolean(rootViewportHeightCss);\n const sandboxViewportHeight =\n isBlackboardMode && type === \"sandbox\"\n ? shouldStretchRootHeight\n ? \"100%\"\n : (rootViewportHeightCss ?? `${height}px`)\n : undefined;\n const shouldShowHtmlFallbackWhilePreparingSandbox = false;\n useEffect(() => {\n if (mode !== \"blackboard\") {\n prevHtmlRef.current = normalizedHtmlContent;\n return;\n }\n const prev = prevHtmlRef.current;\n const isContinuation = prev && normalizedHtmlContent.startsWith(prev);\n if (!isContinuation && prev) {\n setResetToken((token) => token + 1);\n }\n prevHtmlRef.current = normalizedHtmlContent;\n }, [mode, normalizedHtmlContent]);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return undefined;\n\n const doc = iframe.contentDocument;\n if (!doc) return undefined;\n\n doc.open();\n doc.write(`<!DOCTYPE html>\n<html${mode === \"blackboard\" ? ' style=\"height: 100%;\"' : \"\"}>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <style>\n html, body, #root { width: 100%; height: 100%; }\n html, body { margin: 0; padding: 0; overflow: auto; }\n *, *::before, *::after { box-sizing: border-box; }\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n </body>\n</html>`);\n doc.close();\n\n docRef.current = doc;\n\n const shouldBridgeSandboxInteraction =\n isBlackboardMode && type === \"sandbox\";\n const handleSandboxPointerDown = () =>\n emitSandboxInteraction(\"pointerdown\");\n const handleSandboxMouseDown = () => emitSandboxInteraction(\"mousedown\");\n const handleSandboxTouchStart = () => emitSandboxInteraction(\"touchstart\");\n\n if (shouldBridgeSandboxInteraction) {\n doc.addEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.addEventListener(\"mousedown\", handleSandboxMouseDown, true);\n doc.addEventListener(\"touchstart\", handleSandboxTouchStart, true);\n }\n\n const rootEl = doc.getElementById(\"root\");\n if (!rootEl) return undefined;\n\n const root = createRoot(rootEl);\n rootRef.current = root;\n let isDestroyed = false;\n\n const parseExplicitHeight = (\n value: string,\n parentViewportHeight: number\n ) => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n const numeric = Number.parseFloat(normalized);\n if (Number.isNaN(numeric)) return null;\n if (/(dvh|svh|lvh|vh)$/i.test(normalized)) {\n return (numeric / 100) * parentViewportHeight;\n }\n if (normalized.endsWith(\"px\") || /^[0-9.]+$/.test(normalized)) {\n return numeric;\n }\n return null;\n };\n const parseTailwindHeightClass = (\n className: string,\n parentViewportHeight: number\n ) => {\n if (!className.trim()) return null;\n const viewportHeightCss =\n extractViewportHeightFromTailwindClass(className);\n if (viewportHeightCss) {\n return parseExplicitHeight(viewportHeightCss, parentViewportHeight);\n }\n const normalizedTokens = normalizeTailwindHeightTokens(className);\n const arbitraryToken = normalizedTokens.find((token) =>\n /^h-\\[[0-9.]+px\\]$/i.test(token)\n );\n if (!arbitraryToken) return null;\n const matched = arbitraryToken.match(/^h-\\[([0-9.]+)px\\]$/i);\n if (!matched) return null;\n const numeric = Number.parseFloat(matched[1]);\n if (Number.isNaN(numeric)) return null;\n return numeric;\n };\n\n const resolveExplicitHeight = () => {\n if (!iframeRef.current || !doc.body) return null;\n const parentViewportHeight =\n iframeRef.current.ownerDocument?.documentElement?.clientHeight ||\n window.innerHeight;\n const { viewportHeightCss } = inspectSandboxPrimaryHeight(doc.body);\n const parsed = viewportHeightCss\n ? parseExplicitHeight(viewportHeightCss, parentViewportHeight)\n : null;\n\n if (parsed !== null) {\n return Math.ceil(parsed);\n }\n\n const wrapper = doc.body.querySelector(\n \".sandbox-wrapper\"\n ) as HTMLElement | null;\n const target = wrapper?.querySelector(\n \".sandbox-container > *\"\n ) as HTMLElement | null;\n\n if (!target) return null;\n\n const heightValue = target.style.height || target.getAttribute(\"height\");\n const explicitPixelHeight = heightValue\n ? parseExplicitHeight(heightValue, parentViewportHeight)\n : null;\n\n if (explicitPixelHeight !== null) {\n return Math.ceil(explicitPixelHeight);\n }\n\n const classHeight = parseTailwindHeightClass(\n target.getAttribute(\"class\") || \"\",\n parentViewportHeight\n );\n\n return classHeight !== null ? Math.ceil(classHeight) : null;\n };\n\n const updateHeight = () => {\n if (!iframeRef.current || !doc.body) return;\n const bodyRect = doc.body.getBoundingClientRect();\n const htmlRect = doc.documentElement?.getBoundingClientRect();\n const bodyHeight = bodyRect.height;\n const htmlHeight = htmlRect?.height || 0;\n const contentHeight = Math.max(bodyHeight, htmlHeight);\n const explicitHeight = resolveExplicitHeight();\n const nextHeight = Math.max(\n 200,\n explicitHeight ?? Math.ceil(contentHeight)\n );\n setHeight(nextHeight);\n };\n const scheduleHeightUpdate = () => {\n requestAnimationFrame(() => {\n if (isDestroyed) return;\n updateHeight();\n });\n };\n updateHeightRef.current = scheduleHeightUpdate;\n\n updateHeight();\n scheduleHeightUpdate();\n\n if (!shouldInjectSandboxVendor) {\n setIsSandboxVendorReady(true);\n } else {\n // Inject Tailwind/DaisyUI/GSAP before rendering sandbox content to avoid FOUC.\n loadBlackboardVendor()\n .then((inject) => {\n if (isDestroyed) return;\n inject(doc);\n requestAnimationFrame(() => {\n if (isDestroyed) return;\n setIsSandboxVendorReady(true);\n scheduleHeightUpdate();\n });\n })\n .catch(() => {\n if (isDestroyed) return;\n setIsSandboxVendorReady(true);\n scheduleHeightUpdate();\n });\n }\n\n const resizeObserver = new ResizeObserver(() => updateHeight());\n resizeObserver.observe(doc.body);\n if (rootEl) {\n resizeObserver.observe(rootEl);\n }\n\n return () => {\n isDestroyed = true;\n resizeObserver.disconnect();\n if (shouldBridgeSandboxInteraction) {\n doc.removeEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.removeEventListener(\"mousedown\", handleSandboxMouseDown, true);\n doc.removeEventListener(\"touchstart\", handleSandboxTouchStart, true);\n }\n // Defer unmount to avoid React warning when parent is mid-render\n setTimeout(() => {\n root.unmount();\n rootRef.current = null;\n docRef.current = null;\n updateHeightRef.current = () => {};\n }, 0);\n };\n }, []);\n\n useEffect(() => {\n const onFullscreenChange = () => {\n setIsFullscreen(Boolean(document.fullscreenElement));\n };\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n }, []);\n\n const toggleFullscreen = () => {\n const target = containerRef.current || iframeRef.current;\n if (!target) return;\n if (document.fullscreenElement) {\n document.exitFullscreen().catch(() => {});\n return;\n }\n if (target.requestFullscreen) {\n target.requestFullscreen().catch(() => {});\n }\n };\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n\n root.render(\n <SandboxApp\n html={renderHtmlContent}\n loadingText={loadingText}\n styleLoadingText={styleLoadingText}\n scriptLoadingText={scriptLoadingText}\n fullScreenButtonText={fullScreenButtonText}\n hideFullScreen={hideFullScreen}\n resetToken={resetToken}\n hasRootVhHeight={hasRootVhHeight}\n mode={mode}\n stretchRootHeight={shouldStretchRootHeight}\n />\n );\n\n initialPaintFrameRef.current = window.requestAnimationFrame(() => {\n updateHeightRef.current?.();\n initialPaintFrameRef.current = null;\n });\n }, [\n renderHtmlContent,\n loadingText,\n styleLoadingText,\n scriptLoadingText,\n fullScreenButtonText,\n resetToken,\n mode,\n ]);\n const containerClassName = [\n \"w-full relative content-render-iframe-sandbox\",\n isBlackboardMode\n ? \"h-full overflow-auto flex flex-col\"\n : \"aspect-[16/9] overflow-hidden flex items-center justify-center\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const shouldShowSandboxLoading = false;\n\n return (\n <div\n ref={containerRef}\n data-root-vh={hasRootVhHeight ? \"true\" : \"false\"}\n className={containerClassName}\n style={\n sandboxViewportHeight\n ? {\n height: sandboxViewportHeight,\n minHeight: sandboxViewportHeight,\n }\n : undefined\n }\n >\n {!hideFullScreen && (\n <button\n type=\"button\"\n onClick={toggleFullscreen}\n className={\n \"absolute top-2 right-2 z-50 p-1.5 bg-black/75 text-white rounded-md cursor-pointer\"\n }\n >\n {isFullscreen ? \"退出全屏\" : fullScreenButtonText || \"全屏浏览\"}\n </button>\n )}\n {mode === \"blackboard\" && type === \"markdown\" ? (\n <div\n onMouseDown={() => emitSandboxInteraction(\"mousedown\")}\n onPointerDown={() => emitSandboxInteraction(\"pointerdown\")}\n onTouchStart={() => emitSandboxInteraction(\"touchstart\")}\n >\n <ContentRender content={content} />\n </div>\n ) : (\n <>\n {shouldShowHtmlFallbackWhilePreparingSandbox ? (\n <div\n aria-hidden\n className=\"absolute inset-0 z-10 overflow-hidden\"\n style={{\n height: sandboxViewportHeight ?? \"100%\",\n minHeight: sandboxViewportHeight,\n }}\n >\n <div\n className=\"h-full w-full\"\n dangerouslySetInnerHTML={{ __html: renderHtmlContent }}\n />\n </div>\n ) : null}\n <iframe\n ref={iframeRef}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox\"\n allow=\"fullscreen\"\n allowFullScreen\n className={[className, \"w-full h-full mx-auto my-auto block\"]\n .filter(Boolean)\n .join(\" \")}\n style={{\n height: sandboxViewportHeight ?? \"100%\",\n minHeight: sandboxViewportHeight,\n margin: \"auto\",\n visibility: \"visible\",\n }}\n />\n {shouldShowSandboxLoading ? (\n <div className=\"pointer-events-none absolute inset-0 z-20 flex items-center justify-center\">\n <Loader2\n aria-label={loadingText || \"Preparing sandbox styles\"}\n className=\"text-primary h-7 w-7 animate-spin\"\n />\n </div>\n ) : null}\n </>\n )}\n </div>\n );\n};\n\nexport default IframeSandbox;\n"],"names":["blackboardVendorPromise","loadBlackboardVendor","m","COMPLETE_IMAGE_TAG_PATTERN","POST_IMAGE_STREAM_DEBOUNCE_MS","SANDBOX_INTERACTION_THROTTLE_MS","COMPLETE_IMAGE_SOURCE_PATTERN","SANDBOX_IMAGE_PRELOAD_CACHE","SANDBOX_IMAGE_READY_CACHE","extractCompleteImageSources","html","matches","match","src","preloadSandboxImage","cached","nextPromise","resolve","image","settleWhenRenderable","preloadSandboxImages","sources","source","normalizeTailwindHeightTokens","className","token","parseViewportHeightCss","value","normalized","matched","extractViewportHeightFromTailwindClass","normalizedTokens","arbitraryToken","SANDBOX_IGNORED_TAG_NAMES","isSandboxRenderableElement","element","getFirstRenderableElementChild","root","node","getInspectableSandboxElementChain","chain","current","childElements","extractViewportHeightFromElement","heightAttrValue","attrViewportHeight","styleHeightValue","styleViewportHeight","isFullViewportHeightCss","inspectSandboxPrimaryHeight","inspectableElements","viewportHeightCss","hasFullViewportHeight","elementViewportHeight","inspectRootHeightFromHtmlString","attrs","classAttrValue","inspectSandboxPrimaryHeightFromHtml","template","replaceRootScreenHeightToken","segments","replaceRootScreenHeightWithFullClass","enabled","tagStart","classMatch","nextClassName","IframeSandbox","content","type","loadingText","styleLoadingText","scriptLoadingText","fullScreenButtonText","hideFullScreen","mode","replaceRootScreenHeightWithFull","containerRef","useRef","iframeRef","rootRef","docRef","updateHeightRef","height","setHeight","useState","lastSandboxInteractionTimeRef","resetToken","setResetToken","isFullscreen","setIsFullscreen","setIsSandboxVendorReady","shouldInjectSandboxVendor","isBlackboardMode","prevHtmlRef","htmlContent","React","sandboxSegments","splitContentSegments","seg","normalizedHtmlContent","completeImageSources","htmlHeightMeta","shouldStretchRootHeight","renderHtmlContent","setRenderHtmlContent","prevIncomingHtmlRef","pendingHtmlRef","deferRenderTimerRef","initialPaintFrameRef","initialPaintCommitFrameRef","imagePreloadRequestIdRef","emitSandboxInteraction","useCallback","eventType","now","SANDBOX_INTERACTION_MESSAGE_SOURCE","SANDBOX_INTERACTION_MESSAGE_TYPE","clearDeferredRenderTimer","clearInitialPaintFrames","useEffect","prevIncomingHtml","isAppendOnlyStream","containsCompleteImage","hasPendingImagePreload","shouldDeferRender","requestId","rootViewportHeightCss","hasRootVhHeight","sandboxViewportHeight","prev","iframe","doc","shouldBridgeSandboxInteraction","handleSandboxPointerDown","handleSandboxMouseDown","handleSandboxTouchStart","rootEl","createRoot","isDestroyed","parseExplicitHeight","parentViewportHeight","numeric","parseTailwindHeightClass","resolveExplicitHeight","parsed","target","heightValue","explicitPixelHeight","classHeight","updateHeight","bodyRect","htmlRect","bodyHeight","htmlHeight","contentHeight","explicitHeight","nextHeight","scheduleHeightUpdate","inject","resizeObserver","onFullscreenChange","toggleFullscreen","jsx","SandboxApp","containerClassName","jsxs","ContentRender","Fragment"],"mappings":"uXAeA,IAAIA,EAAqE,KAEzE,MAAMC,GAAuB,KACtBD,IACHA,EAA0B,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,4BAAqB,CAAA,EAAE,KACrDE,GAAMA,EAAE,yBAAA,GAINF,GAIL,OAAO,OAAW,KACfC,GAAA,EAGP,MAAME,GAA6B,gBAC7BC,GAAgC,IAChCC,GAAkC,IAClCC,GACJ,kDACIC,OAAkC,IAClCC,MAAgC,IAEhCC,GAA+BC,GAAiB,CACpD,MAAMC,EAAU,MAAM,KAAKD,EAAK,SAASJ,EAA6B,CAAC,EACvE,OAAO,MAAM,KACX,IAAI,IACFK,EACG,IAAKC,GAAUA,EAAM,CAAC,GAAG,KAAA,CAAM,EAC/B,OAAQC,GAAuB,EAAQA,CAAI,CAAA,CAChD,CAEJ,EAEMC,GAAuBD,GAAgB,CAC3C,GAAI,CAACA,EACH,OAAO,QAAQ,QAAA,EAGjB,MAAME,EAASR,GAA4B,IAAIM,CAAG,EAClD,GAAIE,EACF,OAAOA,EAGT,MAAMC,EAAc,IAAI,QAAeC,GAAY,CACjD,GAAI,OAAO,OAAW,IAAa,CACjCT,EAA0B,IAAIK,CAAG,EACjCI,EAAA,EACA,MACF,CAEA,MAAMC,EAAQ,IAAI,OAAO,MACzBA,EAAM,SAAW,OACjBA,EAAM,QAAU,QAChBA,EAAM,cAAgB,OAEtB,MAAMC,EAAuB,IAAM,EAE/B,OAAOD,EAAM,QAAW,WACpBA,EAAM,OAAA,EAAS,MAAM,IAAA,EAAe,EACpC,QAAQ,QAAA,GAEK,QAAQ,IAAM,CAC/BV,EAA0B,IAAIK,CAAG,EACjCI,EAAA,CACF,CAAC,CACH,EAEAC,EAAM,OAAS,IAAM,CACnBC,EAAA,CACF,EACAD,EAAM,QAAU,IAAM,CACpBV,EAA0B,IAAIK,CAAG,EACjCI,EAAA,CACF,EACAC,EAAM,IAAML,EAERK,EAAM,UAAYA,EAAM,aAAe,GACzCC,EAAA,CAEJ,CAAC,EAED,OAAAZ,GAA4B,IAAIM,EAAKG,CAAW,EACzCA,CACT,EAEMI,GAAuB,CAACC,EAAoB,CAAA,IAChD,QAAQ,WAAWA,EAAQ,IAAKC,GAAWR,GAAoBQ,CAAM,CAAC,CAAC,EAenEC,GAAiCC,GACrCA,EACG,MAAM,KAAK,EACX,OAAO,OAAO,EACd,IAAKC,GAAUA,EAAM,MAAM,GAAG,EAAE,IAAA,GAASA,CAAK,EAE7CC,EAA0BC,GAAkB,CAChD,MAAMC,EAAaD,EAAM,KAAA,EAAO,YAAA,EAChC,GAAI,CAACC,EAAY,OAAO,KACxB,MAAMC,EAAUD,EAAW,MAAM,8BAA8B,EAC/D,OAAKC,EACE,GAAGA,EAAQ,CAAC,CAAC,GAAGA,EAAQ,CAAC,EAAE,YAAA,CAAa,GAD1B,IAEvB,EAEMC,EAA0CN,GAAsB,CACpE,GAAI,CAACA,EAAU,KAAA,EAAQ,OAAO,KAC9B,MAAMO,EAAmBR,GAA8BC,CAAS,EAChE,GACEO,EAAiB,SAAS,UAAU,GACpCA,EAAiB,SAAS,OAAO,EAEjC,MAAO,SAET,GAAIA,EAAiB,SAAS,OAAO,EACnC,MAAO,SAET,GAAIA,EAAiB,SAAS,OAAO,EACnC,MAAO,SAET,MAAMC,EAAiBD,EAAiB,KAAMN,GAC5C,mCAAmC,KAAKA,CAAK,CAAA,EAE/C,GAAI,CAACO,EAAgB,OAAO,KAC5B,MAAMH,EAAUG,EAAe,MAAM,oCAAoC,EACzE,OAAKH,EACE,GAAGA,EAAQ,CAAC,CAAC,GAAGA,EAAQ,CAAC,EAAE,YAAA,CAAa,GAD1B,IAEvB,EAEMI,OAAgC,IAAI,CACxC,OACA,OACA,OACA,SACA,QACA,WACA,OACF,CAAC,EAEKC,GAA8BC,GAClC,CAACF,GAA0B,IAAIE,EAAQ,QAAQ,aAAa,EAExDC,GAAkCC,GACtC,MAAM,KAAKA,EAAK,UAAU,EAAE,KACzBC,GACCA,EAAK,WAAa,KAAK,cACvBJ,GAA2BI,CAAmB,CAClD,GAAK,KAEDC,GAAqCF,GAAqB,CAC9D,MAAMG,EAAuB,CAAA,EAC7B,IAAIC,EAAUL,GAA+BC,CAAI,EAEjD,KAAOI,GAAS,CACdD,EAAM,KAAKC,CAAO,EAElB,MAAMC,EAAgB,MAAM,KAAKD,EAAQ,QAAQ,EAAE,OAChDN,GAAoCD,GAA2BC,CAAO,CAAA,EAGzE,GAAIO,EAAc,SAAW,EAC3B,MAGFD,EAAUC,EAAc,CAAC,CAC3B,CAEA,OAAOF,CACT,EAEMG,GAAoCR,GAAyB,CACjE,MAAMS,EAAkBT,EAAQ,aAAa,QAAQ,EAC/CU,EAAqBD,EACvBlB,EAAuBkB,CAAe,EACtC,KAEJ,GAAIC,EACF,OAAOA,EAGT,MAAMC,EACJX,EAAQ,aAAa,OAAO,GAAG,MAAM,yBAAyB,IAAI,CAAC,GACnE,KACIY,EAAsBD,EACxBpB,EAAuBoB,CAAgB,EACvC,KAEJ,OAAIC,GAIGjB,EACLK,EAAQ,aAAa,OAAO,GAAK,EAAA,CAErC,EAEMa,GAA2BrB,GAC/BA,IAAU,SACVA,IAAU,UACVA,IAAU,UACVA,IAAU,SAENsB,GAA+BZ,GAAqB,CACxD,MAAMa,EAAsBX,GAAkCF,CAAI,EAClE,IAAIc,EAAmC,KACnCC,EAAwB,GAE5B,OAAAF,EAAoB,QAASf,GAAY,CACvC,MAAMkB,EAAwBV,GAAiCR,CAAO,EAElE,CAACgB,GAAqBE,IACxBF,EAAoBE,GAGlBL,GAAwBK,CAAqB,IAC/CD,EAAwB,GAE5B,CAAC,EAEM,CACL,kBAAAD,EACA,sBAAAC,CAAA,CAEJ,EAEME,GAAmC5C,GAAiB,CACxD,MAAMkB,EAAalB,EAAK,KAAA,EAExB,GAAI,CAACkB,EACH,MAAO,CACL,kBAAmB,KACnB,sBAAuB,EAAA,EAK3B,MAAM2B,EADY3B,EAAW,MAAM,iCAAiC,IAC1C,CAAC,GAAK,GAC1BgB,EAAkBW,EAAM,MAAM,kCAAkC,IAAI,CAAC,EAErET,EADiBS,EAAM,MAAM,iCAAiC,IAAI,CAAC,GAChC,MACvC,yBAAA,IACE,CAAC,EACCC,EAAiBD,EAAM,MAAM,iCAAiC,IAAI,CAAC,EACnEJ,GACHP,EAAkBlB,EAAuBkB,CAAe,EAAI,QAC5DE,EAAmBpB,EAAuBoB,CAAgB,EAAI,QAC9DU,EACG1B,EAAuC0B,CAAc,EACrD,MAEN,MAAO,CACL,kBAAAL,EACA,sBAAuBH,GAAwBG,CAAiB,CAAA,CAEpE,EAEMM,GAAuC/C,GAAiB,CAC5D,MAAMkB,EAAalB,EAAK,KAAA,EAExB,GAAI,CAACkB,EACH,MAAO,CACL,kBAAmB,KACnB,sBAAuB,EAAA,EAI3B,GAAI,OAAO,SAAa,IACtB,OAAO0B,GAAgC1B,CAAU,EAGnD,MAAM8B,EAAW,SAAS,cAAc,UAAU,EAClD,OAAAA,EAAS,UAAY9B,EAEdqB,GAA4BS,EAAS,OAAO,CACrD,EAEMC,GAAgCnC,GACpCA,EACG,MAAM,KAAK,EACX,OAAO,OAAO,EACd,IAAKC,GAAU,CACd,MAAMmC,EAAWnC,EAAM,MAAM,GAAG,EAChC,OAAImC,EAASA,EAAS,OAAS,CAAC,IAAM,WAC7BnC,GAETmC,EAASA,EAAS,OAAS,CAAC,EAAI,SACzBA,EAAS,KAAK,GAAG,EAC1B,CAAC,EACA,KAAK,GAAG,EAEPC,GAAuC,CAC3CnD,EACAoD,IAEI,CAACA,GAAW,CAACpD,EAAK,OACbA,EAGFA,EAAK,QACV,qCACA,CAACE,EAAOmD,EAAkBR,EAAQ,KAAO,CACvC,MAAMS,EAAaT,EAAM,MAAM,iCAAiC,EAEhE,GAAI,CAACS,EACH,OAAOpD,EAGT,MAAMqD,EAAgBN,GAA6BK,EAAW,CAAC,CAAC,EAEhE,OAAIC,IAAkBD,EAAW,CAAC,EACzBpD,EAGF,GAAGmD,CAAQ,GAAGR,EAAM,QACzBS,EAAW,CAAC,EACZ,SAASA,EAAW,CAAC,CAAC,GAAGC,CAAa,GAAGD,EAAW,CAAC,CAAC,EAAA,CACvD,GACH,CAAA,EAIEE,GAA8C,CAAC,CACnD,QAAAC,EACA,KAAAC,EACA,UAAA5C,EACA,YAAA6C,EACA,iBAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,eAAAC,EAAiB,GACjB,KAAAC,EAAO,UACP,gCAAAC,EAAkC,EACpC,IAAM,CACJ,MAAMC,GAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAYD,EAAAA,OAA0B,IAAI,EAC1CE,EAAUF,EAAAA,OAAoB,IAAI,EAClCG,GAASH,EAAAA,OAAwB,IAAI,EACrCI,EAAkBJ,EAAAA,OAAmB,IAAM,CAAC,CAAC,EAC7C,CAACK,GAAQC,EAAS,EAAIC,EAAAA,SAAS,GAAG,EAClCC,GAAgCR,EAAAA,OAAO,CAAC,EACxC,CAACS,GAAYC,EAAa,EAAIH,EAAAA,SAAS,CAAC,EACxC,CAACI,GAAcC,EAAe,EAAIL,EAAAA,SAAS,EAAK,EAChD,EAAGM,CAAuB,EAAIN,EAAAA,SAAS,EAAI,EAC3CO,GAA4BvB,IAAS,UAErCwB,EAAmBlB,IAAS,aAC5BmB,EAAchB,EAAAA,OAAe,EAAE,EAC/BiB,EAAcC,EAAM,QAAQ,IAAM,CAGtC,MAAMC,EAFWC,GAAAA,qBAAqB9B,CAAO,EAEZ,OAAQ+B,GAAQA,EAAI,OAAS,SAAS,EAKvE,OAHExB,IAAS,aACLsB,EAAgBA,EAAgB,OAAS,CAAC,GAAG,OAAS,GACtDA,EAAgB,IAAKE,GAAQA,EAAI,KAAK,EAAE,KAAK;AAAA,CAAI,IAC9B,EAC3B,EAAG,CAAC/B,EAASO,CAAI,CAAC,EACZyB,EAAwBJ,EAAM,QAClC,IACElC,GACEiC,EACAnB,CAAA,EAEJ,CAACmB,EAAanB,CAA+B,CAAA,EAEzCyB,EAAuBL,EAAM,QACjC,IAAMtF,GAA4B0F,CAAqB,EACvD,CAACA,CAAqB,CAAA,EAElBE,GAAiBN,EAAM,QAC3B,IAAMtC,GAAoCqC,CAAW,EACrD,CAACA,CAAW,CAAA,EAERQ,GAA0BP,EAAM,QACpC,IACEpB,GAAmC0B,GAAe,sBACpD,CAACA,GAAe,sBAAuB1B,CAA+B,CAAA,EAElE,CAAC4B,EAAmBC,CAAoB,EAAIpB,EAAAA,SAChDe,CAAA,EAEIM,GAAsB5B,EAAAA,OAAOsB,CAAqB,EAClDO,EAAiB7B,EAAAA,OAAOsB,CAAqB,EAC7CQ,EAAsB9B,EAAAA,OAAsB,IAAI,EAChD+B,EAAuB/B,EAAAA,OAAsB,IAAI,EACjDgC,EAA6BhC,EAAAA,OAAsB,IAAI,EACvDiC,EAA2BjC,EAAAA,OAAO,CAAC,EAEnCkC,EAAyBC,cAAaC,GAAsB,CAChE,GAAI,OAAO,OAAW,IACpB,OAEF,MAAMC,EAAM,KAAK,IAAA,EAEfA,EAAM7B,GAA8B,QACpChF,KAIFgF,GAA8B,QAAU6B,EACxC,OAAO,YACL,CACE,OAAQC,GAAAA,mCACR,KAAMC,GAAAA,iCACN,UAAAH,CAAA,EAEF,OAAO,SAAS,MAAA,EAEpB,EAAG,CAAA,CAAE,EAECI,GAA2B,IAAM,CACjCV,EAAoB,UAAY,OACpC,OAAO,aAAaA,EAAoB,OAAO,EAC/CA,EAAoB,QAAU,KAChC,EAEMW,GAA0B,IAAM,CAChCV,EAAqB,UAAY,OACnC,OAAO,qBAAqBA,EAAqB,OAAO,EACxDA,EAAqB,QAAU,MAE7BC,EAA2B,UAAY,OACzC,OAAO,qBAAqBA,EAA2B,OAAO,EAC9DA,EAA2B,QAAU,KAEzC,EAEAU,EAAAA,UACE,IAAM,IAAM,CACVF,GAAA,EACAC,GAAA,CACF,EACA,CAAA,CAAC,EAGHC,EAAAA,UAAU,IAAM,CACTnG,GAAqBgF,CAAoB,CAChD,EAAG,CAACA,CAAoB,CAAC,EAEzBmB,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAmBf,GAAoB,QAC7CA,GAAoB,QAAUN,EAE9B,MAAMsB,EACJ,CAAC,CAACD,GACFrB,EAAsB,OAASqB,EAAiB,QAChDrB,EAAsB,WAAWqB,CAAgB,EAC7CE,EAAwBvH,GAA2B,KACvDgG,CAAA,EAEIwB,EACJF,GACAC,GACAtB,EAAqB,KAClB9E,GAAW,CAACd,EAA0B,IAAIc,CAAM,CAAA,EAE/CsG,EAAoBH,GAAsBC,EAKhD,GAHAhB,EAAe,QAAUP,EACzBkB,GAAA,EAEIM,EAAwB,CAC1B,MAAME,EAAYf,EAAyB,QAAU,EACrDA,EAAyB,QAAUe,EAE9BzG,GAAqBgF,CAAoB,EAAE,KAAK,IAAM,CACrDU,EAAyB,UAAYe,GAIzCrB,EAAqBE,EAAe,OAAO,CAC7C,CAAC,EACD,MACF,CAEA,GAAI,CAACkB,EAAmB,CACtBpB,EAAqBL,CAAqB,EAC1C,MACF,CAEAQ,EAAoB,QAAU,OAAO,WAAW,IAAM,CACpDH,EAAqBE,EAAe,OAAO,EAC3CC,EAAoB,QAAU,IAChC,EAAGvG,EAA6B,CAClC,EAAG,CAACgG,EAAsBD,CAAqB,CAAC,EAEhD,MAAM2B,GAAwB/B,EAAM,QAClC,IACEtC,GAAoC8C,CAAiB,EAAE,kBACzD,CAACA,CAAiB,CAAA,EAEdwB,GAAkB,EAAQD,GAC1BE,EACJpC,GAAoBxB,IAAS,UACzBkC,GACE,OACCwB,IAAyB,GAAG5C,EAAM,KACrC,OAENqC,EAAAA,UAAU,IAAM,CACd,GAAI7C,IAAS,aAAc,CACzBmB,EAAY,QAAUM,EACtB,MACF,CACA,MAAM8B,EAAOpC,EAAY,QAErB,EADmBoC,GAAQ9B,EAAsB,WAAW8B,CAAI,IAC7CA,GACrB1C,GAAe9D,GAAUA,EAAQ,CAAC,EAEpCoE,EAAY,QAAUM,CACxB,EAAG,CAACzB,EAAMyB,CAAqB,CAAC,EAEhCoB,EAAAA,UAAU,IAAM,CACd,MAAMW,EAASpD,EAAU,QACzB,GAAI,CAACoD,EAAQ,OAEb,MAAMC,EAAMD,EAAO,gBACnB,GAAI,CAACC,EAAK,OAEVA,EAAI,KAAA,EACJA,EAAI,MAAM;AAAA,OACPzD,IAAS,aAAe,yBAA2B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAapD,EACJyD,EAAI,MAAA,EAEJnD,GAAO,QAAUmD,EAEjB,MAAMC,EACJxC,GAAoBxB,IAAS,UACzBiE,EAA2B,IAC/BtB,EAAuB,aAAa,EAChCuB,EAAyB,IAAMvB,EAAuB,WAAW,EACjEwB,EAA0B,IAAMxB,EAAuB,YAAY,EAErEqB,IACFD,EAAI,iBAAiB,cAAeE,EAA0B,EAAI,EAClEF,EAAI,iBAAiB,YAAaG,EAAwB,EAAI,EAC9DH,EAAI,iBAAiB,aAAcI,EAAyB,EAAI,GAGlE,MAAMC,EAASL,EAAI,eAAe,MAAM,EACxC,GAAI,CAACK,EAAQ,OAEb,MAAMnG,GAAOoG,GAAAA,WAAWD,CAAM,EAC9BzD,EAAQ,QAAU1C,GAClB,IAAIqG,EAAc,GAElB,MAAMC,EAAsB,CAC1BhH,EACAiH,IACG,CACH,MAAMhH,EAAaD,EAAM,KAAA,EAAO,YAAA,EAChC,GAAI,CAACC,EAAY,OAAO,KACxB,MAAMiH,EAAU,OAAO,WAAWjH,CAAU,EAC5C,OAAI,OAAO,MAAMiH,CAAO,EAAU,KAC9B,qBAAqB,KAAKjH,CAAU,EAC9BiH,EAAU,IAAOD,EAEvBhH,EAAW,SAAS,IAAI,GAAK,YAAY,KAAKA,CAAU,EACnDiH,EAEF,IACT,EACMC,GAA2B,CAC/BtH,EACAoH,IACG,CACH,GAAI,CAACpH,EAAU,KAAA,EAAQ,OAAO,KAC9B,MAAM2B,EACJrB,EAAuCN,CAAS,EAClD,GAAI2B,EACF,OAAOwF,EAAoBxF,EAAmByF,CAAoB,EAGpE,MAAM5G,EADmBT,GAA8BC,CAAS,EACxB,KAAMC,GAC5C,qBAAqB,KAAKA,CAAK,CAAA,EAEjC,GAAI,CAACO,EAAgB,OAAO,KAC5B,MAAMH,EAAUG,EAAe,MAAM,sBAAsB,EAC3D,GAAI,CAACH,EAAS,OAAO,KACrB,MAAMgH,EAAU,OAAO,WAAWhH,EAAQ,CAAC,CAAC,EAC5C,OAAI,OAAO,MAAMgH,CAAO,EAAU,KAC3BA,CACT,EAEME,GAAwB,IAAM,CAClC,GAAI,CAACjE,EAAU,SAAW,CAACqD,EAAI,KAAM,OAAO,KAC5C,MAAMS,EACJ9D,EAAU,QAAQ,eAAe,iBAAiB,cAClD,OAAO,YACH,CAAE,kBAAA3B,CAAA,EAAsBF,GAA4BkF,EAAI,IAAI,EAC5Da,EAAS7F,EACXwF,EAAoBxF,EAAmByF,CAAoB,EAC3D,KAEJ,GAAII,IAAW,KACb,OAAO,KAAK,KAAKA,CAAM,EAMzB,MAAMC,EAHUd,EAAI,KAAK,cACvB,kBAAA,GAEsB,cACtB,wBAAA,EAGF,GAAI,CAACc,EAAQ,OAAO,KAEpB,MAAMC,EAAcD,EAAO,MAAM,QAAUA,EAAO,aAAa,QAAQ,EACjEE,EAAsBD,EACxBP,EAAoBO,EAAaN,CAAoB,EACrD,KAEJ,GAAIO,IAAwB,KAC1B,OAAO,KAAK,KAAKA,CAAmB,EAGtC,MAAMC,EAAcN,GAClBG,EAAO,aAAa,OAAO,GAAK,GAChCL,CAAA,EAGF,OAAOQ,IAAgB,KAAO,KAAK,KAAKA,CAAW,EAAI,IACzD,EAEMC,EAAe,IAAM,CACzB,GAAI,CAACvE,EAAU,SAAW,CAACqD,EAAI,KAAM,OACrC,MAAMmB,EAAWnB,EAAI,KAAK,sBAAA,EACpBoB,EAAWpB,EAAI,iBAAiB,sBAAA,EAChCqB,EAAaF,EAAS,OACtBG,EAAaF,GAAU,QAAU,EACjCG,EAAgB,KAAK,IAAIF,EAAYC,CAAU,EAC/CE,EAAiBZ,GAAA,EACjBa,EAAa,KAAK,IACtB,IACAD,GAAkB,KAAK,KAAKD,CAAa,CAAA,EAE3CvE,GAAUyE,CAAU,CACtB,EACMC,EAAuB,IAAM,CACjC,sBAAsB,IAAM,CACtBnB,GACJW,EAAA,CACF,CAAC,CACH,EACApE,EAAgB,QAAU4E,EAE1BR,EAAA,EACAQ,EAAA,EAEKlE,GAIH1F,GAAA,EACG,KAAM6J,GAAW,CACZpB,IACJoB,EAAO3B,CAAG,EACV,sBAAsB,IAAM,CACtBO,IACJhD,EAAwB,EAAI,EAC5BmE,EAAA,EACF,CAAC,EACH,CAAC,EACA,MAAM,IAAM,CACPnB,IACJhD,EAAwB,EAAI,EAC5BmE,EAAA,EACF,CAAC,EAjBHnE,EAAwB,EAAI,EAoB9B,MAAMqE,EAAiB,IAAI,eAAe,IAAMV,GAAc,EAC9D,OAAAU,EAAe,QAAQ5B,EAAI,IAAI,EAC3BK,GACFuB,EAAe,QAAQvB,CAAM,EAGxB,IAAM,CACXE,EAAc,GACdqB,EAAe,WAAA,EACX3B,IACFD,EAAI,oBAAoB,cAAeE,EAA0B,EAAI,EACrEF,EAAI,oBAAoB,YAAaG,EAAwB,EAAI,EACjEH,EAAI,oBAAoB,aAAcI,EAAyB,EAAI,GAGrE,WAAW,IAAM,CACflG,GAAK,QAAA,EACL0C,EAAQ,QAAU,KAClBC,GAAO,QAAU,KACjBC,EAAgB,QAAU,IAAM,CAAC,CACnC,EAAG,CAAC,CACN,CACF,EAAG,CAAA,CAAE,EAELsC,EAAAA,UAAU,IAAM,CACd,MAAMyC,EAAqB,IAAM,CAC/BvE,GAAgB,EAAQ,SAAS,iBAAkB,CACrD,EACA,gBAAS,iBAAiB,mBAAoBuE,CAAkB,EACzD,IACL,SAAS,oBAAoB,mBAAoBA,CAAkB,CACvE,EAAG,CAAA,CAAE,EAEL,MAAMC,GAAmB,IAAM,CAC7B,MAAMhB,EAASrE,GAAa,SAAWE,EAAU,QACjD,GAAKmE,EACL,IAAI,SAAS,kBAAmB,CAC9B,SAAS,iBAAiB,MAAM,IAAM,CAAC,CAAC,EACxC,MACF,CACIA,EAAO,mBACTA,EAAO,oBAAoB,MAAM,IAAM,CAAC,CAAC,EAE7C,EAEA1B,EAAAA,UAAU,IAAM,CACd,MAAMlF,EAAO0C,EAAQ,QAChB1C,IAELA,EAAK,OACH6H,EAAAA,kBAAAA,IAACC,GAAAA,QAAA,CACC,KAAM5D,EACN,YAAAlC,EACA,iBAAAC,EACA,kBAAAC,EACA,qBAAAC,EACA,eAAAC,EACA,WAAAa,GACA,gBAAAyC,GACA,KAAArD,EACA,kBAAmB4B,EAAA,CAAA,CACrB,EAGFM,EAAqB,QAAU,OAAO,sBAAsB,IAAM,CAChE3B,EAAgB,UAAA,EAChB2B,EAAqB,QAAU,IACjC,CAAC,EACH,EAAG,CACDL,EACAlC,EACAC,EACAC,EACAC,EACAc,GACAZ,CAAA,CACD,EACD,MAAM0F,GAAqB,CACzB,gDACAxE,EACI,qCACA,gEAAA,EAEH,OAAO,OAAO,EACd,KAAK,GAAG,EAIX,OACEyE,EAAAA,kBAAAA,KAAC,MAAA,CACC,IAAKzF,GACL,eAAcmD,GAAkB,OAAS,QACzC,UAAWqC,GACX,MACEpC,EACI,CACE,OAAQA,EACR,UAAWA,CAAA,EAEb,OAGL,SAAA,CAAA,CAACvD,GACAyF,EAAAA,kBAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAASD,GACT,UACE,qFAGD,SAAAzE,GAAe,OAAShB,GAAwB,MAAA,CAAA,EAGpDE,IAAS,cAAgBN,IAAS,WACjC8F,EAAAA,kBAAAA,IAAC,MAAA,CACC,YAAa,IAAMnD,EAAuB,WAAW,EACrD,cAAe,IAAMA,EAAuB,aAAa,EACzD,aAAc,IAAMA,EAAuB,YAAY,EAEvD,SAAAmD,EAAAA,kBAAAA,IAACI,YAAc,QAAAnG,CAAA,CAAkB,CAAA,CAAA,EAGnCkG,EAAAA,kBAAAA,KAAAE,6BAAA,CACG,SAAA,CAcG,KACJL,EAAAA,kBAAAA,IAAC,SAAA,CACC,IAAKpF,EACL,QAAQ,8EACR,MAAM,aACN,gBAAe,GACf,UAAW,CAACtD,EAAW,qCAAqC,EACzD,OAAO,OAAO,EACd,KAAK,GAAG,EACX,MAAO,CACL,OAAQwG,GAAyB,OACjC,UAAWA,EACX,OAAQ,OACR,WAAY,SAAA,CACd,CAAA,EASE,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAIR"}
|
|
1
|
+
{"version":3,"file":"IframeSandbox.cjs.js","sources":["../../../src/components/ContentRender/IframeSandbox.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport { Loader2 } from \"lucide-react\";\nimport SandboxApp from \"./SandboxApp\";\nimport { splitContentSegments } from \"./utils/split-content\";\nimport ContentRender from \"./ContentRender\";\nimport {\n SANDBOX_INTERACTION_MESSAGE_SOURCE,\n SANDBOX_INTERACTION_MESSAGE_TYPE,\n} from \"../../lib/sandboxInteraction\";\n\ntype InjectBlackboardLibraries =\n typeof import(\"./blackboard-vendor\").injectBlackboardLibraries;\n\n// Cache the sandbox vendor loader so every iframe reuses the same preload request.\nlet blackboardVendorPromise: Promise<InjectBlackboardLibraries> | null = null;\n\nconst loadBlackboardVendor = () => {\n if (!blackboardVendorPromise) {\n blackboardVendorPromise = import(\"./blackboard-vendor\").then(\n (m) => m.injectBlackboardLibraries\n );\n }\n\n return blackboardVendorPromise;\n};\n\n// Warm the sandbox vendor chunk as early as possible in the browser.\nif (typeof window !== \"undefined\") {\n void loadBlackboardVendor();\n}\n\nconst COMPLETE_IMAGE_TAG_PATTERN = /<img\\b[^>]*>/i;\nconst POST_IMAGE_STREAM_DEBOUNCE_MS = 180;\nconst SANDBOX_INTERACTION_THROTTLE_MS = 240;\nconst COMPLETE_IMAGE_SOURCE_PATTERN =\n /<img\\b[^>]*\\bsrc\\s*=\\s*[\"']([^\"']+)[\"'][^>]*>/gi;\nconst SANDBOX_IMAGE_PRELOAD_CACHE = new Map<string, Promise<void>>();\nconst SANDBOX_IMAGE_READY_CACHE = new Set<string>();\n\nconst extractCompleteImageSources = (html: string) => {\n const matches = Array.from(html.matchAll(COMPLETE_IMAGE_SOURCE_PATTERN));\n return Array.from(\n new Set(\n matches\n .map((match) => match[1]?.trim())\n .filter((src): src is string => Boolean(src))\n )\n );\n};\n\nconst preloadSandboxImage = (src: string) => {\n if (!src) {\n return Promise.resolve();\n }\n\n const cached = SANDBOX_IMAGE_PRELOAD_CACHE.get(src);\n if (cached) {\n return cached;\n }\n\n const nextPromise = new Promise<void>((resolve) => {\n if (typeof window === \"undefined\") {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n return;\n }\n\n const image = new window.Image();\n image.decoding = \"sync\";\n image.loading = \"eager\";\n image.fetchPriority = \"high\";\n\n const settleWhenRenderable = () => {\n const decodePromise =\n typeof image.decode === \"function\"\n ? image.decode().catch(() => undefined)\n : Promise.resolve();\n\n void decodePromise.finally(() => {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n });\n };\n\n image.onload = () => {\n settleWhenRenderable();\n };\n image.onerror = () => {\n SANDBOX_IMAGE_READY_CACHE.add(src);\n resolve();\n };\n image.src = src;\n\n if (image.complete && image.naturalWidth > 0) {\n settleWhenRenderable();\n }\n });\n\n SANDBOX_IMAGE_PRELOAD_CACHE.set(src, nextPromise);\n return nextPromise;\n};\n\nconst preloadSandboxImages = (sources: string[] = []) =>\n Promise.allSettled(sources.map((source) => preloadSandboxImage(source)));\n\nexport interface IframeSandboxProps {\n content: string;\n className?: string;\n loadingText?: string;\n styleLoadingText?: string;\n scriptLoadingText?: string;\n fullScreenButtonText?: string;\n hideFullScreen?: boolean;\n mode?: \"content\" | \"blackboard\";\n type: \"sandbox\" | \"markdown\";\n replaceRootScreenHeightWithFull?: boolean;\n}\n\nconst normalizeTailwindHeightTokens = (className: string) =>\n className\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => token.split(\":\").pop() || token);\n\nconst parseViewportHeightCss = (value: string) => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n const matched = normalized.match(/^([0-9.]+)(vh|dvh|svh|lvh)$/i);\n if (!matched) return null;\n return `${matched[1]}${matched[2].toLowerCase()}`;\n};\n\nconst extractViewportHeightFromTailwindClass = (className: string) => {\n if (!className.trim()) return null;\n const normalizedTokens = normalizeTailwindHeightTokens(className);\n if (\n normalizedTokens.includes(\"h-screen\") ||\n normalizedTokens.includes(\"h-dvh\") ||\n normalizedTokens.includes(\"min-h-screen\") ||\n normalizedTokens.includes(\"min-h-dvh\")\n ) {\n return \"100dvh\";\n }\n if (\n normalizedTokens.includes(\"h-svh\") ||\n normalizedTokens.includes(\"min-h-svh\")\n ) {\n return \"100svh\";\n }\n if (\n normalizedTokens.includes(\"h-lvh\") ||\n normalizedTokens.includes(\"min-h-lvh\")\n ) {\n return \"100lvh\";\n }\n const arbitraryToken = normalizedTokens.find((token) =>\n /^(h|min-h)-\\[[0-9.]+(vh|dvh|svh|lvh)\\]$/i.test(token)\n );\n if (!arbitraryToken) return null;\n const matched = arbitraryToken.match(\n /^(h|min-h)-\\[([0-9.]+)(vh|dvh|svh|lvh)\\]$/i\n );\n if (!matched) return null;\n return `${matched[2]}${matched[3].toLowerCase()}`;\n};\n\nconst SANDBOX_IGNORED_TAG_NAMES = new Set([\n \"base\",\n \"link\",\n \"meta\",\n \"script\",\n \"style\",\n \"template\",\n \"title\",\n]);\n\nconst isSandboxRenderableElement = (element: Element) =>\n !SANDBOX_IGNORED_TAG_NAMES.has(element.tagName.toLowerCase());\n\nconst getFirstRenderableElementChild = (root: ParentNode) =>\n Array.from(root.childNodes).find(\n (node): node is HTMLElement =>\n node.nodeType === Node.ELEMENT_NODE &&\n isSandboxRenderableElement(node as HTMLElement)\n ) || null;\n\nconst getInspectableSandboxElementChain = (root: ParentNode) => {\n const chain: HTMLElement[] = [];\n let current = getFirstRenderableElementChild(root);\n\n while (current) {\n chain.push(current);\n\n const childElements = Array.from(current.children).filter(\n (element): element is HTMLElement => isSandboxRenderableElement(element)\n );\n\n if (childElements.length !== 1) {\n break;\n }\n\n current = childElements[0];\n }\n\n return chain;\n};\n\nconst extractViewportHeightFromElement = (element: HTMLElement) => {\n const heightAttrValue = element.getAttribute(\"height\");\n const attrViewportHeight = heightAttrValue\n ? parseViewportHeightCss(heightAttrValue)\n : null;\n\n if (attrViewportHeight) {\n return attrViewportHeight;\n }\n\n const styleHeightValue =\n element.getAttribute(\"style\")?.match(/\\bheight\\s*:\\s*([^;]+)/i)?.[1] ||\n null;\n const styleViewportHeight = styleHeightValue\n ? parseViewportHeightCss(styleHeightValue)\n : null;\n\n if (styleViewportHeight) {\n return styleViewportHeight;\n }\n\n return extractViewportHeightFromTailwindClass(\n element.getAttribute(\"class\") || \"\"\n );\n};\n\nconst isFullViewportHeightCss = (value: string | null) =>\n value === \"100vh\" ||\n value === \"100dvh\" ||\n value === \"100svh\" ||\n value === \"100lvh\";\n\nconst inspectSandboxPrimaryHeight = (root: ParentNode) => {\n const inspectableElements = getInspectableSandboxElementChain(root);\n let viewportHeightCss: string | null = null;\n let hasFullViewportHeight = false;\n\n inspectableElements.forEach((element) => {\n const elementViewportHeight = extractViewportHeightFromElement(element);\n\n if (!viewportHeightCss && elementViewportHeight) {\n viewportHeightCss = elementViewportHeight;\n }\n\n if (isFullViewportHeightCss(elementViewportHeight)) {\n hasFullViewportHeight = true;\n }\n });\n\n return {\n viewportHeightCss,\n hasFullViewportHeight,\n };\n};\n\nconst inspectRootHeightFromHtmlString = (html: string) => {\n const normalized = html.trim();\n\n if (!normalized) {\n return {\n viewportHeightCss: null,\n hasFullViewportHeight: false,\n };\n }\n\n const rootMatch = normalized.match(/^<([a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/);\n const attrs = rootMatch?.[2] || \"\";\n const heightAttrValue = attrs.match(/\\bheight\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleAttrValue = attrs.match(/\\bstyle\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleHeightValue = styleAttrValue?.match(\n /\\bheight\\s*:\\s*([^;]+)/i\n )?.[1];\n const classAttrValue = attrs.match(/\\bclass\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const viewportHeightCss =\n (heightAttrValue ? parseViewportHeightCss(heightAttrValue) : null) ||\n (styleHeightValue ? parseViewportHeightCss(styleHeightValue) : null) ||\n (classAttrValue\n ? extractViewportHeightFromTailwindClass(classAttrValue)\n : null);\n\n return {\n viewportHeightCss,\n hasFullViewportHeight: isFullViewportHeightCss(viewportHeightCss),\n };\n};\n\nconst inspectSandboxPrimaryHeightFromHtml = (html: string) => {\n const normalized = html.trim();\n\n if (!normalized) {\n return {\n viewportHeightCss: null,\n hasFullViewportHeight: false,\n };\n }\n\n if (typeof document === \"undefined\") {\n return inspectRootHeightFromHtmlString(normalized);\n }\n\n const template = document.createElement(\"template\");\n template.innerHTML = normalized;\n\n return inspectSandboxPrimaryHeight(template.content);\n};\n\nconst replaceRootScreenHeightToken = (className: string) =>\n className\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => {\n const segments = token.split(\":\");\n if (\n segments[segments.length - 1] !== \"h-screen\" &&\n segments[segments.length - 1] !== \"min-h-screen\"\n ) {\n return token;\n }\n segments[segments.length - 1] = \"h-full\";\n return segments.join(\":\");\n })\n .join(\" \");\n\nconst replaceRootScreenHeightWithFullClass = (\n html: string,\n enabled: boolean\n) => {\n if (!enabled || !html.trim()) {\n return html;\n }\n\n return html.replace(\n /^(\\s*<[a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/,\n (match, tagStart: string, attrs = \"\") => {\n const classMatch = attrs.match(/\\bclass\\s*=\\s*([\"'])([^\"']*)\\1/i);\n\n if (!classMatch) {\n return match;\n }\n\n const nextClassName = replaceRootScreenHeightToken(classMatch[2]);\n\n if (nextClassName === classMatch[2]) {\n return match;\n }\n\n return `${tagStart}${attrs.replace(\n classMatch[0],\n `class=${classMatch[1]}${nextClassName}${classMatch[1]}`\n )}>`;\n }\n );\n};\n\nconst IframeSandbox: React.FC<IframeSandboxProps> = ({\n content,\n type,\n className,\n loadingText,\n styleLoadingText,\n scriptLoadingText,\n fullScreenButtonText,\n hideFullScreen = false,\n mode = \"content\",\n replaceRootScreenHeightWithFull = false,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const rootRef = useRef<Root | null>(null);\n const docRef = useRef<Document | null>(null);\n const updateHeightRef = useRef<() => void>(() => {});\n const [height, setHeight] = useState(480);\n const lastSandboxInteractionTimeRef = useRef(0);\n const [resetToken, setResetToken] = useState(0);\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [, setIsSandboxVendorReady] = useState(true);\n const shouldInjectSandboxVendor = type === \"sandbox\";\n\n const isBlackboardMode = mode === \"blackboard\";\n const prevHtmlRef = useRef<string>(\"\");\n const htmlContent = React.useMemo(() => {\n const segments = splitContentSegments(content);\n // console.log('segments=====', segments);\n const sandboxSegments = segments.filter((seg) => seg.type === \"sandbox\");\n const sandboxContent =\n mode === \"blackboard\"\n ? sandboxSegments[sandboxSegments.length - 1]?.value || \"\"\n : sandboxSegments.map((seg) => seg.value).join(\"\\n\");\n return sandboxContent || \"\";\n }, [content, mode]);\n const normalizedHtmlContent = React.useMemo(\n () =>\n replaceRootScreenHeightWithFullClass(\n htmlContent,\n replaceRootScreenHeightWithFull\n ),\n [htmlContent, replaceRootScreenHeightWithFull]\n );\n const completeImageSources = React.useMemo(\n () => extractCompleteImageSources(normalizedHtmlContent),\n [normalizedHtmlContent]\n );\n const htmlHeightMeta = React.useMemo(\n () => inspectSandboxPrimaryHeightFromHtml(htmlContent),\n [htmlContent]\n );\n const shouldStretchRootHeight = React.useMemo(\n () =>\n replaceRootScreenHeightWithFull && htmlHeightMeta.hasFullViewportHeight,\n [htmlHeightMeta.hasFullViewportHeight, replaceRootScreenHeightWithFull]\n );\n const [renderHtmlContent, setRenderHtmlContent] = useState(\n normalizedHtmlContent\n );\n const prevIncomingHtmlRef = useRef(normalizedHtmlContent);\n const pendingHtmlRef = useRef(normalizedHtmlContent);\n const deferRenderTimerRef = useRef<number | null>(null);\n const initialPaintFrameRef = useRef<number | null>(null);\n const initialPaintCommitFrameRef = useRef<number | null>(null);\n const imagePreloadRequestIdRef = useRef(0);\n\n const emitSandboxInteraction = useCallback((eventType: string) => {\n if (typeof window === \"undefined\") {\n return;\n }\n const now = Date.now();\n if (\n now - lastSandboxInteractionTimeRef.current <\n SANDBOX_INTERACTION_THROTTLE_MS\n ) {\n return;\n }\n lastSandboxInteractionTimeRef.current = now;\n window.postMessage(\n {\n source: SANDBOX_INTERACTION_MESSAGE_SOURCE,\n type: SANDBOX_INTERACTION_MESSAGE_TYPE,\n eventType,\n },\n window.location.origin\n );\n }, []);\n\n const clearDeferredRenderTimer = () => {\n if (deferRenderTimerRef.current === null) return;\n window.clearTimeout(deferRenderTimerRef.current);\n deferRenderTimerRef.current = null;\n };\n\n const clearInitialPaintFrames = () => {\n if (initialPaintFrameRef.current !== null) {\n window.cancelAnimationFrame(initialPaintFrameRef.current);\n initialPaintFrameRef.current = null;\n }\n if (initialPaintCommitFrameRef.current !== null) {\n window.cancelAnimationFrame(initialPaintCommitFrameRef.current);\n initialPaintCommitFrameRef.current = null;\n }\n };\n\n useEffect(\n () => () => {\n clearDeferredRenderTimer();\n clearInitialPaintFrames();\n },\n []\n );\n\n useEffect(() => {\n void preloadSandboxImages(completeImageSources);\n }, [completeImageSources]);\n\n useEffect(() => {\n const prevIncomingHtml = prevIncomingHtmlRef.current;\n prevIncomingHtmlRef.current = normalizedHtmlContent;\n\n const isAppendOnlyStream =\n !!prevIncomingHtml &&\n normalizedHtmlContent.length > prevIncomingHtml.length &&\n normalizedHtmlContent.startsWith(prevIncomingHtml);\n const containsCompleteImage = COMPLETE_IMAGE_TAG_PATTERN.test(\n normalizedHtmlContent\n );\n const hasPendingImagePreload =\n isAppendOnlyStream &&\n containsCompleteImage &&\n completeImageSources.some(\n (source) => !SANDBOX_IMAGE_READY_CACHE.has(source)\n );\n const shouldDeferRender = isAppendOnlyStream && containsCompleteImage;\n\n pendingHtmlRef.current = normalizedHtmlContent;\n clearDeferredRenderTimer();\n\n if (hasPendingImagePreload) {\n const requestId = imagePreloadRequestIdRef.current + 1;\n imagePreloadRequestIdRef.current = requestId;\n\n void preloadSandboxImages(completeImageSources).then(() => {\n if (imagePreloadRequestIdRef.current !== requestId) {\n return;\n }\n\n setRenderHtmlContent(pendingHtmlRef.current);\n });\n return;\n }\n\n if (!shouldDeferRender) {\n setRenderHtmlContent(normalizedHtmlContent);\n return;\n }\n\n deferRenderTimerRef.current = window.setTimeout(() => {\n setRenderHtmlContent(pendingHtmlRef.current);\n deferRenderTimerRef.current = null;\n }, POST_IMAGE_STREAM_DEBOUNCE_MS);\n }, [completeImageSources, normalizedHtmlContent]);\n\n const rootViewportHeightCss = React.useMemo(\n () =>\n inspectSandboxPrimaryHeightFromHtml(renderHtmlContent).viewportHeightCss,\n [renderHtmlContent]\n );\n const hasRootVhHeight = Boolean(rootViewportHeightCss);\n const sandboxViewportHeight =\n isBlackboardMode && type === \"sandbox\"\n ? shouldStretchRootHeight\n ? \"100%\"\n : (rootViewportHeightCss ?? `${height}px`)\n : undefined;\n const shouldShowHtmlFallbackWhilePreparingSandbox = false;\n useEffect(() => {\n if (mode !== \"blackboard\") {\n prevHtmlRef.current = normalizedHtmlContent;\n return;\n }\n const prev = prevHtmlRef.current;\n const isContinuation = prev && normalizedHtmlContent.startsWith(prev);\n if (!isContinuation && prev) {\n setResetToken((token) => token + 1);\n }\n prevHtmlRef.current = normalizedHtmlContent;\n }, [mode, normalizedHtmlContent]);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return undefined;\n\n const doc = iframe.contentDocument;\n if (!doc) return undefined;\n\n doc.open();\n doc.write(`<!DOCTYPE html>\n<html${mode === \"blackboard\" ? ' style=\"height: 100%;\"' : \"\"}>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <style>\n html, body, #root { width: 100%; height: 100%; }\n html, body { margin: 0; padding: 0; overflow: auto; }\n *, *::before, *::after { box-sizing: border-box; }\n </style>\n </head>\n <body>\n <div id=\"root\"></div>\n </body>\n</html>`);\n doc.close();\n\n docRef.current = doc;\n\n const shouldBridgeSandboxInteraction =\n isBlackboardMode && type === \"sandbox\";\n const handleSandboxPointerDown = () =>\n emitSandboxInteraction(\"pointerdown\");\n const handleSandboxMouseDown = () => emitSandboxInteraction(\"mousedown\");\n const handleSandboxTouchStart = () => emitSandboxInteraction(\"touchstart\");\n\n if (shouldBridgeSandboxInteraction) {\n doc.addEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.addEventListener(\"mousedown\", handleSandboxMouseDown, true);\n doc.addEventListener(\"touchstart\", handleSandboxTouchStart, true);\n }\n\n const rootEl = doc.getElementById(\"root\");\n if (!rootEl) return undefined;\n\n const root = createRoot(rootEl);\n rootRef.current = root;\n let isDestroyed = false;\n\n const parseExplicitHeight = (\n value: string,\n parentViewportHeight: number\n ) => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n const numeric = Number.parseFloat(normalized);\n if (Number.isNaN(numeric)) return null;\n if (/(dvh|svh|lvh|vh)$/i.test(normalized)) {\n return (numeric / 100) * parentViewportHeight;\n }\n if (normalized.endsWith(\"px\") || /^[0-9.]+$/.test(normalized)) {\n return numeric;\n }\n return null;\n };\n const parseTailwindHeightClass = (\n className: string,\n parentViewportHeight: number\n ) => {\n if (!className.trim()) return null;\n const viewportHeightCss =\n extractViewportHeightFromTailwindClass(className);\n if (viewportHeightCss) {\n return parseExplicitHeight(viewportHeightCss, parentViewportHeight);\n }\n const normalizedTokens = normalizeTailwindHeightTokens(className);\n const arbitraryToken = normalizedTokens.find((token) =>\n /^h-\\[[0-9.]+px\\]$/i.test(token)\n );\n if (!arbitraryToken) return null;\n const matched = arbitraryToken.match(/^h-\\[([0-9.]+)px\\]$/i);\n if (!matched) return null;\n const numeric = Number.parseFloat(matched[1]);\n if (Number.isNaN(numeric)) return null;\n return numeric;\n };\n\n const resolveExplicitHeight = () => {\n if (!iframeRef.current || !doc.body) return null;\n const parentViewportHeight =\n iframeRef.current.ownerDocument?.documentElement?.clientHeight ||\n window.innerHeight;\n const { viewportHeightCss } = inspectSandboxPrimaryHeight(doc.body);\n const parsed = viewportHeightCss\n ? parseExplicitHeight(viewportHeightCss, parentViewportHeight)\n : null;\n\n if (parsed !== null) {\n return Math.ceil(parsed);\n }\n\n const wrapper = doc.body.querySelector(\n \".sandbox-wrapper\"\n ) as HTMLElement | null;\n const target = wrapper?.querySelector(\n \".sandbox-container > *\"\n ) as HTMLElement | null;\n\n if (!target) return null;\n\n const heightValue = target.style.height || target.getAttribute(\"height\");\n const explicitPixelHeight = heightValue\n ? parseExplicitHeight(heightValue, parentViewportHeight)\n : null;\n\n if (explicitPixelHeight !== null) {\n return Math.ceil(explicitPixelHeight);\n }\n\n const classHeight = parseTailwindHeightClass(\n target.getAttribute(\"class\") || \"\",\n parentViewportHeight\n );\n\n return classHeight !== null ? Math.ceil(classHeight) : null;\n };\n\n const updateHeight = () => {\n if (!iframeRef.current || !doc.body) return;\n const bodyRect = doc.body.getBoundingClientRect();\n const htmlRect = doc.documentElement?.getBoundingClientRect();\n const bodyHeight = bodyRect.height;\n const htmlHeight = htmlRect?.height || 0;\n const contentHeight = Math.max(bodyHeight, htmlHeight);\n const explicitHeight = resolveExplicitHeight();\n const nextHeight = Math.max(\n 200,\n explicitHeight ?? Math.ceil(contentHeight)\n );\n setHeight(nextHeight);\n };\n const scheduleHeightUpdate = () => {\n requestAnimationFrame(() => {\n if (isDestroyed) return;\n updateHeight();\n });\n };\n updateHeightRef.current = scheduleHeightUpdate;\n\n updateHeight();\n scheduleHeightUpdate();\n\n if (!shouldInjectSandboxVendor) {\n setIsSandboxVendorReady(true);\n } else {\n // Inject Tailwind/DaisyUI/GSAP before rendering sandbox content to avoid FOUC.\n loadBlackboardVendor()\n .then((inject) => {\n if (isDestroyed) return;\n inject(doc);\n requestAnimationFrame(() => {\n if (isDestroyed) return;\n setIsSandboxVendorReady(true);\n scheduleHeightUpdate();\n });\n })\n .catch(() => {\n if (isDestroyed) return;\n setIsSandboxVendorReady(true);\n scheduleHeightUpdate();\n });\n }\n\n const resizeObserver = new ResizeObserver(() => updateHeight());\n resizeObserver.observe(doc.body);\n if (rootEl) {\n resizeObserver.observe(rootEl);\n }\n\n return () => {\n isDestroyed = true;\n resizeObserver.disconnect();\n if (shouldBridgeSandboxInteraction) {\n doc.removeEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.removeEventListener(\"mousedown\", handleSandboxMouseDown, true);\n doc.removeEventListener(\"touchstart\", handleSandboxTouchStart, true);\n }\n // Defer unmount to avoid React warning when parent is mid-render\n setTimeout(() => {\n root.unmount();\n rootRef.current = null;\n docRef.current = null;\n updateHeightRef.current = () => {};\n }, 0);\n };\n }, []);\n\n useEffect(() => {\n const onFullscreenChange = () => {\n setIsFullscreen(Boolean(document.fullscreenElement));\n };\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\n return () =>\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n }, []);\n\n const toggleFullscreen = () => {\n const target = containerRef.current || iframeRef.current;\n if (!target) return;\n if (document.fullscreenElement) {\n document.exitFullscreen().catch(() => {});\n return;\n }\n if (target.requestFullscreen) {\n target.requestFullscreen().catch(() => {});\n }\n };\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n\n root.render(\n <SandboxApp\n html={renderHtmlContent}\n loadingText={loadingText}\n styleLoadingText={styleLoadingText}\n scriptLoadingText={scriptLoadingText}\n fullScreenButtonText={fullScreenButtonText}\n hideFullScreen={hideFullScreen}\n resetToken={resetToken}\n hasRootVhHeight={hasRootVhHeight}\n mode={mode}\n stretchRootHeight={shouldStretchRootHeight}\n />\n );\n\n initialPaintFrameRef.current = window.requestAnimationFrame(() => {\n updateHeightRef.current?.();\n initialPaintFrameRef.current = null;\n });\n }, [\n renderHtmlContent,\n loadingText,\n styleLoadingText,\n scriptLoadingText,\n fullScreenButtonText,\n resetToken,\n mode,\n ]);\n const containerClassName = [\n \"w-full relative content-render-iframe-sandbox\",\n isBlackboardMode\n ? \"h-full overflow-auto flex flex-col\"\n : \"aspect-[16/9] overflow-hidden flex items-center justify-center\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const shouldShowSandboxLoading = false;\n\n return (\n <div\n ref={containerRef}\n data-root-vh={hasRootVhHeight ? \"true\" : \"false\"}\n className={containerClassName}\n style={\n sandboxViewportHeight\n ? {\n height: sandboxViewportHeight,\n minHeight: sandboxViewportHeight,\n }\n : undefined\n }\n >\n {!hideFullScreen && (\n <button\n type=\"button\"\n onClick={toggleFullscreen}\n className={\n \"absolute top-2 right-2 z-50 p-1.5 bg-black/75 text-white rounded-md cursor-pointer\"\n }\n >\n {isFullscreen ? \"退出全屏\" : fullScreenButtonText || \"全屏浏览\"}\n </button>\n )}\n {mode === \"blackboard\" && type === \"markdown\" ? (\n <div\n onMouseDown={() => emitSandboxInteraction(\"mousedown\")}\n onPointerDown={() => emitSandboxInteraction(\"pointerdown\")}\n onTouchStart={() => emitSandboxInteraction(\"touchstart\")}\n >\n <ContentRender content={content} />\n </div>\n ) : (\n <>\n {shouldShowHtmlFallbackWhilePreparingSandbox ? (\n <div\n aria-hidden\n className=\"absolute inset-0 z-10 overflow-hidden\"\n style={{\n height: sandboxViewportHeight ?? \"100%\",\n minHeight: sandboxViewportHeight,\n }}\n >\n <div\n className=\"h-full w-full\"\n dangerouslySetInnerHTML={{ __html: renderHtmlContent }}\n />\n </div>\n ) : null}\n <iframe\n ref={iframeRef}\n sandbox=\"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox\"\n allow=\"fullscreen\"\n allowFullScreen\n className={[className, \"w-full h-full mx-auto my-auto block\"]\n .filter(Boolean)\n .join(\" \")}\n style={{\n height: sandboxViewportHeight ?? \"100%\",\n minHeight: sandboxViewportHeight,\n margin: \"auto\",\n visibility: \"visible\",\n }}\n />\n {shouldShowSandboxLoading ? (\n <div className=\"pointer-events-none absolute inset-0 z-20 flex items-center justify-center\">\n <Loader2\n aria-label={loadingText || \"Preparing sandbox styles\"}\n className=\"text-primary h-7 w-7 animate-spin\"\n />\n </div>\n ) : null}\n </>\n )}\n </div>\n );\n};\n\nexport default IframeSandbox;\n"],"names":["blackboardVendorPromise","loadBlackboardVendor","m","COMPLETE_IMAGE_TAG_PATTERN","POST_IMAGE_STREAM_DEBOUNCE_MS","SANDBOX_INTERACTION_THROTTLE_MS","COMPLETE_IMAGE_SOURCE_PATTERN","SANDBOX_IMAGE_PRELOAD_CACHE","SANDBOX_IMAGE_READY_CACHE","extractCompleteImageSources","html","matches","match","src","preloadSandboxImage","cached","nextPromise","resolve","image","settleWhenRenderable","preloadSandboxImages","sources","source","normalizeTailwindHeightTokens","className","token","parseViewportHeightCss","value","normalized","matched","extractViewportHeightFromTailwindClass","normalizedTokens","arbitraryToken","SANDBOX_IGNORED_TAG_NAMES","isSandboxRenderableElement","element","getFirstRenderableElementChild","root","node","getInspectableSandboxElementChain","chain","current","childElements","extractViewportHeightFromElement","heightAttrValue","attrViewportHeight","styleHeightValue","styleViewportHeight","isFullViewportHeightCss","inspectSandboxPrimaryHeight","inspectableElements","viewportHeightCss","hasFullViewportHeight","elementViewportHeight","inspectRootHeightFromHtmlString","attrs","classAttrValue","inspectSandboxPrimaryHeightFromHtml","template","replaceRootScreenHeightToken","segments","replaceRootScreenHeightWithFullClass","enabled","tagStart","classMatch","nextClassName","IframeSandbox","content","type","loadingText","styleLoadingText","scriptLoadingText","fullScreenButtonText","hideFullScreen","mode","replaceRootScreenHeightWithFull","containerRef","useRef","iframeRef","rootRef","docRef","updateHeightRef","height","setHeight","useState","lastSandboxInteractionTimeRef","resetToken","setResetToken","isFullscreen","setIsFullscreen","setIsSandboxVendorReady","shouldInjectSandboxVendor","isBlackboardMode","prevHtmlRef","htmlContent","React","sandboxSegments","splitContentSegments","seg","normalizedHtmlContent","completeImageSources","htmlHeightMeta","shouldStretchRootHeight","renderHtmlContent","setRenderHtmlContent","prevIncomingHtmlRef","pendingHtmlRef","deferRenderTimerRef","initialPaintFrameRef","initialPaintCommitFrameRef","imagePreloadRequestIdRef","emitSandboxInteraction","useCallback","eventType","now","SANDBOX_INTERACTION_MESSAGE_SOURCE","SANDBOX_INTERACTION_MESSAGE_TYPE","clearDeferredRenderTimer","clearInitialPaintFrames","useEffect","prevIncomingHtml","isAppendOnlyStream","containsCompleteImage","hasPendingImagePreload","shouldDeferRender","requestId","rootViewportHeightCss","hasRootVhHeight","sandboxViewportHeight","prev","iframe","doc","shouldBridgeSandboxInteraction","handleSandboxPointerDown","handleSandboxMouseDown","handleSandboxTouchStart","rootEl","createRoot","isDestroyed","parseExplicitHeight","parentViewportHeight","numeric","parseTailwindHeightClass","resolveExplicitHeight","parsed","target","heightValue","explicitPixelHeight","classHeight","updateHeight","bodyRect","htmlRect","bodyHeight","htmlHeight","contentHeight","explicitHeight","nextHeight","scheduleHeightUpdate","inject","resizeObserver","onFullscreenChange","toggleFullscreen","jsx","SandboxApp","containerClassName","jsxs","ContentRender","Fragment"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { j as w } from "../../_virtual/jsx-runtime.es.js";
|
|
2
|
-
import R, { useRef as
|
|
2
|
+
import R, { useRef as h, useState as V, useCallback as Ve, useEffect as C } from "react";
|
|
3
3
|
import { createRoot as Fe } from "react-dom/client";
|
|
4
4
|
import Pe from "./SandboxApp.es.js";
|
|
5
5
|
import { splitContentSegments as ke } from "./utils/split-content.es.js";
|
|
@@ -51,18 +51,20 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
51
51
|
}, ne = (e) => {
|
|
52
52
|
if (!e.trim()) return null;
|
|
53
53
|
const t = we(e);
|
|
54
|
-
if (t.includes("h-screen") || t.includes("h-dvh"))
|
|
54
|
+
if (t.includes("h-screen") || t.includes("h-dvh") || t.includes("min-h-screen") || t.includes("min-h-dvh"))
|
|
55
55
|
return "100dvh";
|
|
56
|
-
if (t.includes("h-svh"))
|
|
56
|
+
if (t.includes("h-svh") || t.includes("min-h-svh"))
|
|
57
57
|
return "100svh";
|
|
58
|
-
if (t.includes("h-lvh"))
|
|
58
|
+
if (t.includes("h-lvh") || t.includes("min-h-lvh"))
|
|
59
59
|
return "100lvh";
|
|
60
60
|
const n = t.find(
|
|
61
|
-
(o) => /^h-\[[0-9.]+(vh|dvh|svh|lvh)\]$/i.test(o)
|
|
61
|
+
(o) => /^(h|min-h)-\[[0-9.]+(vh|dvh|svh|lvh)\]$/i.test(o)
|
|
62
62
|
);
|
|
63
63
|
if (!n) return null;
|
|
64
|
-
const s = n.match(
|
|
65
|
-
|
|
64
|
+
const s = n.match(
|
|
65
|
+
/^(h|min-h)-\[([0-9.]+)(vh|dvh|svh|lvh)\]$/i
|
|
66
|
+
);
|
|
67
|
+
return s ? `${s[2]}${s[3].toLowerCase()}` : null;
|
|
66
68
|
}, Xe = /* @__PURE__ */ new Set([
|
|
67
69
|
"base",
|
|
68
70
|
"link",
|
|
@@ -113,10 +115,10 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
113
115
|
};
|
|
114
116
|
const s = t.match(/^<([a-zA-Z][\w:-]*)(\s[^>]*?)?>/)?.[2] || "", o = s.match(/\bheight\s*=\s*["']([^"']+)["']/i)?.[1], m = s.match(/\bstyle\s*=\s*["']([^"']+)["']/i)?.[1]?.match(
|
|
115
117
|
/\bheight\s*:\s*([^;]+)/i
|
|
116
|
-
)?.[1], S = s.match(/\bclass\s*=\s*["']([^"']+)["']/i)?.[1],
|
|
118
|
+
)?.[1], S = s.match(/\bclass\s*=\s*["']([^"']+)["']/i)?.[1], d = (o ? j(o) : null) || (m ? j(m) : null) || (S ? ne(S) : null);
|
|
117
119
|
return {
|
|
118
|
-
viewportHeightCss:
|
|
119
|
-
hasFullViewportHeight: He(
|
|
120
|
+
viewportHeightCss: d,
|
|
121
|
+
hasFullViewportHeight: He(d)
|
|
120
122
|
};
|
|
121
123
|
}, pe = (e) => {
|
|
122
124
|
const t = e.trim();
|
|
@@ -131,7 +133,7 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
131
133
|
return n.innerHTML = t, Ee(n.content);
|
|
132
134
|
}, Je = (e) => e.split(/\s+/).filter(Boolean).map((t) => {
|
|
133
135
|
const n = t.split(":");
|
|
134
|
-
return n[n.length - 1] !== "h-screen" ? t : (n[n.length - 1] = "h-full", n.join(":"));
|
|
136
|
+
return n[n.length - 1] !== "h-screen" && n[n.length - 1] !== "min-h-screen" ? t : (n[n.length - 1] = "h-full", n.join(":"));
|
|
135
137
|
}).join(" "), Ke = (e, t) => !t || !e.trim() ? e : e.replace(
|
|
136
138
|
/^(\s*<[a-zA-Z][\w:-]*)(\s[^>]*?)?>/,
|
|
137
139
|
(n, s, o = "") => {
|
|
@@ -153,15 +155,15 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
153
155
|
scriptLoadingText: l,
|
|
154
156
|
fullScreenButtonText: m,
|
|
155
157
|
hideFullScreen: S = !1,
|
|
156
|
-
mode:
|
|
158
|
+
mode: d = "content",
|
|
157
159
|
replaceRootScreenHeightWithFull: F = !1
|
|
158
160
|
}) => {
|
|
159
|
-
const re =
|
|
160
|
-
}), [xe, Ce] = V(480), se =
|
|
161
|
+
const re = h(null), y = h(null), z = h(null), oe = h(null), G = h(() => {
|
|
162
|
+
}), [xe, Ce] = V(480), se = h(0), [ie, ye] = V(0), [Ae, Re] = V(!1), [, q] = V(!0), Se = t === "sandbox", X = d === "blackboard", U = h(""), P = R.useMemo(() => {
|
|
161
163
|
const r = ke(e).filter((p) => p.type === "sandbox");
|
|
162
|
-
return (
|
|
164
|
+
return (d === "blackboard" ? r[r.length - 1]?.value || "" : r.map((p) => p.value).join(`
|
|
163
165
|
`)) || "";
|
|
164
|
-
}, [e,
|
|
166
|
+
}, [e, d]), c = R.useMemo(
|
|
165
167
|
() => Ke(
|
|
166
168
|
P,
|
|
167
169
|
F
|
|
@@ -178,7 +180,7 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
178
180
|
[le.hasFullViewportHeight, F]
|
|
179
181
|
), [k, W] = V(
|
|
180
182
|
c
|
|
181
|
-
), ae =
|
|
183
|
+
), ae = h(c), Y = h(c), M = h(null), I = h(null), Z = h(null), J = h(0), A = Ve((i) => {
|
|
182
184
|
if (typeof window > "u")
|
|
183
185
|
return;
|
|
184
186
|
const r = Date.now();
|
|
@@ -225,24 +227,24 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
225
227
|
W(Y.current), M.current = null;
|
|
226
228
|
}, $e);
|
|
227
229
|
}, [T, c]);
|
|
228
|
-
const
|
|
230
|
+
const he = R.useMemo(
|
|
229
231
|
() => pe(k).viewportHeightCss,
|
|
230
232
|
[k]
|
|
231
|
-
),
|
|
233
|
+
), de = !!he, N = X && t === "sandbox" ? ce ? "100%" : he ?? `${xe}px` : void 0;
|
|
232
234
|
C(() => {
|
|
233
|
-
if (
|
|
235
|
+
if (d !== "blackboard") {
|
|
234
236
|
U.current = c;
|
|
235
237
|
return;
|
|
236
238
|
}
|
|
237
239
|
const i = U.current;
|
|
238
240
|
!(i && c.startsWith(i)) && i && ye((g) => g + 1), U.current = c;
|
|
239
|
-
}, [
|
|
241
|
+
}, [d, c]), C(() => {
|
|
240
242
|
const i = y.current;
|
|
241
243
|
if (!i) return;
|
|
242
244
|
const r = i.contentDocument;
|
|
243
245
|
if (!r) return;
|
|
244
246
|
r.open(), r.write(`<!DOCTYPE html>
|
|
245
|
-
<html${
|
|
247
|
+
<html${d === "blackboard" ? ' style="height: 100%;"' : ""}>
|
|
246
248
|
<head>
|
|
247
249
|
<meta charset="utf-8" />
|
|
248
250
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
@@ -357,8 +359,8 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
357
359
|
fullScreenButtonText: m,
|
|
358
360
|
hideFullScreen: S,
|
|
359
361
|
resetToken: ie,
|
|
360
|
-
hasRootVhHeight:
|
|
361
|
-
mode:
|
|
362
|
+
hasRootVhHeight: de,
|
|
363
|
+
mode: d,
|
|
362
364
|
stretchRootHeight: ce
|
|
363
365
|
}
|
|
364
366
|
)
|
|
@@ -372,7 +374,7 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
372
374
|
l,
|
|
373
375
|
m,
|
|
374
376
|
ie,
|
|
375
|
-
|
|
377
|
+
d
|
|
376
378
|
]);
|
|
377
379
|
const Ie = [
|
|
378
380
|
"w-full relative content-render-iframe-sandbox",
|
|
@@ -382,7 +384,7 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
382
384
|
"div",
|
|
383
385
|
{
|
|
384
386
|
ref: re,
|
|
385
|
-
"data-root-vh":
|
|
387
|
+
"data-root-vh": de ? "true" : "false",
|
|
386
388
|
className: Ie,
|
|
387
389
|
style: N ? {
|
|
388
390
|
height: N,
|
|
@@ -398,7 +400,7 @@ const Le = /<img\b[^>]*>/i, $e = 180, je = 240, ze = /<img\b[^>]*\bsrc\s*=\s*["'
|
|
|
398
400
|
children: Ae ? "退出全屏" : m || "全屏浏览"
|
|
399
401
|
}
|
|
400
402
|
),
|
|
401
|
-
|
|
403
|
+
d === "blackboard" && t === "markdown" ? /* @__PURE__ */ w.jsx(
|
|
402
404
|
"div",
|
|
403
405
|
{
|
|
404
406
|
onMouseDown: () => A("mousedown"),
|