koboyo 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +26 -0
  2. package/assets/editor/assets/ContextMenuTrigger-CXUL1E23.js +1 -0
  3. package/assets/editor/assets/{IconHelp-CaEwHrsN.js → IconHelp-4FIVl1rh.js} +2 -2
  4. package/assets/editor/assets/IconReplace-CYUD1RLF.js +1 -0
  5. package/assets/editor/assets/MenuSubmenuTrigger-BFlIkXYg.js +1 -0
  6. package/assets/editor/assets/{PopoverPopup-B3Y0VRYc.js → PopoverPopup-1zO38CRl.js} +1 -1
  7. package/assets/editor/assets/asset-glyph-DjBHkQcP.js +1 -0
  8. package/assets/editor/assets/build-pips-BRf3pMnt.js +1 -0
  9. package/assets/editor/assets/build-visibility-CAmmsnmF.js +1 -0
  10. package/assets/editor/assets/builders-DrWdKwLQ.js +1 -0
  11. package/assets/editor/assets/{chart-4iRduYdU.js → chart-CKIxcbcM.js} +4 -4
  12. package/assets/editor/assets/{chrome-layout-BzPU9far.js → chrome-layout-D5dql-y4.js} +1 -1
  13. package/assets/editor/assets/code-panel-BFikzGNv.js +18 -0
  14. package/assets/editor/assets/color-swatches-CZKb4DxX.js +1 -0
  15. package/assets/editor/assets/{command-palette-BR-_ChOL.js → command-palette-Uat68wmJ.js} +1 -1
  16. package/assets/editor/assets/connector-labels-DqVssnYz.js +2 -0
  17. package/assets/editor/assets/{copy-image-dialog-BzGP7Xw8.js → copy-image-dialog-C0fXdR1a.js} +1 -1
  18. package/assets/editor/assets/core-C1TxysMz.js +1 -0
  19. package/assets/editor/assets/diagram-fingerprint-B-HB8UbR.js +3 -0
  20. package/assets/editor/assets/{edit-C0sBxxsg.js → edit-B4DMFSZr.js} +1 -1
  21. package/assets/editor/assets/editor-DAJETlQW.js +1 -0
  22. package/assets/editor/assets/{elk-worker-loader-CVBdN1je.js → elk-worker-loader-BCdkmVMX.js} +1 -1
  23. package/assets/editor/assets/embed-input-D77Udvni.js +1 -0
  24. package/assets/editor/assets/export-FQTXirjn.js +2 -0
  25. package/assets/editor/assets/{export-dialog-x2n2a4KX.js → export-dialog-KYLeNY3G.js} +1 -1
  26. package/assets/editor/assets/export-u442sUQs.js +6 -0
  27. package/assets/editor/assets/flow-layer-B4Q8rktl.js +1 -0
  28. package/assets/editor/assets/flow-panel-DbnavW4w.js +1 -0
  29. package/assets/editor/assets/flow-stage-CSTrNMZF.js +1 -0
  30. package/assets/editor/assets/{flow-start-CpAvU-9P.js → flow-start-ByhFxEeV.js} +1 -1
  31. package/assets/editor/assets/{flows-Cj7AFMIA.js → flows-CGl4r-xb.js} +1 -1
  32. package/assets/editor/assets/{frames-Cp1QD3LR.js → frames-DRSLvE9E.js} +1 -1
  33. package/assets/editor/assets/generate-DHP90nDk.js +26 -0
  34. package/assets/editor/assets/{icon-picker-Cg39IKNJ.js → icon-picker-DIkw2xYL.js} +1 -1
  35. package/assets/editor/assets/{image-library-JQu_tb8P.js → image-library-BmoSPV9c.js} +1 -1
  36. package/assets/editor/assets/index-DFwoT1_W.js +25 -0
  37. package/assets/editor/assets/layout-offthread-JPTCbsLL.js +18 -0
  38. package/assets/editor/assets/menu-4xb5HtA1.js +1 -0
  39. package/assets/editor/assets/mermaid-paste-2cCwweY0.js +1 -0
  40. package/assets/editor/assets/panel-controls-B0Ccd0XF.js +1 -0
  41. package/assets/editor/assets/{panel-shell-BnMOHgWM.js → panel-shell-COqmheb-.js} +1 -1
  42. package/assets/editor/assets/plan-D4Jyzo5X.js +1 -0
  43. package/assets/editor/assets/presentation-DNmdm11D.js +1 -0
  44. package/assets/editor/assets/{presenter-keys-Bs3LnmOa.js → presenter-keys-DLNIsrm5.js} +1 -1
  45. package/assets/editor/assets/reflow-C6bvnSVm.js +1 -0
  46. package/assets/editor/assets/registry-d5KleeyB.js +1 -0
  47. package/assets/editor/assets/rich-paste-route-Bx69sREx.js +1 -0
  48. package/assets/editor/assets/ride-overlay-C1TrM7Ki.js +1 -0
  49. package/assets/editor/assets/selection-overlay-primitives-CfOaP5_G.js +1 -0
  50. package/assets/editor/assets/shape-meta-YgfIm0bQ.js +1 -0
  51. package/assets/editor/assets/shape-render-DZscezZk.js +1 -0
  52. package/assets/editor/assets/shapes-D5w8NTQQ.js +11 -0
  53. package/assets/editor/assets/{slide-notes-dialog-BQBXpep6.js → slide-notes-dialog-43EMJFJV.js} +1 -1
  54. package/assets/editor/assets/slides-DDNzjFz9.js +5 -0
  55. package/assets/editor/assets/slides-panel-DANnu_nw.js +26 -0
  56. package/assets/editor/assets/text-breaks-DhCXtQrJ.js +7 -0
  57. package/assets/editor/assets/{theme-palette-Dl_G_VIJ.js → theme-palette-DEq19D0h.js} +1 -1
  58. package/assets/editor/assets/tidy-browser-BdlwTfCT.js +1 -0
  59. package/assets/editor/assets/tidy-scope-REEad7oC.js +1 -0
  60. package/assets/editor/assets/{tool-catalog-DXPhX2S1.js → tool-catalog-CIjdZm_C.js} +1 -1
  61. package/assets/editor/assets/{tool-drawer-CWOX_njp.js → tool-drawer-B-Ys7Rsn.js} +1 -1
  62. package/assets/editor/assets/{tooltip-CyBz17g8.js → tooltip-CKCG8vcp.js} +1 -1
  63. package/assets/editor/assets/tree-BWJsAqkV.js +1 -0
  64. package/assets/editor/assets/use-export-command-BR-A4kAa.js +2 -0
  65. package/assets/editor/assets/{use-grid-keyboard-nav-DhQKecO1.js → use-grid-keyboard-nav-B0jjlh8Q.js} +0 -0
  66. package/assets/editor/assets/{use-icon-node-BxqH7H27.js → use-icon-node-uhKPP4Ki.js} +1 -1
  67. package/assets/editor/assets/{use-key-held-094C3Mn3.js → use-key-held-DaUTxGze.js} +1 -1
  68. package/assets/editor/assets/useTriggerFocusGuards-Mibi8yYw.js +1 -0
  69. package/assets/editor/assets/web-card-BTru0lge.js +1 -0
  70. package/assets/editor/assets/web-card-font-BbZEq3En.js +1 -0
  71. package/assets/editor/assets/web-controls-BjBov-C2.js +1 -0
  72. package/assets/editor/assets/web-embed-dialog-sT-1yK5o.js +1 -0
  73. package/assets/editor/assets/web-embed-url-CHu4SU82.js +1 -0
  74. package/assets/editor/assets/web-embeds-I3saJ_yp.js +1 -0
  75. package/assets/editor/assets/web-html-dialog-B5Hb3RGw.js +1 -0
  76. package/assets/editor/assets/web-runtime-wPi8lWzO.js +1 -0
  77. package/assets/editor/assets/web-widget-limits-DeMquLIR.js +1 -0
  78. package/assets/editor/assets/web-widgets-DsFUBhiq.js +325 -0
  79. package/assets/editor/assets/widget-source-C3N9ZKTz.js +2 -0
  80. package/assets/editor/assets/widget-target-C9a207gT.js +1 -0
  81. package/assets/editor/index.html +41 -35
  82. package/dist/koboyo.js +565 -232
  83. package/package.json +3 -3
  84. package/skills/koboyo/SKILL.md +8 -3
  85. package/skills/koboyo/references/architecture.md +1 -1
  86. package/skills/koboyo/references/bpmn.md +1 -1
  87. package/skills/koboyo/references/chart.md +1 -1
  88. package/skills/koboyo/references/cycle.md +1 -1
  89. package/skills/koboyo/references/erd.md +1 -1
  90. package/skills/koboyo/references/flowchart.md +1 -1
  91. package/skills/koboyo/references/funnel.md +1 -1
  92. package/skills/koboyo/references/gantt.md +1 -1
  93. package/skills/koboyo/references/gitgraph.md +1 -1
  94. package/skills/koboyo/references/journey.md +1 -1
  95. package/skills/koboyo/references/matrix.md +1 -1
  96. package/skills/koboyo/references/mindmap.md +1 -1
  97. package/skills/koboyo/references/orgchart.md +1 -1
  98. package/skills/koboyo/references/pyramid.md +1 -1
  99. package/skills/koboyo/references/sankey.md +1 -1
  100. package/skills/koboyo/references/sequence.md +1 -1
  101. package/skills/koboyo/references/statemachine.md +1 -1
  102. package/skills/koboyo/references/timeline.md +1 -1
  103. package/skills/koboyo/references/venn.md +1 -1
  104. package/skills/koboyo/references/wireframe.md +1 -1
  105. package/assets/editor/assets/MenuSubmenuTrigger-KacA9GM8.js +0 -1
  106. package/assets/editor/assets/asset-glyph-C1E6cGwM.js +0 -1
  107. package/assets/editor/assets/build-pips-BV-uwXlP.js +0 -1
  108. package/assets/editor/assets/build-visibility-DyML9SHt.js +0 -1
  109. package/assets/editor/assets/builders-DMHAOPEv.js +0 -1
  110. package/assets/editor/assets/code-panel-koBUgEWp.js +0 -43
  111. package/assets/editor/assets/connector-labels-CrEgadsC.js +0 -2
  112. package/assets/editor/assets/core-CmsJyU_-.js +0 -1
  113. package/assets/editor/assets/diagram-fingerprint-WGQ5iVXx.js +0 -3
  114. package/assets/editor/assets/editor-BeufBV54.js +0 -1
  115. package/assets/editor/assets/export-Bce6ra0N.js +0 -2
  116. package/assets/editor/assets/export-K2VWg76n.js +0 -6
  117. package/assets/editor/assets/flow-layer-ewaL7g2y.js +0 -1
  118. package/assets/editor/assets/flow-panel-BzXNGGke.js +0 -1
  119. package/assets/editor/assets/flow-stage-Ba_CAggI.js +0 -1
  120. package/assets/editor/assets/index-CBPPqsiR.js +0 -24
  121. package/assets/editor/assets/layout-offthread-mRHRulkS.js +0 -18
  122. package/assets/editor/assets/menu-B9BAk63v.js +0 -1
  123. package/assets/editor/assets/panel-controls-DWVXiNUZ.js +0 -1
  124. package/assets/editor/assets/plan-CkgM52Yh.js +0 -1
  125. package/assets/editor/assets/presentation-DJUO0t7I.js +0 -1
  126. package/assets/editor/assets/reflow-DaYiVkwp.js +0 -1
  127. package/assets/editor/assets/registry-rEGZW7Ab.js +0 -1
  128. package/assets/editor/assets/ride-overlay-Hx90v4ZK.js +0 -1
  129. package/assets/editor/assets/selection-overlay-primitives-BRp854AD.js +0 -1
  130. package/assets/editor/assets/shape-meta-COE2ATNh.js +0 -1
  131. package/assets/editor/assets/slides-D686obFO.js +0 -15
  132. package/assets/editor/assets/slides-panel-BEJCevJi.js +0 -26
  133. package/assets/editor/assets/text-breaks-DM4W6y5f.js +0 -7
  134. package/assets/editor/assets/tidy-browser-dF3BON7J.js +0 -1
  135. package/assets/editor/assets/tidy-scope-BGG3ZXvZ.js +0 -1
  136. package/assets/editor/assets/tree-KSgPjntC.js +0 -1
  137. package/assets/editor/assets/use-export-command-sC9UHj3_.js +0 -2
  138. package/assets/editor/assets/web-controls-CLE9zr7i.js +0 -1
  139. package/assets/editor/assets/web-embed-dialog-XUNelFFM.js +0 -1
  140. package/assets/editor/assets/web-html-dialog-BcAyzH5D.js +0 -1
  141. package/assets/editor/assets/web-shape-C941TGTy.js +0 -1
  142. package/assets/editor/assets/widget-source-CHujvUeA.js +0 -1
