markdown-flow-ui 0.1.99-beta.1 → 0.1.99-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-YG6GDRKO.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-S3R3BYOJ.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-LVOFAZNH.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/mermaid@11.12.1/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/ref.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/ref.cjs.js.map +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/ref.es.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/index.cjs.js +1 -1
- package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/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.cjs10.js +1 -1
- package/dist/_virtual/index.cjs11.js +1 -1
- package/dist/_virtual/index.cjs12.js +1 -1
- package/dist/_virtual/index.cjs7.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.cjs9.js +1 -1
- package/dist/_virtual/index.es10.js +2 -3
- package/dist/_virtual/index.es10.js.map +1 -1
- package/dist/_virtual/index.es11.js +3 -2
- package/dist/_virtual/index.es11.js.map +1 -1
- package/dist/_virtual/index.es12.js +2 -2
- package/dist/_virtual/index.es7.js +3 -2
- package/dist/_virtual/index.es7.js.map +1 -1
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/_virtual/index.es9.js +2 -3
- package/dist/_virtual/index.es9.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
- package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
- package/dist/components/ContentRender/IframeSandbox.es.js +134 -134
- package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ import { setConfig2 as ke, getConfig2 as st, configureSvgSize as Pe, assignWithD
|
|
|
6
6
|
import { __name as f, log as Q } from "./chunk-AGHRB4JF.es.js";
|
|
7
7
|
import "../../../../../../d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.es.js";
|
|
8
8
|
import "../../../../../../d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.es.js";
|
|
9
|
-
import { d as ne } from "../../../../../../../../../../../_virtual/index.
|
|
9
|
+
import { d as ne } from "../../../../../../../../../../../_virtual/index.es7.js";
|
|
10
10
|
import Mt from "../../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/select.es.js";
|
|
11
11
|
var Ut = (function() {
|
|
12
12
|
var e = /* @__PURE__ */ f(function(pt, v, A, L) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),a=require("react"),i=require("../../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.cjs.js"),a=require("react"),i=require("../../../../../../../../../_virtual/index.cjs11.js"),v=require("./hooks/useMemo.cjs.js"),g=require("./React/isFragment.cjs.js");var y=Number(a.version.split(".")[0]),s=function(e,r){typeof e=="function"?e(r):R.default(e)==="object"&&e&&"current"in e&&(e.current=r)},p=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];var u=r.filter(Boolean);return u.length<=1?u[0]:function(o){r.forEach(function(n){s(n,o)})}},m=function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];return v.default(function(){return p.apply(void 0,r)},r,function(u,o){return u.length!==o.length||u.every(function(n,l){return n!==o[l]})})},d=function(e){var r,t;if(!e)return!1;if(c(e)&&y>=19)return!0;var u=i.reactIsExports.isMemo(e)?e.type.type:e.type;return!(typeof u=="function"&&!((r=u.prototype)!==null&&r!==void 0&&r.render)&&u.$$typeof!==i.reactIsExports.ForwardRef||typeof e=="function"&&!((t=e.prototype)!==null&&t!==void 0&&t.render)&&e.$$typeof!==i.reactIsExports.ForwardRef)};function c(f){return a.isValidElement(f)&&!g.default(f)}var E=function(e){if(e&&c(e)){var r=e;return r.props.propertyIsEnumerable("ref")?r.props.ref:r.ref}return null};exports.composeRef=p;exports.fillRef=s;exports.getNodeRef=E;exports.supportRef=d;exports.useComposeRef=m;
|
|
2
2
|
//# sourceMappingURL=ref.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.cjs.js","sources":["../../../../../../../../../../node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/ref.js"],"sourcesContent":["import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { isValidElement, version } from 'react';\nimport { ForwardRef, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nimport isFragment from \"./React/isFragment\";\nvar ReactMajorVersion = Number(version.split('.')[0]);\nexport var fillRef = function fillRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n};\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport var composeRef = function composeRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n var refList = refs.filter(Boolean);\n if (refList.length <= 1) {\n return refList[0];\n }\n return function (node) {\n refs.forEach(function (ref) {\n fillRef(ref, node);\n });\n };\n};\nexport var useComposeRef = function useComposeRef() {\n for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n refs[_key2] = arguments[_key2];\n }\n return useMemo(function () {\n return composeRef.apply(void 0, refs);\n }, refs, function (prev, next) {\n return prev.length !== next.length || prev.every(function (ref, i) {\n return ref !== next[i];\n });\n });\n};\nexport var supportRef = function supportRef(nodeOrComponent) {\n var _type$prototype, _nodeOrComponent$prot;\n if (!nodeOrComponent) {\n return false;\n }\n\n // React 19 no need `forwardRef` anymore. So just pass if is a React element.\n if (isReactElement(nodeOrComponent) && ReactMajorVersion >= 19) {\n return true;\n }\n var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n // Function component node\n if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render) && type.$$typeof !== ForwardRef) {\n return false;\n }\n\n // Class component\n if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render) && nodeOrComponent.$$typeof !== ForwardRef) {\n return false;\n }\n return true;\n};\nfunction isReactElement(node) {\n return /*#__PURE__*/isValidElement(node) && !isFragment(node);\n}\nexport var supportNodeRef = function supportNodeRef(node) {\n return isReactElement(node) && supportRef(node);\n};\n\n/**\n * In React 19. `ref` is not a property from node.\n * But a property from `props.ref`.\n * To check if `props.ref` exist or fallback to `ref`.\n */\nexport var getNodeRef = function getNodeRef(node) {\n if (node && isReactElement(node)) {\n var ele = node;\n\n // Source from:\n // https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/getReactNodeRef/getReactNodeRef.ts\n return ele.props.propertyIsEnumerable('ref') ? ele.props.ref : ele.ref;\n }\n return null;\n};"],"names":["ReactMajorVersion","version","fillRef","ref","node","_typeof","composeRef","_len","refs","_key","refList","useComposeRef","_len2","_key2","useMemo","prev","next","i","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","isReactElement","type","isMemo","ForwardRef","isValidElement","isFragment","getNodeRef","ele"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ref.cjs.js","sources":["../../../../../../../../../../node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/ref.js"],"sourcesContent":["import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { isValidElement, version } from 'react';\nimport { ForwardRef, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nimport isFragment from \"./React/isFragment\";\nvar ReactMajorVersion = Number(version.split('.')[0]);\nexport var fillRef = function fillRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n};\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport var composeRef = function composeRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n var refList = refs.filter(Boolean);\n if (refList.length <= 1) {\n return refList[0];\n }\n return function (node) {\n refs.forEach(function (ref) {\n fillRef(ref, node);\n });\n };\n};\nexport var useComposeRef = function useComposeRef() {\n for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n refs[_key2] = arguments[_key2];\n }\n return useMemo(function () {\n return composeRef.apply(void 0, refs);\n }, refs, function (prev, next) {\n return prev.length !== next.length || prev.every(function (ref, i) {\n return ref !== next[i];\n });\n });\n};\nexport var supportRef = function supportRef(nodeOrComponent) {\n var _type$prototype, _nodeOrComponent$prot;\n if (!nodeOrComponent) {\n return false;\n }\n\n // React 19 no need `forwardRef` anymore. So just pass if is a React element.\n if (isReactElement(nodeOrComponent) && ReactMajorVersion >= 19) {\n return true;\n }\n var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n // Function component node\n if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render) && type.$$typeof !== ForwardRef) {\n return false;\n }\n\n // Class component\n if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render) && nodeOrComponent.$$typeof !== ForwardRef) {\n return false;\n }\n return true;\n};\nfunction isReactElement(node) {\n return /*#__PURE__*/isValidElement(node) && !isFragment(node);\n}\nexport var supportNodeRef = function supportNodeRef(node) {\n return isReactElement(node) && supportRef(node);\n};\n\n/**\n * In React 19. `ref` is not a property from node.\n * But a property from `props.ref`.\n * To check if `props.ref` exist or fallback to `ref`.\n */\nexport var getNodeRef = function getNodeRef(node) {\n if (node && isReactElement(node)) {\n var ele = node;\n\n // Source from:\n // https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/getReactNodeRef/getReactNodeRef.ts\n return ele.props.propertyIsEnumerable('ref') ? ele.props.ref : ele.ref;\n }\n return null;\n};"],"names":["ReactMajorVersion","version","fillRef","ref","node","_typeof","composeRef","_len","refs","_key","refList","useComposeRef","_len2","_key2","useMemo","prev","next","i","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","isReactElement","type","isMemo","ForwardRef","isValidElement","isFragment","getNodeRef","ele"],"mappings":"yVAKA,IAAIA,EAAoB,OAAOC,EAAAA,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,EACzCC,EAAU,SAAiBC,EAAKC,EAAM,CAC3C,OAAOD,GAAQ,WACjBA,EAAIC,CAAI,EACCC,EAAAA,QAAQF,CAAG,IAAM,UAAYA,GAAO,YAAaA,IAC1DA,EAAI,QAAUC,EAElB,EAKWE,EAAa,UAAsB,CAC5C,QAASC,EAAO,UAAU,OAAQC,EAAO,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,CAAI,EAAI,UAAUA,CAAI,EAE7B,IAAIC,EAAUF,EAAK,OAAO,OAAO,EACjC,OAAIE,EAAQ,QAAU,EACbA,EAAQ,CAAC,EAEX,SAAUN,EAAM,CACrBI,EAAK,QAAQ,SAAUL,EAAK,CAC1BD,EAAQC,EAAKC,CAAI,CACnB,CAAC,CACH,CACF,EACWO,EAAgB,UAAyB,CAClD,QAASC,EAAQ,UAAU,OAAQJ,EAAO,IAAI,MAAMI,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFL,EAAKK,CAAK,EAAI,UAAUA,CAAK,EAE/B,OAAOC,EAAAA,QAAQ,UAAY,CACzB,OAAOR,EAAW,MAAM,OAAQE,CAAI,CACtC,EAAGA,EAAM,SAAUO,EAAMC,EAAM,CAC7B,OAAOD,EAAK,SAAWC,EAAK,QAAUD,EAAK,MAAM,SAAUZ,EAAKc,EAAG,CACjE,OAAOd,IAAQa,EAAKC,CAAC,CACvB,CAAC,CACH,CAAC,CACH,EACWC,EAAa,SAAoBC,EAAiB,CAC3D,IAAIC,EAAiBC,EACrB,GAAI,CAACF,EACH,MAAO,GAIT,GAAIG,EAAeH,CAAe,GAAKnB,GAAqB,GAC1D,MAAO,GAET,IAAIuB,EAAOC,EAAAA,eAAAA,OAAOL,CAAe,EAAIA,EAAgB,KAAK,KAAOA,EAAgB,KAQjF,MALI,SAAOI,GAAS,YAAc,GAAGH,EAAkBG,EAAK,aAAe,MAAQH,IAAoB,QAAUA,EAAgB,SAAWG,EAAK,WAAaE,6BAK1J,OAAON,GAAoB,YAAc,GAAGE,EAAwBF,EAAgB,aAAe,MAAQE,IAA0B,QAAUA,EAAsB,SAAWF,EAAgB,WAAaM,4BAInN,EACA,SAASH,EAAelB,EAAM,CAC5B,OAAoBsB,EAAAA,eAAetB,CAAI,GAAK,CAACuB,EAAAA,QAAWvB,CAAI,CAC9D,CAUU,IAACwB,EAAa,SAAoBxB,EAAM,CAChD,GAAIA,GAAQkB,EAAelB,CAAI,EAAG,CAChC,IAAIyB,EAAMzB,EAIV,OAAOyB,EAAI,MAAM,qBAAqB,KAAK,EAAIA,EAAI,MAAM,IAAMA,EAAI,GACrE,CACA,OAAO,IACT","x_google_ignoreList":[0]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import s from "../../../../@babel_runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/typeof.es.js";
|
|
2
2
|
import { version as c, isValidElement as l } from "react";
|
|
3
|
-
import { r as n } from "../../../../../../../../../_virtual/index.
|
|
3
|
+
import { r as n } from "../../../../../../../../../_virtual/index.es11.js";
|
|
4
4
|
import m from "./hooks/useMemo.es.js";
|
|
5
5
|
import v from "./React/isFragment.es.js";
|
|
6
6
|
var R = Number(c.split(".")[0]), y = function(r, t) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../../../../../_virtual/index.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../../../../../_virtual/index.cjs12.js"),t=require("./cjs/react-is.production.min.cjs.js"),o=require("./cjs/react-is.development.cjs.js");var r;function u(){return r||(r=1,process.env.NODE_ENV==="production"?e.__module.exports=t.__require():e.__module.exports=o.__require()),e.__module.exports}exports.__require=u;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __module as e } from "../../../../../../../../_virtual/index.
|
|
1
|
+
import { __module as e } from "../../../../../../../../_virtual/index.es12.js";
|
|
2
2
|
import { __require as o } from "./cjs/react-is.production.min.es.js";
|
|
3
3
|
import { __require as t } from "./cjs/react-is.development.es.js";
|
|
4
4
|
var r;
|
|
@@ -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.cjs9.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.es9.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.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={exports:{}};exports.__module=e;
|
|
2
2
|
//# sourceMappingURL=index.cjs10.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/index.cjs.js");var r=e.__require();exports.reactIsExports=r;
|
|
2
2
|
//# sourceMappingURL=index.cjs11.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={};exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={exports:{}};exports.__module=e;
|
|
2
2
|
//# sourceMappingURL=index.cjs12.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.cjs.js");var r=e.__require();exports.distExports=r;
|
|
2
2
|
//# sourceMappingURL=index.cjs7.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={};exports.__exports=e;
|
|
2
2
|
//# sourceMappingURL=index.cjs8.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var e={};exports.__exports=e;
|
|
2
2
|
//# sourceMappingURL=index.cjs9.js.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
var i = r();
|
|
1
|
+
var s = { exports: {} };
|
|
3
2
|
export {
|
|
4
|
-
|
|
3
|
+
s as __module
|
|
5
4
|
};
|
|
6
5
|
//# sourceMappingURL=index.es10.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es10.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es10.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es11.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es11.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { __require as r } from "../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/@braintree_sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.es.js";
|
|
2
|
+
var i = r();
|
|
2
3
|
export {
|
|
3
|
-
|
|
4
|
+
i as d
|
|
4
5
|
};
|
|
5
6
|
//# 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es9.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.es9.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const C=require("../../_virtual/jsx-runtime.cjs.js"),n=require("react"),
|
|
2
|
-
`))||""},[
|
|
3
|
-
<html${
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const C=require("../../_virtual/jsx-runtime.cjs.js"),n=require("react"),ie=require("react-dom/client"),ce=require("./SandboxApp.cjs.js"),le=require("./utils/split-content.cjs.js"),ue=require("./ContentRender.cjs.js"),ae=()=>Promise.resolve().then(()=>require("./blackboard-vendor.cjs.js")).then(i=>i.injectBlackboardLibraries),he=/<img\b[^>]*>/i,de=180,fe="markdown-flow-ui:sandbox",me="interaction",pe=240,J=i=>i.split(/\s+/).filter(Boolean).map(o=>o.split(":").pop()||o),Y=i=>{const o=i.trim().toLowerCase();if(!o)return null;const m=o.match(/^([0-9.]+)(vh|dvh|svh|lvh)$/i);return m?`${m[1]}${m[2].toLowerCase()}`:null},Z=i=>{if(!i.trim())return null;const o=J(i);if(o.includes("h-screen")||o.includes("h-dvh"))return"100dvh";if(o.includes("h-svh"))return"100svh";if(o.includes("h-lvh"))return"100lvh";const m=o.find(y=>/^h-\[[0-9.]+(vh|dvh|svh|lvh)\]$/i.test(y));if(!m)return null;const v=m.match(/^h-\[([0-9.]+)(vh|dvh|svh|lvh)\]$/i);return v?`${v[1]}${v[2].toLowerCase()}`:null},ge=({content:i,type:o,className:m,loadingText:v,styleLoadingText:y,scriptLoadingText:q,fullScreenButtonText:M,hideFullScreen:z=!1,mode:f="content"})=>{const F=n.useRef(null),w=n.useRef(null),k=n.useRef(null),$=n.useRef(null),N=n.useRef(()=>{}),[,K]=n.useState(480),[L,Q]=n.useState(0),[ee,te]=n.useState(!1),P=f==="blackboard",_=n.useRef(""),r=n.useMemo(()=>{const e=le.splitContentSegments(i).filter(a=>a.type==="sandbox");return(f==="blackboard"?e[e.length-1]?.value||"":e.map(a=>a.value).join(`
|
|
2
|
+
`))||""},[i,f]),[H,V]=n.useState(r),G=n.useRef(r),j=n.useRef(r),x=n.useRef(null),I=()=>{x.current!==null&&(window.clearTimeout(x.current),x.current=null)};n.useEffect(()=>()=>{I()},[]),n.useEffect(()=>{const t=G.current;G.current=r;const e=!!t&&r.length>t.length&&r.startsWith(t),l=he.test(r);if(!(e&&l)){I(),j.current=r,V(r);return}j.current=r,I(),x.current=window.setTimeout(()=>{V(j.current),x.current=null},de)},[r]);const U=!!n.useMemo(()=>{const t=H.trim();if(!t)return null;const e=t.match(/^<([a-zA-Z][\w:-]*)(\s[^>]*?)?>/);if(!e)return null;const l=e[2]||"",a=l.match(/\bheight\s*=\s*["']([^"']+)["']/i);if(a){const h=Y(a[1]);if(h)return h}const R=l.match(/\bstyle\s*=\s*["']([^"']+)["']/i)?.[1]?.match(/\bheight\s*:\s*([^;]+)/i)?.[1];if(R){const h=Y(R);if(h)return h}const E=l.match(/\bclass\s*=\s*["']([^"']+)["']/i)?.[1];return E?Z(E):null},[H]);n.useEffect(()=>{if(f!=="blackboard"){_.current=r;return}const t=_.current;!(t&&r.startsWith(t))&&t&&Q(l=>l+1),_.current=r},[r,f]),n.useEffect(()=>{const t=w.current;if(!t)return;const e=t.contentDocument;if(!e)return;e.open(),e.write(`<!DOCTYPE html>
|
|
3
|
+
<html${f==="blackboard"?' style="height: 100%;"':""}>
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
@@ -13,5 +13,5 @@
|
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
|
15
15
|
</body>
|
|
16
|
-
</html>`),e.close(),$.current=e;let l=0;const
|
|
16
|
+
</html>`),e.close(),$.current=e;let l=0;const a=c=>{if(typeof window>"u")return;const u=Date.now();u-l<pe||(l=u,window.postMessage({source:fe,type:me,eventType:c},window.location.origin))},O=P&&o==="sandbox",R=()=>a("pointerdown"),E=()=>a("touchstart");O&&(e.addEventListener("pointerdown",R,!0),e.addEventListener("touchstart",E,!0));const h=e.getElementById("root");if(!h)return;const W=ie.createRoot(h);k.current=W;let T=!1;const X=(c,u)=>{const s=c.trim().toLowerCase();if(!s)return null;const d=Number.parseFloat(s);return Number.isNaN(d)?null:/(dvh|svh|lvh|vh)$/i.test(s)?d/100*u:s.endsWith("px")||/^[0-9.]+$/.test(s)?d:null},oe=(c,u)=>{if(!c.trim())return null;const s=Z(c);if(s)return X(s,u);const p=J(c).find(A=>/^h-\[[0-9.]+px\]$/i.test(A));if(!p)return null;const g=p.match(/^h-\[([0-9.]+)px\]$/i);if(!g)return null;const b=Number.parseFloat(g[1]);return Number.isNaN(b)?null:b},se=()=>{if(!w.current||!e.body)return null;const u=e.body.querySelector(".sandbox-wrapper")?.firstElementChild;if(!u)return null;const s=Array.from(u.children);if(s.length!==1)return null;const d=s[0],p=d.style.height||d.getAttribute("height"),g=w.current.ownerDocument?.documentElement?.clientHeight||window.innerHeight,b=p?X(p,g):null;if(b!==null)return Math.ceil(b);const A=oe(d.getAttribute("class")||"",g);return A!==null?Math.ceil(A):null},B=()=>{if(!w.current||!e.body)return;const c=e.body.getBoundingClientRect(),u=e.documentElement?.getBoundingClientRect(),s=c.height,d=u?.height||0,p=Math.max(s,d),g=se(),b=Math.max(200,g??Math.ceil(p));K(b)},S=()=>{requestAnimationFrame(()=>{T||B()})};N.current=S,B(),S(),ae().then(c=>{T||(c(e),S())}).catch(()=>{T||S()});const D=new ResizeObserver(()=>B());return D.observe(e.body),h&&D.observe(h),()=>{T=!0,D.disconnect(),O&&(e.removeEventListener("pointerdown",R,!0),e.removeEventListener("touchstart",E,!0)),setTimeout(()=>{W.unmount(),k.current=null,$.current=null,N.current=()=>{}},0)}},[]),n.useEffect(()=>{const t=()=>{te(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",t),()=>document.removeEventListener("fullscreenchange",t)},[]);const ne=()=>{const t=F.current||w.current;if(t){if(document.fullscreenElement){document.exitFullscreen().catch(()=>{});return}t.requestFullscreen&&t.requestFullscreen().catch(()=>{})}};n.useEffect(()=>{const t=k.current;t&&(t.render(C.jsxRuntimeExports.jsx(ce.default,{html:H,loadingText:v,styleLoadingText:y,scriptLoadingText:q,fullScreenButtonText:M,hideFullScreen:z,resetToken:L,hasRootVhHeight:U,mode:f})),requestAnimationFrame(()=>N.current?.()))},[H,v,y,q,M,L,f]);const re=["w-full relative content-render-iframe-sandbox",P?"h-full overflow-auto flex flex-col":"aspect-[16/9] overflow-hidden flex items-center justify-center"].filter(Boolean).join(" ");return C.jsxRuntimeExports.jsxs("div",{ref:F,"data-root-vh":U?"true":"false",className:re,children:[!z&&C.jsxRuntimeExports.jsx("button",{type:"button",onClick:ne,className:"absolute top-2 right-2 z-50 p-1.5 bg-black/75 text-white rounded-md cursor-pointer",children:ee?"退出全屏":M||"全屏浏览"}),f==="blackboard"&&o==="markdown"?C.jsxRuntimeExports.jsx(ue.default,{content:i}):C.jsxRuntimeExports.jsx("iframe",{ref:w,sandbox:"allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox",allow:"fullscreen",allowFullScreen:!0,className:[m,"w-full h-full mx-auto my-auto block"].filter(Boolean).join(" "),style:{height:"100%",margin:"auto"}})]})};exports.default=ge;
|
|
17
17
|
//# sourceMappingURL=IframeSandbox.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeSandbox.cjs.js","sources":["../../../src/components/ContentRender/IframeSandbox.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport SandboxApp from \"./SandboxApp\";\nimport { splitContentSegments } from \"./utils/split-content\";\nimport ContentRender from \"./ContentRender\";\n// Lazy-load iframe vendor libraries and inject them into the sandbox document.\nconst loadBlackboardVendor = () =>\n import(\"./blackboard-vendor\").then((m) => m.injectBlackboardLibraries);\n\nconst COMPLETE_IMAGE_TAG_PATTERN = /<img\\b[^>]*>/i;\nconst POST_IMAGE_STREAM_DEBOUNCE_MS = 180;\nconst SANDBOX_INTERACTION_MESSAGE_SOURCE = \"markdown-flow-ui:sandbox\";\nconst SANDBOX_INTERACTION_MESSAGE_TYPE = \"interaction\";\nconst SANDBOX_INTERACTION_THROTTLE_MS = 240;\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}\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 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}) => {\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 [, setHeight] = useState(480);\n const [resetToken, setResetToken] = useState(0);\n const [isFullscreen, setIsFullscreen] = useState(false);\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 [renderHtmlContent, setRenderHtmlContent] = useState(htmlContent);\n const prevIncomingHtmlRef = useRef(htmlContent);\n const pendingHtmlRef = useRef(htmlContent);\n const deferRenderTimerRef = useRef<number | null>(null);\n\n const clearDeferredRenderTimer = () => {\n if (deferRenderTimerRef.current === null) return;\n window.clearTimeout(deferRenderTimerRef.current);\n deferRenderTimerRef.current = null;\n };\n\n useEffect(\n () => () => {\n clearDeferredRenderTimer();\n },\n []\n );\n\n useEffect(() => {\n const prevIncomingHtml = prevIncomingHtmlRef.current;\n prevIncomingHtmlRef.current = htmlContent;\n\n const isAppendOnlyStream =\n !!prevIncomingHtml &&\n htmlContent.length > prevIncomingHtml.length &&\n htmlContent.startsWith(prevIncomingHtml);\n const containsCompleteImage = COMPLETE_IMAGE_TAG_PATTERN.test(htmlContent);\n const shouldDeferRender = isAppendOnlyStream && containsCompleteImage;\n\n if (!shouldDeferRender) {\n clearDeferredRenderTimer();\n pendingHtmlRef.current = htmlContent;\n setRenderHtmlContent(htmlContent);\n return;\n }\n\n pendingHtmlRef.current = htmlContent;\n clearDeferredRenderTimer();\n deferRenderTimerRef.current = window.setTimeout(() => {\n setRenderHtmlContent(pendingHtmlRef.current);\n deferRenderTimerRef.current = null;\n }, POST_IMAGE_STREAM_DEBOUNCE_MS);\n }, [htmlContent]);\n\n const rootViewportHeightCss = React.useMemo(() => {\n const normalized = renderHtmlContent.trim();\n if (!normalized) return null;\n const rootMatch = normalized.match(/^<([a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/);\n if (!rootMatch) return null;\n const attrs = rootMatch[2] || \"\";\n const heightAttrMatch = attrs.match(/\\bheight\\s*=\\s*[\"']([^\"']+)[\"']/i);\n if (heightAttrMatch) {\n const explicitHeightCss = parseViewportHeightCss(heightAttrMatch[1]);\n if (explicitHeightCss) return explicitHeightCss;\n }\n const styleAttrMatch = attrs.match(/\\bstyle\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleHeightMatch = styleAttrMatch?.match(\n /\\bheight\\s*:\\s*([^;]+)/i\n )?.[1];\n if (styleHeightMatch) {\n const styleHeightCss = parseViewportHeightCss(styleHeightMatch);\n if (styleHeightCss) return styleHeightCss;\n }\n const classAttrMatch = attrs.match(/\\bclass\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n if (!classAttrMatch) return null;\n return extractViewportHeightFromTailwindClass(classAttrMatch);\n }, [renderHtmlContent]);\n const hasRootVhHeight = Boolean(rootViewportHeightCss);\n useEffect(() => {\n if (mode !== \"blackboard\") {\n prevHtmlRef.current = htmlContent;\n return;\n }\n const prev = prevHtmlRef.current;\n const isContinuation = prev && htmlContent.startsWith(prev);\n if (!isContinuation && prev) {\n setResetToken((token) => token + 1);\n }\n prevHtmlRef.current = htmlContent;\n }, [htmlContent, mode]);\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 let lastSandboxInteractionTime = 0;\n const notifySandboxInteraction = (eventType: string) => {\n if (typeof window === \"undefined\") {\n return;\n }\n const now = Date.now();\n if (\n eventType === SANDBOX_INTERACTION_MESSAGE_TYPE &&\n now - lastSandboxInteractionTime < SANDBOX_INTERACTION_THROTTLE_MS\n ) {\n return;\n }\n if (\n eventType === \"wheel\" &&\n now - lastSandboxInteractionTime < SANDBOX_INTERACTION_THROTTLE_MS\n ) {\n return;\n }\n lastSandboxInteractionTime = 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 sandboxWindow = iframe.contentWindow;\n const shouldBridgeSandboxInteraction = isBlackboardMode && type === \"sandbox\";\n const handleSandboxPointerDown = () => notifySandboxInteraction(\"pointerdown\");\n const handleSandboxTouchStart = () => notifySandboxInteraction(\"touchstart\");\n const handleSandboxWheel = () => notifySandboxInteraction(\"wheel\");\n const handleSandboxKeydown = () => notifySandboxInteraction(\"keydown\");\n\n if (shouldBridgeSandboxInteraction && sandboxWindow) {\n doc.addEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.addEventListener(\"touchstart\", handleSandboxTouchStart, true);\n doc.addEventListener(\"wheel\", handleSandboxWheel, { passive: true });\n sandboxWindow.addEventListener(\"keydown\", handleSandboxKeydown, 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 wrapper = doc.body.querySelector(\n \".sandbox-wrapper\"\n ) as HTMLElement | null;\n const container = wrapper?.firstElementChild as HTMLElement | null;\n if (!container) return null;\n const elements = Array.from(container.children) as HTMLElement[];\n if (elements.length !== 1) return null;\n const target = elements[0];\n const heightValue = target.style.height || target.getAttribute(\"height\");\n const parentViewportHeight =\n iframeRef.current.ownerDocument?.documentElement?.clientHeight ||\n window.innerHeight;\n const parsed = heightValue\n ? parseExplicitHeight(heightValue, parentViewportHeight)\n : null;\n if (parsed !== null) {\n return Math.ceil(parsed);\n }\n const classHeight = parseTailwindHeightClass(\n target.getAttribute(\"class\") || \"\",\n parentViewportHeight\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 // Inject Tailwind/DaisyUI/GSAP into iframe for all sandbox modes.\n // Dynamic import keeps ~3.3 MB of vendor libs out of the main bundle.\n // Tailwind's MutationObserver ensures styles apply even if content renders first.\n loadBlackboardVendor()\n .then((inject) => {\n if (isDestroyed) return;\n inject(doc);\n scheduleHeightUpdate();\n })\n .catch(() => {\n if (isDestroyed) return;\n scheduleHeightUpdate();\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 && sandboxWindow) {\n doc.removeEventListener(\"pointerdown\", handleSandboxPointerDown, true);\n doc.removeEventListener(\"touchstart\", handleSandboxTouchStart, true);\n doc.removeEventListener(\"wheel\", handleSandboxWheel);\n sandboxWindow.removeEventListener(\"keydown\", handleSandboxKeydown, 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 />\n );\n requestAnimationFrame(() => updateHeightRef.current?.());\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 return (\n <div\n ref={containerRef}\n data-root-vh={hasRootVhHeight ? \"true\" : \"false\"}\n className={containerClassName}\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 <ContentRender content={content} />\n ) : (\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: \"100%\",\n margin: \"auto\",\n }}\n />\n )}\n </div>\n );\n};\n\nexport default IframeSandbox;\n"],"names":["loadBlackboardVendor","m","COMPLETE_IMAGE_TAG_PATTERN","POST_IMAGE_STREAM_DEBOUNCE_MS","SANDBOX_INTERACTION_MESSAGE_SOURCE","SANDBOX_INTERACTION_MESSAGE_TYPE","SANDBOX_INTERACTION_THROTTLE_MS","normalizeTailwindHeightTokens","className","token","parseViewportHeightCss","value","normalized","matched","extractViewportHeightFromTailwindClass","normalizedTokens","arbitraryToken","IframeSandbox","content","type","loadingText","styleLoadingText","scriptLoadingText","fullScreenButtonText","hideFullScreen","mode","containerRef","useRef","iframeRef","rootRef","docRef","updateHeightRef","setHeight","useState","resetToken","setResetToken","isFullscreen","setIsFullscreen","isBlackboardMode","prevHtmlRef","htmlContent","React","sandboxSegments","splitContentSegments","seg","renderHtmlContent","setRenderHtmlContent","prevIncomingHtmlRef","pendingHtmlRef","deferRenderTimerRef","clearDeferredRenderTimer","useEffect","prevIncomingHtml","isAppendOnlyStream","containsCompleteImage","hasRootVhHeight","rootMatch","attrs","heightAttrMatch","explicitHeightCss","styleHeightMatch","styleHeightCss","classAttrMatch","prev","iframe","doc","lastSandboxInteractionTime","notifySandboxInteraction","eventType","now","sandboxWindow","shouldBridgeSandboxInteraction","handleSandboxPointerDown","handleSandboxTouchStart","handleSandboxWheel","handleSandboxKeydown","rootEl","root","createRoot","isDestroyed","parseExplicitHeight","parentViewportHeight","numeric","parseTailwindHeightClass","viewportHeightCss","resolveExplicitHeight","container","elements","target","heightValue","parsed","classHeight","updateHeight","bodyRect","htmlRect","bodyHeight","htmlHeight","contentHeight","explicitHeight","nextHeight","scheduleHeightUpdate","inject","resizeObserver","onFullscreenChange","toggleFullscreen","jsx","SandboxApp","containerClassName","jsxs","ContentRender"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IframeSandbox.cjs.js","sources":["../../../src/components/ContentRender/IframeSandbox.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport SandboxApp from \"./SandboxApp\";\nimport { splitContentSegments } from \"./utils/split-content\";\nimport ContentRender from \"./ContentRender\";\n// Lazy-load iframe vendor libraries and inject them into the sandbox document.\nconst loadBlackboardVendor = () =>\n import(\"./blackboard-vendor\").then((m) => m.injectBlackboardLibraries);\n\nconst COMPLETE_IMAGE_TAG_PATTERN = /<img\\b[^>]*>/i;\nconst POST_IMAGE_STREAM_DEBOUNCE_MS = 180;\nconst SANDBOX_INTERACTION_MESSAGE_SOURCE = \"markdown-flow-ui:sandbox\";\nconst SANDBOX_INTERACTION_MESSAGE_TYPE = \"interaction\";\nconst SANDBOX_INTERACTION_THROTTLE_MS = 240;\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}\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 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}) => {\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 [, setHeight] = useState(480);\n const [resetToken, setResetToken] = useState(0);\n const [isFullscreen, setIsFullscreen] = useState(false);\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 [renderHtmlContent, setRenderHtmlContent] = useState(htmlContent);\n const prevIncomingHtmlRef = useRef(htmlContent);\n const pendingHtmlRef = useRef(htmlContent);\n const deferRenderTimerRef = useRef<number | null>(null);\n\n const clearDeferredRenderTimer = () => {\n if (deferRenderTimerRef.current === null) return;\n window.clearTimeout(deferRenderTimerRef.current);\n deferRenderTimerRef.current = null;\n };\n\n useEffect(\n () => () => {\n clearDeferredRenderTimer();\n },\n []\n );\n\n useEffect(() => {\n const prevIncomingHtml = prevIncomingHtmlRef.current;\n prevIncomingHtmlRef.current = htmlContent;\n\n const isAppendOnlyStream =\n !!prevIncomingHtml &&\n htmlContent.length > prevIncomingHtml.length &&\n htmlContent.startsWith(prevIncomingHtml);\n const containsCompleteImage = COMPLETE_IMAGE_TAG_PATTERN.test(htmlContent);\n const shouldDeferRender = isAppendOnlyStream && containsCompleteImage;\n\n if (!shouldDeferRender) {\n clearDeferredRenderTimer();\n pendingHtmlRef.current = htmlContent;\n setRenderHtmlContent(htmlContent);\n return;\n }\n\n pendingHtmlRef.current = htmlContent;\n clearDeferredRenderTimer();\n deferRenderTimerRef.current = window.setTimeout(() => {\n setRenderHtmlContent(pendingHtmlRef.current);\n deferRenderTimerRef.current = null;\n }, POST_IMAGE_STREAM_DEBOUNCE_MS);\n }, [htmlContent]);\n\n const rootViewportHeightCss = React.useMemo(() => {\n const normalized = renderHtmlContent.trim();\n if (!normalized) return null;\n const rootMatch = normalized.match(/^<([a-zA-Z][\\w:-]*)(\\s[^>]*?)?>/);\n if (!rootMatch) return null;\n const attrs = rootMatch[2] || \"\";\n const heightAttrMatch = attrs.match(/\\bheight\\s*=\\s*[\"']([^\"']+)[\"']/i);\n if (heightAttrMatch) {\n const explicitHeightCss = parseViewportHeightCss(heightAttrMatch[1]);\n if (explicitHeightCss) return explicitHeightCss;\n }\n const styleAttrMatch = attrs.match(/\\bstyle\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n const styleHeightMatch = styleAttrMatch?.match(\n /\\bheight\\s*:\\s*([^;]+)/i\n )?.[1];\n if (styleHeightMatch) {\n const styleHeightCss = parseViewportHeightCss(styleHeightMatch);\n if (styleHeightCss) return styleHeightCss;\n }\n const classAttrMatch = attrs.match(/\\bclass\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1];\n if (!classAttrMatch) return null;\n return extractViewportHeightFromTailwindClass(classAttrMatch);\n }, [renderHtmlContent]);\n const hasRootVhHeight = Boolean(rootViewportHeightCss);\n useEffect(() => {\n if (mode !== \"blackboard\") {\n prevHtmlRef.current = htmlContent;\n return;\n }\n const prev = prevHtmlRef.current;\n const isContinuation = prev && htmlContent.startsWith(prev);\n if (!isContinuation && prev) {\n setResetToken((token) => token + 1);\n }\n prevHtmlRef.current = htmlContent;\n }, [htmlContent, mode]);\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 let lastSandboxInteractionTime = 0;\n const notifySandboxInteraction = (eventType: string) => {\n if (typeof window === \"undefined\") {\n return;\n }\n const now = Date.now();\n if (now - lastSandboxInteractionTime < SANDBOX_INTERACTION_THROTTLE_MS) {\n return;\n }\n lastSandboxInteractionTime = 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 shouldBridgeSandboxInteraction =\n isBlackboardMode && type === \"sandbox\";\n const handleSandboxPointerDown = () =>\n notifySandboxInteraction(\"pointerdown\");\n const handleSandboxTouchStart = () =>\n notifySandboxInteraction(\"touchstart\");\n\n if (shouldBridgeSandboxInteraction) {\n doc.addEventListener(\"pointerdown\", handleSandboxPointerDown, 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 wrapper = doc.body.querySelector(\n \".sandbox-wrapper\"\n ) as HTMLElement | null;\n const container = wrapper?.firstElementChild as HTMLElement | null;\n if (!container) return null;\n const elements = Array.from(container.children) as HTMLElement[];\n if (elements.length !== 1) return null;\n const target = elements[0];\n const heightValue = target.style.height || target.getAttribute(\"height\");\n const parentViewportHeight =\n iframeRef.current.ownerDocument?.documentElement?.clientHeight ||\n window.innerHeight;\n const parsed = heightValue\n ? parseExplicitHeight(heightValue, parentViewportHeight)\n : null;\n if (parsed !== null) {\n return Math.ceil(parsed);\n }\n const classHeight = parseTailwindHeightClass(\n target.getAttribute(\"class\") || \"\",\n parentViewportHeight\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 // Inject Tailwind/DaisyUI/GSAP into iframe for all sandbox modes.\n // Dynamic import keeps ~3.3 MB of vendor libs out of the main bundle.\n // Tailwind's MutationObserver ensures styles apply even if content renders first.\n loadBlackboardVendor()\n .then((inject) => {\n if (isDestroyed) return;\n inject(doc);\n scheduleHeightUpdate();\n })\n .catch(() => {\n if (isDestroyed) return;\n scheduleHeightUpdate();\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(\"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 />\n );\n requestAnimationFrame(() => updateHeightRef.current?.());\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 return (\n <div\n ref={containerRef}\n data-root-vh={hasRootVhHeight ? \"true\" : \"false\"}\n className={containerClassName}\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 <ContentRender content={content} />\n ) : (\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: \"100%\",\n margin: \"auto\",\n }}\n />\n )}\n </div>\n );\n};\n\nexport default IframeSandbox;\n"],"names":["loadBlackboardVendor","m","COMPLETE_IMAGE_TAG_PATTERN","POST_IMAGE_STREAM_DEBOUNCE_MS","SANDBOX_INTERACTION_MESSAGE_SOURCE","SANDBOX_INTERACTION_MESSAGE_TYPE","SANDBOX_INTERACTION_THROTTLE_MS","normalizeTailwindHeightTokens","className","token","parseViewportHeightCss","value","normalized","matched","extractViewportHeightFromTailwindClass","normalizedTokens","arbitraryToken","IframeSandbox","content","type","loadingText","styleLoadingText","scriptLoadingText","fullScreenButtonText","hideFullScreen","mode","containerRef","useRef","iframeRef","rootRef","docRef","updateHeightRef","setHeight","useState","resetToken","setResetToken","isFullscreen","setIsFullscreen","isBlackboardMode","prevHtmlRef","htmlContent","React","sandboxSegments","splitContentSegments","seg","renderHtmlContent","setRenderHtmlContent","prevIncomingHtmlRef","pendingHtmlRef","deferRenderTimerRef","clearDeferredRenderTimer","useEffect","prevIncomingHtml","isAppendOnlyStream","containsCompleteImage","hasRootVhHeight","rootMatch","attrs","heightAttrMatch","explicitHeightCss","styleHeightMatch","styleHeightCss","classAttrMatch","prev","iframe","doc","lastSandboxInteractionTime","notifySandboxInteraction","eventType","now","shouldBridgeSandboxInteraction","handleSandboxPointerDown","handleSandboxTouchStart","rootEl","root","createRoot","isDestroyed","parseExplicitHeight","parentViewportHeight","numeric","parseTailwindHeightClass","viewportHeightCss","resolveExplicitHeight","container","elements","target","heightValue","parsed","classHeight","updateHeight","bodyRect","htmlRect","bodyHeight","htmlHeight","contentHeight","explicitHeight","nextHeight","scheduleHeightUpdate","inject","resizeObserver","onFullscreenChange","toggleFullscreen","jsx","SandboxApp","containerClassName","jsxs","ContentRender"],"mappings":"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"}
|