backflow-ui-renderer 0.1.63 → 0.1.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -119,7 +119,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
119
119
 
120
120
  ![]($1)
121
121
 
122
- `),r=r.replace(/(^|[\s(])(https?:\/\/[^\s)]+\.(?:png|jpe?g|gif|webp|avif))(?=$|[\s)])/gim,"$1![]($2)");const i=b=>{const _=[],S=/(\*\*(.+?)\*\*)|(\*(.+?)\*)|(`(.+?)`)|(\[(.+?)\]\((.+?)\))|(~~(.+?)~~)/g;let A=0,C;for(;(C=S.exec(b))!==null;)C.index>A&&_.push(b.slice(A,C.index)),C[2]?_.push(V("strong",{key:_.length},C[2])):C[4]?_.push(V("em",{key:_.length},C[4])):C[6]?_.push(V("code",{key:_.length},C[6])):C[8]?_.push(V("a",{key:_.length,href:C[9],target:"_blank",rel:"noopener noreferrer"},C[8])):C[11]&&_.push(V("del",{key:_.length},C[11])),A=C.index+C[0].length;return A<b.length&&_.push(b.slice(A)),_},o=b=>{const _=[],S=/!\[(.*?)\]\(([^)\s]+)\)/g;let A=0,C;for(;(C=S.exec(b))!==null;){C.index>A&&_.push(...i(b.slice(A,C.index)));const w=C[2];_.push(V("img",{key:`mdimg-${_.length}`,src:w,alt:C[1]||"",style:{display:"block",margin:"6px 0",maxWidth:"100%",maxHeight:"180px",borderRadius:"12px",objectFit:"cover",cursor:"zoom-in"},onClick:()=>e.handleButtonClick(`set_data:_previewImage=${w};show_modal:image-preview`)})),A=C.index+C[0].length}return A<b.length&&_.push(...i(b.slice(A))),_},s=r.split(`
122
+ `),r=r.replace(/(^|[\s(])(https?:\/\/[^\s)]+\.(?:png|jpe?g|gif|webp|avif))(?=$|[\s)])/gim,"$1![]($2)"),r=r.replace(/(^|[\s(])(\/assets\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/[^\s)]+)(?=$|[\s)])/gim,"$1![]($2)");const i=b=>{const _=[],S=/(\*\*(.+?)\*\*)|(\*(.+?)\*)|(`(.+?)`)|(\[(.+?)\]\((.+?)\))|(~~(.+?)~~)/g;let A=0,C;for(;(C=S.exec(b))!==null;)C.index>A&&_.push(b.slice(A,C.index)),C[2]?_.push(V("strong",{key:_.length},C[2])):C[4]?_.push(V("em",{key:_.length},C[4])):C[6]?_.push(V("code",{key:_.length},C[6])):C[8]?_.push(V("a",{key:_.length,href:C[9],target:"_blank",rel:"noopener noreferrer"},C[8])):C[11]&&_.push(V("del",{key:_.length},C[11])),A=C.index+C[0].length;return A<b.length&&_.push(b.slice(A)),_},o=b=>{const _=[],S=/!\[(.*?)\]\(([^)\s]+)\)/g;let A=0,C;for(;(C=S.exec(b))!==null;){C.index>A&&_.push(...i(b.slice(A,C.index)));const w=C[2];_.push(V("img",{key:`mdimg-${_.length}`,src:w,alt:C[1]||"",style:{display:"block",margin:"6px 0",maxWidth:"100%",maxHeight:"180px",borderRadius:"12px",objectFit:"cover",cursor:"zoom-in"},onClick:()=>e.handleButtonClick(`set_data:_previewImage=${w};show_modal:image-preview`)})),A=C.index+C[0].length}return A<b.length&&_.push(...i(b.slice(A))),_},s=r.split(`
123
123
  `),a=[];let c=null,h=!1,u=[];const f=b=>{c&&(a.push(y.createElement(c.type,{key:b,style:{paddingLeft:"1.5rem",margin:"0.5rem 0",listStyleType:c.type==="ul"?"disc":"decimal"}},c.items.map((_,S)=>V("li",{key:`${b}-${S}`},_)))),c=null)},p=b=>{if(u.length===0)return;const _=u.join(`