@@ -0,0 +1 @@
1
+ var e=2048;function t(e){if(e.length>2048)return null;let t;try{t=new URL(e)}catch{return null}return t.protocol!==`https:`||t.username!==``||t.password!==``?null:t}export{t as n,e as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./web-embed-url-CHu4SU82.js";var t=`strict-origin-when-cross-origin`,n=`allow-scripts allow-same-origin allow-popups allow-presentation`,r=`${n} allow-forms`,i=`allow-scripts allow-same-origin allow-popups`,a=`fullscreen; picture-in-picture; encrypted-media; clipboard-write; autoplay`,o=`fullscreen`,s=[`koboyo.com`,`koboyousercontent.com`];function c(e){return e.hostname.toLowerCase().replace(/\.$/,``)}function l(e){return s.some(t=>e===t||e.endsWith(`.${t}`))}function u(e){return e.pathname.split(`/`).filter(e=>e!==``)}var d=new Set([`youtube.com`,`www.youtube.com`,`m.youtube.com`,`music.youtube.com`,`youtube-nocookie.com`,`www.youtube-nocookie.com`]),f=/^[A-Za-z0-9_-]{11}$/;function p(e){let t=e.searchParams.get(`t`)??e.searchParams.get(`start`)??``;if(/^\d+s?$/.test(t))return Number.parseInt(t,10);let n=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(t);if(!n||t===``)return 0;let[,r=`0`,i=`0`,a=`0`]=n;return Number(r)*3600+Number(i)*60+Number(a)}function m(e,t){let n=u(e),r=null,i=!1;if(t===`youtu.be`?r=n[0]??null:d.has(t)&&(n[0]===`watch`?r=e.searchParams.get(`v`):n[0]===`embed`||n[0]===`live`||n[0]===`v`?r=n[1]??null:n[0]===`shorts`&&(r=n[1]??null,i=!0)),!r||!f.test(r))return null;let a=p(e);return{provider:`youtube`,label:`YouTube video`,src:`https://www.youtube-nocookie.com/embed/${r}${a>0?`?start=${a}`:``}`,width:i?315:560,height:i?560:315,keepAspect:!0,video:!0,thumbnail:`https://i.ytimg.com/vi/${r}/hqdefault.jpg`}}function h(e,t){let n=u(e),r,i=null;if(t===`vimeo.com`||t===`www.vimeo.com`?(r=n[0],i=n[1]??null):t===`player.vimeo.com`&&n[0]===`video`&&(r=n[1],i=e.searchParams.get(`h`)),!r||!/^\d+$/.test(r))return null;let a=i&&/^[0-9a-f]+$/i.test(i)?`?h=${i}`:``;return{provider:`vimeo`,label:`Vimeo video`,src:`https://player.vimeo.com/video/${r}${a}`,width:640,height:360,keepAspect:!0,video:!0}}function g(e,t){if(t!==`loom.com`&&t!==`www.loom.com`)return null;let[n,r]=u(e);return n!==`share`&&n!==`embed`||!r||!/^[A-Za-z0-9]+$/.test(r)?null:{provider:`loom`,label:`Loom video`,src:`https://www.loom.com/embed/${r}`,width:640,height:360,keepAspect:!0,video:!0}}var _=new Set([`file`,`design`,`proto`,`board`]);function v(t,n){if(n!==`figma.com`&&n!==`www.figma.com`)return null;let r=u(t);if(r[0]===`embed`){let n=e(t.searchParams.get(`url`)??``);return!n||u(n)[0]===`embed`?null:v(n,c(n))}return!_.has(r[0]??``)||!r[1]?null:{provider:`figma`,label:r[0]===`board`?`FigJam board`:`Figma file`,src:`https://www.figma.com/embed?embed_host=koboyo&url=${encodeURIComponent(t.href)}`,width:800,height:450,keepAspect:!1,video:!1,forms:!0}}function y(e,t){if(t!==`codepen.io`)return null;let[n,r,i]=u(e),a=new Set([`pen`,`full`,`details`,`embed`]);return!n||!/^[A-Za-z0-9_-]+$/.test(n)||!a.has(r??``)||!i||!/^[A-Za-z0-9]+$/.test(i)?null:{provider:`codepen`,label:`CodePen`,src:`https://codepen.io/${n}/embed/${i}?default-tab=result`,width:800,height:450,keepAspect:!1,video:!1}}function b(e,t){if(t!==`codesandbox.io`)return null;let n=u(e),r;return n[0]===`s`||n[0]===`embed`?r=n[1]:n[0]===`p`&&n[1]===`sandbox`&&(r=n[2]),!r||!/^[A-Za-z0-9-]+$/.test(r)?null:{provider:`codesandbox`,label:`CodeSandbox`,src:`https://codesandbox.io/embed/${r}`,width:800,height:500,keepAspect:!1,video:!1,forms:!0}}var x=15,S={width:600,height:450},C=String.raw`-?\d{1,3}(?:\.\d+)?`,w=new RegExp(String.raw`^@(${C}),(${C})(?:,(\d+(?:\.\d+)?)z)?`),T=new RegExp(String.raw`!3d(${C})!4d(${C})`);function E(e,t){return Math.abs(Number(e))<=90&&Math.abs(Number(t))<=180}function D(e){let t=Math.round(Number(e));return!e||!Number.isFinite(t)||t<1||t>21?x:t}function O(e){try{return decodeURIComponent(e.replace(/\+/g,` `)).trim()}catch{return``}}function k(e){let t=e.pathname.split(`/`).filter(e=>e!==``),n=t.find(e=>e.startsWith(`@`)),r=n?w.exec(n):null,i=T.exec(e.pathname)??r,a=i&&E(i[1],i[2])?`${i[1]},${i[2]}`:null,o=D(r?.[3]??e.searchParams.get(`z`)),s=+(t[0]===`maps`),c=t[s],l=t[s+1]?O(t[s+1]):``,u=l!==``&&!l.startsWith(`@`);if(c===`place`&&u)return{query:a?`${l}@${a}`:l,zoom:o,name:l};if(c===`search`&&u)return{query:l,zoom:o,name:null};if(c===`place`||c?.startsWith(`@`))return a?{query:a,zoom:o,name:null}:null;if(c!==void 0&&c!==`search`)return null;let d=(e.searchParams.get(`q`)??e.searchParams.get(`query`)??``).trim();if(d)return{query:d,zoom:o,name:null};let f=(e.searchParams.get(`ll`)??``).split(`,`);return f.length===2&&E(f[0],f[1])?{query:`${f[0]},${f[1]}`,zoom:o,name:null}:a?{query:a,zoom:o,name:null}:null}function A(e){return`https://maps.google.com/maps?${new URLSearchParams({q:e.query,z:String(e.zoom),output:`embed`}).toString()}`}function j(e,t){let n={provider:`google-maps`,...S,keepAspect:!1};if(t===`google.com`||t===`www.google.com`){if(e.pathname===`/maps/embed`)return e.searchParams.get(`pb`)?{...n,label:`Google Map`,src:e.href,video:!1}:null;if(e.pathname!==`/maps`&&!e.pathname.startsWith(`/maps/`))return null}else if(t===`maps.google.com`){if(e.pathname!==`/`&&e.pathname!==`/maps`&&!e.pathname.startsWith(`/maps/`))return null}else return null;let r=k(e);return r?{...n,label:r.name??`Google Map`,src:A(r),video:!1}:null}var M=String.raw`-?\d{1,3}\.\d{3,}`,N=new RegExp(String.raw`^(${M})\s*,\s*(${M})$`);function P(e){let t=N.exec(e.trim());return!t||!E(t[1],t[2])?null:`https://www.google.com/maps/@${Number(t[1])},${Number(t[2])},${x}z`}var F=new Set([`track`,`album`,`playlist`,`episode`]);function I(e,t){if(t!==`open.spotify.com`)return null;let n=u(e);n[0]===`embed`&&(n=n.slice(1)),n[0]?.startsWith(`intl-`)&&(n=n.slice(1));let[r,i]=n;if(!r||!F.has(r)||!i||!/^[A-Za-z0-9]+$/.test(i))return null;let a=r===`track`||r===`episode`;return{provider:`spotify`,label:`Spotify`,src:`https://open.spotify.com/embed/${r}/${i}`,width:400,height:a?152:352,keepAspect:!1,video:!1}}var L=[m,h,g,v,y,b,j,I];function R(t){let s=e(t.trim());if(!s)return null;let u=c(s);if(u===``||l(u))return null;let d=s.href;for(let e of L){let t=e(s,u);if(!t)continue;let{forms:i,...o}=t;return{...o,canonical:d,sandbox:i?r:n,allow:a}}return{provider:`generic`,label:u.replace(/^www\./,``),src:d,canonical:d,width:800,height:600,keepAspect:!1,sandbox:i,allow:o,video:!1}}function z(t){let n=/<iframe\b[^>]*>/i.exec(t);if(!n)return null;let r=/\ssrc\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+))/i.exec(n[0]);if(!r)return null;let i=B((r[1]??r[2]??r[3]??``).trim()),a=e(i.startsWith(`//`)?`https:${i}`:i);return a?a.href:null}function B(e){return e.replace(/&quot;/g,`"`).replace(/&#0*39;/g,`'`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&amp;/g,`&`)}export{R as i,z as n,P as r,t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./react-lCSYwAWP.js";import{t as n}from"./jsx-runtime-DKdBMi_L.js";import{o as r,s as i}from"./editor-DAJETlQW.js";import{r as a,t as o}from"./web-widget-limits-DeMquLIR.js";import{A as s}from"./slides-DDNzjFz9.js";import{n as c}from"./web-controls-BjBov-C2.js";import{n as l,t as u}from"./surface-Dke4SWpE.js";import{i as d,n as f,r as p,t as m}from"./DialogRoot-DUeVfNhS.js";import{n as h,t as g}from"./DialogTitle-D5au2NAn.js";import{t as _}from"./DialogDescription-Ddhk2rmF.js";import{t as v}from"./dialog-DnXgEbpz.js";import{i as y}from"./web-widgets-DsFUBhiq.js";import{r as b,t as x}from"./widget-source-C3N9ZKTz.js";var S=e(t(),1),C=n();function w(){let e=i(),t=r(e=>e.webHtmlEditorId),[n,w]=(0,S.useState)(``),[T,E]=(0,S.useState)(null),[D,O]=(0,S.useState)(!1);(0,S.useEffect)(()=>{if(!t)return;let n=s(e.getState().shapes,t),r=n?.type===`web`?b(n):null;if(O(!1),!r||`html`in r){let e=r&&`html`in r?r.html:``;w(e),E(e);return}let i=!0;return w(``),E(null),x(r.src).then(e=>{if(i){if(e===null){O(!0);return}w(e),E(e)}}),()=>{i=!1}},[t,e]);let k=T===null&&!D,A=a(n),j=A>o,M=n.trim().length===0,N=j?[]:y(n);function P(){e.getState().setWebHtmlEditorId(null)}function F(r){if(r.preventDefault(),j||M||k||D||!t)return;let i=e.getState(),a=s(i.shapes,t);a?.type===`web`&&n!==T&&i.replaceShape({...a,html:n,htmlSrc:void 0,poster:void 0,posterOf:void 0}),P()}return(0,C.jsx)(m,{open:t!==null,onOpenChange:e=>{e||P()},children:(0,C.jsxs)(f,{children:[(0,C.jsx)(d,{className:l.dialogBackdrop}),(0,C.jsxs)(p,{"data-overlay":!0,"data-testid":`web-html-dialog`,className:`flex w-[min(720px,94vw)] flex-col p-5 ${l.dialogPopup}`,children:[(0,C.jsx)(g,{className:v.title,children:`Edit widget HTML`}),(0,C.jsx)(_,{className:u(`mt-1`,v.description),children:`A self-contained page: inline scripts and styles, images from any https address, and scripts from the common CDNs. It has no network access.`}),(0,C.jsxs)(`form`,{className:`mt-4 flex flex-col gap-3`,onSubmit:F,children:[(0,C.jsx)(`textarea`,{"data-testid":`web-html-input`,value:n,autoFocus:!0,readOnly:k||D,spellCheck:!1,onChange:e=>w(e.target.value),onKeyDown:e=>e.stopPropagation(),className:`h-[min(420px,55vh)] w-full resize-none rounded-lg bg-[var(--chrome-rest)] p-3 font-mono text-[12px] leading-relaxed text-[var(--chrome-fg-800)] outline-none ring-1 ring-[var(--chrome-ring)] focus:ring-[var(--chrome-input-hover)]`}),(0,C.jsxs)(`div`,{className:`flex items-start justify-between gap-4 text-[12px]`,children:[(0,C.jsxs)(`ul`,{"data-testid":`web-html-problems`,className:`flex flex-col gap-0.5 text-[var(--chrome-fg-500)]`,children:[k&&(0,C.jsx)(`li`,{"data-testid":`web-html-loading`,children:`Loading the source…`}),D&&(0,C.jsx)(`li`,{"data-testid":`web-html-error`,className:`text-[var(--chrome-danger)]`,children:`Couldn't load this widget's source. Check your connection and reopen it.`}),j&&(0,C.jsxs)(`li`,{"data-testid":`web-html-error`,className:`text-[var(--chrome-danger)]`,children:[`Widgets can be at most `,c(131072),`.`]}),N.slice(0,4).map(e=>(0,C.jsx)(`li`,{children:e},e))]}),(0,C.jsxs)(`span`,{"data-testid":`web-html-size`,className:j?`text-[var(--chrome-danger)]`:`text-[var(--chrome-fg-400)]`,children:[c(A),` of `,c(o)]})]}),(0,C.jsxs)(`div`,{className:v.actions,children:[(0,C.jsx)(h,{className:v.cancelButton,children:`Cancel`}),(0,C.jsx)(`button`,{type:`submit`,"data-testid":`web-html-save`,disabled:j||M||k||D,className:v.submitButton,children:`Save`})]})]})]})]})})}export{w as WebHtmlDialog};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./react-lCSYwAWP.js";import{t as n}from"./jsx-runtime-DKdBMi_L.js";import{o as r,s as i}from"./editor-DAJETlQW.js";import{i as a}from"./web-widget-limits-DeMquLIR.js";import{jt as o}from"./shapes-D5w8NTQQ.js";import{A as s,w as c}from"./slides-DDNzjFz9.js";import{t as l}from"./web-card-font-BbZEq3En.js";import{t as u}from"./createReactComponent-C51FAx3B.js";import{t as d}from"./web-controls-BjBov-C2.js";import{t as f}from"./IconCode-CHIz1nCU.js";import{n as p}from"./IconReplace-CYUD1RLF.js";import{t as m}from"./IconPlayerPlayFilled-DVAWmYt7.js";import{a as h,n as g,r as _}from"./shape-render-DZscezZk.js";import{s as v}from"./chrome-C2RCq3SI.js";import{i as y,t as b}from"./web-embeds-I3saJ_yp.js";import{n as x}from"./embed-input-D77Udvni.js";import{t as S}from"./web-card-BTru0lge.js";import{a as C,n as w,r as T,t as E}from"./web-widgets-DsFUBhiq.js";import{n as ee,r as D}from"./widget-source-C3N9ZKTz.js";var O=u(`outline`,`brand-codepen`,`BrandCodepen`,[[`path`,{d:`M3 15l9 6l9 -6l-9 -6l-9 6`,key:`svg-0`}],[`path`,{d:`M3 9l9 6l9 -6l-9 -6l-9 6`,key:`svg-1`}],[`path`,{d:`M3 9l0 6`,key:`svg-2`}],[`path`,{d:`M21 9l0 6`,key:`svg-3`}],[`path`,{d:`M12 3l0 6`,key:`svg-4`}],[`path`,{d:`M12 15l0 6`,key:`svg-5`}]]),k=u(`outline`,`brand-codesandbox`,`BrandCodesandbox`,[[`path`,{d:`M20 7.5v9l-4 2.25l-4 2.25l-4 -2.25l-4 -2.25v-9l4 -2.25l4 -2.25l4 2.25l4 2.25`,key:`svg-0`}],[`path`,{d:`M12 12l4 -2.25l4 -2.25`,key:`svg-1`}],[`path`,{d:`M12 12l0 9`,key:`svg-2`}],[`path`,{d:`M12 12l-4 -2.25l-4 -2.25`,key:`svg-3`}],[`path`,{d:`M20 12l-4 2v4.75`,key:`svg-4`}],[`path`,{d:`M4 12l4 2l0 4.75`,key:`svg-5`}],[`path`,{d:`M8 5.25l4 2.25l4 -2.25`,key:`svg-6`}]]),A=u(`outline`,`brand-figma`,`BrandFigma`,[[`path`,{d:`M12 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0`,key:`svg-0`}],[`path`,{d:`M6 6a3 3 0 0 1 3 -3h6a3 3 0 0 1 3 3a3 3 0 0 1 -3 3h-6a3 3 0 0 1 -3 -3`,key:`svg-1`}],[`path`,{d:`M9 9a3 3 0 0 0 0 6h3m-3 0a3 3 0 1 0 3 3v-15`,key:`svg-2`}]]),j=u(`outline`,`brand-spotify`,`BrandSpotify`,[[`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0`,key:`svg-0`}],[`path`,{d:`M8 11.973c2.5 -1.473 5.5 -.973 7.5 .527`,key:`svg-1`}],[`path`,{d:`M9 15c1.5 -1 4 -1 5 .5`,key:`svg-2`}],[`path`,{d:`M7 9c2 -1 6 -2 10 .5`,key:`svg-3`}]]),M=u(`outline`,`brand-vimeo`,`BrandVimeo`,[[`path`,{d:`M3 8.5l1 1s1.5 -1.102 2 -.5c.509 .609 1.863 7.65 2.5 9c.556 1.184 1.978 2.89 4 1.5c2 -1.5 7.5 -5.5 8.5 -11.5c.444 -2.661 -1 -4 -2.5 -4c-2 0 -4.047 1.202 -4.5 4c2.05 -1.254 2.551 1 1.5 3c-1.052 2 -2 3 -2.5 3c-.49 0 -.924 -1.165 -1.5 -3.5c-.59 -2.42 -.5 -6.5 -3 -6.5s-5.5 4.5 -5.5 4.5`,key:`svg-0`}]]),N=u(`outline`,`grip-horizontal`,`GripHorizontal`,[[`path`,{d:`M4 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-0`}],[`path`,{d:`M4 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-1`}],[`path`,{d:`M11 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-2`}],[`path`,{d:`M11 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-3`}],[`path`,{d:`M18 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-4`}],[`path`,{d:`M18 15a1 1 0 1 0 2 0a1 1 0 1 0 -2 0`,key:`svg-5`}]]),P=u(`outline`,`map-pin`,`MapPin`,[[`path`,{d:`M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0`,key:`svg-0`}],[`path`,{d:`M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0`,key:`svg-1`}]]),F=u(`outline`,`video`,`Video`,[[`path`,{d:`M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4`,key:`svg-0`}],[`path`,{d:`M3 8a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2l0 -8`,key:`svg-1`}]]),I=u(`outline`,`world`,`World`,[[`path`,{d:`M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0`,key:`svg-0`}],[`path`,{d:`M3.6 9h16.8`,key:`svg-1`}],[`path`,{d:`M3.6 15h16.8`,key:`svg-2`}],[`path`,{d:`M11.5 3a17 17 0 0 0 0 18`,key:`svg-3`}],[`path`,{d:`M12.5 3a17 17 0 0 1 0 18`,key:`svg-4`}]]),L=u(`filled`,`brand-youtube-filled`,`BrandYoutubeFilled`,[[`path`,{d:`M18 3a5 5 0 0 1 5 5v8a5 5 0 0 1 -5 5h-12a5 5 0 0 1 -5 -5v-8a5 5 0 0 1 5 -5zm-9 6v6a1 1 0 0 0 1.514 .857l5 -3a1 1 0 0 0 0 -1.714l-5 -3a1 1 0 0 0 -1.514 .857z`,key:`svg-0`}]]),R=e(t(),1),z=6,te=3,B=160;function ne(e){return e?.startsWith(`http://localhost`)?te:z}var V=new Map;function re(e){let t=V.get(e);if(t!==void 0)return t;let n=y(e);return V.size>500&&V.clear(),V.set(e,n),n}function H(e,t){if(t.embedded)return null;if(e.kind===`embed`){let t=e.url?re(e.url):null;return t?{kind:`embed`,embed:t}:null}if(e.kind===`html`){let n=D(e);return!t.widgetOrigin||!n?null:{kind:`html`,source:n,origin:t.widgetOrigin}}return null}function U(e,t){return e.kind===`embed`?e.embed.video:t.clickToRun}function ie(e){if(!e.video)return e.src;let t=new URL(e.src);return t.searchParams.set(`autoplay`,`1`),t.href}function ae(e){let{candidates:t,viewport:n,view:r,interactingId:i,selectedIds:a,limit:o}=e,s=n.zoom,c=-n.x/s,l=-n.y/s,u=c+r.width/s,d=l+r.height/s,f=(c+u)/2,p=(l+d)/2,m=[];for(let e of t){let t=e.id===i;if(!t&&(!(e.x<u&&e.x+e.width>c&&e.y<d&&e.y+e.height>l)||e.width*s<B))continue;let n=t?0:a.has(e.id)?1:e.bare?2:3,r=e.x+e.width/2-f,o=e.y+e.height/2-p;m.push({id:e.id,rank:n,distance:r*r+o*o})}return m.sort((e,t)=>e.rank-t.rank||e.distance-t.distance),m.slice(0,Math.max(0,o)).map(e=>e.id)}function oe(e){let{previous:t,wanted:n,now:r,mayMount:i,urgent:a,limit:o,graceMs:s}=e,c=new Set(n),l=new Set,u=new Map;for(let e of t.live){if(c.has(e)){l.add(e);continue}let n=t.graceUntil.get(e)??r+s;n>r&&(l.add(e),u.set(e,n))}let d=n.filter(e=>!l.has(e)&&(i||e===a));for(let e of d){if(l.size>=o){let e=[...u.entries()].sort((e,t)=>e[1]-t[1])[0];if(!e)break;l.delete(e[0]),u.delete(e[0])}l.add(e)}return{live:l,graceUntil:u}}function se(e){return e.type===`web`}var ce=160,le=2e3;function ue(e){let{viewport:t,containerSize:n}=e,a=i(),o=h(),s=ne(o.widgetOrigin),c=r(e=>e.shapes),l=(0,R.useMemo)(()=>c.filter(se),[c]),u=r(e=>e.selectedIds),d=r(e=>e.editSession.kind===`interact`?e.editSession.shapeId:null),f=r(e=>e.startedWebIds),p=r(e=>e.transforming||e.marquee!==null||e.lasso!==null),m=(0,R.useRef)({live:new Set,graceUntil:new Map}),g=(0,R.useRef)(0),_=(0,R.useRef)(null);(0,R.useLayoutEffect)(()=>{g.current=performance.now()},[t.x,t.y,t.zoom]),(0,R.useEffect)(()=>{if(l.length===0&&m.current.live.size===0)return;let e=[],r=new Set;for(let t of l){let n=H(t,o);if(!n||(n.kind===`embed`&&n.embed.video&&r.add(t.id),U(n,o)&&!f.has(t.id)))continue;let i=t.poster??(n.kind===`embed`?n.embed.thumbnail:void 0);e.push({id:t.id,x:t.x,y:t.y,width:t.width,height:t.height,bare:!i})}let i=ae({candidates:e,viewport:t,view:n,interactingId:d,selectedIds:u,limit:s}),c=()=>{_.current=null;let e=performance.now(),t=g.current+ce,n=m.current,o=oe({previous:n,wanted:i,now:e,mayMount:!p&&e>=t,urgent:d,limit:s,graceMs:le});m.current=o;let l=a.getState();l.setLiveWebIds(o.live);for(let e of n.live)!o.live.has(e)&&r.has(e)&&l.stopWeb(e);let u=i.some(e=>!o.live.has(e)),f=Math.min(u&&!p?Math.max(t,e+16):1/0,...o.graceUntil.values());Number.isFinite(f)&&(_.current=window.setTimeout(c,Math.max(0,f-e)))};return c(),()=>{_.current!==null&&(window.clearTimeout(_.current),_.current=null)}},[a,o,s,l,t,n,u,d,f,p])}var W=n(),de={youtube:L,vimeo:M,loom:F,figma:A,codepen:O,codesandbox:k,"google-maps":P,spotify:j,generic:I};function G(e,t){return Math.max(10,Math.min(22,Math.min(e/30,t/12)))}function fe(e){let{info:t,provider:n,image:r,width:i,height:a,loading:o,failed:s}=e,c=G(i,a),u=n===`html`?f:de[n],[d,p]=(0,R.useState)(null),m=r!==void 0&&d!==r;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{"data-testid":`web-card`,className:`pointer-events-none absolute inset-0 flex select-none flex-col items-center justify-center overflow-hidden px-[6%] text-center text-[var(--canvas-ink)]`,style:{fontFamily:l,gap:c*.5,background:`linear-gradient(180deg, var(--paper-bg), color-mix(in srgb, var(--canvas-ink) 4%, var(--paper-bg)))`},children:[(0,W.jsx)(`div`,{className:`flex items-center justify-center rounded-[28%]`,style:{width:c*2.8,height:c*2.8,background:`color-mix(in srgb, var(--canvas-ink) 7%, transparent)`},children:(0,W.jsx)(u,{size:c*1.5,stroke:1.6,className:o?`animate-pulse opacity-70`:`opacity-70`})}),(0,W.jsx)(`div`,{className:`max-w-full truncate font-medium leading-tight`,style:{fontSize:c*1.1},children:t.title}),(0,W.jsx)(`div`,{className:`max-w-full truncate leading-tight opacity-55`,style:{fontSize:c*.85},children:s?`This widget didn't start`:o?`Loading…`:t.caption})]}),m&&(0,W.jsx)(`img`,{src:r,alt:``,draggable:!1,loading:`lazy`,decoding:`async`,onError:()=>p(r),className:`pointer-events-none absolute inset-0 h-full w-full select-none object-cover`})]})}function pe(e){let{width:t,height:n,onPlay:r}=e,i=Math.max(36,Math.min(88,Math.min(t,n)/4.5));return(0,W.jsx)(`button`,{type:`button`,"aria-label":`Play`,"data-testid":`web-play`,onPointerDown:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),r()},className:`absolute left-1/2 top-1/2 flex -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full bg-black/60 text-white shadow-[0_4px_24px_rgba(0,0,0,0.35)] outline-none ring-1 ring-white/25 backdrop-blur-sm transition-transform hover:scale-105 hover:bg-black/75`,style:{width:i,height:i},children:(0,W.jsx)(m,{size:i*.42,className:`translate-x-[6%]`})})}function me(e){let{width:t,height:n,onRun:r}=e,i=G(t,n);return(0,W.jsxs)(`button`,{type:`button`,"data-testid":`web-run`,onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),r()},className:`absolute bottom-[10%] left-1/2 flex -translate-x-1/2 items-center rounded-full bg-[var(--canvas-ink)] font-medium text-[var(--paper-bg)] shadow-[0_2px_10px_rgba(0,0,0,0.18)] outline-none transition-opacity hover:opacity-85`,style:{fontFamily:l,fontSize:i*.95,gap:i*.4,padding:`${i*.45}px ${i*1.1}px`},children:[(0,W.jsx)(m,{size:i}),`Run widget`]})}var he=1e4;function ge(e){let{shape:t,interactive:n,interacting:o,erasing:s,onPointerDown:c,onBeginEdit:l,onHover:u}=e,d=i(),f=h(),p=(0,R.useMemo)(()=>H(t,f),[t,f]),m=r(e=>e.liveWebIds.has(t.id)),v=r(e=>o&&e.transforming),y=o&&n&&!v,b=r(e=>e.startedWebIds.has(t.id)),[x,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)(!1),E=m&&p!==null,D=ee(p?.kind===`html`?p.source:null,E),O=D?.status===`ready`?D.html:null,[k,A]=(0,R.useState)(null);(0,R.useEffect)(()=>{O!==null&&A(O)},[O]);let j=O??(D?.status===`loading`?k:null),M=E&&D?.status===`failed`;(0,R.useEffect)(()=>{E||(C(!1),T(!1))},[E]);let N=S(t),P=p?.kind===`embed`?p.embed:null,F=p!==null&&U(p,f)&&!b,I=t.poster??P?.thumbnail,L=Math.min(12,t.width/8,t.height/8),z=()=>{let e=d.getState();e.startWeb(t.id),e.setSelectedIds(new Set([t.id])),e.beginInteract(t.id)};return(0,W.jsxs)(`div`,{"data-shape-id":t.id,"data-testid":`web`,"data-web-kind":t.kind,"data-live":E?`true`:`false`,"data-interacting":o?`true`:void 0,className:`group absolute overflow-hidden`,style:{left:t.x,top:t.y,width:t.width,height:t.height,borderRadius:L,opacity:g(t.opacity,s),pointerEvents:n?`auto`:`none`,boxShadow:o?`0 0 0 2px var(--canvas-selection), 0 8px 28px rgba(0,0,0,0.12)`:`0 0 0 1px color-mix(in srgb, var(--canvas-ink) 14%, transparent), 0 1px 3px rgba(0,0,0,0.06)`,background:`var(--paper-bg)`},onPointerDown:e=>c(t.id,e),onTouchEnd:e=>{let n=d.getState().editSession;n.kind===`interact`&&n.shapeId===t.id&&e.preventDefault()},onDoubleClick:()=>l(t.id),..._(t.id,u),children:[(0,W.jsx)(fe,{info:N,provider:t.kind===`html`?`html`:P?.provider??`generic`,image:I,width:t.width,height:t.height,loading:E&&!x&&!w&&!M,failed:w||M}),!E&&(0,W.jsx)(`div`,{className:`pointer-events-none absolute inset-0 bg-[var(--canvas-selection)] opacity-0 transition-opacity group-hover:opacity-[0.04]`}),F&&P?.video&&!E&&(0,W.jsx)(pe,{width:t.width,height:t.height,onPlay:z}),F&&t.kind===`html`&&!E&&(0,W.jsx)(me,{width:t.width,height:t.height,onRun:z}),E&&P&&(0,W.jsx)(_e,{embed:P,title:N.title,using:y,loaded:x,onLoaded:()=>C(!0)},P.src),E&&p?.kind===`html`&&j!==null&&(0,W.jsx)(ye,{html:j,origin:p.origin,title:N.title,interacting:o,using:y,loaded:x,onLoaded:()=>C(!0),onFailed:()=>T(!0),onEscape:()=>d.getState().endEdit(t.id),onSize:e=>d.getState().setWidgetSize(t.id,e)},a(j,0,0))]})}function K(e,t){return{pointerEvents:e?`auto`:`none`,opacity:+!!t,transition:`opacity 160ms ease-out`,colorScheme:`normal`}}function _e(e){let{embed:t,title:n,using:r,loaded:i,onLoaded:a}=e;return(0,W.jsx)(`iframe`,{"data-testid":`web-frame`,title:n,src:ie(t),sandbox:t.sandbox,allow:t.allow,referrerPolicy:b,onLoad:a,className:`absolute inset-0 h-full w-full border-0 ${t.provider===`generic`?`bg-transparent`:`bg-[var(--paper-bg)]`}`,style:K(r,i)})}function q(e){return Math.max(-w,Math.min(w,e))}function ve(e,t){let n=e.getBoundingClientRect(),r=e.offsetWidth,i=e.offsetHeight,a=r>0?n.width/r:1,o=Math.max(0,Math.min(r,t.x)),s=Math.max(0,Math.min(i,t.y));e.dispatchEvent(new WheelEvent(`wheel`,{deltaX:q(t.dx),deltaY:q(t.dy),deltaMode:0,ctrlKey:t.ctrl,clientX:n.left+o*a,clientY:n.top+s*a,bubbles:!0,cancelable:!0}))}function ye(e){let{html:t,origin:n,title:r,interacting:i,using:a,loaded:o}=e,{onLoaded:s,onFailed:c,onEscape:l,onSize:u}=e,d=(0,R.useRef)(null),f=(0,R.useRef)({onLoaded:s,onFailed:c,onEscape:l,onSize:u,interacting:i});return f.current={onLoaded:s,onFailed:c,onEscape:l,onSize:u,interacting:i},(0,R.useEffect)(()=>{let e=!1,n=null,r=0,i=()=>{r=0;let e=n;n=null,e&&d.current&&ve(d.current,e)};function a(a){let o=d.current,s=o?.contentWindow;if(!o||!s||a.source!==s)return;let c=C(a.data);if(c){if(c.type===`ready`){let e={source:E,type:`render`,html:t};s.postMessage(e,`*`);return}if(c.type===`rendered`){e=!0,f.current.onLoaded();return}if(c.type===`size`){f.current.onSize({width:c.width,height:c.height});return}if(f.current.interacting){if(c.type===`key`){document.activeElement===o&&o.blur(),f.current.onEscape();return}c.type===`wheel`&&(n&&n.ctrl!==c.ctrl&&(window.cancelAnimationFrame(r),i()),n||(n={dx:0,dy:0,ctrl:c.ctrl,x:0,y:0},r=window.requestAnimationFrame(i)),n.dx+=c.dx,n.dy+=c.dy,n.x=c.x,n.y=c.y)}}}window.addEventListener(`message`,a);let o=window.setTimeout(()=>{e||f.current.onFailed()},he);return()=>{window.removeEventListener(`message`,a),window.clearTimeout(o),window.cancelAnimationFrame(r),f.current.onSize(null)}},[t]),(0,W.jsx)(`iframe`,{ref:d,"data-testid":`web-frame`,title:r,src:`${n}/w`,sandbox:T,referrerPolicy:`no-referrer`,className:`absolute inset-0 h-full w-full border-0 bg-white`,style:K(a,o)})}var be=(0,R.memo)(ge),J=6,Y=32,xe=140;function Se(e){let{viewport:t,onGripPointerDown:n}=e,a=i(),l=(0,R.useRef)(null),u=r(e=>e.editSession.kind===`interact`?e.editSession.shapeId:null),d=r(e=>u?s(e.shapes,u):void 0),f=r(e=>e.viewMode);if((0,R.useEffect)(()=>{if(!u)return;let e=e=>{let t=e.target;if(t instanceof Element){if(t.closest(`[data-web-interact-chrome]`))return;if(t.closest(`[data-selection-overlay]`)){l.current?.setPointerCapture(e.pointerId);return}if(t.closest(`[data-shape-id="${CSS.escape(u)}"]`))return}a.getState().endEdit(u)};return window.addEventListener(`pointerdown`,e,!0),()=>window.removeEventListener(`pointerdown`,e,!0)},[u,a]),!d||d.type!==`web`)return null;let m=c({x:d.x,y:d.y},t),h=Math.max(xe,d.width*t.zoom),g=m.y-J-Y>=0,_=d.kind===`embed`&&d.url?o(d.url):null,y=!f&&!d.locked;return(0,W.jsxs)(`div`,{ref:l,"data-overlay":!0,"data-web-interact-chrome":!0,"data-testid":`web-interact-chrome`,className:`absolute z-10 flex items-center gap-0.5 rounded-xl p-1 text-[13px] ${v}`,style:{left:m.x,top:g?m.y-J-Y:m.y+J,width:h,height:Y},children:[y?(0,W.jsxs)(`div`,{"data-testid":`web-grip`,title:`Drag to move`,onPointerDown:e=>{e.currentTarget.setPointerCapture(e.pointerId),n(d.id,e)},className:`flex h-6 min-w-0 flex-1 cursor-grab touch-none items-center gap-1.5 rounded-lg px-1.5 text-[var(--chrome-fg-500)] transition-colors hover:bg-[var(--chrome-hover)] active:cursor-grabbing`,children:[(0,W.jsx)(N,{size:14,stroke:1.75,className:`shrink-0`}),(0,W.jsx)(`span`,{className:`truncate`,children:S(d).title})]}):(0,W.jsx)(`div`,{className:`flex-1`}),_&&(0,W.jsxs)(`a`,{href:_,target:`_blank`,rel:`noopener noreferrer`,"data-testid":`web-open-link`,className:`flex h-6 shrink-0 items-center gap-1 rounded-lg px-2 text-[var(--chrome-fg-600)] transition-colors hover:bg-[var(--chrome-hover)]`,children:[(0,W.jsx)(p,{size:14,stroke:1.75}),`Open`]}),(0,W.jsx)(`button`,{type:`button`,"data-testid":`web-done`,onClick:()=>a.getState().endEdit(d.id),className:`h-6 shrink-0 rounded-lg bg-[var(--chrome-accent)] px-2.5 text-white transition-colors hover:bg-[var(--chrome-accent-hover)]`,children:`Done`})]})}var Ce=500,X=0;function Z(e,t){e.postMessage(t,`*`)}function Q(e,t=document){let n=t.querySelector(`[data-shape-id="${CSS.escape(e)}"] [data-testid="web-frame"]`);return n instanceof HTMLIFrameElement?n.contentWindow:null}function we(e,t,n){Z(e,{source:E,type:`click`,x:t,y:n})}function $(e,t,n){X+=1;let r=`q${X}`;return new Promise(i=>{let a=e=>{window.removeEventListener(`message`,o),window.clearTimeout(s),i(e)};function o(t){if(t.source!==e)return;let i=n(t.data,r);i!==void 0&&a(i)}let s=window.setTimeout(()=>a(null),Ce);window.addEventListener(`message`,o),Z(e,t(r))})}function Te(e,t,n){return $(e,e=>({source:E,type:`probe`,id:e,x:t,y:n}),(e,t)=>{let n=C(e);return n?.type===`probe-result`&&n.id===t?n.target:void 0})}function Ee(e,t){return $(e,e=>({source:E,type:`locate`,id:e,selector:t}),(e,t)=>{let n=C(e);return n?.type===`locate-result`&&n.id===t?n.box:void 0})}function De(e,t){return $(e,e=>({source:E,type:`locate-text`,id:e,text:t}),(e,t)=>{let n=C(e);return n?.type===`locate-text-result`&&n.id===t?n.target:void 0})}function Oe(e){return ue(e),null}export{d as WebControls,Se as WebInteractChrome,Oe as WebLiveBudget,be as WebView,x as embedFromPaste,Q as findWidgetFrame,Ee as locateInWidget,De as locateTextInWidget,U as needsStart,Te as probeWidget,we as sendWidgetClick,H as webMount};
@@ -0,0 +1 @@
1
+ var e=131072;function t(e,t){if(e.length>2048)return!1;if(t!==void 0)return e.startsWith(t)&&!e.slice(t.length).includes(`..`);try{return new URL(e).protocol===`https:`}catch{return!1}}function n(e){let t=0;for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);r<128?t+=1:r<2048?t+=2:r>=55296&&r<=56319&&(e.charCodeAt(n+1)&64512)==56320?(t+=4,n+=1):t+=3}return t}function r(e,t,n){let r=`${Math.round(t)}x${Math.round(n)}\n${e}`,i=3735928559,a=1103547991;for(let e=0;e<r.length;e+=1){let t=r.charCodeAt(e);i=Math.imul(i^t,2654435761),a=Math.imul(a^t,1597334677)}return i=Math.imul(i^i>>>16,2246822507),i^=Math.imul(a^a>>>13,3266489909),a=Math.imul(a^a>>>16,2246822507),a^=Math.imul(i^i>>>13,3266489909),(4294967296*(2097151&a)+(i>>>0)).toString(36)}export{r as i,t as n,n as r,e as t};
@@ -0,0 +1,325 @@
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,r as n,t as r}from"./web-widget-limits-DeMquLIR.js";import{t as i}from"./widget-target-C9a207gT.js";var a=`function (query) {
2
+ var MAX_TEXT = 200;
3
+ var MAX_SELECTOR = 400;
4
+ var NAMED = /^(a|button|input|select|textarea|label|img|video|canvas|h[1-6]|p|li|td|th|summary|option|figure)$/;
5
+ function collapse(value) {
6
+ return String(value == null ? "" : value).replace(/\\s+/g, " ").trim();
7
+ }
8
+ function textOf(element) {
9
+ var text = collapse(element.innerText);
10
+ if (!text) {
11
+ text = collapse(
12
+ element.getAttribute("aria-label") || element.getAttribute("alt") ||
13
+ element.getAttribute("title") || element.value || element.getAttribute("placeholder")
14
+ );
15
+ }
16
+ return text.slice(0, MAX_TEXT);
17
+ }
18
+ function uniqueId(element) {
19
+ if (!element.id) {
20
+ return null;
21
+ }
22
+ var selector = "#" + CSS.escape(element.id);
23
+ try {
24
+ return document.querySelectorAll(selector).length === 1 ? selector : null;
25
+ } catch (error) {
26
+ return null;
27
+ }
28
+ }
29
+ function named(element) {
30
+ var svg = null;
31
+ for (var node = element; node && node !== document.body; node = node.parentElement) {
32
+ if (node.tagName.toLowerCase() === "svg") {
33
+ svg = node;
34
+ }
35
+ }
36
+ if (svg) {
37
+ return svg;
38
+ }
39
+ for (var at = element; at && at !== document.body; at = at.parentElement) {
40
+ if (NAMED.test(at.tagName.toLowerCase()) || at.hasAttribute("role") || at.id) {
41
+ return at;
42
+ }
43
+ }
44
+ return element;
45
+ }
46
+ function selectorOf(element) {
47
+ var parts = [];
48
+ var node = element;
49
+ while (node && node !== document.body && node !== document.documentElement) {
50
+ var id = uniqueId(node);
51
+ if (id) {
52
+ parts.unshift(id);
53
+ return parts.join(" > ");
54
+ }
55
+ var tag = node.tagName.toLowerCase();
56
+ var parent = node.parentElement;
57
+ var part = tag;
58
+ if (parent) {
59
+ var same = 0;
60
+ var index = 0;
61
+ for (var child = parent.firstElementChild; child; child = child.nextElementSibling) {
62
+ if (child.tagName === node.tagName) {
63
+ same += 1;
64
+ if (child === node) {
65
+ index = same;
66
+ }
67
+ }
68
+ }
69
+ if (same > 1) {
70
+ part = tag + ":nth-of-type(" + index + ")";
71
+ }
72
+ }
73
+ parts.unshift(part);
74
+ node = parent;
75
+ }
76
+ parts.unshift("body");
77
+ return parts.join(" > ");
78
+ }
79
+ function targetOf(element) {
80
+ if (!element || element === document.body || element === document.documentElement) {
81
+ return null;
82
+ }
83
+ var rect = element.getBoundingClientRect();
84
+ var selector = selectorOf(element);
85
+ return {
86
+ tag: element.tagName.toLowerCase().slice(0, 32),
87
+ text: textOf(element),
88
+ selector: selector.length > MAX_SELECTOR ? "" : selector,
89
+ box: {
90
+ x: Math.round(rect.left + window.scrollX),
91
+ y: Math.round(rect.top + window.scrollY),
92
+ w: Math.round(rect.width),
93
+ h: Math.round(rect.height)
94
+ }
95
+ };
96
+ }
97
+ function byText(wanted) {
98
+ var exact = collapse(wanted);
99
+ var lower = exact.toLowerCase();
100
+ var all = document.body ? document.body.getElementsByTagName("*") : [];
101
+ var best = null;
102
+ var loose = null;
103
+ for (var i = 0; i < all.length; i += 1) {
104
+ var text = textOf(all[i]);
105
+ if (text === exact && (!best || best.contains(all[i]))) {
106
+ best = all[i];
107
+ } else if (text.toLowerCase() === lower && (!loose || loose.contains(all[i]))) {
108
+ loose = all[i];
109
+ }
110
+ }
111
+ var found = best || loose;
112
+ if (!found) {
113
+ return null;
114
+ }
115
+ var chosen = named(found);
116
+ return textOf(chosen).toLowerCase() === lower ? chosen : found;
117
+ }
118
+ if (query.kind === "point") {
119
+ var hit = document.elementFromPoint(query.x - window.scrollX, query.y - window.scrollY);
120
+ return hit ? targetOf(named(hit)) : null;
121
+ }
122
+ if (query.kind === "selector") {
123
+ try {
124
+ return targetOf(document.querySelector(query.selector));
125
+ } catch (error) {
126
+ return null;
127
+ }
128
+ }
129
+ return targetOf(byText(query.text));
130
+ }`,o=e({EDITOR_MESSAGE_SOURCE:()=>p,MAX_ASSISTANT_WIDGET_HTML_BYTES:()=>MAX_ASSISTANT_WIDGET_HTML_BYTES,MAX_WIDGET_CONTENT_SIZE:()=>h,MAX_WIDGET_HTML_BYTES:()=>r,MAX_WIDGET_WHEEL_DELTA:()=>m,WIDGET_FONT_HOSTS:()=>u,WIDGET_MESSAGE_SOURCE:()=>f,WIDGET_ORIGIN:()=>WIDGET_ORIGIN,WIDGET_PATH:()=>`/w`,WIDGET_SANDBOX:()=>s,WIDGET_SCRIPT_HOSTS:()=>c,WIDGET_SOURCE_CONTENT_TYPE:()=>WIDGET_SOURCE_CONTENT_TYPE,WIDGET_SOURCE_PREFIX:()=>WIDGET_SOURCE_PREFIX,WIDGET_STYLE_HOSTS:()=>l,fetchWidgetSource:()=>D,lintWidgetHtml:()=>N,parseWidgetMessage:()=>C,parseWidgetSource:()=>E}),s=`allow-scripts`,c=[`cdn.jsdelivr.net`,`unpkg.com`,`cdnjs.cloudflare.com`,`cdn.tailwindcss.com`,`esm.sh`],l=[...c,`fonts.googleapis.com`],u=[`fonts.gstatic.com`,...c],d=`https://koboyo.com`,f=`koboyo-widget`,p=`koboyo-editor`,m=1e3,h=2e4,g=1e5,_=64;function v(e){return typeof e==`number`&&Number.isFinite(e)}function y(e,t){return Math.max(-t,Math.min(t,e))}function b(e){return typeof e==`string`&&e.length>0&&e.length<=_}function x(e){return{x:y(e.x,g),y:y(e.y,g),w:Math.max(0,Math.min(g,e.w)),h:Math.max(0,Math.min(g,e.h))}}function S(e){if(e===null)return null;if(i(e))return{tag:e.tag,text:e.text,selector:e.selector,box:x(e.box)}}function C(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.source!==`koboyo-widget`)return null;let n=f;switch(t.type){case`ready`:case`rendered`:return{source:n,type:t.type};case`size`:{let{width:e,height:r}=t;if(!v(e)||!v(r))return null;let i=e=>Math.max(0,Math.min(h,e));return{source:n,type:`size`,width:i(e),height:i(r)}}case`wheel`:{let{dx:e,dy:r,x:i,y:a,ctrl:o}=t;return!v(e)||!v(r)||!v(i)||!v(a)||typeof o!=`boolean`?null:{source:n,type:`wheel`,dx:y(e,m),dy:y(r,m),ctrl:o,x:y(i,g),y:y(a,g)}}case`key`:return t.key===`Escape`?{source:n,type:`key`,key:`Escape`}:null;case`probe-result`:case`locate-text-result`:{let e=S(t.target);return!b(t.id)||e===void 0?null:{source:n,type:t.type,id:t.id,target:e}}case`locate-result`:{if(!b(t.id))return null;if(t.box===null)return{source:n,type:`locate-result`,id:t.id,box:null};let e=S({tag:`x`,text:``,selector:``,box:t.box});return e?{source:n,type:`locate-result`,id:t.id,box:e.box}:null}default:return null}}var w=String.raw`(function () {
131
+ var parent = window.parent;
132
+ var origin = __ORIGIN__;
133
+ var doc = document;
134
+ var pending = null;
135
+ function post(message) {
136
+ message.source = "${f}";
137
+ parent.postMessage(message, origin);
138
+ }
139
+ function num(value) {
140
+ return typeof value === "number" && isFinite(value);
141
+ }
142
+ function focusable(el) {
143
+ for (var node = el; node && node.nodeType === 1; node = node.parentNode) {
144
+ if (/^(INPUT|TEXTAREA|SELECT|BUTTON)$/.test(node.tagName) || node.isContentEditable ||
145
+ node.hasAttribute("tabindex") || (node.tagName === "A" && node.hasAttribute("href"))) {
146
+ return node;
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+ function fire(el, type, x, y, down, Ctor) {
152
+ return el.dispatchEvent(new Ctor(type, {
153
+ bubbles: true, cancelable: true, composed: true, view: window, detail: 1,
154
+ clientX: x, clientY: y, button: 0, buttons: down ? 1 : 0,
155
+ pointerId: 1, pointerType: "mouse", isPrimary: true
156
+ }));
157
+ }
158
+ function click(x, y) {
159
+ var el = doc.elementFromPoint(x, y);
160
+ if (!el) {
161
+ return;
162
+ }
163
+ var Pointer = typeof PointerEvent === "function" ? PointerEvent : null;
164
+ if (Pointer) {
165
+ fire(el, "pointerdown", x, y, true, Pointer);
166
+ }
167
+ var focus = fire(el, "mousedown", x, y, true, MouseEvent);
168
+ var target = focus ? focusable(el) : null;
169
+ if (target && typeof target.focus === "function") {
170
+ target.focus();
171
+ }
172
+ if (Pointer) {
173
+ fire(el, "pointerup", x, y, false, Pointer);
174
+ }
175
+ fire(el, "mouseup", x, y, false, MouseEvent);
176
+ fire(el, "click", x, y, false, MouseEvent);
177
+ }
178
+ var probe = ${a};
179
+ function ask(query) {
180
+ try {
181
+ return probe(query);
182
+ } catch (error) {
183
+ return null;
184
+ }
185
+ }
186
+ window.addEventListener("message", function (event) {
187
+ var data = event.data;
188
+ if (event.source !== parent || event.origin !== origin || !data || data.source !== "${p}") {
189
+ return;
190
+ }
191
+ if (data.type === "click" && num(data.x) && num(data.y)) {
192
+ click(data.x, data.y);
193
+ } else if (data.type === "probe" && typeof data.id === "string" && num(data.x) && num(data.y)) {
194
+ post({ type: "probe-result", id: data.id, target: ask({ kind: "point", x: data.x, y: data.y }) });
195
+ } else if (data.type === "locate" && typeof data.id === "string" && typeof data.selector === "string") {
196
+ var found = ask({ kind: "selector", selector: data.selector });
197
+ post({ type: "locate-result", id: data.id, box: found ? found.box : null });
198
+ } else if (data.type === "locate-text" && typeof data.id === "string" && typeof data.text === "string") {
199
+ post({ type: "locate-text-result", id: data.id, target: ask({ kind: "text", text: data.text }) });
200
+ }
201
+ });
202
+ function open(value) {
203
+ return value === "auto" || value === "scroll" || value === "overlay";
204
+ }
205
+ function rootOverflow(axis) {
206
+ var value = getComputedStyle(doc.documentElement)[axis];
207
+ if (value === "visible" && doc.body) {
208
+ value = getComputedStyle(doc.body)[axis];
209
+ }
210
+ return value !== "hidden" && value !== "clip";
211
+ }
212
+ function canScroll(node, dx, dy) {
213
+ var root = node === doc.scrollingElement;
214
+ if (node === doc.body && !root) {
215
+ return false;
216
+ }
217
+ var style = root ? null : getComputedStyle(node);
218
+ if (dy !== 0 && (root ? rootOverflow("overflowY") : open(style.overflowY))) {
219
+ var maxY = node.scrollHeight - node.clientHeight;
220
+ if (maxY > 1 && (dy > 0 ? node.scrollTop < maxY - 1 : node.scrollTop > 0)) {
221
+ return true;
222
+ }
223
+ }
224
+ if (dx !== 0 && (root ? rootOverflow("overflowX") : open(style.overflowX))) {
225
+ var maxX = node.scrollWidth - node.clientWidth;
226
+ if (maxX > 1 && (dx > 0 ? node.scrollLeft < maxX - 1 : node.scrollLeft > 0)) {
227
+ return true;
228
+ }
229
+ }
230
+ return false;
231
+ }
232
+ function scrolls(el, dx, dy) {
233
+ for (var node = el; node && node.nodeType === 1; node = node.parentNode) {
234
+ if (canScroll(node, dx, dy)) {
235
+ return true;
236
+ }
237
+ }
238
+ return false;
239
+ }
240
+ function flush() {
241
+ var message = pending;
242
+ pending = null;
243
+ if (message) {
244
+ post(message);
245
+ }
246
+ }
247
+ window.addEventListener("wheel", function (event) {
248
+ if (event.defaultPrevented) {
249
+ return;
250
+ }
251
+ var unit = event.deltaMode === 1 ? 16 : event.deltaMode === 2 ? window.innerHeight : 1;
252
+ var dx = event.deltaX * unit;
253
+ var dy = event.deltaY * unit;
254
+ if (event.shiftKey && dx === 0) {
255
+ dx = dy;
256
+ dy = 0;
257
+ }
258
+ var ctrl = !!(event.ctrlKey || event.metaKey);
259
+ if (!ctrl && scrolls(event.target, dx, dy)) {
260
+ return;
261
+ }
262
+ event.preventDefault();
263
+ if (pending && pending.ctrl !== ctrl) {
264
+ flush();
265
+ }
266
+ if (!pending) {
267
+ pending = { type: "wheel", dx: 0, dy: 0, ctrl: ctrl, x: 0, y: 0 };
268
+ requestAnimationFrame(flush);
269
+ }
270
+ pending.dx += dx;
271
+ pending.dy += dy;
272
+ pending.x = event.clientX;
273
+ pending.y = event.clientY;
274
+ }, { passive: false });
275
+ window.addEventListener("keydown", function (event) {
276
+ if (event.key === "Escape") {
277
+ post({ type: "key", key: "Escape" });
278
+ }
279
+ }, true);
280
+ var sized = "";
281
+ var sizeTimer = 0;
282
+ // The page's own height, not the frame's: documentElement never reports
283
+ // less than the box, which would let Fit height grow a box but never
284
+ // shrink it. A body stretched to the viewport (min-height: 100vh) still
285
+ // reads as the box, which is what that page asked for.
286
+ function contentHeight(root) {
287
+ var body = doc.body;
288
+ if (!body || !window.getComputedStyle) {
289
+ return root.scrollHeight;
290
+ }
291
+ var style = window.getComputedStyle(body);
292
+ var margins = (parseFloat(style.marginTop) || 0) + (parseFloat(style.marginBottom) || 0);
293
+ return Math.ceil(Math.max(body.scrollHeight, body.getBoundingClientRect().height) + margins);
294
+ }
295
+ function sendSize() {
296
+ sizeTimer = 0;
297
+ var root = doc.documentElement;
298
+ if (!root) {
299
+ return;
300
+ }
301
+ var width = Math.min(${h}, root.scrollWidth);
302
+ var height = Math.min(${h}, contentHeight(root));
303
+ if (width + "x" + height !== sized) {
304
+ sized = width + "x" + height;
305
+ post({ type: "size", width: width, height: height });
306
+ }
307
+ }
308
+ function measure() {
309
+ if (!sizeTimer) {
310
+ sizeTimer = setTimeout(sendSize, 200);
311
+ }
312
+ }
313
+ if (typeof ResizeObserver === "function") {
314
+ var observer = new ResizeObserver(measure);
315
+ observer.observe(doc.documentElement);
316
+ doc.addEventListener("DOMContentLoaded", function () {
317
+ if (doc.body) {
318
+ observer.observe(doc.body);
319
+ }
320
+ });
321
+ }
322
+ doc.addEventListener("DOMContentLoaded", measure);
323
+ window.addEventListener("load", measure);
324
+ window.addEventListener("resize", measure);
325
+ })();`;`${r}${d}${p}${f}${f}`;function T(e){return JSON.stringify(e).replace(/</g,`\\u003c`)}T(w);function E(e){let t;try{t=JSON.parse(e)}catch{return null}if(typeof t!=`object`||!t)return null;let r=t.html;return typeof r!=`string`||n(r)>131072?null:r}async function D(e,n={}){if(!t(e,n.prefix))return null;let r=n.fetch??fetch;try{let t=await r(e,{credentials:`omit`,referrerPolicy:`no-referrer`,signal:n.signal});return t.ok?E(await t.text()):null}catch{return null}}var O=[[/\bfetch\s*\(/,`fetch()`],[/\bXMLHttpRequest\b/,`XMLHttpRequest`],[/\bWebSocket\b/,`WebSocket`],[/\bEventSource\b/,`EventSource`]];function k(e,t){let n=RegExp(`\\s${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s"'>]+))`,`i`).exec(e);return n?n[1]??n[2]??n[3]??``:null}function A(e,t){let n=e.trim();if(/^data:/i.test(n))return null;let r;try{r=new URL(n.startsWith(`//`)?`https:${n}`:n)}catch{return`"${n}" is a relative path, and a widget has no files of its own`}return r.protocol===`https:`?t.has(r.hostname.toLowerCase())?null:`${r.hostname} isn't on the allowed list`:`"${n}" isn't https`}var j=new Set(c),M=new Set([...l,...u]);function N(e){let t=[],i=n(e);i>131072&&t.push(`The HTML is ${Math.ceil(i/1024)} KB; a widget can be at most ${r/1024} KB.`);for(let[n,r]of O)n.test(e)&&t.push(`It uses ${r}, but widgets have no network access, so it will fail. Inline the data instead.`);for(let n of e.match(/<script\b[^>]*>/gi)??[]){let e=k(n,`src`),r=e===null?null:A(e,j);r&&t.push(`A script won't load: ${r}. Scripts can come from ${c.join(`, `)}.`)}for(let n of e.match(/<link\b[^>]*>/gi)??[]){let e=k(n,`href`),r=e===null?null:A(e,M);r&&t.push(`A stylesheet won't load: ${r}. Styles can come from ${l.join(`, `)}.`)}return/<form\b[^>]*\saction\s*=/i.test(e)&&t.push(`A form has an action, but widgets can't submit forms anywhere.`),/\b(?:top|parent)\.location\b/.test(e)&&t.push(`It tries to navigate the page around it, which widgets can't do.`),t}export{C as a,N as i,m as n,o,s as r,p as t};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-widgets-DsFUBhiq.js","assets/rolldown-runtime-aKtaBQYM.js","assets/web-widget-limits-DeMquLIR.js","assets/widget-target-C9a207gT.js"])))=>i.map(i=>d[i]);
2
+ import{i as e,n as t}from"./rolldown-runtime-aKtaBQYM.js";import{t as n}from"./react-lCSYwAWP.js";import{t as r}from"./preload-helper-Czpn1I53.js";var i=t({loadWidgetSource:()=>h,useWidgetHtml:()=>g,widgetSourceOf:()=>m}),a=e(n(),1),o={status:`loading`},s={status:`failed`},c=100,l=new Map,u=new Map,d=new Set;function f(){for(let e of d)e()}function p(e){return d.add(e),()=>{d.delete(e)}}function m(e){return e.kind===`html`?typeof e.html==`string`?e.html.length>0?{html:e.html}:null:e.htmlSrc?{src:e.htmlSrc}:null:null}function h(e){let t=l.get(e);if(t?.status===`ready`)return Promise.resolve(t.html);let n=u.get(e);if(n)return n;l.set(e,o);let i=r(()=>import(`./web-widgets-DsFUBhiq.js`).then(e=>e.o).then(t=>t.fetchWidgetSource(e)),__vite__mapDeps([0,1,2,3])).catch(()=>null).then(t=>(u.delete(e),t===null?l.set(e,s):(l.size>=c&&l.delete(l.keys().next().value),l.set(e,{status:`ready`,html:t})),f(),t));return u.set(e,i),i}function g(e,t){let n=e&&`src`in e?e.src:null,r=(0,a.useSyncExternalStore)(p,()=>n?l.get(n)??null:null);return(0,a.useEffect)(()=>{if(!n||!t)return;let e=l.get(n);e?.status===`ready`||e?.status===`loading`||h(n)},[n,t]),e?`html`in e?{status:`ready`,html:e.html}:!t&&r?.status!==`ready`?null:r??o:null}export{i,g as n,m as r,h as t};
@@ -0,0 +1 @@
1
+ function e(e){return typeof e==`number`&&Number.isFinite(e)}function t(e,t){return typeof e==`string`&&e.length<=t}function n(t){if(typeof t!=`object`||!t)return!1;let n=t;return e(n.x)&&e(n.y)&&e(n.w)&&e(n.h)}function r(e){if(typeof e!=`object`||!e)return!1;let r=e;return t(r.tag,32)&&t(r.text,200)&&t(r.selector,400)&&n(r.box)}export{r as t};
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <meta name="color-scheme" content="light" />
7
7
  <title>Koboyo</title>
