UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

4 lines (3 loc) • 1.56 kB
import{Box as i,isBox as c,isMesh as a,isPolygon as u,isRect as p,Mesh as x,Rect as d}from"@expofp/geometry";import{createCircleCanvas as h}from"./canvases";import{DEFAULT_FONT_LIGHT_URL as m,DEFAULT_FONT_URL as w}from"./fonts";export function rectToShapeDef(e,r){return createShapeDef(i.fromSvg(e),r)}export function meshToShapeDef(e,r){if(!e)throw new Error("Create ShapeDef: mesh is not provided");const t=e.positions.map(o=>({x:o[0],y:Math.abs(o[1]),z:o[2]??0})),n=e.cells;return createShapeDef(new x(t,n),r)}export function createShapeDef(e,r="#000"){if(!e||!(c(e)||p(e)||u(e)||a(e)))throw new Error("Invalid shape definition");return{shape:e,color:r}}export function createImageDef(e,r,t){if(!e)throw new Error("Image source is not provided");return{source:e,bounds:r,...t}}export function createTextDef(e,r,t,n,o){if(e.length===0)throw new Error("Invalid text lines");return{lines:e,bounds:r,padding:t,alignment:n,...o}}export function createTextDefLines(e,r,t,n=[void 0,void 0]){const[o,f]=e,s=[{text:o.join(` `),fontUrl:n[0]||w,color:r,fontSize:t}];return f.length&&s.push({text:f.join(` `),fontUrl:n[1]||m,color:r,fontSize:t}),s}export function createLayerDef(e,r,t){if(!e)throw new Error("Layer name is required");return r||(r=[]),{name:e,children:r,...t}}export function createSceneDef(e,r,t){const n=r instanceof i?r:i.fromSvg(r);return{rootLayer:createLayerDef("root",e),background:t,viewbox:n}}export function createShapeDot(e,r="#000",t=1.5){const n=h(t,r),o=new d(e.center,{x:n.width,y:n.height},e.rotation,e.elevation);return createImageDef(n,o)}