124
124
  `);a.push(V("div",{key:b,style:{position:"relative",background:"#1e1e2e",borderRadius:"8px",margin:"0.5rem 0"}},V("button",{style:{position:"absolute",top:"8px",right:"8px",background:"transparent",border:"none",color:"#666",cursor:"pointer",padding:"4px",borderRadius:"4px",lineHeight:"1",zIndex:1,display:"inline-flex",alignItems:"center",fontSize:"14px"},onClick:S=>{S.preventDefault(),S.stopPropagation(),(C=>{navigator.clipboard.writeText(C).catch(()=>{const w=document.createElement("textarea");w.value=C,w.style.position="fixed",w.style.opacity="0",document.body.appendChild(w),w.select(),document.execCommand("copy"),document.body.removeChild(w)})})(_)}},V("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},V("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),V("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"}))),V("pre",{style:{padding:"16px 12px",margin:0,overflow:"auto",fontSize:"13px",lineHeight:"1.5",color:"#e2e8f0"}},V("code",null,_)))),u=[]};for(let b=0;b<s.length;b++){const _=s[b],S=_.trim();if(S.startsWith("```")){h?(p(`code-${b}`),h=!1):(f(`list-${b}`),h=!0,u=[]);continue}if(h){u.push(_);continue}if(!S){f(`list-${b}`);continue}const A=S.match(/^(#{1,3})\s+(.+)/);if(A){f(`list-${b}`);const w=A[1].length,E=`h${w}`,k={1:"1.5em",2:"1.25em",3:"1.1em"}[w];a.push(y.createElement(E,{key:b,style:{margin:"0.75rem 0 0.25rem",fontSize:k,fontWeight:700}},...o(A[2])));continue}if(S.startsWith("- ")||S.startsWith("* ")){const w=S.slice(2);c?c.type!=="ul"&&(f(`list-${b}`),c={type:"ul",items:[]}):c={type:"ul",items:[]},c.items.push(y.createElement(y.Fragment,{},...o(w)));continue}const C=S.match(/^\d+\.\s+(.+)/);if(C){c?c.type!=="ol"&&(f(`list-${b}`),c={type:"ol",items:[]}):c={type:"ol",items:[]},c.items.push(y.createElement(y.Fragment,{},...o(C[1])));continue}f(`list-${b}`),a.push(V("p",{key:b,style:{margin:"0.25rem 0"}},...o(S)))}h&&p("code-end"),f("list-end");const g={};t.fontSize!==void 0&&(g.fontSize=`${t.fontSize}px`),t.fontWeight!==void 0&&(g.fontWeight=t.fontWeight),t.color!==void 0&&(g.color=t.color),t.textAlign!==void 0&&(g.textAlign=t.textAlign);const x=t.className?{...g,...e.parseClassName(t.className)}:g,m=e.getCommonProps(n,x,t);return V("div",{key:n,...m},...a)}function lht(e,t,n){const r=e.cfg.colors,i={position:"relative",marginTop:"auto",bottom:0,left:0,right:0,zIndex:40,display:"flex",justifyContent:"space-around",alignItems:"stretch",backgroundColor:r.surfaceHover,borderTop:`1px solid ${r.border}`,padding:"6px 0",boxShadow:"0 -2px 8px rgba(0,0,0,0.08)"},s=(Array.isArray(t.items)?t.items:[]).map((c,h)=>{const u=c.active||!1,f=()=>{const p=()=>e.handleButtonClick(c.onClick||"");(e.withLoading?e.withLoading(`${n}-bn-${h}`,p):p()).catch(()=>{})};return V("button",{key:`${n}-bn-${h}`,onClick:f,style:{background:"none",border:"none",cursor:"pointer",flex:1,display:"flex",flexDirection:"column",alignItems:"center",gap:2,padding:"6px 0",color:u?r.primary:r.textMuted,fontSize:11,fontFamily:"inherit"},"aria-label":c.label||c.icon||"nav item"},c.icon?e.renderIcon(c.icon,20):null,c.label?V("span",{},c.label):null)}),a=e.getCommonProps(n,i,t);return V("div",{key:n,...a},...s)}function cht(e,t,n){if(t.resizable)return y.createElement(sut,{api:e,config:t,componentKey:n,key:n});const r=Array.isArray(t.panes)?t.panes:[],i=t.orientation==="vertical",o=t.className?{display:"flex",flexDirection:i?"column":"row",alignItems:"stretch",...e.parseClassName(t.className)}:{display:"flex",flexDirection:i?"column":"row",alignItems:"stretch",width:"100%",flex:1,minHeight:0},s=r.map((c,h)=>{const u=c.width!==void 0?c.width:h===r.length-1?"1fr":"50%",f={[i?"height":"width"]:u,minWidth:0,display:"flex",flexDirection:"column",overflow:"hidden"},p=`${n}-split-${h}`;return V("div",{key:p,style:f},c.component?e.renderComponent(c.component,h,`${n}-split`):null)}),a=e.getCommonProps(n,o,t);return V("div",{key:n,...a},...s)}function uht(e,t,n){var c;const r=e.cfg.colorMode!=="light",i=()=>{var h;return(h=e.setColorMode)==null?void 0:h.call(e,r?"light":"dark")},o=t.className?e.parseClassName(t.className):{background:"none",border:`1px solid ${e.cfg.colorMode==="light"?e.cfg.colors.border:"transparent"}`,borderRadius:8,cursor:"pointer",display:"flex",alignItems:"center",gap:6,padding:"6px 10px",color:e.cfg.colors.text,fontSize:14,fontFamily:"inherit"},s=e.getCommonProps(n,o,t),a=((c=e.renderIcon)==null?void 0:c.call(e,r?"sun":"moon",16))??V("span",{},r?"☀️":"🌙");return V("button",{key:n,...s,onClick:i,"aria-label":r?"Switch to light mode":"Switch to dark mode"},V("span",{style:{display:"inline-flex"}},a),t.text?V("span",{},t.text):null)}const hht=y.memo(function({api:t,c:n,componentKey:r}){var m;const i=n.activeKey||"_locating",o=n.latitudeKey||"latitude",s=n.longitudeKey||"longitude",[a,c]=y.useState(!1),h=!!((m=t.sceneData)!=null&&m[i])||a,u=b=>{b&&t.handleButtonClick(t.interpolateText(b),void 0,{payload:n.payload}).catch(()=>{})},f=()=>{var b;if(!a){if(typeof navigator>"u"||!navigator.geolocation){(b=t.showToast)==null||b.call(t,"Location is not available on this device","error");return}c(!0),navigator.geolocation.getCurrentPosition(_=>{c(!1),t.setSceneData(S=>({...S,[i]:!0,[o]:_.coords.latitude,[s]:_.coords.longitude,_locationError:""})),u(n.onLocation)},_=>{var S;c(!1),t.setSceneData(A=>({...A,[i]:!1,_locationError:String((_==null?void 0:_.message)||"Location denied")})),(S=t.showToast)==null||S.call(t,n.errorText||"Could not get your location","error")},{enableHighAccuracy:!0,timeout:Number(n.timeout)||8e3,maximumAge:0})}},p=()=>{t.setSceneData(b=>({...b,[i]:!1,[o]:"",[s]:""})),u(n.offAction)},g=n.className?t.parseClassName(n.className):{display:"inline-flex",alignItems:"center",gap:"10px",cursor:"pointer",background:"none",border:"none",color:t.cfg.colors.text,font:"inherit",padding:0},x=t.getCommonProps(r,g,n);return V("button",{key:r,type:"button",...x,"aria-pressed":h,onClick:h?p:f},V("span",{style:{position:"relative",width:"38px",height:"22px",borderRadius:"9999px",flexShrink:0,background:h?t.cfg.colors.primary:"color-mix(in srgb, currentColor 25%, transparent)",transition:"background 0.15s ease"}},V("span",{style:{position:"absolute",top:"3px",left:h?"19px":"3px",width:"16px",height:"16px",borderRadius:"50%",background:"#fff",transition:"left 0.15s ease"}})),V("span",{},a?n.locatingText||"Locating…":h?n.activeText||n.label||"Location on":n.label||"Use my location"))});function fht(e,t,n){return y.createElement(hht,{api:e,c:t,componentKey:n,key:n})}const dht=y.memo(function({api:t,c:n,componentKey:r}){const i=t.interpolateText(String(n.until||"")),o=i?Date.parse(String(i)):NaN,s=Number.isFinite(o)?o:NaN,[a,c]=y.useState(()=>Date.now()),h=y.useRef(!1);y.useEffect(()=>{if(!Number.isFinite(s))return;const b=setInterval(()=>c(Date.now()),1e3);return()=>clearInterval(b)},[s]),y.useEffect(()=>{h.current=!1},[s]);const u=Number.isFinite(s)?Math.max(0,Math.ceil((s-a)/1e3)):0,f=Number.isFinite(s)&&u<=0;if(y.useEffect(()=>{f&&!h.current&&(h.current=!0,n.onExpire&&t.handleButtonClick(t.interpolateText(n.onExpire),void 0,{payload:n.payload}).catch(()=>{}))},[f]),!Number.isFinite(s))return null;const p=Math.floor(u/60),g=String(u%60).padStart(2,"0"),x={fontVariantNumeric:"tabular-nums",...n.className?t.parseClassName(n.className):{}},m=t.getCommonProps(r,x,n);return V("span",{key:r,...m},f?n.expiredText||"Expired":`${p}:${g}`)});function pht(e,t,n){return y.createElement(dht,{api:e,c:t,componentKey:n,key:n})}function mht(e){var o;const{api:t,config:n}=e,r=t.interpolateText(n.channel||""),i=t.interpolateText(n.entityId||"");return y.useEffect(()=>{var b;const s=t.sdk;if(!t.isAuthenticated||!((b=s==null?void 0:s.client)!=null&&b.createWebSocket)||!r)return;let a=null,c=null,h=[],u=!1,f=null;const p=()=>{const _=t.interpolateText(n.resolution||"")||"",S=String(_).match(/(\d+)\s*x\s*(\d+)/);return S?{width:Number(S[1]),height:Number(S[2])}:{width:Number(t.interpolateText(n.width))||1280,height:Number(t.interpolateText(n.height))||720}},g=Number(t.interpolateText(n.fps))||10,x=async()=>{var S;if(u)return;u=!0,c&&c.state!=="inactive"&&await new Promise(A=>{c.onstop=()=>A(),c.stop()}),(S=a==null?void 0:a.close)==null||S.call(a);const _=new Blob(h,{type:"video/webm"});if(h=[],_.size!==0)try{const A=t.interpolateText(n.entityId||"")||"cast",C=t.interpolateText(n.fileName||"")||`${n.entityType||"video"}-${A}.webm`,w=new File([_],C,{type:"video/webm"}),E=await s.files.upload(w,{bucket:n.bucket||"backflow-storage",entityType:n.entityType||"video",entityId:A});t.setSceneData(k=>({...k,sessionId:A,[n.assetField||"asset_id"]:E==null?void 0:E.id,_recorded:E})),n.onRecorded&&t.handleButtonClick(String(n.onRecorded),{})}catch(A){Yp("[recorder] upload failed:",A)}},m=()=>{if(c)return;const{width:_,height:S}=p(),A=document.createElement("canvas");A.width=_,A.height=S;const C=A.getContext("2d");if(C){f=w=>{const E=new Image;E.onload=()=>C.drawImage(E,0,0,_,S),E.src=w};try{const w=A.captureStream(g);c=new MediaRecorder(w,{mimeType:"video/webm",videoBitsPerSecond:5e6}),c.ondataavailable=E=>{E.data.size&&h.push(E.data)},c.start(500)}catch(w){Yp("[recorder] start failed:",w),c=null}}};return a=s.client.createWebSocket(r),a.onmessage=_=>{let S=_==null?void 0:_.data;if(typeof S=="string")try{S=JSON.parse(S)}catch{return}(S==null?void 0:S.type)==="screencast_frame"&&S.frame?(m(),f==null||f(S.frame)):((S==null?void 0:S.status)==="completed"||(S==null?void 0:S.status)==="failed"||(S==null?void 0:S.type)==="workflow_completed"||(S==null?void 0:S.type)==="workflow_failed")&&x()},a.onclose=()=>x(),a.onerror=()=>x(),()=>{var _,S;u=!0,(_=c==null?void 0:c.stop)==null||_.call(c),(S=a==null?void 0:a.close)==null||S.call(a)}},[t.isAuthenticated,r,i,(o=e.config)==null?void 0:o.channel]),null}function ght(e){var p,g,x,m,b;const{api:t,config:n,componentKey:r}=e,i=t.interpolateText(n.channel||""),o=y.useRef(null),s=y.useRef(null),[a,c]=y.useState(!1);y.useEffect(()=>{const _=()=>c(document.fullscreenElement===o.current);return document.addEventListener("fullscreenchange",_),()=>document.removeEventListener("fullscreenchange",_)},[]);const h=async()=>{var _;try{document.fullscreenElement?await document.exitFullscreen():await((_=o.current)==null?void 0:_.requestFullscreen())}catch{}},u=t.sdk,f=y.createElement(E2,{channel:i,enabled:t.isAuthenticated&&!!((p=u==null?void 0:u.client)!=null&&p.createWebSocket),createWebSocket:_=>u.client.createWebSocket(_),parseClassName:_=>t.parseClassName(_),brandColor:(x=(g=t.cfg)==null?void 0:g.colors)==null?void 0:x.primary,style:n.approval||{},preview:!!((m=n.approval)!=null&&m.preview),previewForm:(b=n.approval)==null?void 0:b.previewForm});return y.createElement("div",{key:r,ref:o,className:"relative w-full h-full bg-black group",style:{width:"100%",height:"100%",...n.clickToFullscreen===!0?{cursor:"pointer"}:{}},...n.clickToFullscreen===!0?{onClick:h}:{}},y.createElement("canvas",{ref:s,className:t.parseClassName(n.className||"w-full h-full object-contain bg-black [aspect-ratio:16/9]"),style:{width:"100%",height:"100%",objectFit:"contain"}}),n.fullscreen===!1?null:y.createElement("button",{type:"button",onClick:h,title:a?"Exit fullscreen":"Open fullscreen","aria-label":a?"Exit fullscreen":"Open fullscreen",className:"absolute top-2 right-2 z-20 inline-flex h-8 w-8 items-center justify-center rounded-full bg-black/55 text-white transition-opacity hover:bg-black/75"},t.renderIcon(a?"minimize-2":"maximize-2",16)),f)}function yht(e){var n;const t=e.apiUrl||((n=e.sdk)==null?void 0:n.endpoint)||window.location.origin;return`${String(t).replace(/\/+$/,"")}/diagnostics-chat`}function vht({api:e,config:t,componentKey:n}){var S;const[r,i]=y.useState([]),[o,s]=y.useState(""),[a,c]=y.useState(""),[h,u]=y.useState(!1),f=String(e.sceneData.remoteSessionId||"").trim(),p=async A=>{A.preventDefault();const C=o.trim();if(!(!C||h||!f)){i(w=>[...w,{role:"user",content:C},{role:"assistant",content:""}]),s(""),u(!0),c("Inspecting the active UI");try{const w=await fetch(yht(e),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${localStorage.getItem("token")||""}`},body:JSON.stringify({message:C,remoteSessionId:f})});if(!w.ok){const k=await w.json().catch(()=>null);throw new Error((k==null?void 0:k.error)||"Could not reach the diagnostic agent")}const E=await w.json();if(typeof(E==null?void 0:E.message)!="string")throw new Error("The diagnostic agent returned an invalid response");i(k=>{const I=[...k];return I[I.length-1]={role:"assistant",content:E.message},I})}catch(w){i(E=>{const k=[...E],I=k.length-1;return k[I]={role:"assistant",content:w.message},k})}finally{u(!1),c("")}}},g=t.className?((S=e.parseClassNameResponsive)==null?void 0:S.call(e,t.className,n))||e.parseClassName(t.className):{},x=e.getCommonProps(n,g,t),m=e.cfg.colors.surface,b=e.cfg.colors.text,_=e.cfg.colors.textMuted;return y.createElement("section",{...x,style:{...x.style,...g,display:"flex",flexDirection:"column",gap:"12px"}},y.createElement("div",{style:{minHeight:"180px",maxHeight:"380px",overflowY:"auto",display:"flex",flexDirection:"column",gap:"10px"}},r.length===0?y.createElement("span",{style:{color:_,fontSize:"13px"}},"Ask about a UI error, render issue, or unexpected request."):r.map((A,C)=>y.createElement("div",{key:`${A.role}-${C}`,style:{alignSelf:A.role==="user"?"flex-end":"stretch",maxWidth:A.role==="user"?"84%":"100%",padding:"10px 12px",borderRadius:"8px",background:A.role==="user"?e.cfg.colors.primary:m,color:b,whiteSpace:"pre-wrap",fontSize:"13px",lineHeight:1.5}},A.content||a||"Working..."))),f?null:y.createElement("span",{style:{color:e.cfg.colors.warning,fontSize:"12px"}},"A live remote UI session is required."),y.createElement("form",{onSubmit:p,style:{display:"flex",gap:"8px",alignItems:"flex-end"}},y.createElement("textarea",{value:o,disabled:h||!f,onChange:A=>s(A.target.value),placeholder:t.placeholder||"Ask the diagnostic agent",rows:3,style:{flex:1,resize:"vertical",minHeight:"72px",padding:"10px 12px",borderRadius:"8px",border:`1px solid ${e.cfg.colors.borderSubtle}`,background:m,color:b}}),y.createElement("button",{type:"submit",disabled:h||!o.trim()||!f,"aria-label":"Send diagnostic question",style:{width:"40px",height:"40px",border:"none",borderRadius:"8px",background:e.cfg.colors.primary,color:"#ffffff",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"}},e.renderIcon("send",16))))}function M2(e,t){const n=y.useRef(t);y.useEffect(function(){t!==n.current&&e.attributionControl!=null&&(n.current!=null&&e.attributionControl.removeAttribution(n.current),t!=null&&e.attributionControl.addAttribution(t)),n.current=t},[e,t])}function k2(e,t,n){t.center!==n.center&&e.setLatLng(t.center),t.radius!=null&&t.radius!==n.radius&&e.setRadius(t.radius)}const bht=1;function xht(e){return Object.freeze({__version:bht,map:e})}function ng(e,t){return Object.freeze({...e,...t})}const $2=y.createContext(null),I2=$2.Provider;function rg(){const e=y.useContext($2);if(e==null)throw new Error("No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>");return e}function wht(e){function t(n,r){const{instance:i,context:o}=e(n).current;return y.useImperativeHandle(r,()=>i),n.children==null?null:y.createElement(I2,{value:o},n.children)}return y.forwardRef(t)}function _ht(e){function t(n,r){const[i,o]=y.useState(!1),{instance:s}=e(n,o).current;y.useImperativeHandle(r,()=>s),y.useEffect(function(){i&&s.update()},[s,i,n.children]);const a=s._contentNode;return a?Za.createPortal(n.children,a):null}return y.forwardRef(t)}function Sht(e){function t(n,r){const{instance:i}=e(n).current;return y.useImperativeHandle(r,()=>i),null}return y.forwardRef(t)}function iw(e,t){const n=y.useRef();y.useEffect(function(){return t!=null&&e.instance.on(t),n.current=t,function(){n.current!=null&&e.instance.off(n.current),n.current=null}},[e,t])}function ig(e,t){const n=e.pane??t.pane;return n?{...e,pane:n}:e}function Pht(e,t){return function(r,i){const o=rg(),s=e(ig(r,o),o);return M2(o.map,r.attribution),iw(s.current,r.eventHandlers),t(s.current,o,r,i),s}}var Ub={exports:{}};/* @preserve
