@social.io/catalog 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "owner": "@git.zone/tsbundle",
3
+ "kind": "chunk-namespace",
4
+ "logicalOutputName": "bundle.js",
5
+ "namespace": "U6Ua8p1giFoD1s7vrUZUdpbg",
6
+ "schemaVersion": 1
7
+ }
@@ -0,0 +1,2 @@
1
+ var H=Object.defineProperty;var d=(t,e)=>H(t,"name",{value:e,configurable:!0});var m=[{fill:"#4AA0F5",points:[[250,75],[150,133.333],[250,191.667]]},{fill:"#0A5AC0",points:[[250,75],[350,133.333],[250,191.667]]},{fill:"#DBEBFF",points:[[150,133.333],[250,191.667],[150,250]]},{fill:"#A9CDF7",points:[[250,191.667],[150,250],[250,308.333]]},{fill:"#1E80E6",points:[[250,191.667],[350,250],[250,308.333]]},{fill:"#1466C6",points:[[350,250],[250,308.333],[350,366.667]]},{fill:"#74B4F7",points:[[250,308.333],[350,366.667],[250,425]]},{fill:"#1E80E6",points:[[250,308.333],[150,366.667],[250,425]]}],W=["#4AA0F5","#0A5AC0","#8FBEF5","#77ACEE","#1E80E6","#1466C6","#5FA6F2","#1E80E6"],D=[.78,.64,.96,.86,.72,.66,.82,.72],v={x:146,y:72,width:208,height:356},L=250,M=250,E=v.width/v.height,P=m.map(t=>[(t.points[0][0]+t.points[1][0]+t.points[2][0])/3,(t.points[0][1]+t.points[1][1]+t.points[2][1])/3]),x=d((t,e,a)=>Math.max(e,Math.min(a,t)),"clamp"),I=d((t,e,a)=>Number.isFinite(t)?Math.max(e,t):a,"finiteAtLeast"),T=d(t=>({...t,size:I(t.size,1,40),dpr:x(I(t.dpr,.5,1),.5,4),gap:I(t.gap,0,2),radius:I(t.radius,0,16)}),"normalizeOptions"),X=d((t,e)=>{if(e<=0)return t.map(([o,n])=>({x:o,y:n}));let a=(t[0][0]+t[1][0]+t[2][0])/3,i=(t[0][1]+t[1][1]+t[2][1])/3,r=[];for(let o=0;o<t.length;o+=1){let n=t[o],s=t[(o+1)%t.length],h=s[0]-n[0],l=s[1]-n[1],u=Math.hypot(h,l);h/=u,l/=u;let f=-l,p=h,c=(n[0]+s[0])/2,g=(n[1]+s[1])/2;(a-c)*f+(i-g)*p<0&&(f=-f,p=-p),r.push({x:n[0]+f*e,y:n[1]+p*e,dx:h,dy:l})}return r.map((o,n)=>{let s=r[(n-1+r.length)%r.length],h=s.dx*o.dy-s.dy*o.dx,l=((o.x-s.x)*o.dy-(o.y-s.y)*o.dx)/h;return{x:s.x+s.dx*l,y:s.y+s.dy*l}})},"inset"),w=d((t,e,a)=>{let i=X(t,e),r=new Path2D;if(a<=0){r.moveTo(i[0].x,i[0].y);for(let o=1;o<i.length;o+=1)r.lineTo(i[o].x,i[o].y);return r.closePath(),r}for(let o=0;o<i.length;o+=1){let n=i[o],s=i[(o-1+i.length)%i.length],h=i[(o+1)%i.length],l=Math.hypot(s.x-n.x,s.y-n.y),u=Math.hypot(h.x-n.x,h.y-n.y),f=Math.min(a,l*.5),p=Math.min(a,u*.5),c={x:n.x+(s.x-n.x)/l*f,y:n.y+(s.y-n.y)/l*f},g={x:n.x+(h.x-n.x)/u*p,y:n.y+(h.y-n.y)/u*p};o===0?r.moveTo(c.x,c.y):r.lineTo(c.x,c.y),r.quadraticCurveTo(n.x,n.y,g.x,g.y)}return r.closePath(),r},"createFacetPath"),Y=d(t=>1-Math.pow(1-t,3),"easeOutCubic"),q=d(t=>1+(1.70158+1)*Math.pow(t-1,3)+1.70158*Math.pow(t-1,2),"easeOutBack"),z=d(t=>t*t*t,"easeInCubic"),B=d(t=>(1.70158+1)*t*t*t-1.70158*t*t,"easeInBack"),C=d(t=>typeof globalThis.requestAnimationFrame=="function"?globalThis.requestAnimationFrame(t):setTimeout(()=>t(performance.now()),1e3/60),"requestFrame"),G=d(t=>{if(typeof globalThis.cancelAnimationFrame=="function"&&typeof t=="number"){globalThis.cancelAnimationFrame(t);return}clearTimeout(t)},"cancelFrame"),A=class{constructor(e,a){this.context=e;this.options=T(a),this.rebuild()}context;static{d(this,"SioLogoRenderer")}options;frameHandle=null;phase=null;startedAt=0;stagger=70;duration=560;totalDuration=0;backingWidth=0;backingHeight=0;scale=1;offsetX=0;offsetY=0;paths=[];loadingPaths=[];fills=[];opacities=[];setOptions(e){this.options=T(e),this.rebuild(),this.phase||this.drawStatic()}drawStatic(){this.clearCanvas();for(let e=0;e<m.length;e+=1)this.paint(e,0,0,0,1,this.opacities[e],this.paths[e]);this.context.globalAlpha=1}clear(){this.stop(),this.clearCanvas()}start(e){this.stop(),this.phase=e,this.startedAt=performance.now(),this.stagger=e==="wave"?55:70,this.duration=e==="wave"?420:560,this.totalDuration=this.stagger*(m.length-1)+this.duration;let a=d(i=>{if(!this.phase)return;let r=i-this.startedAt;if(this.drawAnimationFrame(r),this.phase!=="loading"&&r>=this.totalDuration){this.settle();return}this.frameHandle=C(a)},"drawFrame");this.frameHandle=C(a)}stop(){this.frameHandle!==null&&(G(this.frameHandle),this.frameHandle=null),this.phase=null}rebuild(){let{size:e,dpr:a,square:i,light:r,mono:o,gap:n,radius:s}=this.options;this.backingWidth=Math.round((i?e:e*E)*a),this.backingHeight=Math.round(e*a),this.context.canvas.width=this.backingWidth,this.context.canvas.height=this.backingHeight,i?(this.scale=this.backingWidth/500,this.offsetX=0,this.offsetY=0):(this.scale=this.backingHeight/v.height,this.offsetX=-v.x*this.scale+(this.backingWidth-v.width*this.scale)/2,this.offsetY=-v.y*this.scale),this.paths=m.map(h=>w(h.points,n,s)),this.loadingPaths=m.map(h=>w(h.points,n+3,90)),this.fills=m.map((h,l)=>o||(r?W[l]:h.fill)),this.opacities=m.map((h,l)=>o?D[l]:1)}clearCanvas(){this.context.setTransform(1,0,0,1,0,0),this.context.clearRect(0,0,this.backingWidth,this.backingHeight);let{background:e}=this.options;e&&e!=="transparent"&&e!=="none"&&(this.context.fillStyle=e,this.context.fillRect(0,0,this.backingWidth,this.backingHeight))}paint(e,a,i,r,o,n,s){let[h,l]=P[e];this.context.setTransform(this.scale,0,0,this.scale,this.offsetX,this.offsetY),this.context.translate(a,i),this.context.translate(h,l),this.context.rotate(r*Math.PI/180),this.context.scale(o,o),this.context.translate(-h,-l),this.context.globalAlpha=n,this.context.fillStyle=this.fills[e],this.context.fill(s)}drawAnimationFrame(e){this.clearCanvas();let a=this.phase;for(let i=0;i<m.length;i+=1){let[r,o]=P[i],n=0,s=0,h=0,l=1,u=this.opacities[i],f=this.paths[i];if(a==="in"){let p=x((e-i*this.stagger)/this.duration,0,1),c=Y(p);n=(L-r)*(1-c),s=(M-o)*(1-c),h=(1-c)*-16,l=q(p),u=x(p*1.6,0,1)*this.opacities[i]}else if(a==="out"){let p=m.length-1-i,c=x((e-p*this.stagger)/this.duration,0,1),g=z(c);n=(L-r)*g,s=(M-o)*g,h=c*16,l=Math.max(0,1-B(c)),u=x(1-c*1.3,0,1)*this.opacities[i]}else if(a==="wave"){let p=x((e-i*this.stagger)/this.duration,0,1),c=Math.sin(p*Math.PI),g=r-L,S=o-M,y=Math.hypot(g,S)||1;n=g/y*16*c,s=S/y*16*c,l=1-.08*c}else if(a==="loading"){let p=x(e/650,0,1),c=p<.5?2*p*p:1-Math.pow(-2*p+2,2)/2,g=e>=650,S=e/1500*2*Math.PI,y=-Math.PI/2+i*Math.PI/4+S,R=L+120*Math.cos(y),O=M+120*Math.sin(y),k=1-i/m.length;n=(R-r)*c,s=(O-o)*c,l=(1+(.62-1)*c)*(g?.72+.28*k:1),u=(g?.28+.72*k:1)*this.opacities[i],f=g?this.loadingPaths[i]:w(m[i].points,this.options.gap+3*c,this.options.radius+(90-this.options.radius)*c)}this.paint(i,n,s,h,l,u,f)}this.context.globalAlpha=1}settle(){let e=this.phase;this.frameHandle=null,this.phase=null,e==="out"?this.clearCanvas():this.drawStatic(),this.context.globalAlpha=1}};var F=globalThis,b=null;F.onmessage=t=>{let e=t.data;if(e.type==="init"){let a=e.canvas.getContext("2d");if(!a)throw new Error("Unable to create the sio-logo worker canvas context.");b=new A(a,e.options),e.phase?b.start(e.phase):b.drawStatic(),F.postMessage({type:"initialized"});return}if(b){if(e.type==="options"){b.setOptions(e.options);return}e.phase==="stop"?(b.stop(),b.drawStatic()):e.phase==="clear"?b.clear():b.start(e.phase)}},F.postMessage({type:"ready"});
2
+ //# sourceMappingURL=worker-UP2GJUUW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../ts_web/elements/sio-logo-render.ts","../../../ts_web/elements/sio-logo-worker.ts"],"sourcesContent":["export type TSioLogoAnimationPhase = 'in' | 'out' | 'wave' | 'loading';\n\nexport interface ISioLogoRenderOptions {\n size: number;\n dpr: number;\n gap: number;\n radius: number;\n square: boolean;\n background: string;\n mono: string;\n light: boolean;\n}\n\nexport type TSioLogoRenderContext =\n | CanvasRenderingContext2D\n | OffscreenCanvasRenderingContext2D;\n\ninterface ISioLogoPoint {\n x: number;\n y: number;\n}\n\ninterface ISioLogoFacet {\n fill: string;\n points: [[number, number], [number, number], [number, number]];\n}\n\nconst facets: ISioLogoFacet[] = [\n { fill: '#4AA0F5', points: [[250, 75], [150, 133.333], [250, 191.667]] },\n { fill: '#0A5AC0', points: [[250, 75], [350, 133.333], [250, 191.667]] },\n { fill: '#DBEBFF', points: [[150, 133.333], [250, 191.667], [150, 250]] },\n { fill: '#A9CDF7', points: [[250, 191.667], [150, 250], [250, 308.333]] },\n { fill: '#1E80E6', points: [[250, 191.667], [350, 250], [250, 308.333]] },\n { fill: '#1466C6', points: [[350, 250], [250, 308.333], [350, 366.667]] },\n { fill: '#74B4F7', points: [[250, 308.333], [350, 366.667], [250, 425]] },\n { fill: '#1E80E6', points: [[250, 308.333], [150, 366.667], [250, 425]] },\n];\n\nconst lightFills = [\n '#4AA0F5', '#0A5AC0', '#8FBEF5', '#77ACEE',\n '#1E80E6', '#1466C6', '#5FA6F2', '#1E80E6',\n];\nconst monoOpacities = [0.78, 0.64, 0.96, 0.86, 0.72, 0.66, 0.82, 0.72];\nconst tightBounds = { x: 146, y: 72, width: 208, height: 356 };\nconst centerX = 250;\nconst centerY = 250;\n\nexport const sioLogoAspect = tightBounds.width / tightBounds.height;\n\nconst centroids = facets.map((facet) => [\n (facet.points[0][0] + facet.points[1][0] + facet.points[2][0]) / 3,\n (facet.points[0][1] + facet.points[1][1] + facet.points[2][1]) / 3,\n]);\n\nconst clamp = (value: number, minimum: number, maximum: number): number =>\n Math.max(minimum, Math.min(maximum, value));\n\nconst finiteAtLeast = (value: number, minimum: number, fallback: number): number =>\n Number.isFinite(value) ? Math.max(minimum, value) : fallback;\n\nconst normalizeOptions = (options: ISioLogoRenderOptions): ISioLogoRenderOptions => ({\n ...options,\n size: finiteAtLeast(options.size, 1, 40),\n dpr: clamp(finiteAtLeast(options.dpr, 0.5, 1), 0.5, 4),\n gap: finiteAtLeast(options.gap, 0, 2),\n radius: finiteAtLeast(options.radius, 0, 16),\n});\n\nconst inset = (\n points: ISioLogoFacet['points'],\n gap: number,\n): ISioLogoPoint[] => {\n if (gap <= 0) return points.map(([x, y]) => ({ x, y }));\n const centroidX = (points[0][0] + points[1][0] + points[2][0]) / 3;\n const centroidY = (points[0][1] + points[1][1] + points[2][1]) / 3;\n const lines: Array<ISioLogoPoint & { dx: number; dy: number }> = [];\n\n for (let index = 0; index < points.length; index += 1) {\n const start = points[index];\n const end = points[(index + 1) % points.length];\n let deltaX = end[0] - start[0];\n let deltaY = end[1] - start[1];\n const length = Math.hypot(deltaX, deltaY);\n deltaX /= length;\n deltaY /= length;\n let normalX = -deltaY;\n let normalY = deltaX;\n const middleX = (start[0] + end[0]) / 2;\n const middleY = (start[1] + end[1]) / 2;\n if ((centroidX - middleX) * normalX + (centroidY - middleY) * normalY < 0) {\n normalX = -normalX;\n normalY = -normalY;\n }\n lines.push({\n x: start[0] + normalX * gap,\n y: start[1] + normalY * gap,\n dx: deltaX,\n dy: deltaY,\n });\n }\n\n return lines.map((line, index) => {\n const previous = lines[(index - 1 + lines.length) % lines.length];\n const denominator = previous.dx * line.dy - previous.dy * line.dx;\n const distance =\n ((line.x - previous.x) * line.dy - (line.y - previous.y) * line.dx) /\n denominator;\n return {\n x: previous.x + previous.dx * distance,\n y: previous.y + previous.dy * distance,\n };\n });\n};\n\nconst createFacetPath = (\n points: ISioLogoFacet['points'],\n gap: number,\n radius: number,\n): Path2D => {\n const insetPoints = inset(points, gap);\n const path = new Path2D();\n if (radius <= 0) {\n path.moveTo(insetPoints[0].x, insetPoints[0].y);\n for (let index = 1; index < insetPoints.length; index += 1) {\n path.lineTo(insetPoints[index].x, insetPoints[index].y);\n }\n path.closePath();\n return path;\n }\n\n for (let index = 0; index < insetPoints.length; index += 1) {\n const vertex = insetPoints[index];\n const previous = insetPoints[(index - 1 + insetPoints.length) % insetPoints.length];\n const next = insetPoints[(index + 1) % insetPoints.length];\n const previousDistance = Math.hypot(previous.x - vertex.x, previous.y - vertex.y);\n const nextDistance = Math.hypot(next.x - vertex.x, next.y - vertex.y);\n const previousRadius = Math.min(radius, previousDistance * 0.5);\n const nextRadius = Math.min(radius, nextDistance * 0.5);\n const entry = {\n x: vertex.x + ((previous.x - vertex.x) / previousDistance) * previousRadius,\n y: vertex.y + ((previous.y - vertex.y) / previousDistance) * previousRadius,\n };\n const exit = {\n x: vertex.x + ((next.x - vertex.x) / nextDistance) * nextRadius,\n y: vertex.y + ((next.y - vertex.y) / nextDistance) * nextRadius,\n };\n if (index === 0) path.moveTo(entry.x, entry.y);\n else path.lineTo(entry.x, entry.y);\n path.quadraticCurveTo(vertex.x, vertex.y, exit.x, exit.y);\n }\n path.closePath();\n return path;\n};\n\nconst easeOutCubic = (progress: number): number => 1 - Math.pow(1 - progress, 3);\nconst easeOutBack = (progress: number): number => {\n const coefficient = 1.70158;\n return 1 + (coefficient + 1) * Math.pow(progress - 1, 3) + coefficient * Math.pow(progress - 1, 2);\n};\nconst easeInCubic = (progress: number): number => progress * progress * progress;\nconst easeInBack = (progress: number): number => {\n const coefficient = 1.70158;\n return (coefficient + 1) * progress * progress * progress - coefficient * progress * progress;\n};\n\ntype TSioLogoFrameHandle = number | ReturnType<typeof setTimeout>;\n\nconst requestFrame = (callback: FrameRequestCallback): TSioLogoFrameHandle => {\n if (typeof globalThis.requestAnimationFrame === 'function') {\n return globalThis.requestAnimationFrame(callback);\n }\n return setTimeout(() => callback(performance.now()), 1000 / 60);\n};\n\nconst cancelFrame = (handle: TSioLogoFrameHandle): void => {\n if (typeof globalThis.cancelAnimationFrame === 'function' && typeof handle === 'number') {\n globalThis.cancelAnimationFrame(handle);\n return;\n }\n clearTimeout(handle);\n};\n\nexport class SioLogoRenderer {\n private options: ISioLogoRenderOptions;\n private frameHandle: TSioLogoFrameHandle | null = null;\n private phase: TSioLogoAnimationPhase | null = null;\n private startedAt = 0;\n private stagger = 70;\n private duration = 560;\n private totalDuration = 0;\n private backingWidth = 0;\n private backingHeight = 0;\n private scale = 1;\n private offsetX = 0;\n private offsetY = 0;\n private paths: Path2D[] = [];\n private loadingPaths: Path2D[] = [];\n private fills: string[] = [];\n private opacities: number[] = [];\n\n constructor(\n private readonly context: TSioLogoRenderContext,\n options: ISioLogoRenderOptions,\n ) {\n this.options = normalizeOptions(options);\n this.rebuild();\n }\n\n public setOptions(options: ISioLogoRenderOptions): void {\n this.options = normalizeOptions(options);\n this.rebuild();\n if (!this.phase) this.drawStatic();\n }\n\n public drawStatic(): void {\n this.clearCanvas();\n for (let index = 0; index < facets.length; index += 1) {\n this.paint(index, 0, 0, 0, 1, this.opacities[index], this.paths[index]);\n }\n this.context.globalAlpha = 1;\n }\n\n public clear(): void {\n this.stop();\n this.clearCanvas();\n }\n\n public start(phase: TSioLogoAnimationPhase): void {\n this.stop();\n this.phase = phase;\n this.startedAt = performance.now();\n this.stagger = phase === 'wave' ? 55 : 70;\n this.duration = phase === 'wave' ? 420 : 560;\n this.totalDuration = this.stagger * (facets.length - 1) + this.duration;\n\n const drawFrame = (time: number): void => {\n if (!this.phase) return;\n const elapsed = time - this.startedAt;\n this.drawAnimationFrame(elapsed);\n if (this.phase !== 'loading' && elapsed >= this.totalDuration) {\n this.settle();\n return;\n }\n this.frameHandle = requestFrame(drawFrame);\n };\n this.frameHandle = requestFrame(drawFrame);\n }\n\n public stop(): void {\n if (this.frameHandle !== null) {\n cancelFrame(this.frameHandle);\n this.frameHandle = null;\n }\n this.phase = null;\n }\n\n private rebuild(): void {\n const { size, dpr, square, light, mono, gap, radius } = this.options;\n this.backingWidth = Math.round((square ? size : size * sioLogoAspect) * dpr);\n this.backingHeight = Math.round(size * dpr);\n this.context.canvas.width = this.backingWidth;\n this.context.canvas.height = this.backingHeight;\n if (square) {\n this.scale = this.backingWidth / 500;\n this.offsetX = 0;\n this.offsetY = 0;\n } else {\n this.scale = this.backingHeight / tightBounds.height;\n this.offsetX =\n -tightBounds.x * this.scale +\n (this.backingWidth - tightBounds.width * this.scale) / 2;\n this.offsetY = -tightBounds.y * this.scale;\n }\n this.paths = facets.map((facet) => createFacetPath(facet.points, gap, radius));\n this.loadingPaths = facets.map((facet) => createFacetPath(facet.points, gap + 3, 90));\n this.fills = facets.map((facet, index) => mono || (light ? lightFills[index] : facet.fill));\n this.opacities = facets.map((_, index) => (mono ? monoOpacities[index] : 1));\n }\n\n private clearCanvas(): void {\n this.context.setTransform(1, 0, 0, 1, 0, 0);\n this.context.clearRect(0, 0, this.backingWidth, this.backingHeight);\n const { background } = this.options;\n if (background && background !== 'transparent' && background !== 'none') {\n this.context.fillStyle = background;\n this.context.fillRect(0, 0, this.backingWidth, this.backingHeight);\n }\n }\n\n private paint(\n index: number,\n translateX: number,\n translateY: number,\n rotation: number,\n scale: number,\n opacity: number,\n path: Path2D,\n ): void {\n const [centroidX, centroidY] = centroids[index];\n this.context.setTransform(this.scale, 0, 0, this.scale, this.offsetX, this.offsetY);\n this.context.translate(translateX, translateY);\n this.context.translate(centroidX, centroidY);\n this.context.rotate((rotation * Math.PI) / 180);\n this.context.scale(scale, scale);\n this.context.translate(-centroidX, -centroidY);\n this.context.globalAlpha = opacity;\n this.context.fillStyle = this.fills[index];\n this.context.fill(path);\n }\n\n private drawAnimationFrame(elapsed: number): void {\n this.clearCanvas();\n const activePhase = this.phase;\n for (let index = 0; index < facets.length; index += 1) {\n const [centroidX, centroidY] = centroids[index];\n let translateX = 0;\n let translateY = 0;\n let rotation = 0;\n let scale = 1;\n let opacity = this.opacities[index];\n let path = this.paths[index];\n\n if (activePhase === 'in') {\n const progress = clamp((elapsed - index * this.stagger) / this.duration, 0, 1);\n const eased = easeOutCubic(progress);\n translateX = (centerX - centroidX) * (1 - eased);\n translateY = (centerY - centroidY) * (1 - eased);\n rotation = (1 - eased) * -16;\n scale = easeOutBack(progress);\n opacity = clamp(progress * 1.6, 0, 1) * this.opacities[index];\n } else if (activePhase === 'out') {\n const reverseIndex = facets.length - 1 - index;\n const progress = clamp((elapsed - reverseIndex * this.stagger) / this.duration, 0, 1);\n const eased = easeInCubic(progress);\n translateX = (centerX - centroidX) * eased;\n translateY = (centerY - centroidY) * eased;\n rotation = progress * 16;\n scale = Math.max(0, 1 - easeInBack(progress));\n opacity = clamp(1 - progress * 1.3, 0, 1) * this.opacities[index];\n } else if (activePhase === 'wave') {\n const progress = clamp((elapsed - index * this.stagger) / this.duration, 0, 1);\n const pulse = Math.sin(progress * Math.PI);\n const radialX = centroidX - centerX;\n const radialY = centroidY - centerY;\n const radialLength = Math.hypot(radialX, radialY) || 1;\n translateX = (radialX / radialLength) * 16 * pulse;\n translateY = (radialY / radialLength) * 16 * pulse;\n scale = 1 - 0.08 * pulse;\n } else if (activePhase === 'loading') {\n const growth = clamp(elapsed / 650, 0, 1);\n const easedGrowth = growth < 0.5\n ? 2 * growth * growth\n : 1 - Math.pow(-2 * growth + 2, 2) / 2;\n const looping = elapsed >= 650;\n const spin = (elapsed / 1500) * 2 * Math.PI;\n const angle = -Math.PI / 2 + index * Math.PI / 4 + spin;\n const destinationX = centerX + 120 * Math.cos(angle);\n const destinationY = centerY + 120 * Math.sin(angle);\n const brightness = 1 - index / facets.length;\n translateX = (destinationX - centroidX) * easedGrowth;\n translateY = (destinationY - centroidY) * easedGrowth;\n scale =\n (1 + (0.62 - 1) * easedGrowth) *\n (looping ? 0.72 + 0.28 * brightness : 1);\n opacity = (looping ? 0.28 + 0.72 * brightness : 1) * this.opacities[index];\n path = looping\n ? this.loadingPaths[index]\n : createFacetPath(\n facets[index].points,\n this.options.gap + 3 * easedGrowth,\n this.options.radius + (90 - this.options.radius) * easedGrowth,\n );\n }\n\n this.paint(index, translateX, translateY, rotation, scale, opacity, path);\n }\n this.context.globalAlpha = 1;\n }\n\n private settle(): void {\n const finishedPhase = this.phase;\n this.frameHandle = null;\n this.phase = null;\n if (finishedPhase === 'out') this.clearCanvas();\n else this.drawStatic();\n this.context.globalAlpha = 1;\n }\n}\n","import {\n SioLogoRenderer,\n type ISioLogoRenderOptions,\n type TSioLogoAnimationPhase,\n} from './sio-logo-render.js';\n\ninterface ISioLogoWorkerInitMessage {\n type: 'init';\n canvas: OffscreenCanvas;\n options: ISioLogoRenderOptions;\n phase: TSioLogoAnimationPhase | null;\n}\n\ninterface ISioLogoWorkerOptionsMessage {\n type: 'options';\n options: ISioLogoRenderOptions;\n}\n\ninterface ISioLogoWorkerPhaseMessage {\n type: 'phase';\n phase: TSioLogoAnimationPhase | 'stop' | 'clear';\n}\n\ntype TSioLogoWorkerMessage =\n | ISioLogoWorkerInitMessage\n | ISioLogoWorkerOptionsMessage\n | ISioLogoWorkerPhaseMessage;\n\ninterface ISioLogoWorkerScope {\n onmessage: ((event: MessageEvent<TSioLogoWorkerMessage>) => void) | null;\n postMessage: (message: { type: 'ready' | 'initialized' }) => void;\n}\n\nconst workerScope = globalThis as unknown as ISioLogoWorkerScope;\nlet renderer: SioLogoRenderer | null = null;\n\nworkerScope.onmessage = (event): void => {\n const message = event.data;\n if (message.type === 'init') {\n const context = message.canvas.getContext('2d');\n if (!context) throw new Error('Unable to create the sio-logo worker canvas context.');\n renderer = new SioLogoRenderer(context, message.options);\n if (message.phase) renderer.start(message.phase);\n else renderer.drawStatic();\n workerScope.postMessage({ type: 'initialized' });\n return;\n }\n\n if (!renderer) return;\n if (message.type === 'options') {\n renderer.setOptions(message.options);\n return;\n }\n\n if (message.phase === 'stop') {\n renderer.stop();\n renderer.drawStatic();\n } else if (message.phase === 'clear') {\n renderer.clear();\n } else {\n renderer.start(message.phase);\n }\n};\n\n// The canvas is transferred only after the module and its renderer dependency\n// have loaded, leaving the HTMLCanvasElement intact for pre-transfer fallback.\nworkerScope.postMessage({ type: 'ready' });\n"],"mappings":"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","names":["facets","lightFills","monoOpacities","tightBounds","centerX","centerY","sioLogoAspect","centroids","facet","clamp","__name","value","minimum","maximum","finiteAtLeast","fallback","normalizeOptions","options","inset","points","gap","x","y","centroidX","centroidY","lines","index","start","end","deltaX","deltaY","length","normalX","normalY","middleX","middleY","line","previous","denominator","distance","createFacetPath","radius","insetPoints","path","vertex","next","previousDistance","nextDistance","previousRadius","nextRadius","entry","exit","easeOutCubic","progress","easeOutBack","easeInCubic","easeInBack","requestFrame","callback","cancelFrame","handle","SioLogoRenderer","context","phase","drawFrame","time","elapsed","size","dpr","square","light","mono","_","background","translateX","translateY","rotation","scale","opacity","activePhase","eased","reverseIndex","pulse","radialX","radialY","radialLength","growth","easedGrowth","looping","spin","angle","destinationX","destinationY","brightness","finishedPhase","workerScope","renderer","event","message","context","SioLogoRenderer"]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@social.io/catalog',
6
- version: '2.1.1',
6
+ version: '2.1.2',
7
7
  description: 'Apple-native v8 design system and web components for social.io'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsb0JBQW9CO0lBQzFCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxnRUFBZ0U7Q0FDOUUsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social.io/catalog",