8
- <script type="module" crossorigin src="/assets/index-CBPPqsiR.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DFwoT1_W.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/react-lCSYwAWP.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-DKdBMi_L.js">
@@ -15,48 +15,52 @@
15
15
  <link rel="modulepreload" crossorigin href="/assets/useButton-CLQYGhRJ.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/usePositioner-AtbrPc7w.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/style-BENGW2ZV.js">
18
- <link rel="modulepreload" crossorigin href="/assets/slides-D686obFO.js">
19
- <link rel="modulepreload" crossorigin href="/assets/reflow-DaYiVkwp.js">
20
- <link rel="modulepreload" crossorigin href="/assets/editor-BeufBV54.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/shapes-D5w8NTQQ.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/slides-DDNzjFz9.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/reflow-C6bvnSVm.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/web-embed-url-CHu4SU82.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/web-widget-limits-DeMquLIR.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/editor-DAJETlQW.js">
21
24
  <link rel="modulepreload" crossorigin href="/assets/keys-DrjiT9FL.js">
22
25
  <link rel="modulepreload" crossorigin href="/assets/useBaseUiId-D2RfU0uY.js">
23
- <link rel="modulepreload" crossorigin href="/assets/tooltip-CyBz17g8.js">
26
+ <link rel="modulepreload" crossorigin href="/assets/tooltip-CKCG8vcp.js">
24
27
  <link rel="modulepreload" crossorigin href="/assets/createReactComponent-C51FAx3B.js">