125
125
  * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
package/dist/index.js CHANGED
@@ -40718,6 +40718,9 @@ function Ift(e, t, n) {
40718
40718
  `), r = r.replace(
40719
40719
  /(^|[\s(])(https?:\/\/[^\s)]+\.(?:png|jpe?g|gif|webp|avif))(?=$|[\s)])/gim,
40720
40720
  "$1![]($2)"
40721
+ ), r = r.replace(
40722
+ /(^|[\s(])(\/assets\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\/[^\s)]+)(?=$|[\s)])/gim,
40723
+ "$1![]($2)"
40721
40724
  );
40722
40725
  const i = (v) => {
40723
40726
  const _ = [], S = /(\*\*(.+?)\*\*)|(\*(.+?)\*)|(`(.+?)`)|(\[(.+?)\]\((.+?)\))|(~~(.+?)~~)/g;
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/renderer/components.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/renderer/components.tsx"],"names":[],"mappings":"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"}
package/dist/vite.cjs CHANGED
@@ -1,23 +1,23 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("node:fs"),u=require("node:path"),U=require("node:module");var m=typeof document<"u"?document.currentScript:null;const L=U.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:m&&m.tagName.toUpperCase()==="SCRIPT"&&m.src||new URL("vite.cjs",document.baseURI).href),x="virtual:backflow-workflow-icons",d=`\0${x}`,A="@squeed/flow-sdk",I="\0backflow-empty-flow-sdk",S=e=>e.split("-").filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join("");function g(e,t=new Set){if(Array.isArray(e)){for(const o of e)g(o,t);return t}if(!e||typeof e!="object")return t;for(const[o,r]of Object.entries(e)){const n=o==="icon"||o==="iconName"||o.endsWith("Icon"),c=typeof r=="string"&&/^[a-z0-9]+(?:-[a-z0-9]+)*$/i.test(r);n&&c&&t.add(r),g(r,t)}return t}function y(e){return Array.isArray(e)?e.some(y):!e||typeof e!="object"?!1:e.type==="flow"?!0:Object.values(e).some(y)}function k(e){const t=L.resolve(`react-icons/${e}`,{paths:[process.cwd()]}),o=h.readFileSync(u.join(u.dirname(t),"index.d.ts"),"utf-8");return new Set(Array.from(o.matchAll(/export declare const (\w+)/g),r=>r[1]))}function W(e,t){const[o,...r]=e.split("-");let n;if(r.length>0)try{t.has(o)||t.set(o,k(o)),n=o}catch{}const c=n?[n]:["fi","lu"],s=n?r.join("-"):e;for(const i of c){const a=`${S(i)}${S(s)}`;let l=t.get(i);if(!l)try{l=k(i),t.set(i,l)}catch{continue}if(l.has(a))return{name:e,packageName:`react-icons/${i}`,exportName:a}}throw new Error(`Unsupported workflow icon: ${e}`)}function D(e){const t=JSON.parse(h.readFileSync(e,"utf-8")),o=new Map,r=Array.from(g(t)).sort().map(s=>W(s,o)),n=r.map(({packageName:s,exportName:i},a)=>`import { ${i} as Icon${a} } from "${s}";`).join(`
2
- `),c=r.map(({name:s},i)=>` ${JSON.stringify(s)}: Icon${i},`).join(`
3
- `);return`${n}
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("node:fs"),m=require("node:path"),D=require("node:module");var y=typeof document<"u"?document.currentScript:null;const z=D.createRequire(typeof document>"u"?require("url").pathToFileURL(__filename).href:y&&y.tagName.toUpperCase()==="SCRIPT"&&y.src||new URL("vite.cjs",document.baseURI).href),U="virtual:backflow-workflow-icons",w=`\0${U}`,C="@squeed/flow-sdk",j="\0backflow-empty-flow-sdk",E=e=>e.split("-").filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join("");function b(e,t=new Set){if(Array.isArray(e)){for(const n of e)b(n,t);return t}if(!e||typeof e!="object")return t;for(const[n,r]of Object.entries(e)){const s=n==="icon"||n==="iconName"||n.endsWith("Icon"),o=typeof r=="string"&&/^[a-z0-9]+(?:-[a-z0-9]+)*$/i.test(r);s&&o&&t.add(r),b(r,t)}return t}function x(e){return Array.isArray(e)?e.some(x):!e||typeof e!="object"?!1:e.type==="flow"?!0:Object.values(e).some(x)}function L(e){const t=z.resolve(`react-icons/${e}`,{paths:[process.cwd()]}),n=h.readFileSync(m.join(m.dirname(t),"index.d.ts"),"utf-8");return new Set(Array.from(n.matchAll(/export declare const (\w+)/g),r=>r[1]))}function P(e,t){const[n,...r]=e.split("-");let s;if(r.length>0)try{t.has(n)||t.set(n,L(n)),s=n}catch{}const o=s?[s]:["fi","lu"],a=s?r.join("-"):e;for(const i of o){const l=`${E(i)}${E(a)}`;let c=t.get(i);if(!c)try{c=L(i),t.set(i,c)}catch{continue}if(c.has(l))return{name:e,packageName:`react-icons/${i}`,exportName:l}}throw new Error(`Unsupported workflow icon: ${e}`)}function R(e){const t=JSON.parse(h.readFileSync(e,"utf-8")),n=new Map,r=Array.from(b(t)).sort().map(a=>P(a,n)),s=r.map(({packageName:a,exportName:i},l)=>`import { ${i} as Icon${l} } from "${a}";`).join(`
2
+ `),o=r.map(({name:a},i)=>` ${JSON.stringify(a)}: Icon${i},`).join(`
3
+ `);return`${s}
4
4
  import { createElement } from "react";
5
5
 
6
6
  const icons = {
7
- ${c}
7
+ ${o}
8
8
  };
9
9
 
10
10
  export const workflowIconResolver = (name, size, style) => {
11
11
  const Icon = icons[name];
12
12
  return Icon ? createElement(Icon, { size, style: { ...style, flexShrink: 0 } }) : null;
13
13
  };
14
- `}const O=`
14
+ `}const q=`
15
15
  export const createFlowDiagram = () => ({ nodes: [], edges: [] });
16
16
  export const FlowDiagram = () => null;
17
- `,$="manifest.webmanifest",v="sw.js";function R(e){var c;const t=/^data:([^;,]+)(;base64)?,(.*)$/s.exec(e||"");if(!t)return null;const o=t[1],r=t[2]?Buffer.from(t[3],"base64"):Buffer.from(decodeURIComponent(t[3])),n=o.includes("svg")?"svg":((c=o.split("/")[1])==null?void 0:c.split("+")[0])||"png";return{mime:o,buffer:r,ext:n}}function B(e){var w,b;const t=(e==null?void 0:e.config)||{},o=String((e==null?void 0:e.title)||t.title||"App"),r=String(((w=t.colors)==null?void 0:w.primary)||"#111827"),n=String(((b=t.colors)==null?void 0:b.background)||"#ffffff"),c=String(t.logo||"");let s,i,a,l="512x512";const f=c.startsWith("data:image/")?R(c):null;if(f)s=`backflow-pwa-icon.${f.ext}`,i=f.mime,a=f.buffer,f.ext==="svg"&&(l="any");else{const E=(o.trim()[0]||"B").toUpperCase(),N=`<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><rect width="512" height="512" rx="96" fill="${r}"/><text x="50%" y="52%" font-size="300" font-family="Georgia,serif" fill="#ffffff" text-anchor="middle" dominant-baseline="middle">${E}</text></svg>`;s="backflow-pwa-icon.svg",i="image/svg+xml",a=Buffer.from(N),l="any"}const p=`/${s}`,_={name:o,short_name:o.slice(0,12),start_url:"/",scope:"/",display:"standalone",orientation:"portrait",background_color:n,theme_color:r,icons:[{src:p,sizes:l,type:i,purpose:"any"},{src:p,sizes:l,type:i,purpose:"maskable"}]},F=`// Backflow PWA service worker (network pass-through)
17
+ `,F="manifest.json",A="sw.js",O="backflow-pwa-maskable.svg";function H(e){var o;const t=/^data:([^;,]+)(;base64)?,(.*)$/s.exec(e||"");if(!t)return null;const n=t[1],r=t[2]?Buffer.from(t[3],"base64"):Buffer.from(decodeURIComponent(t[3])),s=n.includes("svg")?"svg":((o=n.split("/")[1])==null?void 0:o.split("+")[0])||"png";return{mime:n,buffer:r,ext:s}}function G(e){return e.length>=24&&e.readUInt32BE(0)===2303741511?`${e.readUInt32BE(16)}x${e.readUInt32BE(20)}`:null}const $={svg:"image/svg+xml",png:"image/png",webp:"image/webp",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif"},v=e=>(e.split("?")[0].split(".").pop()||"").toLowerCase();function J(e,t){const n=t||process.env.VITE_LOGO_PATH||process.env.BACKFLOW_LOGO_PATH;if(n)return n;const r=m.dirname(e);for(const s of Object.keys($))if(h.existsSync(m.join(r,`logo.${s}`)))return`/.backflow/workflows/logo.${s}`;return""}function K(e,t){if(t.startsWith("data:"))return t;const n=m.join(m.dirname(e),t.split("/").pop()||"");try{return h.existsSync(n)?`data:${$[v(n)]||"application/octet-stream"};base64,${h.readFileSync(n).toString("base64")}`:null}catch{return null}}function V(e,t,n){var I,k;const r=(e==null?void 0:e.config)||{},s=String((e==null?void 0:e.title)||r.title||"App"),o=String(((I=r.colors)==null?void 0:I.primary)||"#111827"),a=String(((k=r.colors)==null?void 0:k.background)||"#ffffff");let i=null,l=null,c,u,p,d;const f=J(t,n)||String(r.logo||""),g=f.startsWith("data:image/")?H(f):null;if(g)i=`backflow-pwa-icon.${g.ext}`,l=g.buffer,c=`/${i}`,u=g.mime,p=g.ext==="svg"?"any":G(g.buffer)||"512x512",d=f;else if(f)c=f,u=$[v(f)]||"image/png",p=v(f)==="svg"?"any":"512x512",d=K(t,f)||f;else{const T=(s.trim()[0]||"B").toUpperCase(),_=`<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><rect width="512" height="512" rx="96" fill="${o}"/><text x="50%" y="52%" font-size="300" font-family="Georgia,serif" fill="#ffffff" text-anchor="middle" dominant-baseline="middle">${T}</text></svg>`;i="backflow-pwa-icon.svg",l=Buffer.from(_),c=`/${i}`,u="image/svg+xml",p="any",d=`data:image/svg+xml;base64,${Buffer.from(_).toString("base64")}`}const B=`<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><rect width="512" height="512" fill="${a}"/><image href="${d}" x="51.2" y="51.2" width="409.6" height="409.6" preserveAspectRatio="xMidYMid meet"/></svg>`,N={id:"/",name:s,short_name:s.slice(0,12),start_url:"/",scope:"/",display:"standalone",orientation:"portrait",background_color:a,theme_color:o,prefer_related_applications:!1,icons:[{src:c,sizes:p,type:u,purpose:"any"},{src:`/${O}`,sizes:"any",type:"image/svg+xml",purpose:"maskable"}]},M=`// Backflow PWA service worker (network pass-through)
18
18
  self.addEventListener("install", () => self.skipWaiting());
19
19
  self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
20
20
  self.addEventListener("fetch", () => { /* network only */ });
21
- `,j=[`<link rel="manifest" href="/${$}">`,`<meta name="theme-color" content="${r}">`,'<meta name="mobile-web-app-capable" content="yes">','<meta name="apple-mobile-web-app-capable" content="yes">','<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">',`<link rel="apple-touch-icon" href="${p}">`,`<script>if('serviceWorker' in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/${v}').catch(function(){});});}<\/script>`].join(`
22
- `);return{files:[{name:$,source:JSON.stringify(_),type:"application/manifest+json"},{name:v,source:F,type:"text/javascript"},{name:s,source:a,type:i}],html:j}}function z({workflowPath:e}){const t=u.resolve(e),o=()=>JSON.parse(h.readFileSync(t,"utf-8")),r=()=>B(o());return{name:"backflow-workflow-icons",enforce:"pre",buildStart(){this.addWatchFile(t)},configureServer(n){n.middlewares.use((c,s,i)=>{const a=(c.url||"").split("?")[0];try{const f=r().files.find(p=>a===`/${p.name}`);if(f){s.setHeader("Content-Type",f.type),s.end(f.source);return}}catch{}i()})},generateBundle(){for(const n of r().files)this.emitFile({type:"asset",fileName:n.name,source:n.source})},transformIndexHtml:{order:"post",handler(n){const c=r().html;return n.replace("</head>",` ${c}
23
- </head>`)}},resolveId(n){return n===A&&!y(o())?I:n===x?d:null},load(n){return n===I?O:n===d?D(t):null},handleHotUpdate({file:n,server:c}){if(u.resolve(n)!==t)return;const s=c.moduleGraph.getModuleById(d);return s?[s]:[]}}}exports.workflowIcons=z;
21
+ `,W=[`<link rel="manifest" href="/${F}">`,`<meta name="theme-color" content="${o}">`,'<meta name="mobile-web-app-capable" content="yes">','<meta name="apple-mobile-web-app-capable" content="yes">','<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">',`<meta name="apple-mobile-web-app-title" content="${s}">`,`<link rel="apple-touch-icon" href="${c}">`,`<script>if('serviceWorker' in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/${A}').catch(function(){});});}<\/script>`].join(`
22
+ `),S=[{name:F,source:JSON.stringify(N),type:"application/manifest+json"},{name:A,source:M,type:"text/javascript"},{name:O,source:B,type:"image/svg+xml"}];return i&&l&&S.push({name:i,source:l,type:u}),{files:S,html:W}}function Y({workflowPath:e,logoPath:t}){const n=m.resolve(e),r=()=>JSON.parse(h.readFileSync(n,"utf-8")),s=()=>V(r(),n,t);return{name:"backflow-workflow-icons",enforce:"pre",buildStart(){this.addWatchFile(n)},configureServer(o){o.middlewares.use((a,i,l)=>{const c=(a.url||"").split("?")[0];try{const p=s().files.find(d=>c===`/${d.name}`);if(p){i.setHeader("Content-Type",p.type),i.end(p.source);return}}catch{}l()})},generateBundle(){for(const o of s().files)this.emitFile({type:"asset",fileName:o.name,source:o.source})},transformIndexHtml:{order:"post",handler(o){const a=s().html;return o.replace("</head>",` ${a}
23
+ </head>`)}},resolveId(o){return o===C&&!x(r())?j:o===U?w:null},load(o){return o===j?q:o===w?R(n):null},handleHotUpdate({file:o,server:a}){if(m.resolve(o)!==n)return;const i=a.moduleGraph.getModuleById(w);return i?[i]:[]}}}exports.workflowIcons=Y;
package/dist/vite.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { Plugin } from 'vite';
2
2
  interface WorkflowIconsOptions {
3
3
  workflowPath: string;
4
+ /** Served path or data URL of the app logo (defaults to VITE_LOGO_PATH, then a sibling logo file). */
5
+ logoPath?: string;
4
6
  }
5
- export declare function workflowIcons({ workflowPath }: WorkflowIconsOptions): Plugin;
7
+ export declare function workflowIcons({ workflowPath, logoPath, }: WorkflowIconsOptions): Plugin;
6
8
  export {};
7
9
  //# sourceMappingURL=vite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AA4MD,wBAAgB,aAAa,CAAC,EAAE,YAAY,EAAE,EAAE,oBAAoB,GAAG,MAAM,CA2D5E"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,UAAU,oBAAoB;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4RD,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,QAAQ,GACT,EAAE,oBAAoB,GAAG,MAAM,CA2D/B"}
package/dist/vite.js CHANGED
@@ -1,67 +1,67 @@
1
- import { readFileSync as g } from "node:fs";
2
- import { resolve as w, join as N, dirname as A } from "node:path";
3
- import { createRequire as L } from "node:module";
4
- const W = L(import.meta.url), v = "virtual:backflow-workflow-icons", m = `\0${v}`, D = "@squeed/flow-sdk", b = "\0backflow-empty-flow-sdk", x = (e) => e.split("-").filter(Boolean).map((t) => t[0].toUpperCase() + t.slice(1)).join("");
5
- function u(e, t = /* @__PURE__ */ new Set()) {
1
+ import { readFileSync as g, existsSync as N } from "node:fs";
2
+ import { resolve as _, join as x, dirname as $ } from "node:path";
3
+ import { createRequire as P } from "node:module";
4
+ const C = P(import.meta.url), U = "virtual:backflow-workflow-icons", h = `\0${U}`, H = "@squeed/flow-sdk", j = "\0backflow-empty-flow-sdk", A = (e) => e.split("-").filter(Boolean).map((t) => t[0].toUpperCase() + t.slice(1)).join("");
5
+ function w(e, t = /* @__PURE__ */ new Set()) {
6
6
  if (Array.isArray(e)) {
7
- for (const o of e) u(o, t);
7
+ for (const n of e) w(n, t);
8
8
  return t;
9
9
  }
10
10
  if (!e || typeof e != "object") return t;
11
- for (const [o, r] of Object.entries(e)) {
12
- const n = o === "icon" || o === "iconName" || o.endsWith("Icon"), i = typeof r == "string" && /^[a-z0-9]+(?:-[a-z0-9]+)*$/i.test(r);
13
- n && i && t.add(r), u(r, t);
11
+ for (const [n, r] of Object.entries(e)) {
12
+ const s = n === "icon" || n === "iconName" || n.endsWith("Icon"), o = typeof r == "string" && /^[a-z0-9]+(?:-[a-z0-9]+)*$/i.test(r);
13
+ s && o && t.add(r), w(r, t);
14
14
  }
15
15
  return t;
16
16
  }
17
- function d(e) {
18
- return Array.isArray(e) ? e.some(d) : !e || typeof e != "object" ? !1 : e.type === "flow" ? !0 : Object.values(e).some(d);
17
+ function y(e) {
18
+ return Array.isArray(e) ? e.some(y) : !e || typeof e != "object" ? !1 : e.type === "flow" ? !0 : Object.values(e).some(y);
19
19
  }
20
- function $(e) {
21
- const t = W.resolve(`react-icons/${e}`, {
20
+ function L(e) {
21
+ const t = C.resolve(`react-icons/${e}`, {
22
22
  paths: [process.cwd()]
23
- }), o = g(N(A(t), "index.d.ts"), "utf-8");
23
+ }), n = g(x($(t), "index.d.ts"), "utf-8");
24
24
  return new Set(
25
25
  Array.from(
26
- o.matchAll(/export declare const (\w+)/g),
26
+ n.matchAll(/export declare const (\w+)/g),
27
27
  (r) => r[1]
28
28
  )
29
29
  );
30
30
  }
31
- function U(e, t) {
32
- const [o, ...r] = e.split("-");
33
- let n;
31
+ function R(e, t) {
32
+ const [n, ...r] = e.split("-");
33
+ let s;
34
34
  if (r.length > 0)
35
35
  try {
36
- t.has(o) || t.set(o, $(o)), n = o;
36
+ t.has(n) || t.set(n, L(n)), s = n;
37
37
  } catch {
38
38
  }
39
- const i = n ? [n] : ["fi", "lu"], s = n ? r.join("-") : e;
40
- for (const c of i) {
41
- const a = `${x(c)}${x(s)}`;
42
- let l = t.get(c);
43
- if (!l)
39
+ const o = s ? [s] : ["fi", "lu"], a = s ? r.join("-") : e;
40
+ for (const i of o) {
41
+ const l = `${A(i)}${A(a)}`;
42
+ let c = t.get(i);
43
+ if (!c)
44
44
  try {
45
- l = $(c), t.set(c, l);
45
+ c = L(i), t.set(i, c);
46
46
  } catch {
47
47
  continue;
48
48
  }
49
- if (l.has(a))
50
- return { name: e, packageName: `react-icons/${c}`, exportName: a };
49
+ if (c.has(l))
50
+ return { name: e, packageName: `react-icons/${i}`, exportName: l };
51
51
  }
52
52
  throw new Error(`Unsupported workflow icon: ${e}`);
53
53
  }
54
- function B(e) {
55
- const t = JSON.parse(g(e, "utf-8")), o = /* @__PURE__ */ new Map(), r = Array.from(u(t)).sort().map((s) => U(s, o)), n = r.map(
56
- ({ packageName: s, exportName: c }, a) => `import { ${c} as Icon${a} } from "${s}";`
54
+ function G(e) {
55
+ const t = JSON.parse(g(e, "utf-8")), n = /* @__PURE__ */ new Map(), r = Array.from(w(t)).sort().map((a) => R(a, n)), s = r.map(
56
+ ({ packageName: a, exportName: i }, l) => `import { ${i} as Icon${l} } from "${a}";`
57
57
  ).join(`
58
- `), i = r.map(({ name: s }, c) => ` ${JSON.stringify(s)}: Icon${c},`).join(`
58
+ `), o = r.map(({ name: a }, i) => ` ${JSON.stringify(a)}: Icon${i},`).join(`
59
59
  `);
60
- return `${n}
60
+ return `${s}
61
61
  import { createElement } from "react";
62
62
 
63
63
  const icons = {
64
- ${i}
64
+ ${o}
65
65
  };
66
66
 
67
67
  export const workflowIconResolver = (name, size, style) => {
@@ -70,114 +70,157 @@ export const workflowIconResolver = (name, size, style) => {
70
70
  };
71
71
  `;
72
72
  }
73
- const O = `
73
+ const J = `
74
74
  export const createFlowDiagram = () => ({ nodes: [], edges: [] });
75
75
  export const FlowDiagram = () => null;
76
- `, k = "manifest.webmanifest", I = "sw.js";
77
- function z(e) {
78
- var i;
76
+ `, B = "manifest.json", O = "sw.js", F = "backflow-pwa-maskable.svg";
77
+ function K(e) {
78
+ var o;
79
79
  const t = /^data:([^;,]+)(;base64)?,(.*)$/s.exec(e || "");
80
80
  if (!t) return null;
81
- const o = t[1], r = t[2] ? Buffer.from(t[3], "base64") : Buffer.from(decodeURIComponent(t[3])), n = o.includes("svg") ? "svg" : ((i = o.split("/")[1]) == null ? void 0 : i.split("+")[0]) || "png";
82
- return { mime: o, buffer: r, ext: n };
81
+ const n = t[1], r = t[2] ? Buffer.from(t[3], "base64") : Buffer.from(decodeURIComponent(t[3])), s = n.includes("svg") ? "svg" : ((o = n.split("/")[1]) == null ? void 0 : o.split("+")[0]) || "png";
82
+ return { mime: n, buffer: r, ext: s };
83
83
  }
84
- function M(e) {
85
- var y, h;
86
- const t = (e == null ? void 0 : e.config) || {}, o = String((e == null ? void 0 : e.title) || t.title || "App"), r = String(((y = t.colors) == null ? void 0 : y.primary) || "#111827"), n = String(((h = t.colors) == null ? void 0 : h.background) || "#ffffff"), i = String(t.logo || "");
87
- let s, c, a, l = "512x512";
88
- const f = i.startsWith("data:image/") ? z(i) : null;
89
- if (f)
90
- s = `backflow-pwa-icon.${f.ext}`, c = f.mime, a = f.buffer, f.ext === "svg" && (l = "any");
84
+ function V(e) {
85
+ return e.length >= 24 && e.readUInt32BE(0) === 2303741511 ? `${e.readUInt32BE(16)}x${e.readUInt32BE(20)}` : null;
86
+ }
87
+ const v = {
88
+ svg: "image/svg+xml",
89
+ png: "image/png",
90
+ webp: "image/webp",
91
+ jpg: "image/jpeg",
92
+ jpeg: "image/jpeg",
93
+ gif: "image/gif"
94
+ }, b = (e) => (e.split("?")[0].split(".").pop() || "").toLowerCase();
95
+ function q(e, t) {
96
+ const n = t || process.env.VITE_LOGO_PATH || process.env.BACKFLOW_LOGO_PATH;
97
+ if (n) return n;
98
+ const r = $(e);
99
+ for (const s of Object.keys(v))
100
+ if (N(x(r, `logo.${s}`)))
101
+ return `/.backflow/workflows/logo.${s}`;
102
+ return "";
103
+ }
104
+ function Y(e, t) {
105
+ if (t.startsWith("data:")) return t;
106
+ const n = x($(e), t.split("/").pop() || "");
107
+ try {
108
+ return N(n) ? `data:${v[b(n)] || "application/octet-stream"};base64,${g(n).toString("base64")}` : null;
109
+ } catch {
110
+ return null;
111
+ }
112
+ }
113
+ function X(e, t, n) {
114
+ var I, S;
115
+ const r = (e == null ? void 0 : e.config) || {}, s = String((e == null ? void 0 : e.title) || r.title || "App"), o = String(((I = r.colors) == null ? void 0 : I.primary) || "#111827"), a = String(((S = r.colors) == null ? void 0 : S.background) || "#ffffff");
116
+ let i = null, l = null, c, m, p, u;
117
+ const f = q(t, n) || String(r.logo || ""), d = f.startsWith("data:image/") ? K(f) : null;
118
+ if (d)
119
+ i = `backflow-pwa-icon.${d.ext}`, l = d.buffer, c = `/${i}`, m = d.mime, p = d.ext === "svg" ? "any" : V(d.buffer) || "512x512", u = f;
120
+ else if (f)
121
+ c = f, m = v[b(f)] || "image/png", p = b(f) === "svg" ? "any" : "512x512", u = Y(t, f) || f;
91
122
  else {
92
- const j = (o.trim()[0] || "B").toUpperCase(), F = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><rect width="512" height="512" rx="96" fill="${r}"/><text x="50%" y="52%" font-size="300" font-family="Georgia,serif" fill="#ffffff" text-anchor="middle" dominant-baseline="middle">${j}</text></svg>`;
93
- s = "backflow-pwa-icon.svg", c = "image/svg+xml", a = Buffer.from(F), l = "any";
123
+ const T = (s.trim()[0] || "B").toUpperCase(), E = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512"><rect width="512" height="512" rx="96" fill="${o}"/><text x="50%" y="52%" font-size="300" font-family="Georgia,serif" fill="#ffffff" text-anchor="middle" dominant-baseline="middle">${T}</text></svg>`;
124
+ i = "backflow-pwa-icon.svg", l = Buffer.from(E), c = `/${i}`, m = "image/svg+xml", p = "any", u = `data:image/svg+xml;base64,${Buffer.from(E).toString("base64")}`;
94
125
  }
95
- const p = `/${s}`, S = {
96
- name: o,
97
- short_name: o.slice(0, 12),
126
+ const W = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><rect width="512" height="512" fill="${a}"/><image href="${u}" x="51.2" y="51.2" width="409.6" height="409.6" preserveAspectRatio="xMidYMid meet"/></svg>`, M = {
127
+ id: "/",
128
+ name: s,
129
+ short_name: s.slice(0, 12),
98
130
  start_url: "/",
99
131
  scope: "/",
100
132
  display: "standalone",
101
133
  orientation: "portrait",
102
- background_color: n,
103
- theme_color: r,
134
+ background_color: a,
135
+ theme_color: o,
136
+ prefer_related_applications: !1,
104
137
  icons: [
105
- { src: p, sizes: l, type: c, purpose: "any" },
106
- { src: p, sizes: l, type: c, purpose: "maskable" }
138
+ { src: c, sizes: p, type: m, purpose: "any" },
139
+ {
140
+ src: `/${F}`,
141
+ sizes: "any",
142
+ type: "image/svg+xml",
143
+ purpose: "maskable"
144
+ }
107
145
  ]
108
- }, E = `// Backflow PWA service worker (network pass-through)
146
+ }, D = `// Backflow PWA service worker (network pass-through)
109
147
  self.addEventListener("install", () => self.skipWaiting());
110
148
  self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
111
149
  self.addEventListener("fetch", () => { /* network only */ });
112
- `, _ = [
113
- `<link rel="manifest" href="/${k}">`,
114
- `<meta name="theme-color" content="${r}">`,
150
+ `, z = [
151
+ `<link rel="manifest" href="/${B}">`,
152
+ `<meta name="theme-color" content="${o}">`,
115
153
  '<meta name="mobile-web-app-capable" content="yes">',
116
154
  '<meta name="apple-mobile-web-app-capable" content="yes">',
117
155
  '<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">',
118
- `<link rel="apple-touch-icon" href="${p}">`,
119
- `<script>if('serviceWorker' in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/${I}').catch(function(){});});}<\/script>`
156
+ `<meta name="apple-mobile-web-app-title" content="${s}">`,
157
+ `<link rel="apple-touch-icon" href="${c}">`,
158
+ `<script>if('serviceWorker' in navigator){window.addEventListener('load',function(){navigator.serviceWorker.register('/${O}').catch(function(){});});}<\/script>`
120
159
  ].join(`
121
- `);
122
- return {
123
- files: [
124
- { name: k, source: JSON.stringify(S), type: "application/manifest+json" },
125
- { name: I, source: E, type: "text/javascript" },
126
- { name: s, source: a, type: c }
127
- ],
128
- html: _
129
- };
160
+ `), k = [
161
+ {
162
+ name: B,
163
+ source: JSON.stringify(M),
164
+ type: "application/manifest+json"
165
+ },
166
+ { name: O, source: D, type: "text/javascript" },
167
+ { name: F, source: W, type: "image/svg+xml" }
168
+ ];
169
+ return i && l && k.push({ name: i, source: l, type: m }), { files: k, html: z };
130
170
  }
131
- function C({ workflowPath: e }) {
132
- const t = w(e), o = () => JSON.parse(g(t, "utf-8")), r = () => M(o());
171
+ function te({
172
+ workflowPath: e,
173
+ logoPath: t
174
+ }) {
175
+ const n = _(e), r = () => JSON.parse(g(n, "utf-8")), s = () => X(r(), n, t);
133
176
  return {
134
177
  name: "backflow-workflow-icons",
135
178
  enforce: "pre",
136
179
  buildStart() {
137
- this.addWatchFile(t);
180
+ this.addWatchFile(n);
138
181
  },
139
- configureServer(n) {
140
- n.middlewares.use((i, s, c) => {
141
- const a = (i.url || "").split("?")[0];
182
+ configureServer(o) {
183
+ o.middlewares.use((a, i, l) => {
184
+ const c = (a.url || "").split("?")[0];
142
185
  try {
143
- const f = r().files.find((p) => a === `/${p.name}`);
144
- if (f) {
145
- s.setHeader("Content-Type", f.type), s.end(f.source);
186
+ const p = s().files.find((u) => c === `/${u.name}`);
187
+ if (p) {
188
+ i.setHeader("Content-Type", p.type), i.end(p.source);
146
189
  return;
147
190
  }
148
191
  } catch {
149
192
  }
150
- c();
193
+ l();
151
194
  });
152
195
  },
153
196
  generateBundle() {
154
- for (const n of r().files)
155
- this.emitFile({ type: "asset", fileName: n.name, source: n.source });
197
+ for (const o of s().files)
198
+ this.emitFile({ type: "asset", fileName: o.name, source: o.source });
156
199
  },
157
200
  transformIndexHtml: {
158
201
  order: "post",
159
- handler(n) {
160
- const i = r().html;
161
- return n.replace(
202
+ handler(o) {
203
+ const a = s().html;
204
+ return o.replace(
162
205
  "</head>",
163
- ` ${i}
206
+ ` ${a}
164
207
  </head>`
165
208
  );
166
209
  }
167
210
  },
168
- resolveId(n) {
169
- return n === D && !d(o()) ? b : n === v ? m : null;
211
+ resolveId(o) {
212
+ return o === H && !y(r()) ? j : o === U ? h : null;
170
213
  },
171
- load(n) {
172
- return n === b ? O : n === m ? B(t) : null;
214
+ load(o) {
215
+ return o === j ? J : o === h ? G(n) : null;
173
216
  },
174
- handleHotUpdate({ file: n, server: i }) {
175
- if (w(n) !== t) return;
176
- const s = i.moduleGraph.getModuleById(m);
177
- return s ? [s] : [];
217
+ handleHotUpdate({ file: o, server: a }) {
218
+ if (_(o) !== n) return;
219
+ const i = a.moduleGraph.getModuleById(h);
220
+ return i ? [i] : [];
178
221
  }
179
222
  };
180
223
  }
181
224
  export {
182
- C as workflowIcons
225
+ te as workflowIcons
183
226
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backflow-ui-renderer",
3
- "version": "0.1.63",
3
+ "version": "0.1.64",
4
4
  "description": "Standalone React workflow renderer for Backflow",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",