3
- "version": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "private": false,
5
5
  "description": "Apple-native v8 design system and web components for social.io",
6
6
  "exports": {
@@ -10,24 +10,24 @@
10
10
  "author": "Task Venture Capital GmbH",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@design.estate/dees-domtools": "^2.5.6",
14
- "@design.estate/dees-element": "^2.4.0",
13
+ "@design.estate/dees-domtools": "^3.0.1",
14
+ "@design.estate/dees-element": "^3.4.0",
15
15
  "lucide": "^1.16.0"
16
16
  },
17
17
  "devDependencies": {
18
- "@git.zone/tsbuild": "^4.4.2",
19
- "@git.zone/tsbundle": "^2.11.2",
20
- "@git.zone/tsrun": "^2.0.5",
21
- "@git.zone/tstest": "^3.6.6",
22
- "@git.zone/tswatch": "^3.3.5",
23
- "@types/node": "^26.1.1",
24
- "@design.estate/dees-wcctools": "^3.9.0"
18
+ "@design.estate/dees-wcctools": "^4.0.0",
19
+ "@git.zone/tsbuild": "^5.0.0",
20
+ "@git.zone/tsbundle": "^3.0.1",
21
+ "@git.zone/tsrun": "^3.0.2",
22
+ "@git.zone/tstest": "^6.3.2",
23
+ "@git.zone/tswatch": "^4.0.2",
24
+ "@types/node": "^26.6.2"
25
25
  },