25
28
  <link rel="modulepreload" crossorigin href="/assets/useValueChanged-SqLfIDi5.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/useTriggerFocusGuards-Mibi8yYw.js">
26
30
  <link rel="modulepreload" crossorigin href="/assets/useAnchoredPopupScrollLock-i8D5Dm1d.js">
27
31
  <link rel="modulepreload" crossorigin href="/assets/surface-Dke4SWpE.js">
28
- <link rel="modulepreload" crossorigin href="/assets/menu-B9BAk63v.js">
32
+ <link rel="modulepreload" crossorigin href="/assets/menu-4xb5HtA1.js">
29
33
  <link rel="modulepreload" crossorigin href="/assets/config-D8b1QyEk.js">
30
- <link rel="modulepreload" crossorigin href="/assets/registry-rEGZW7Ab.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/registry-d5KleeyB.js">
31
35
  <link rel="modulepreload" crossorigin href="/assets/renderer-environment-D3n3hbug.js">
32
36
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
33
- <link rel="modulepreload" crossorigin href="/assets/text-breaks-DM4W6y5f.js">
37
+ <link rel="modulepreload" crossorigin href="/assets/web-card-font-BbZEq3En.js">
38
+ <link rel="modulepreload" crossorigin href="/assets/text-breaks-DhCXtQrJ.js">
34
39
  <link rel="modulepreload" crossorigin href="/assets/blob-CTPsKWYv.js">
35
40
  <link rel="modulepreload" crossorigin href="/assets/icon-sources-CZI1h18s.js">
36
41
  <link rel="modulepreload" crossorigin href="/assets/icons-DzW1j-r3.js">
37
- <link rel="modulepreload" crossorigin href="/assets/theme-palette-Dl_G_VIJ.js">
38
- <link rel="modulepreload" crossorigin href="/assets/elk-worker-loader-CVBdN1je.js">
42
+ <link rel="modulepreload" crossorigin href="/assets/theme-palette-DEq19D0h.js">
43
+ <link rel="modulepreload" crossorigin href="/assets/elk-worker-loader-BCdkmVMX.js">
39
44
  <link rel="modulepreload" crossorigin href="/assets/dom-PAoZruqo.js">
40
- <link rel="modulepreload" crossorigin href="/assets/selection-overlay-primitives-BRp854AD.js">
45
+ <link rel="modulepreload" crossorigin href="/assets/selection-overlay-primitives-CfOaP5_G.js">
41
46
  <link rel="modulepreload" crossorigin href="/assets/storage-CvDRYh5V.js">
42
47
  <link rel="modulepreload" crossorigin href="/assets/export-options-CJwykdP5.js">
43
48
  <link rel="modulepreload" crossorigin href="/assets/IconMinus-BcaDLts8.js">