26
26
  "files": [
27
27
  "ts/**/*",
28
28
  "ts_web/**/*",
29
29
  "dist/**/*",
30
- "dist_*/**/*",
30
+ "dist_bundle/**/*",
31
31
  "dist_ts/**/*",
32
32
  "dist_ts_web/**/*",
33
33
  "assets/**/*",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@social.io/catalog',
6
- version: '2.1.1',
6
+ version: '2.1.2',
7
7
  description: 'Apple-native v8 design system and web components for social.io'
8
8
  }
package/readme.hints.md DELETED
@@ -1,82 +0,0 @@
1
- # @social.io/catalog — hints
2
-
3
- ## v2 architecture (v8 design program)
4
-
5
- - Pure web-component catalog: Lit via `@design.estate/dees-element` with
6
- standard TC39 decorators (`@property({ ... }) public accessor x`,
7
- `@state() private accessor y`). No services, no recorder — the v1
8
- media-recorder stack was removed.
9
- - Every element: `@customElement('sio-...')`, a
10
- `declare global { interface HTMLElementTagNameMap }` entry, a
11
- `public static demo = () => html\`...\`` with realistic v8 content, and
12
- `static styles = [...sioElementStyles, css\`...\`]`.
13
- - Entry points:
14
- - `ts_web/index.ts` → re-exports `ts_web/elements/index.ts` (the barrel:
15
- tokens + all components).
16
- - `html/index.ts` → dees-wcctools catalog with three sections:
17
- Primitives (all `Sio*` classes except the widget suite), Chat Widget
18
- (`SioFab`, `SioCombox`, `SioConversationSelector`, `SioConversationView`,
19
- `SioMessageInput`, `SioImageLightbox`, `SioPdfViewer`), Pages.
20
- - `ts_web/pages/` — `firstpage` (widget host page with the sio-fab
21
- launcher), `mainpage` (composed v7 unified-feed showcase:
22
- segmented + ai-card + inset-list + list-rows + avatars + chips).
23
- - Build: `pnpm build` = `tsbuild tsfolders` (no skipLibCheck) + `tsbundle`.
24
- Dev: `pnpm watch` (tswatch serves `html/index.html`).
25
- - Tests: `test/test.chromium.ts` runs in real Chromium via
26
- `pnpm test` (tstest). Pattern: construct → append to body →
27
- `await updateComplete` → assert against `shadowRoot`. Gotcha: the
28
- dees-domtools base styles put `transition: background .1s, color .1s`
29
- on `*` — wait ~200ms before asserting a *changed* computed color.
30
-
31
- ## Token system (`ts_web/elements/tokens.ts`)
32
-
33
- - The only source of color/typography/radius/density values. Components
34
- never hardcode colors; tints derive with
35
- `color-mix(in oklab, var(--sio-...) N%, transparent)`. No string
36
- concatenation on `cssManager.bdTheme(...)` results (the v1 anti-pattern) —
37
- light/dark pairs live inside tokens.ts, or a component declares its own
38
- scoped custom prop via `bdTheme` when the value is component-specific
39
- (e.g. the segmented-control knob).
40
- - `sioElementStyles = [cssManager.defaultStyles, sioBaseStyles]` — spread it
41
- first in every element's `static styles`.
42
- - Custom props (all `--sio-*`): surfaces (`bg`, `bg-grouped`, `surface`,
43
- `surface-2`), 4-level labels, separators (0.5px hairline convention via
44
- `--sio-hairline`), tint `#0A84FF` (dark `#409CFF`, hover `#0071E3`/`#64B2FF`,
45
- soft 10%/18%), channel palette (mail `#0A84FF`, chats `#30D158`,
46
- calls `#FF9F0A`, letters `#A2845E`), lane palette (feed/paper/people),
47
- bucket palette (now `#FF453A`, today `#FF9F0A`, later `#8E8E93`,
48
- done `#30D158`), density row heights 78/62/48px, radii ramp, glass values.
49
- - Helper CSS fragments: `sioGlass` / `sioToolbarGlass` / `sioPillGlass`
50
- (backdrop blur 28px saturate 180%), the SF type ramp
51
- (`sioTypeLargeTitle` … `sioTypeCaption2`, `sioTypeMono`), and
52
- `sioTabularNums` for any run of digits. `sioTheme` maps token names to
53
- `var(--sio-*)` strings for inline styles.
54
- - Icons: `sio-icon` is a thin wrapper over the `lucide` npm package
55
- (never a CDN), with a small alias map (e.g. `envelope` → `mail`).
56
-
57
- ## Component inventory (28 files / 29 elements)
58
-
59
- Foundation: `sio-logo` (faceted canvas mark, theme/DPR/reduced-motion aware),
60
- `sio-icon`, `sio-button`, `sio-kbd`, `sio-chip`
61
- (channel/lane/status palettes), `sio-avatar` + `sio-avatar-stack`,
62
- `sio-unread-badge`.
63
-
64
- Chrome & navigation: `sio-glass-toolbar`, `sio-segmented`,
65
- `sio-tab-bar`, `sio-channel-rail`, `sio-dropdown-menu`.
66
-
67
- Lists & feed: `sio-list-row` (density comfortable/cozy/compact =
68
- 78/62/48px, unread gutter, hover triage actions, inset hairlines),
69
- `sio-inset-list` (iOS grouped card), `sio-bucket-header`.
70
-
71
- Content & input: `sio-ai-card`, `sio-composer` (`composer-send` /
72
- `composer-attach`), `sio-cmdk` (host-owned `open`, `cmdk-run` /
73
- `cmdk-close`), `sio-waveform`, `sio-step-timeline`, `sio-paper-thumb`.
74
-
75
- Chat-widget suite (embeddable): `sio-fab` (owns the `SioCombox`
76
- singleton), `sio-combox` (three states: home list / conversation /
77
- away email-fallback), `sio-conversation-selector`,
78
- `sio-conversation-view`, `sio-message-input`, `sio-image-lightbox`,
79
- `sio-pdf-viewer`.
80
-
81
- All interactions dispatch `CustomEvent`s with `bubbles: true,
82
- composed: true`; `render()` stays side-effect free.