44
49
  <link rel="modulepreload" crossorigin href="/assets/IconPlus-D4tAoi-A.js">
45
- <link rel="modulepreload" crossorigin href="/assets/PopoverPopup-B3Y0VRYc.js">
50
+ <link rel="modulepreload" crossorigin href="/assets/PopoverPopup-1zO38CRl.js">
46
51
  <link rel="modulepreload" crossorigin href="/assets/chrome-C2RCq3SI.js">
47
- <link rel="modulepreload" crossorigin href="/assets/panel-controls-DWVXiNUZ.js">
48
- <link rel="modulepreload" crossorigin href="/assets/presenter-keys-Bs3LnmOa.js">
52
+ <link rel="modulepreload" crossorigin href="/assets/panel-controls-B0Ccd0XF.js">
53
+ <link rel="modulepreload" crossorigin href="/assets/presenter-keys-DLNIsrm5.js">
49
54
  <link rel="modulepreload" crossorigin href="/assets/lazy-module-DkWvu4va.js">
50
- <link rel="modulepreload" crossorigin href="/assets/IconHelp-CaEwHrsN.js">
51
- <link rel="modulepreload" crossorigin href="/assets/tidy-scope-BGG3ZXvZ.js">
55
+ <link rel="modulepreload" crossorigin href="/assets/IconHelp-4FIVl1rh.js">
56
+ <link rel="modulepreload" crossorigin href="/assets/tidy-scope-REEad7oC.js">
52
57
  <link rel="modulepreload" crossorigin href="/assets/clipboard-CO7YHov7.js">
53
- <link rel="modulepreload" crossorigin href="/assets/frames-Cp1QD3LR.js">
54
- <link rel="modulepreload" crossorigin href="/assets/chart-4iRduYdU.js">
55
- <link rel="modulepreload" crossorigin href="/assets/web-shape-C941TGTy.js">
56
- <link rel="modulepreload" crossorigin href="/assets/shape-meta-COE2ATNh.js">
57
- <link rel="modulepreload" crossorigin href="/assets/diagram-fingerprint-WGQ5iVXx.js">
58
+ <link rel="modulepreload" crossorigin href="/assets/frames-DRSLvE9E.js">
59
+ <link rel="modulepreload" crossorigin href="/assets/chart-CKIxcbcM.js">
60
+ <link rel="modulepreload" crossorigin href="/assets/shape-meta-YgfIm0bQ.js">
61
+ <link rel="modulepreload" crossorigin href="/assets/diagram-fingerprint-B-HB8UbR.js">
58
62
  <link rel="modulepreload" crossorigin href="/assets/editable-target-BTLnvKNi.js">
59
- <link rel="modulepreload" crossorigin href="/assets/use-key-held-094C3Mn3.js">
63
+ <link rel="modulepreload" crossorigin href="/assets/use-key-held-DaUTxGze.js">
60
64
  <link rel="modulepreload" crossorigin href="/assets/IconAlertTriangle-B33xznYN.js">
61
65
  <link rel="modulepreload" crossorigin href="/assets/IconEraser-CYfXj27R.js">
62
66
  <link rel="modulepreload" crossorigin href="/assets/IconLink-VS5p9Ytk.js">
@@ -65,33 +69,35 @@
65
69
  <link rel="modulepreload" crossorigin href="/assets/IconPhoto-5zuCDtnR.js">
66
70
  <link rel="modulepreload" crossorigin href="/assets/IconSearch-CCpMt02s.js">
67
71
  <link rel="modulepreload" crossorigin href="/assets/IconSparkles-CnCp3BCQ.js">
68
- <link rel="modulepreload" crossorigin href="/assets/tool-catalog-DXPhX2S1.js">
69
- <link rel="modulepreload" crossorigin href="/assets/core-CmsJyU_-.js">
70
- <link rel="modulepreload" crossorigin href="/assets/flow-start-CpAvU-9P.js">
72
+ <link rel="modulepreload" crossorigin href="/assets/tool-catalog-CIjdZm_C.js">
73
+ <link rel="modulepreload" crossorigin href="/assets/core-C1TxysMz.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/flow-start-ByhFxEeV.js">
71
75
  <link rel="modulepreload" crossorigin href="/assets/IconTrash-C8w6ThWx.js">
72
76
  <link rel="modulepreload" crossorigin href="/assets/IconArrowLeft-B4Zcy-Fc.js">
73
77
  <link rel="modulepreload" crossorigin href="/assets/IconPresentation-BMKzt7fv.js">
74
- <link rel="modulepreload" crossorigin href="/assets/IconCode-CHIz1nCU.js">
75
- <link rel="modulepreload" crossorigin href="/assets/web-controls-CLE9zr7i.js">
76
78
  <link rel="modulepreload" crossorigin href="/assets/IconChevronRight-csfMBSUs.js">
79
+ <link rel="modulepreload" crossorigin href="/assets/IconCode-CHIz1nCU.js">
80
+ <link rel="modulepreload" crossorigin href="/assets/ContextMenuTrigger-CXUL1E23.js">
77
81
  <link rel="modulepreload" crossorigin href="/assets/useControlled-BE8zdmih.js">
82
+ <link rel="modulepreload" crossorigin href="/assets/IconReplace-CYUD1RLF.js">
78
83
  <link rel="modulepreload" crossorigin href="/assets/IconFocusCentered-Cn8rbfRI.js">
79
84
  <link rel="modulepreload" crossorigin href="/assets/billing-BSXr-z2r.js">
80
85
  <link rel="modulepreload" crossorigin href="/assets/IconLoader2-CzCTn-Sn.js">
81
- <link rel="modulepreload" crossorigin href="/assets/MenuSubmenuTrigger-KacA9GM8.js">
86
+ <link rel="modulepreload" crossorigin href="/assets/MenuSubmenuTrigger-BFlIkXYg.js">
82
87
  <link rel="modulepreload" crossorigin href="/assets/IconX-KrRqxr2j.js">
83
88
  <link rel="modulepreload" crossorigin href="/assets/IconPlayerPlayFilled-DVAWmYt7.js">
84
- <link rel="modulepreload" crossorigin href="/assets/use-export-command-sC9UHj3_.js">
85
- <link rel="modulepreload" crossorigin href="/assets/widget-source-CHujvUeA.js">
86
- <link rel="modulepreload" crossorigin href="/assets/asset-glyph-C1E6cGwM.js">
87
- <link rel="modulepreload" crossorigin href="/assets/plan-CkgM52Yh.js">
89
+ <link rel="modulepreload" crossorigin href="/assets/use-export-command-BR-A4kAa.js">
90
+ <link rel="modulepreload" crossorigin href="/assets/shape-render-DZscezZk.js">
91
+ <link rel="modulepreload" crossorigin href="/assets/asset-glyph-DjBHkQcP.js">
92
+ <link rel="modulepreload" crossorigin href="/assets/plan-D4Jyzo5X.js">
93
+ <link rel="modulepreload" crossorigin href="/assets/widget-target-C9a207gT.js">
88
94
  <link rel="modulepreload" crossorigin href="/assets/DialogRoot-DUeVfNhS.js">
89
95
  <link rel="modulepreload" crossorigin href="/assets/DialogTitle-D5au2NAn.js">
90
96
  <link rel="modulepreload" crossorigin href="/assets/DialogDescription-Ddhk2rmF.js">
91
97
  <link rel="modulepreload" crossorigin href="/assets/dialog-DnXgEbpz.js">
92
- <link rel="modulepreload" crossorigin href="/assets/use-icon-node-BxqH7H27.js">
93
- <link rel="modulepreload" crossorigin href="/assets/chrome-layout-BzPU9far.js">
94
- <link rel="modulepreload" crossorigin href="/assets/panel-shell-BnMOHgWM.js">
98
+ <link rel="modulepreload" crossorigin href="/assets/use-icon-node-uhKPP4Ki.js">
99
+ <link rel="modulepreload" crossorigin href="/assets/chrome-layout-D5dql-y4.js">
100
+ <link rel="modulepreload" crossorigin href="/assets/panel-shell-COqmheb-.js">
95
101
  <link rel="stylesheet" crossorigin href="/assets/index-DBrN0u0i.css">
96
102
  </head>
97
103
  <body>