@m2c2kit/addons 0.3.14 → 0.3.15

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.min.js CHANGED
@@ -1 +1 @@
1
- import{Composite as N,WebColors as d,Shape as p,Label as B,CanvasKitHelpers as J,M2EventType as b,MutablePath as Q,Easings as $,Story as tt,Transition as K,TransitionDirection as U,LabelHorizontalAlignmentMode as et,Scene as j,Dimensions as it,Sprite as H,Action as I}from"@m2c2kit/core";class F extends N{constructor(t){if(super(t),this.compositeType="grid",this.rows=0,this.columns=0,this.gridBackgroundColor=[0,0,233,.25],this.gridLineColor=d.Red,this.gridLineWidth=1,this.gridChildren=new Array,t.size)this.size=t.size;else throw new Error("grid size must be specified");if(t.rows)if(t.rows>=1)this.rows=t.rows;else throw new Error("rows must be at least 1");else throw new Error("rows must be specified");if(t.columns)if(t.columns>=1)this.columns=t.columns;else throw new Error("columns must be at least 1");else throw new Error("columns must be specified");t.backgroundColor&&(this.gridBackgroundColor=t.backgroundColor),t.gridLineColor&&(this.gridLineColor=t.gridLineColor),t.gridLineWidth&&(this.gridLineWidth=t.gridLineWidth),this.cellWidth=this.size.width/this.columns,this.cellHeight=this.size.height/this.rows}initialize(){super.removeAllChildren(),this.gridBackground=new p({name:"_"+this.name+"-gridBackground",rect:{size:this.size},fillColor:this.gridBackgroundColor,strokeColor:this.gridLineColor,lineWidth:this.gridLineWidth,isUserInteractionEnabled:this.isUserInteractionEnabled}),this.addChild(this.gridBackground),this.gridBackground.isUserInteractionEnabled=this.isUserInteractionEnabled;for(let t=1;t<this.columns;t++){const e=new p({name:"_"+this.name+"-gridVerticalLine-"+t,rect:{size:{width:this.gridLineWidth,height:this.size.height},origin:{x:-this.size.width/2+this.cellWidth*t,y:0}},fillColor:this.gridLineColor});this.gridBackground.addChild(e)}for(let t=1;t<this.rows;t++){const e=new p({name:"_"+this.name+"-gridHorizontalLine-"+t,rect:{size:{width:this.size.width,height:this.gridLineWidth},origin:{x:0,y:-this.size.height/2+this.cellHeight*t}},fillColor:this.gridLineColor});this.gridBackground.addChild(e)}this.gridChildren&&this.gridChildren.forEach(t=>{if(!this.cellWidth||!this.cellHeight||!this.gridBackground)throw new Error("cellWidth, cellHeight, or gridBackground undefined or null");const e=-this.size.width/2+this.cellWidth/2+t.column*this.cellWidth,i=-this.size.height/2+this.cellHeight/2+t.row*this.cellHeight;t.node.position={x:e+t.node.position.x,y:i+t.node.position.y},this.gridBackground.addChild(t.node)}),this.needsInitialization=!1}get gridBackground(){if(!this._gridBackground)throw new Error("gridBackground is null or undefined");return this._gridBackground}set gridBackground(t){this._gridBackground=t}dispose(){}duplicate(t){const e=new F({...this.getNodeOptions(),...this.getDrawableOptions(),rows:this.rows,columns:this.columns,size:this.size,backgroundColor:this.gridBackgroundColor,gridLineWidth:this.gridLineWidth,gridLineColor:this.gridLineColor,name:t});return this.children.length>0&&(e.children=this.children.map(i=>{const o=i.duplicate();return o.parent=e,o})),e}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}removeAllChildren(){if(this.gridChildren.length!==0){for(;this.gridChildren.length;){const t=this.gridChildren.pop();t&&this.gridBackground.removeChild(t.node)}this.needsInitialization=!0}}addAtCell(t,e,i){(e<0||e>=this.rows||i<0||i>=this.columns)&&console.warn(`warning: addAtCell() requested to add node at row ${e}, column ${i}. This is outside the bounds of grid ${this.name}, which is size ${this.rows}x${this.columns}. Note that addAtCell() uses zero-based indexing. AddAtCell() will proceed, but may draw nodes outside the grid`),this.gridChildren.push({node:t,row:e,column:i}),this.needsInitialization=!0}removeAllAtCell(t,e){const i=this.gridChildren.filter(o=>o.row===t&&o.column===e);i.length!==0&&(this.gridBackground.removeChildren(i.map(o=>o.node)),this.gridChildren=this.gridChildren.filter(o=>o.row!==t&&o.column!==e),this.needsInitialization=!0)}removeChild(t){this.gridBackground.removeChild(t),this.gridChildren=this.gridChildren.filter(e=>e.node!=t),this.needsInitialization=!0}}class A extends N{constructor(t){super(t),this.compositeType="button",this._backgroundColor=d.Black,this.size={width:200,height:50},this.cornerRadius=9,this.fontSize=20,this._text="",this._fontColor=d.White,t.text&&(this.text=t.text),t.size&&(this.size=t.size),t.cornerRadius!==void 0&&(this.cornerRadius=t.cornerRadius),t.fontSize!==void 0&&(this.fontSize=t.fontSize),t.fontColor&&(this.fontColor=t.fontColor),t.backgroundColor&&(this.backgroundColor=t.backgroundColor)}initialize(){this.removeAllChildren(),this.backgroundPaint=new this.canvasKit.Paint,this.backgroundPaint.setColor(this.canvasKit.Color(this.backgroundColor[0],this.backgroundColor[1],this.backgroundColor[2],this.backgroundColor[3])),this.backgroundPaint.setStyle(this.canvasKit.PaintStyle.Fill);const t=new p({rect:{size:this.size},cornerRadius:this.cornerRadius,fillColor:this._backgroundColor});this.addChild(t);const e=new B({text:this.text,fontSize:this.fontSize,fontColor:this.fontColor});t.addChild(e),this.needsInitialization=!1}dispose(){J.Dispose([this.backgroundPaint])}get text(){return this._text}set text(t){this._text=t,this.needsInitialization=!0}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get fontColor(){return this._fontColor}set fontColor(t){this._fontColor=t,this.needsInitialization=!0}duplicate(t){const e=new A({...this.getNodeOptions(),...this.getDrawableOptions(),...this.getTextOptions(),size:this.size,cornerRadius:this.cornerRadius,backgroundColor:this.backgroundColor,fontColor:this.fontColor,name:t});return this.children.length>0&&(e.children=this.children.map(i=>{const o=i.duplicate();return o.parent=e,o})),e}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}}var q=(v=>(v.Dismiss="Dismiss",v.Positive="Positive",v.Negative="Negative",v))(q||{});class ot extends N{constructor(t){super(t),this.compositeType="Dialog",this._backgroundColor=d.White,this.cornerRadius=9,this.overlayAlpha=.5,this.contentText="",this.positiveButtonText="",this.negativeButtonText="",this.zPosition=Number.MAX_VALUE,this.hidden=!0,this._fontColor=d.White,t&&(t.overlayAlpha&&(this.overlayAlpha=t.overlayAlpha),t.messageText&&(this.contentText=t.messageText),t.positiveButtonText&&(this.positiveButtonText=t.positiveButtonText),t.negativeButtonText&&(this.negativeButtonText=t.negativeButtonText),t.size&&(this.size=t.size),t.cornerRadius&&(this.cornerRadius=t.cornerRadius),t.fontColor&&(this.fontColor=t.fontColor),t.backgroundColor&&(this.backgroundColor=t.backgroundColor))}show(){this.hidden=!1}onDialogResult(t,e){const i={type:b.CompositeCustom,compositeType:"DialogResult",nodeUuid:this.uuid,callback:t};e?.replaceExisting&&(this.eventListeners=this.eventListeners.filter(o=>!(o.nodeUuid===i.nodeUuid&&o.type===i.type))),this.eventListeners.push(i)}initialize(){this.removeAllChildren();const t=new p({rect:{width:Globals.canvasCssWidth,height:Globals.canvasCssHeight,x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},fillColor:[0,0,0,this.overlayAlpha],zPosition:-1,isUserInteractionEnabled:!0});t.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(s=>s.type===b.CompositeCustom).forEach(s=>{const c={type:b.CompositeCustom,target:this,handled:!1,dialogResult:"Dismiss"};s.callback(c)})}),this.addChild(t);const e=new p({rect:{width:300,height:150,x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},cornerRadius:this.cornerRadius,fillColor:this.backgroundColor,isUserInteractionEnabled:!0});e.onTapDown(r=>{r.handled=!0}),this.addChild(e);const i=new B({text:this.contentText,fontSize:24,position:{x:200,y:360}});this.addChild(i);const o=new A({text:this.negativeButtonText,position:{x:120,y:440},size:{width:100,height:40},isUserInteractionEnabled:!0,zPosition:1});o.onTapDown(r=>{r.handled=!0,this.hidden=!0}),o.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(s=>s.type===b.CompositeCustom).forEach(s=>{const c={type:b.CompositeCustom,target:this,handled:!1,dialogResult:"Negative"};s.callback(c)})});const a=new A({text:this.positiveButtonText,position:{x:280,y:440},size:{width:100,height:40},isUserInteractionEnabled:!0,zPosition:1});a.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(s=>s.type===b.CompositeCustom).forEach(s=>{const c={type:b.CompositeCustom,target:this,handled:!1,dialogResult:"Positive"};s.callback(c)})}),this.addChild(o),this.addChild(a),this.needsInitialization=!1}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get fontColor(){return this._fontColor}set fontColor(t){this._fontColor=t,this.needsInitialization=!0}duplicate(t){throw new Error("duplicate not implemented")}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}}const y={StrokeStart:"StrokeStart",StrokeMove:"StrokeMove",StrokeEnd:"StrokeEnd"},P={StrokeEnter:"StrokeEnter",StrokeLeave:"StrokeLeave"};class nt extends N{constructor(t){if(super(t),this.compositeType="DrawPad",this.resumeDrawingOnReturn=!1,this.continuousDrawingOnly=!1,this._backgroundColor=[0,0,0,0],this._borderColor=d.Black,this._borderWidth=1,this._lineColor=d.Red,this._lineWidth=1,this.isDrawingPointerDown=!1,this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1,this.currentStrokesNotAllowed=!1,this.strokes=new Array,t.isUserInteractionEnabled===void 0&&(this.isUserInteractionEnabled=!0),!t.size)throw new Error("DrawPad size must be specified");this.size=t.size,t.lineColor&&(this.lineColor=t.lineColor),t.lineWidth&&(this.lineWidth=t.lineWidth),t.backgroundColor&&(this.backgroundColor=t.backgroundColor),t.borderColor&&(this.borderColor=t.borderColor),t.borderWidth&&(this.borderWidth=t.borderWidth),t.resumeDrawingOnReturn!==void 0&&(this.resumeDrawingOnReturn=t.resumeDrawingOnReturn),t.continuousDrawingOnly!==void 0&&(this.continuousDrawingOnly=t.continuousDrawingOnly),t.continuousDrawingOnlyExceptionDistance!==void 0&&(this.continuousDrawingOnlyExceptionDistance=t.continuousDrawingOnlyExceptionDistance)}initialize(){this.initializeDrawShape(),this.initializeDrawArea(),this.needsInitialization=!1}initializeDrawShape(){if(!this.drawShape){const t=new Q;this.drawShape=new p({path:t,size:this.size}),this.addChild(this.drawShape)}this.drawShape.strokeColor=this.lineColor,this.drawShape.lineWidth=this.lineWidth}initializeDrawArea(){this.drawArea||(this.drawArea=new p({rect:{size:this.size},isUserInteractionEnabled:!0}),this.addChild(this.drawArea),this.drawArea.onTapDown(t=>{this.handleTapDown(t)}),this.drawArea.onPointerMove(t=>{this.handlePointerMove(t)}),this.drawArea.onTapUpAny(()=>{this.handleTapUpAny()}),this.drawArea.onTapLeave(t=>{this.handleTapLeave(t)})),this.drawArea.fillColor=this.backgroundColor,this.drawArea.strokeColor=this.borderColor,this.drawArea.lineWidth=this.borderWidth}dist(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}handleTapDown(t){if(this.isUserInteractionEnabled){if(!this.drawShape?.path)throw new Error("DrawPad.handleTapDown(): no drawShape.path");const e=this.drawShape.path;if(this.continuousDrawingOnly&&e.subpaths.length!==0){const o=e.subpaths[e.subpaths.length-1][e.subpaths[e.subpaths.length-1].length-1],a=t.point;if(this.continuousDrawingOnlyExceptionDistance===void 0||this.dist(o,a)>this.continuousDrawingOnlyExceptionDistance){this.currentStrokesNotAllowed=!0;return}}this.currentStrokesNotAllowed=!1,this.isDrawingPointerDown=!0,e.move(t.point);const i={type:y.StrokeStart,target:this,handled:!1,position:t.point};this.strokes.push([{type:y.StrokeStart,position:t.point,iso8601Timestamp:new Date().toISOString(),interpolated:!1}]),this.raiseDrawPadEvent(i)}}addInterpolatedStrokeMove(t){const e=this.strokes.length,i=this.strokes[e-1].length,o=this.strokes[this.strokes.length-1][i-1].position,a=this.interpolateToDrawPadBorder(t,o,this.size);if(!this.drawShape?.path)throw new Error("DrawPad.addInterpolatedStrokeMove(): no drawShape.path");this.drawShape.path.addLine(a);const s={type:y.StrokeMove,target:this,handled:!1,position:a};return this.strokes[e-1].push({type:y.StrokeMove,position:a,iso8601Timestamp:new Date().toISOString(),interpolated:!0}),this.raiseDrawPadEvent(s),a}handleTapLeave(t){if(this.currentStrokesNotAllowed){this.isDrawingPointerDown=!1;return}if(this.resumeDrawingOnReturn===!1){this.isDrawingPointerDown=!1;const e=this.strokes.length,i=this.strokes[e-1].length;let o=!1,a=t.point;this.isPointWithinDrawPad(t.point,this.size)||(a=this.addInterpolatedStrokeMove(t.point),o=!0);const r={type:y.StrokeEnd,position:this.strokes[e-1][i-1].position,target:this,handled:!1};this.strokes[e-1].push({type:y.StrokeEnd,position:o?a:this.strokes[e-1][i-1].position,iso8601Timestamp:new Date().toISOString(),interpolated:o}),this.raiseDrawPadEvent(r),this.currentStrokesNotAllowed=!0}else this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!0}handleTapUpAny(){if(this.currentStrokesNotAllowed){this.isDrawingPointerDown=!1;return}if(this.isUserInteractionEnabled){this.isDrawingPointerDown=!1,this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1;const t=this.strokes.length,e=this.strokes[t-1].length,i={type:y.StrokeEnd,position:this.strokes[t-1][e-1].position,target:this,handled:!1};this.strokes[t-1].push({type:y.StrokeEnd,position:this.strokes[t-1][e-1].position,iso8601Timestamp:new Date().toISOString(),interpolated:!1}),this.raiseDrawPadEvent(i)}}handlePointerMove(t){if(this.isUserInteractionEnabled&&this.isDrawingPointerDown){if(!this.drawShape?.path)throw new Error("DrawPad.handlePointerMove(): no drawShape.path");const e=this.drawShape.path;this.isDrawingPointerDown&&!this.pointerIsDownAndPointerLeftDrawAreaWhenDown&&e.addLine(t.point),this.pointerIsDownAndPointerLeftDrawAreaWhenDown&&(this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1,e.move(t.point));const i={type:y.StrokeMove,target:this,handled:!1,position:t.point},o=this.strokes.length;this.strokes[o-1].push({type:y.StrokeMove,position:t.point,iso8601Timestamp:new Date().toISOString(),interpolated:!1}),this.raiseDrawPadEvent(i)}}update(){super.update()}draw(t){super.drawChildren(t)}raiseDrawPadEvent(t){this.eventListeners.length>0&&this.eventListeners.filter(e=>e.type===t.type).forEach(e=>{e.callback(t)})}raiseDrawPadItemEvent(t,e){t.eventListeners.length>0&&t.eventListeners.filter(i=>i.type===e.type).forEach(i=>{i.callback(e)})}clear(){if(!this.drawShape?.path)throw new Error("DrawPad.clear(): no drawShape.path");this.drawShape.path.clear(),this.strokes=new Array}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}onStrokeStart(t,e){this.addEventListener(y.StrokeStart,t,e)}onStrokeMove(t,e){this.addEventListener(y.StrokeMove,t,e)}onStrokeEnd(t,e){this.addEventListener(y.StrokeEnd,t,e)}addItem(t){return Object.defineProperty(t,"drawPadPosition",{get:function(){const e=t.parent;return{get x(){return t.position.x+e.size.width/2},set x(i){t.position.x=i-e.size.width/2},get y(){return t.position.y+e.size.height/2},set y(i){t.position.y=i-e.size.height/2}}},set:function(e){const i=t.parent;t.position.x=e.x-i.size.width/2,t.position.y=e.y-i.size.height/2}}),Object.defineProperty(t,"onStrokeEnter",{value:function(e,i){this.addEventListener(P.StrokeEnter,e,i)}}),Object.defineProperty(t,"onStrokeLeave",{value:function(e,i){this.addEventListener(P.StrokeLeave,e,i)}}),Object.defineProperty(t,"isStrokeWithinBounds",{value:!1,writable:!0}),t.onPointerDown(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!1){t.isStrokeWithinBounds=!0;const e={type:P.StrokeEnter,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerMove(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!1){t.isStrokeWithinBounds=!0;const e={type:P.StrokeEnter,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerLeave(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!0){t.isStrokeWithinBounds=!1;const e={type:P.StrokeLeave,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerUp(()=>{if(t.isStrokeWithinBounds===!0){t.isStrokeWithinBounds=!1;const e={type:P.StrokeLeave,target:t};this.raiseDrawPadItemEvent(t,e)}}),this.addChild(t),t.zPosition=-1,t.position.x=t.position.x-this.size.width/2,t.position.y=t.position.y-this.size.height/2,t.isUserInteractionEnabled=!0,t}takeScreenshot(){const t=this.drawArea;if(!t)throw new Error("DrawPad.takeScreenshot(): no drawArea");const e=(t.absolutePosition.x-t.size.width/2)*Globals.canvasScale,i=(t.absolutePosition.y-t.size.height/2)*Globals.canvasScale,o=t.size.width*Globals.canvasScale,a=t.size.height*Globals.canvasScale,r={alphaType:this.game.canvasKit.AlphaType.Unpremul,colorType:this.game.canvasKit.ColorType.RGBA_8888,colorSpace:this.game.canvasKit.ColorSpace.SRGB,width:o,height:a},c=this.game.snapshots[0].readPixels(e,i,r),C=this.game.canvasKit.MakeImage(r,c,c.length/a);if(!C)throw new Error("DrawPad.takeScreenshot(): no croppedImage");const f=C.encodeToBytes();if(!f)throw new Error("DrawPad.takeScreenshot(): croppedImage.encodeToBytes() failed");return C.delete(),this.arrayBufferToBase64String(f)}isPointWithinDrawPad(t,e){return t.x>=0&&t.x<=e.width&&t.y>=0&&t.y<=e.height}interpolateToDrawPadBorder(t,e,i){const o=(t.y-e.y)/(t.x-e.x),a=t.y-o*t.x,r={x:0,y:0};if(!Number.isFinite(o)){if(r.x=t.x,t.y-e.y>0)return r.y=i.height,r;if(t.y-e.y<0)return r.y=0,r}const s=o*0+a,c=o*i.width+a;if(s>=0&&s<=i.height&&t.x-e.x<0)return r.x=0,r.y=s,r;if(c>=0&&c<=i.height&&t.x-e.x>0)return r.x=i.width,r.y=c,r;const C=(0-a)/o,f=(i.height-a)/o;return C>=0&&C<=i.width&&t.y-e.y<0?(r.x=C,r.y=0,r):f>=0&&f<=i.width&&t.y-e.y>0?(r.x=f,r.y=i.height,r):t}arrayBufferToBase64String(t){let e="";const i=new Uint8Array(t);for(let o=0;o<i.byteLength;o++)e+=String.fromCharCode(i[o]);return window.btoa(e)}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get borderColor(){return this._borderColor}set borderColor(t){this._borderColor=t,this.needsInitialization=!0}get borderWidth(){return this._borderWidth}set borderWidth(t){this._borderWidth=t,this.needsInitialization=!0}get lineColor(){return this._lineColor}set lineColor(t){this._lineColor=t,this.needsInitialization=!0}get lineWidth(){return this._lineWidth}set lineWidth(t){this._lineWidth=t,this.needsInitialization=!0}duplicate(t){throw new Error("DrawPad.duplicate(): Method not implemented.")}}class rt extends N{constructor(t){super(t),this.rowsConfiguration=new Array,this.shiftActivated=!1,this.size=t.size,this.position=t.position??{x:0,y:0},this.keyboardHorizontalPaddingPercent=t.keyboardHorizontalPaddingPercent??.02,this.keyboardVerticalPaddingPercent=t.keyboardVerticalPaddingPercent??.025,this.keyHorizontalPaddingPercent=t.keyHorizontalPaddingPercent??.1,this.keyVerticalPaddingPercent=t.keyVerticalPaddingPercent??.1,t.rows!==void 0&&(this.rowsConfiguration=t.rows.map(e=>e.map(o=>{if(o instanceof Object&&!Array.isArray(o)){const a=o;return o.keyIconShapeOptions&&(a.keyIcon=new p(o.keyIconShapeOptions),a.keyIconShapeOptions=void 0),a}else return o}))),this.keysPerRow=t.keysPerRow??NaN,this.fontSize=t.fontSize??NaN,this.fontNames=t.fontNames,this.hiddenKeys=t.hiddenKeys??"",this.capitalLettersOnly=t.capitalLettersOnly??!1,this.keyColor=t.keyColor??d.White,this.keyDownColor=t.keyDownColor??d.Transparent,this.specialKeyDownColor=t.specialKeyDownColor??d.LightSteelBlue,this.backgroundColor=t.backgroundColor??[242,240,244,1],this.showKeyDownPreview=t.showKeyDownPreview??!0}initialize(){if(this.rowsConfiguration.length===0){const f=[["1","!"],["2","@"],["3","#"],["4","$"],["5","%"],["6","^"],["7","&"],["8","*"],["9","("],["0",")"]],u=["q","w","e","r","t","y","u","i","o","p"],T=["a","s","d","f","g","h","j","k","l"],z={path:{pathString:"m288-6.6849e-14 -288 288h144v288h288v-288h144l-288-288z",width:24},lineWidth:2,strokeColor:d.Black,fillColor:d.Transparent},g={path:{pathString:"M10.625 5.09 0 22.09l10.625 17H44.18v-34H10.625zm31.555 32H11.734l-9.375-15 9.375-15H42.18v30zm-23.293-6.293 7.293-7.293 7.293 7.293 1.414-1.414-7.293-7.293 7.293-7.293-1.414-1.414-7.293 7.293-7.293-7.293-1.414 1.414 7.293 7.293-7.293 7.293",width:24},lineWidth:1,strokeColor:d.Black,fillColor:d.Red},n=[{code:"Shift",isShift:!0,widthRatio:1.5,keyIcon:new p(z)},"z","x","c","v","b","n","m",{code:"Backspace",widthRatio:1.5,keyIcon:new p(g)}],k=[f,u,T,n,[{code:" ",labelText:"SPACE",widthRatio:5}]];this.rowsConfiguration=k,this.keysPerRow=this.rowsConfiguration.reduce((E,L)=>Math.max(E,L.length),0),this.fontSize=this.size.height/this.rowsConfiguration.length/2.5}const t=new p({rect:{size:this.size},fillColor:this.backgroundColor});this.addChild(t);const e=this.rowsConfiguration.map(f=>f.map(u=>{let T=1;const z=1;let g,n,D,k,E=!1;return typeof u=="string"?(g=u,this.capitalLettersOnly?n=g.toUpperCase():n=g,D=g.toUpperCase()):Array.isArray(u)?(g=u[0],n=g,D=u[1]):(g=u.code,n=u.labelText??"",D=u.labelTextShifted??n,T=u.widthRatio??1,k=u.keyIcon,E=u.isShift??!1),{widthRatio:T,heightRatio:z,code:g,labelText:n,labelTextShifted:D,keyIcon:k,isShift:E}})),i={x:-t.size.width/2,y:-t.size.height/2},o=(this.keyboardVerticalPaddingPercent??.025)*this.size.height,a=(this.keyboardHorizontalPaddingPercent??.02)*this.size.width,r=(this.size.height-2*o)/e.length,s=(this.size.width-2*a)/this.keysPerRow;for(let f=0;f<e.length;f++){const u=e[f],T=u.reduce((g,n)=>g+(n.widthRatio??1),0);let z=0;T<this.keysPerRow&&(z=(this.size.width-2*a-s*T)/2);for(let g=0;g<u.length;g++){const n=u[g];if(this.hiddenKeys?.split(",").map(S=>S.trim()).includes(n.code))continue;const D=u.slice(0,g).reduce((S,m)=>S+(m.widthRatio??1),0)*s,k=new p({rect:{size:{width:s*(n.widthRatio??1),height:r}},fillColor:d.Transparent,strokeColor:d.Transparent,lineWidth:1,position:{x:z+i.x+a+D+(n.widthRatio??1)*s/2,y:i.y+o+f*r+r/2}}),E=s*(n.widthRatio??1)-2*this.keyHorizontalPaddingPercent*s,L=r-(n.heightRatio??1)-2*this.keyVerticalPaddingPercent*r,w=new p({rect:{size:{width:E,height:L}},cornerRadius:4,fillColor:this.keyColor,lineWidth:0,isUserInteractionEnabled:!0});k.addChild(w),w.onTapUp(S=>{let m="";n.isShift?(this.shiftActivated?w.fillColor=this.specialKeyDownColor:w.fillColor=this.keyColor,m=n.code):(this.shiftActivated?(this.shiftActivated=!1,this.shiftKeyShape&&(this.shiftKeyShape.fillColor=this.keyColor,n.keyIcon&&(n.keyIcon.fillColor=d.Transparent)),e.flatMap(l=>l).forEach(l=>{l.keyLabel?.text!==void 0&&(l.keyLabel.text=l.labelText??"")}),m=n.labelTextShifted??n.code):m=n.labelText??n.code,(n.code===" "||n.code==="Backspace")&&(m=n.code),w.fillColor=this.keyColor),c.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(l=>l.type===b.CompositeCustom&&l.compositeType==="VirtualKeyboardKeyUp").forEach(l=>{const O={type:b.CompositeCustom,target:this,handled:!1,key:m,code:n.code,shiftKey:this.shiftActivated,keyTapMetadata:{size:w.size,point:S.point,buttons:S.buttons}};l.callback(O)})}),w.onTapDown(S=>{n.isShift&&(this.shiftActivated=!this.shiftActivated,this.shiftActivated?(w.fillColor=this.specialKeyDownColor,n.keyIcon&&(n.keyIcon.fillColor=d.Black),e.flatMap(l=>l).forEach(l=>{l.keyLabel?.text!==void 0&&(l.keyLabel.text=l.labelTextShifted??l.labelText??"")})):(w.fillColor=this.keyColor,n.keyIcon&&(n.keyIcon.fillColor=d.Transparent),e.flatMap(l=>l).forEach(l=>{l.keyLabel?.text!==void 0&&(l.keyLabel.text=l.labelText??"")})));let m="";n.isShift||n.code===" "||n.code==="Backspace"?(w.fillColor=this.specialKeyDownColor,m=n.code):(w.fillColor=this.keyDownColor,this.showKeyDownPreview&&(c.hidden=!1,c.position.x=k.position.x,c.position.y=k.position.y-L*1.2,this.shiftActivated?C.text=n.labelTextShifted??n.code:C.text=n.labelText??n.code),this.shiftActivated?m=n.labelTextShifted??n.code:m=n.labelText??n.code),this.eventListeners.length>0&&this.eventListeners.filter(l=>l.type===b.CompositeCustom&&l.compositeType==="VirtualKeyboardKeyDown").forEach(l=>{const O={type:b.CompositeCustom,target:this,handled:!1,key:m,code:n.code,shiftKey:this.shiftActivated,keyTapMetadata:{size:w.size,point:S.point,buttons:S.buttons}};l.callback(O)})}),w.onTapLeave(()=>{w.fillColor=this.keyColor,c.hidden=!0});const M=new B({text:n.labelText,fontSize:this.fontSize,fontNames:this.fontNames});k.addChild(M),n.keyLabel=M,n.isShift&&(this.shiftKeyShape=w),n.keyIcon&&k.addChild(n.keyIcon),t.addChild(k)}}const c=new p({circleOfRadius:28,fillColor:d.Silver,hidden:!0});t.addChild(c);const C=new B({text:"",fontSize:this.fontSize,fontNames:this.fontNames});c.addChild(C),this.needsInitialization=!1}onKeyDown(t,e){const i={type:b.CompositeCustom,compositeType:"VirtualKeyboardKeyDown",nodeUuid:this.uuid,callback:t};this.addVirtualKeyboardEventListener(i,e)}onKeyUp(t,e){const i={type:b.CompositeCustom,compositeType:"VirtualKeyboardKeyUp",nodeUuid:this.uuid,callback:t};this.addVirtualKeyboardEventListener(i,e)}addVirtualKeyboardEventListener(t,e){e?.replaceExisting&&(this.eventListeners=this.eventListeners.filter(i=>!(i.nodeUuid===t.nodeUuid&&i.type===t.type&&i.compositeType===t.compositeType))),this.eventListeners.push(t)}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}duplicate(t){throw new Error("Method not implemented.")}}const X=$.sinusoidalInOut,Y=500;class st extends tt{static create(t){const e=new Array;return t.instructionScenes.forEach((i,o)=>{const a=i.nextSceneTransition??t.nextSceneTransition??K.slide({direction:U.Left,duration:Y,easing:X}),r=i.backSceneTransition??t.backSceneTransition??K.slide({direction:U.Right,duration:Y,easing:X}),s=i.backButtonText??t.backButtonText??"Back",c=i.nextButtonText??t.nextButtonText??"Next",C=i.backButtonWidth??t.backButtonWidth??125,f=i.nextButtonWidth??t.nextButtonWidth??125,u=i.backButtonHeight??t.backButtonHeight??50,T=i.nextButtonHeight??t.nextButtonHeight??50,z=i.backgroundColor??t.backgroundColor,g=i.imageAboveText??!0,n=i.imageMarginTop??0,D=i.imageMarginBottom??0,k=i.textMarginStart??48,E=i.textMarginEnd??48,L=i.textAlignmentMode??et.Left,w=i.textFontSize??16,M=i.titleFontSize??16,S=i.titleMarginTop??48,m=i.backButtonBackgroundColor??t.backButtonBackgroundColor??d.Black,l=i.backButtonFontColor??t.backButtonFontColor??d.White,O=i.nextButtonBackgroundColor??t.nextButtonBackgroundColor??d.Black,Z=i.nextButtonFontColor??t.nextButtonFontColor??d.White,_=t.sceneNamePrefix??"instructions",h=new j({name:_+"-"+(o+1).toString().padStart(2,"0"),backgroundColor:z});let V;i.title!==void 0&&(V=new B({text:i.title,fontSize:M,layout:{marginTop:S,constraints:{topToTopOf:h,startToStartOf:h,endToEndOf:h}}}),h.addChild(V));let W;if(i.text!==void 0&&(W=new B({text:i.text,preferredMaxLayoutWidth:it.MatchConstraint,horizontalAlignmentMode:L,fontSize:w,layout:{marginStart:k,marginEnd:E,constraints:{topToTopOf:h,bottomToBottomOf:h,startToStartOf:h,endToEndOf:h,verticalBias:i.textVerticalBias}}}),h.addChild(W)),i.imageName!==void 0){let x;W!==void 0?g?x=new H({imageName:i.imageName,layout:{marginBottom:D,constraints:{bottomToTopOf:W,startToStartOf:h,endToEndOf:h}}}):x=new H({imageName:i.imageName,layout:{marginTop:n,constraints:{topToBottomOf:W,startToStartOf:h,endToEndOf:h}}}):x=new H({imageName:i.imageName,layout:{constraints:{topToTopOf:h,bottomToBottomOf:h,verticalBias:i.imageVerticalBias,startToStartOf:h,endToEndOf:h}}}),h.addChild(x)}if(o>0){const x=new A({text:s,fontColor:l,backgroundColor:m,size:{width:C,height:u},layout:{marginStart:32,marginBottom:80,constraints:{bottomToBottomOf:h,startToStartOf:h}}});x.isUserInteractionEnabled=!0,x.onTapDown(()=>{h.game.presentScene(_+"-"+(o+1-1).toString().padStart(2,"0"),r)}),h.addChild(x)}const R=new A({name:"nextButton",text:c,fontColor:Z,backgroundColor:O,size:{width:f,height:T},layout:{marginEnd:32,marginBottom:80,constraints:{bottomToBottomOf:h,endToEndOf:h}}});R.isUserInteractionEnabled=!0,o!==t.instructionScenes.length-1?R.onTapDown(()=>{h.game.presentScene(_+"-"+(o+1+1).toString().padStart(2,"0"),a)}):t.postInstructionsScene!==void 0?R.onTapDown(()=>{h.game.presentScene(t.postInstructionsScene??"",a)}):R.onTapDown(()=>{const x=h.game.scenes.indexOf(h);if(x===-1)console.warn("warning: postInstructionsScene is not defined, and next scene cannot be determined.");else{const G=x+1;G<h.game.scenes.length?h.game.presentScene(h.game.scenes[G],a):console.warn("warning: postInstructionsScene is not defined, and there is no next scene to present.")}}),h.addChild(R),e.push(h)}),e}static Create(t){return this.create(t)}}const at=$.sinusoidalInOut,ht=500;class lt extends j{constructor(t){if(super(t),t?.transitionDurationMilliseconds!==void 0&&t?.transition)throw new Error("Both transition and transitionDurationMilliseconds options were provided. Only one should be provided. If using a custom transition, then the duration of that transition must be specified within the custom transition.");let e;if(t?.timerShape?.circle===void 0&&t?.timerShape?.rectangle===void 0||t?.timerShape.circle!==void 0)e=new p({circleOfRadius:t?.timerShape?.circle?.radius??100,layout:{constraints:{topToTopOf:this,bottomToBottomOf:this,startToStartOf:this,endToEndOf:this,verticalBias:t?.timerShape?.verticalBias??.5}},fillColor:t?.timerShape?.fillColor??d.RoyalBlue}),this.addChild(e);else if(t?.timerShape.rectangle!==void 0)e=new p({rect:{width:t?.timerShape?.rectangle?.width??200,height:t?.timerShape?.rectangle?.height??200},cornerRadius:t?.timerShape?.rectangle?.cornerRadius,layout:{constraints:{topToTopOf:this,bottomToBottomOf:this,startToStartOf:this,endToEndOf:this,verticalBias:t?.timerShape?.verticalBias??.5}},fillColor:t?.timerShape?.fillColor??d.RoyalBlue}),this.addChild(e);else throw new Error("Invalid timer shape options.");const i=Math.floor(t.milliseconds/1e3),o=new B({text:"",fontSize:t?.timerNumbersFontSize??50,fontName:t?.timerNumbersFontName,fontColor:t?.timerNumbersFontColor??d.White});e.addChild(o);const a=new B({text:t?.text??"GET READY",fontSize:t?.textFontSize??50,fontName:t?.textFontName,fontColor:t?.textFontColor,layout:{marginTop:t?.textMarginTop??32,constraints:{topToBottomOf:e,startToStartOf:this,endToEndOf:this}}});this.addChild(a);const r=new Array;for(let s=i-1;s>0;s--)r.push(I.wait({duration:1e3})),r.push(I.custom({callback:()=>{o.text=s.toString()}}));r.push(I.wait({duration:1e3})),r.push(I.custom({callback:()=>{o.text=t?.timerZeroString??"0"}})),t?.zeroDwellMilliseconds!==void 0&&r.push(I.wait({duration:t.zeroDwellMilliseconds})),r.push(I.custom({callback:()=>{const s=this.game;s.scenes.indexOf(this)===s.scenes.length-1&&s.end();const C=s.scenes[s.scenes.indexOf(this)+1];s.presentScene(C,t?.transition??K.slide({direction:U.Left,duration:t?.transitionDurationMilliseconds??ht,easing:at}))}})),this.onSetup(()=>{o.text=i.toString()}),this.onAppear(()=>{this.run(I.sequence(r))})}}console.log("\u26AA @m2c2kit/addons version 0.3.14 (ebbdc605)");export{A as Button,lt as CountdownScene,ot as Dialog,q as DialogResult,nt as DrawPad,y as DrawPadEventType,P as DrawPadItemEventType,F as Grid,st as Instructions,rt as VirtualKeyboard};
1
+ import{Composite as _,WebColors as c,Shape as p,Label as x,CanvasKitHelpers as Y,M2EventType as C,MutablePath as Q,Easings as $,Story as tt,Transition as K,TransitionDirection as H,LabelHorizontalAlignmentMode as et,Scene as j,Dimensions as it,Sprite as W,Action as L}from"@m2c2kit/core";class F extends _{constructor(t){if(super(t),this.compositeType="grid",this.rows=0,this.columns=0,this.gridBackgroundColor=[0,0,233,.25],this.gridLineColor=c.Red,this.gridLineWidth=1,this.gridChildren=new Array,t.size)this.size=t.size;else throw new Error("grid size must be specified");if(t.rows)if(t.rows>=1)this.rows=t.rows;else throw new Error("rows must be at least 1");else throw new Error("rows must be specified");if(t.columns)if(t.columns>=1)this.columns=t.columns;else throw new Error("columns must be at least 1");else throw new Error("columns must be specified");t.backgroundColor&&(this.gridBackgroundColor=t.backgroundColor),t.gridLineColor&&(this.gridLineColor=t.gridLineColor),t.gridLineWidth&&(this.gridLineWidth=t.gridLineWidth),this.cellWidth=this.size.width/this.columns,this.cellHeight=this.size.height/this.rows}initialize(){super.removeAllChildren(),this.gridBackground=new p({name:"_"+this.name+"-gridBackground",rect:{size:this.size},fillColor:this.gridBackgroundColor,strokeColor:this.gridLineColor,lineWidth:this.gridLineWidth,isUserInteractionEnabled:this.isUserInteractionEnabled}),this.addChild(this.gridBackground),this.gridBackground.isUserInteractionEnabled=this.isUserInteractionEnabled;for(let t=1;t<this.columns;t++){const e=new p({name:"_"+this.name+"-gridVerticalLine-"+t,rect:{size:{width:this.gridLineWidth,height:this.size.height},origin:{x:-this.size.width/2+this.cellWidth*t,y:0}},fillColor:this.gridLineColor});this.gridBackground.addChild(e)}for(let t=1;t<this.rows;t++){const e=new p({name:"_"+this.name+"-gridHorizontalLine-"+t,rect:{size:{width:this.size.width,height:this.gridLineWidth},origin:{x:0,y:-this.size.height/2+this.cellHeight*t}},fillColor:this.gridLineColor});this.gridBackground.addChild(e)}this.gridChildren&&this.gridChildren.forEach(t=>{if(!this.cellWidth||!this.cellHeight||!this.gridBackground)throw new Error("cellWidth, cellHeight, or gridBackground undefined or null");const e=-this.size.width/2+this.cellWidth/2+t.column*this.cellWidth,i=-this.size.height/2+this.cellHeight/2+t.row*this.cellHeight;t.node.position={x:e+t.node.position.x,y:i+t.node.position.y},this.gridBackground.addChild(t.node)}),this.needsInitialization=!1}get gridBackground(){if(!this._gridBackground)throw new Error("gridBackground is null or undefined");return this._gridBackground}set gridBackground(t){this._gridBackground=t}dispose(){}duplicate(t){const e=new F({...this.getNodeOptions(),...this.getDrawableOptions(),rows:this.rows,columns:this.columns,size:this.size,backgroundColor:this.gridBackgroundColor,gridLineWidth:this.gridLineWidth,gridLineColor:this.gridLineColor,name:t});return this.children.length>0&&(e.children=this.children.map(i=>{const o=i.duplicate();return o.parent=e,o})),e}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}removeAllChildren(){if(this.gridChildren.length!==0){for(;this.gridChildren.length;){const t=this.gridChildren.pop();t&&this.gridBackground.removeChild(t.node)}this.needsInitialization=!0}}addAtCell(t,e,i){(e<0||e>=this.rows||i<0||i>=this.columns)&&console.warn(`warning: addAtCell() requested to add node at row ${e}, column ${i}. This is outside the bounds of grid ${this.name}, which is size ${this.rows}x${this.columns}. Note that addAtCell() uses zero-based indexing. AddAtCell() will proceed, but may draw nodes outside the grid`),this.gridChildren.push({node:t,row:e,column:i}),this.needsInitialization=!0}removeAllAtCell(t,e){const i=this.gridChildren.filter(o=>o.row===t&&o.column===e);i.length!==0&&(this.gridBackground.removeChildren(i.map(o=>o.node)),this.gridChildren=this.gridChildren.filter(o=>o.row!==t&&o.column!==e),this.needsInitialization=!0)}removeChild(t){this.gridBackground.removeChild(t),this.gridChildren=this.gridChildren.filter(e=>e.node!=t),this.needsInitialization=!0}}class B extends _{constructor(t){super(t),this.compositeType="button",this._backgroundColor=c.Black,this.size={width:200,height:50},this.cornerRadius=9,this.fontSize=20,this._text="",this._fontColor=c.White,this._interpolation={},this._localize=!0,t.text&&(this.text=t.text),t.size&&(this.size=t.size),t.cornerRadius!==void 0&&(this.cornerRadius=t.cornerRadius),t.fontName&&(this.fontName=t.fontName),t.fontNames&&(this.fontNames=t.fontNames),t.fontSize!==void 0&&(this.fontSize=t.fontSize),t.fontColor&&(this.fontColor=t.fontColor),t.backgroundColor&&(this.backgroundColor=t.backgroundColor),t.interpolation&&(this.interpolation=t.interpolation),t.localize!==void 0&&(this.localize=t.localize)}initialize(){this.removeAllChildren(),this.backgroundPaint=new this.canvasKit.Paint,this.backgroundPaint.setColor(this.canvasKit.Color(this.backgroundColor[0],this.backgroundColor[1],this.backgroundColor[2],this.backgroundColor[3])),this.backgroundPaint.setStyle(this.canvasKit.PaintStyle.Fill);const t=new p({rect:{size:this.size},cornerRadius:this.cornerRadius,fillColor:this._backgroundColor});this.addChild(t);const e=new x({text:this.text,localize:this.localize,interpolation:this.interpolation,fontName:this.fontName,fontNames:this.fontNames,fontSize:this.fontSize,fontColor:this.fontColor});t.addChild(e),this.needsInitialization=!1}dispose(){Y.Dispose([this.backgroundPaint])}get text(){return this._text}set text(t){this._text=t,this.needsInitialization=!0}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get fontColor(){return this._fontColor}set fontColor(t){this._fontColor=t,this.needsInitialization=!0}get fontName(){return this._fontName}set fontName(t){this._fontName=t,this.needsInitialization=!0}get fontNames(){return this._fontNames}set fontNames(t){this._fontNames=t,this.needsInitialization=!0}get interpolation(){return this._interpolation}set interpolation(t){this._interpolation=t,Object.freeze(this._interpolation),this.needsInitialization=!0}get localize(){return this._localize}set localize(t){this._localize=t,this.needsInitialization=!0}duplicate(t){const e=new B({...this.getNodeOptions(),...this.getDrawableOptions(),...this.getTextOptions(),size:this.size,cornerRadius:this.cornerRadius,backgroundColor:this.backgroundColor,fontColor:this.fontColor,name:t,localize:this.localize,interpolation:JSON.parse(JSON.stringify(this.interpolation)),fontName:this.fontName,fontNames:JSON.parse(JSON.stringify(this.fontNames))});return this.children.length>0&&(e.children=this.children.map(i=>{const o=i.duplicate();return o.parent=e,o})),e}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}}var q=(T=>(T.Dismiss="Dismiss",T.Positive="Positive",T.Negative="Negative",T))(q||{});class ot extends _{constructor(t){super(t),this.compositeType="Dialog",this._backgroundColor=c.White,this.cornerRadius=9,this.overlayAlpha=.5,this.contentText="",this.positiveButtonText="",this.negativeButtonText="",this.zPosition=Number.MAX_VALUE,this.hidden=!0,this._fontColor=c.White,t&&(t.overlayAlpha&&(this.overlayAlpha=t.overlayAlpha),t.messageText&&(this.contentText=t.messageText),t.positiveButtonText&&(this.positiveButtonText=t.positiveButtonText),t.negativeButtonText&&(this.negativeButtonText=t.negativeButtonText),t.size&&(this.size=t.size),t.cornerRadius&&(this.cornerRadius=t.cornerRadius),t.fontColor&&(this.fontColor=t.fontColor),t.backgroundColor&&(this.backgroundColor=t.backgroundColor))}show(){this.hidden=!1}onDialogResult(t,e){const i={type:C.CompositeCustom,compositeType:"DialogResult",nodeUuid:this.uuid,callback:t};e?.replaceExisting&&(this.eventListeners=this.eventListeners.filter(o=>!(o.nodeUuid===i.nodeUuid&&o.type===i.type))),this.eventListeners.push(i)}initialize(){this.removeAllChildren();const t=new p({rect:{width:Globals.canvasCssWidth,height:Globals.canvasCssHeight,x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},fillColor:[0,0,0,this.overlayAlpha],zPosition:-1,isUserInteractionEnabled:!0});t.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(n=>n.type===C.CompositeCustom).forEach(n=>{const a={type:C.CompositeCustom,target:this,handled:!1,dialogResult:"Dismiss"};n.callback(a)})}),this.addChild(t);const e=new p({rect:{width:300,height:150,x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},cornerRadius:this.cornerRadius,fillColor:this.backgroundColor,isUserInteractionEnabled:!0});e.onTapDown(r=>{r.handled=!0}),this.addChild(e);const i=new x({text:this.contentText,fontSize:24,position:{x:200,y:360}});this.addChild(i);const o=new B({text:this.negativeButtonText,position:{x:120,y:440},size:{width:100,height:40},isUserInteractionEnabled:!0,zPosition:1});o.onTapDown(r=>{r.handled=!0,this.hidden=!0}),o.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(n=>n.type===C.CompositeCustom).forEach(n=>{const a={type:C.CompositeCustom,target:this,handled:!1,dialogResult:"Negative"};n.callback(a)})});const h=new B({text:this.positiveButtonText,position:{x:280,y:440},size:{width:100,height:40},isUserInteractionEnabled:!0,zPosition:1});h.onTapDown(r=>{r.handled=!0,this.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(n=>n.type===C.CompositeCustom).forEach(n=>{const a={type:C.CompositeCustom,target:this,handled:!1,dialogResult:"Positive"};n.callback(a)})}),this.addChild(o),this.addChild(h),this.needsInitialization=!1}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get fontColor(){return this._fontColor}set fontColor(t){this._fontColor=t,this.needsInitialization=!0}duplicate(t){throw new Error("duplicate not implemented")}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}}const k={StrokeStart:"StrokeStart",StrokeMove:"StrokeMove",StrokeEnd:"StrokeEnd"},P={StrokeEnter:"StrokeEnter",StrokeLeave:"StrokeLeave"};class nt extends _{constructor(t){if(super(t),this.compositeType="DrawPad",this.resumeDrawingOnReturn=!1,this.continuousDrawingOnly=!1,this._backgroundColor=[0,0,0,0],this._borderColor=c.Black,this._borderWidth=1,this._lineColor=c.Red,this._lineWidth=1,this.isDrawingPointerDown=!1,this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1,this.currentStrokesNotAllowed=!1,this.strokes=new Array,t.isUserInteractionEnabled===void 0&&(this.isUserInteractionEnabled=!0),!t.size)throw new Error("DrawPad size must be specified");this.size=t.size,t.lineColor&&(this.lineColor=t.lineColor),t.lineWidth&&(this.lineWidth=t.lineWidth),t.backgroundColor&&(this.backgroundColor=t.backgroundColor),t.borderColor&&(this.borderColor=t.borderColor),t.borderWidth&&(this.borderWidth=t.borderWidth),t.resumeDrawingOnReturn!==void 0&&(this.resumeDrawingOnReturn=t.resumeDrawingOnReturn),t.continuousDrawingOnly!==void 0&&(this.continuousDrawingOnly=t.continuousDrawingOnly),t.continuousDrawingOnlyExceptionDistance!==void 0&&(this.continuousDrawingOnlyExceptionDistance=t.continuousDrawingOnlyExceptionDistance)}initialize(){this.initializeDrawShape(),this.initializeDrawArea(),this.needsInitialization=!1}initializeDrawShape(){if(!this.drawShape){const t=new Q;this.drawShape=new p({path:t,size:this.size}),this.addChild(this.drawShape)}this.drawShape.strokeColor=this.lineColor,this.drawShape.lineWidth=this.lineWidth}initializeDrawArea(){this.drawArea||(this.drawArea=new p({rect:{size:this.size},isUserInteractionEnabled:!0}),this.addChild(this.drawArea),this.drawArea.onTapDown(t=>{this.handleTapDown(t)}),this.drawArea.onPointerMove(t=>{this.handlePointerMove(t)}),this.drawArea.onTapUpAny(()=>{this.handleTapUpAny()}),this.drawArea.onTapLeave(t=>{this.handleTapLeave(t)})),this.drawArea.fillColor=this.backgroundColor,this.drawArea.strokeColor=this.borderColor,this.drawArea.lineWidth=this.borderWidth}dist(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}handleTapDown(t){if(this.isUserInteractionEnabled){if(!this.drawShape?.path)throw new Error("DrawPad.handleTapDown(): no drawShape.path");const e=this.drawShape.path;if(this.continuousDrawingOnly&&e.subpaths.length!==0){const o=e.subpaths[e.subpaths.length-1][e.subpaths[e.subpaths.length-1].length-1],h=t.point;if(this.continuousDrawingOnlyExceptionDistance===void 0||this.dist(o,h)>this.continuousDrawingOnlyExceptionDistance){this.currentStrokesNotAllowed=!0;return}}this.currentStrokesNotAllowed=!1,this.isDrawingPointerDown=!0,e.move(t.point);const i={type:k.StrokeStart,target:this,handled:!1,position:t.point};this.strokes.push([{type:k.StrokeStart,position:t.point,iso8601Timestamp:new Date().toISOString(),interpolated:!1}]),this.raiseDrawPadEvent(i)}}addInterpolatedStrokeMove(t){const e=this.strokes.length,i=this.strokes[e-1].length,o=this.strokes[this.strokes.length-1][i-1].position,h=this.interpolateToDrawPadBorder(t,o,this.size);if(!this.drawShape?.path)throw new Error("DrawPad.addInterpolatedStrokeMove(): no drawShape.path");this.drawShape.path.addLine(h);const n={type:k.StrokeMove,target:this,handled:!1,position:h};return this.strokes[e-1].push({type:k.StrokeMove,position:h,iso8601Timestamp:new Date().toISOString(),interpolated:!0}),this.raiseDrawPadEvent(n),h}handleTapLeave(t){if(this.currentStrokesNotAllowed){this.isDrawingPointerDown=!1;return}if(this.resumeDrawingOnReturn===!1){this.isDrawingPointerDown=!1;const e=this.strokes.length,i=this.strokes[e-1].length;let o=!1,h=t.point;this.isPointWithinDrawPad(t.point,this.size)||(h=this.addInterpolatedStrokeMove(t.point),o=!0);const r={type:k.StrokeEnd,position:this.strokes[e-1][i-1].position,target:this,handled:!1};this.strokes[e-1].push({type:k.StrokeEnd,position:o?h:this.strokes[e-1][i-1].position,iso8601Timestamp:new Date().toISOString(),interpolated:o}),this.raiseDrawPadEvent(r),this.currentStrokesNotAllowed=!0}else this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!0}handleTapUpAny(){if(this.currentStrokesNotAllowed){this.isDrawingPointerDown=!1;return}if(this.isUserInteractionEnabled){this.isDrawingPointerDown=!1,this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1;const t=this.strokes.length,e=this.strokes[t-1].length,i={type:k.StrokeEnd,position:this.strokes[t-1][e-1].position,target:this,handled:!1};this.strokes[t-1].push({type:k.StrokeEnd,position:this.strokes[t-1][e-1].position,iso8601Timestamp:new Date().toISOString(),interpolated:!1}),this.raiseDrawPadEvent(i)}}handlePointerMove(t){if(this.isUserInteractionEnabled&&this.isDrawingPointerDown){if(!this.drawShape?.path)throw new Error("DrawPad.handlePointerMove(): no drawShape.path");const e=this.drawShape.path;this.isDrawingPointerDown&&!this.pointerIsDownAndPointerLeftDrawAreaWhenDown&&e.addLine(t.point),this.pointerIsDownAndPointerLeftDrawAreaWhenDown&&(this.pointerIsDownAndPointerLeftDrawAreaWhenDown=!1,e.move(t.point));const i={type:k.StrokeMove,target:this,handled:!1,position:t.point},o=this.strokes.length;this.strokes[o-1].push({type:k.StrokeMove,position:t.point,iso8601Timestamp:new Date().toISOString(),interpolated:!1}),this.raiseDrawPadEvent(i)}}update(){super.update()}draw(t){super.drawChildren(t)}raiseDrawPadEvent(t){this.eventListeners.length>0&&this.eventListeners.filter(e=>e.type===t.type).forEach(e=>{e.callback(t)})}raiseDrawPadItemEvent(t,e){t.eventListeners.length>0&&t.eventListeners.filter(i=>i.type===e.type).forEach(i=>{i.callback(e)})}clear(){if(!this.drawShape?.path)throw new Error("DrawPad.clear(): no drawShape.path");this.drawShape.path.clear(),this.strokes=new Array}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}onStrokeStart(t,e){this.addEventListener(k.StrokeStart,t,e)}onStrokeMove(t,e){this.addEventListener(k.StrokeMove,t,e)}onStrokeEnd(t,e){this.addEventListener(k.StrokeEnd,t,e)}addItem(t){return Object.defineProperty(t,"drawPadPosition",{get:function(){const e=t.parent;return{get x(){return t.position.x+e.size.width/2},set x(i){t.position.x=i-e.size.width/2},get y(){return t.position.y+e.size.height/2},set y(i){t.position.y=i-e.size.height/2}}},set:function(e){const i=t.parent;t.position.x=e.x-i.size.width/2,t.position.y=e.y-i.size.height/2}}),Object.defineProperty(t,"onStrokeEnter",{value:function(e,i){this.addEventListener(P.StrokeEnter,e,i)}}),Object.defineProperty(t,"onStrokeLeave",{value:function(e,i){this.addEventListener(P.StrokeLeave,e,i)}}),Object.defineProperty(t,"isStrokeWithinBounds",{value:!1,writable:!0}),t.onPointerDown(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!1){t.isStrokeWithinBounds=!0;const e={type:P.StrokeEnter,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerMove(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!1){t.isStrokeWithinBounds=!0;const e={type:P.StrokeEnter,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerLeave(()=>{if(this.isDrawingPointerDown&&t.isStrokeWithinBounds===!0){t.isStrokeWithinBounds=!1;const e={type:P.StrokeLeave,target:t};this.raiseDrawPadItemEvent(t,e)}}),t.onPointerUp(()=>{if(t.isStrokeWithinBounds===!0){t.isStrokeWithinBounds=!1;const e={type:P.StrokeLeave,target:t};this.raiseDrawPadItemEvent(t,e)}}),this.addChild(t),t.zPosition=-1,t.position.x=t.position.x-this.size.width/2,t.position.y=t.position.y-this.size.height/2,t.isUserInteractionEnabled=!0,t}takeScreenshot(){const t=this.drawArea;if(!t)throw new Error("DrawPad.takeScreenshot(): no drawArea");const e=(t.absolutePosition.x-t.size.width/2)*Globals.canvasScale,i=(t.absolutePosition.y-t.size.height/2)*Globals.canvasScale,o=t.size.width*Globals.canvasScale,h=t.size.height*Globals.canvasScale,r={alphaType:this.game.canvasKit.AlphaType.Unpremul,colorType:this.game.canvasKit.ColorType.RGBA_8888,colorSpace:this.game.canvasKit.ColorSpace.SRGB,width:o,height:h},a=this.game.snapshots[0].readPixels(e,i,r),u=this.game.canvasKit.MakeImage(r,a,a.length/h);if(!u)throw new Error("DrawPad.takeScreenshot(): no croppedImage");const g=u.encodeToBytes();if(!g)throw new Error("DrawPad.takeScreenshot(): croppedImage.encodeToBytes() failed");return u.delete(),this.arrayBufferToBase64String(g)}isPointWithinDrawPad(t,e){return t.x>=0&&t.x<=e.width&&t.y>=0&&t.y<=e.height}interpolateToDrawPadBorder(t,e,i){const o=(t.y-e.y)/(t.x-e.x),h=t.y-o*t.x,r={x:0,y:0};if(!Number.isFinite(o)){if(r.x=t.x,t.y-e.y>0)return r.y=i.height,r;if(t.y-e.y<0)return r.y=0,r}const n=o*0+h,a=o*i.width+h;if(n>=0&&n<=i.height&&t.x-e.x<0)return r.x=0,r.y=n,r;if(a>=0&&a<=i.height&&t.x-e.x>0)return r.x=i.width,r.y=a,r;const u=(0-h)/o,g=(i.height-h)/o;return u>=0&&u<=i.width&&t.y-e.y<0?(r.x=u,r.y=0,r):g>=0&&g<=i.width&&t.y-e.y>0?(r.x=g,r.y=i.height,r):t}arrayBufferToBase64String(t){let e="";const i=new Uint8Array(t);for(let o=0;o<i.byteLength;o++)e+=String.fromCharCode(i[o]);return window.btoa(e)}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get borderColor(){return this._borderColor}set borderColor(t){this._borderColor=t,this.needsInitialization=!0}get borderWidth(){return this._borderWidth}set borderWidth(t){this._borderWidth=t,this.needsInitialization=!0}get lineColor(){return this._lineColor}set lineColor(t){this._lineColor=t,this.needsInitialization=!0}get lineWidth(){return this._lineWidth}set lineWidth(t){this._lineWidth=t,this.needsInitialization=!0}duplicate(t){throw new Error("DrawPad.duplicate(): Method not implemented.")}}class st extends _{constructor(t){super(t),this.compositeType="VirtualKeyboard",this.rowsConfiguration=new Array,this.shiftActivated=!1,this.keyShapes=new Array,this._isUserInteractionEnabled=!0,this.size=t.size,this.position=t.position??{x:0,y:0},this.keyboardHorizontalPaddingPercent=t.keyboardHorizontalPaddingPercent??.02,this.keyboardVerticalPaddingPercent=t.keyboardVerticalPaddingPercent??.025,this.keyHorizontalPaddingPercent=t.keyHorizontalPaddingPercent??.1,this.keyVerticalPaddingPercent=t.keyVerticalPaddingPercent??.1,t.rows!==void 0&&(this.rowsConfiguration=t.rows.map(e=>e.map(o=>{if(o instanceof Object&&!Array.isArray(o)){const h=o;return o.keyIconShapeOptions&&(h.keyIcon=new p(o.keyIconShapeOptions),h.keyIconShapeOptions=void 0),h}else return o}))),this.keysPerRow=t.keysPerRow??NaN,this.fontSize=t.fontSize??NaN,this.fontNames=t.fontNames,this.hiddenKeys=t.hiddenKeys??"",this.capitalLettersOnly=t.capitalLettersOnly??!1,this.keyColor=t.keyColor??c.White,this.keyDownColor=t.keyDownColor??c.Transparent,this.specialKeyDownColor=t.specialKeyDownColor??c.LightSteelBlue,this.backgroundColor=t.backgroundColor??[242,240,244,1],this.showKeyDownPreview=t.showKeyDownPreview??!0}initialize(){if(this.rowsConfiguration.length===0){const g=[["1","!"],["2","@"],["3","#"],["4","$"],["5","%"],["6","^"],["7","&"],["8","*"],["9","("],["0",")"]],f=["q","w","e","r","t","y","u","i","o","p"],z=["a","s","d","f","g","h","j","k","l"],I={path:{pathString:"m288-6.6849e-14 -288 288h144v288h288v-288h144l-288-288z",width:24},lineWidth:2,strokeColor:c.Black,fillColor:c.Transparent},w={path:{pathString:"M10.625 5.09 0 22.09l10.625 17H44.18v-34H10.625zm31.555 32H11.734l-9.375-15 9.375-15H42.18v30zm-23.293-6.293 7.293-7.293 7.293 7.293 1.414-1.414-7.293-7.293 7.293-7.293-1.414-1.414-7.293 7.293-7.293-7.293-1.414 1.414 7.293 7.293-7.293 7.293",width:24},lineWidth:1,strokeColor:c.Black,fillColor:c.Red},s=[{code:"Shift",isShift:!0,widthRatio:1.5,keyIcon:new p(I)},"z","x","c","v","b","n","m",{code:"Backspace",widthRatio:1.5,keyIcon:new p(w)}],b=[g,f,z,s,[{code:" ",labelText:"SPACE",widthRatio:5}]];this.rowsConfiguration=b,this.keysPerRow=this.rowsConfiguration.reduce((D,A)=>Math.max(D,A.length),0),this.fontSize=this.size.height/this.rowsConfiguration.length/2.5}const t=new p({rect:{size:this.size},fillColor:this.backgroundColor});this.addChild(t);const e=this.rowsConfiguration.map(g=>g.map(f=>{let z=1;const I=1;let w,s,E,b,D=!1;return typeof f=="string"?(w=f,this.capitalLettersOnly?s=w.toUpperCase():s=w,E=w.toUpperCase()):Array.isArray(f)?(w=f[0],s=w,E=f[1]):(w=f.code,s=f.labelText??"",E=f.labelTextShifted??s,z=f.widthRatio??1,b=f.keyIcon,D=f.isShift??!1),{widthRatio:z,heightRatio:I,code:w,labelText:s,labelTextShifted:E,keyIcon:b,isShift:D}})),i={x:-t.size.width/2,y:-t.size.height/2},o=(this.keyboardVerticalPaddingPercent??.025)*this.size.height,h=(this.keyboardHorizontalPaddingPercent??.02)*this.size.width,r=(this.size.height-2*o)/e.length,n=(this.size.width-2*h)/this.keysPerRow;this.keyShapes=[];for(let g=0;g<e.length;g++){const f=e[g],z=f.reduce((w,s)=>w+(s.widthRatio??1),0);let I=0;z<this.keysPerRow&&(I=(this.size.width-2*h-n*z)/2);for(let w=0;w<f.length;w++){const s=f[w];if(this.hiddenKeys?.split(",").map(S=>S.trim()).includes(s.code))continue;const E=f.slice(0,w).reduce((S,y)=>S+(y.widthRatio??1),0)*n,b=new p({rect:{size:{width:n*(s.widthRatio??1),height:r}},fillColor:c.Transparent,strokeColor:c.Transparent,lineWidth:1,position:{x:I+i.x+h+E+(s.widthRatio??1)*n/2,y:i.y+o+g*r+r/2}}),D=n*(s.widthRatio??1)-2*this.keyHorizontalPaddingPercent*n,A=r-(s.heightRatio??1)-2*this.keyVerticalPaddingPercent*r,m=new p({rect:{size:{width:D,height:A}},cornerRadius:4,fillColor:this.keyColor,lineWidth:0,isUserInteractionEnabled:this.isUserInteractionEnabled});b.addChild(m),this.keyShapes.push(m),m.onTapUp(S=>{let y="";s.isShift?(this.shiftActivated?m.fillColor=this.specialKeyDownColor:m.fillColor=this.keyColor,y=s.code):(this.shiftActivated?(this.shiftActivated=!1,this.shiftKeyShape&&(this.shiftKeyShape.fillColor=this.keyColor,s.keyIcon&&(s.keyIcon.fillColor=c.Transparent)),e.flatMap(d=>d).forEach(d=>{d.keyLabel?.text!==void 0&&(d.keyLabel.text=d.labelText??"")}),y=s.labelTextShifted??s.code):y=s.labelText??s.code,(s.code===" "||s.code==="Backspace")&&(y=s.code),m.fillColor=this.keyColor),a.hidden=!0,this.eventListeners.length>0&&this.eventListeners.filter(d=>d.type===C.CompositeCustom&&d.compositeType==="VirtualKeyboardKeyUp").forEach(d=>{const O={type:C.CompositeCustom,target:this,handled:!1,key:y,code:s.code,shiftKey:this.shiftActivated,keyTapMetadata:{size:m.size,point:S.point,buttons:S.buttons}};d.callback(O)})}),m.onTapDown(S=>{s.isShift&&(this.shiftActivated=!this.shiftActivated,this.shiftActivated?(m.fillColor=this.specialKeyDownColor,s.keyIcon&&(s.keyIcon.fillColor=c.Black),e.flatMap(d=>d).forEach(d=>{d.keyLabel?.text!==void 0&&(d.keyLabel.text=d.labelTextShifted??d.labelText??"")})):(m.fillColor=this.keyColor,s.keyIcon&&(s.keyIcon.fillColor=c.Transparent),e.flatMap(d=>d).forEach(d=>{d.keyLabel?.text!==void 0&&(d.keyLabel.text=d.labelText??"")})));let y="";s.isShift||s.code===" "||s.code==="Backspace"?(m.fillColor=this.specialKeyDownColor,y=s.code):(m.fillColor=this.keyDownColor,this.showKeyDownPreview&&(a.hidden=!1,a.position.x=b.position.x,a.position.y=b.position.y-A*1.2,this.shiftActivated?u.text=s.labelTextShifted??s.code:u.text=s.labelText??s.code),this.shiftActivated?y=s.labelTextShifted??s.code:y=s.labelText??s.code),this.eventListeners.length>0&&this.eventListeners.filter(d=>d.type===C.CompositeCustom&&d.compositeType==="VirtualKeyboardKeyDown").forEach(d=>{const O={type:C.CompositeCustom,target:this,handled:!1,key:y,code:s.code,shiftKey:this.shiftActivated,keyTapMetadata:{size:m.size,point:S.point,buttons:S.buttons}};d.callback(O)})}),m.onTapLeave(()=>{m.fillColor=this.keyColor,a.hidden=!0});const M=new x({text:s.labelText,fontSize:this.fontSize,fontNames:this.fontNames});b.addChild(M),s.keyLabel=M,s.isShift&&(this.shiftKeyShape=m),s.keyIcon&&b.addChild(s.keyIcon),t.addChild(b)}}const a=new p({circleOfRadius:28,fillColor:c.Silver,hidden:!0});t.addChild(a);const u=new x({text:"",fontSize:this.fontSize,fontNames:this.fontNames});a.addChild(u),this.needsInitialization=!1}onKeyDown(t,e){const i={type:C.CompositeCustom,compositeType:"VirtualKeyboardKeyDown",nodeUuid:this.uuid,callback:t};this.addVirtualKeyboardEventListener(i,e)}onKeyUp(t,e){const i={type:C.CompositeCustom,compositeType:"VirtualKeyboardKeyUp",nodeUuid:this.uuid,callback:t};this.addVirtualKeyboardEventListener(i,e)}addVirtualKeyboardEventListener(t,e){e?.replaceExisting&&(this.eventListeners=this.eventListeners.filter(i=>!(i.nodeUuid===t.nodeUuid&&i.type===t.type&&i.compositeType===t.compositeType))),this.eventListeners.push(t)}get isUserInteractionEnabled(){return this._isUserInteractionEnabled}set isUserInteractionEnabled(t){this._isUserInteractionEnabled=t,this.keyShapes.forEach(e=>{e.isUserInteractionEnabled=t})}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}duplicate(t){throw new Error(`Method not implemented. ${t}`)}}const J=$.sinusoidalInOut,Z=500;class rt extends tt{static create(t){const e=new Array;return t.instructionScenes.forEach((i,o)=>{const h=i.nextSceneTransition??t.nextSceneTransition??K.slide({direction:H.Left,duration:Z,easing:J}),r=i.backSceneTransition??t.backSceneTransition??K.slide({direction:H.Right,duration:Z,easing:J}),n=i.backButtonText??t.backButtonText??"Back",a=i.nextButtonText??t.nextButtonText??"Next",u=i.backButtonWidth??t.backButtonWidth??125,g=i.nextButtonWidth??t.nextButtonWidth??125,f=i.backButtonHeight??t.backButtonHeight??50,z=i.nextButtonHeight??t.nextButtonHeight??50,I=i.backgroundColor??t.backgroundColor,w=i.imageAboveText??!0,s=i.imageMarginTop??0,E=i.imageMarginBottom??0,b=i.textMarginStart??48,D=i.textMarginEnd??48,A=i.textAlignmentMode??et.Left,m=i.textFontSize??16,M=i.titleFontSize??16,S=i.titleMarginTop??48,y=i.backButtonBackgroundColor??t.backButtonBackgroundColor??c.Black,d=i.backButtonFontColor??t.backButtonFontColor??c.White,O=i.nextButtonBackgroundColor??t.nextButtonBackgroundColor??c.Black,X=i.nextButtonFontColor??t.nextButtonFontColor??c.White,U=t.sceneNamePrefix??"instructions",l=new j({name:U+"-"+(o+1).toString().padStart(2,"0"),backgroundColor:I});let G;i.title!==void 0&&(G=new x({text:i.title,fontSize:M,layout:{marginTop:S,constraints:{topToTopOf:l,startToStartOf:l,endToEndOf:l}}}),l.addChild(G));let N;if(i.text!==void 0&&(N=new x({text:i.text,preferredMaxLayoutWidth:it.MatchConstraint,horizontalAlignmentMode:A,fontSize:m,layout:{marginStart:b,marginEnd:D,constraints:{topToTopOf:l,bottomToBottomOf:l,startToStartOf:l,endToEndOf:l,verticalBias:i.textVerticalBias}}}),l.addChild(N)),i.imageName!==void 0){let v;N!==void 0?w?v=new W({imageName:i.imageName,layout:{marginBottom:E,constraints:{bottomToTopOf:N,startToStartOf:l,endToEndOf:l}}}):v=new W({imageName:i.imageName,layout:{marginTop:s,constraints:{topToBottomOf:N,startToStartOf:l,endToEndOf:l}}}):v=new W({imageName:i.imageName,layout:{constraints:{topToTopOf:l,bottomToBottomOf:l,verticalBias:i.imageVerticalBias,startToStartOf:l,endToEndOf:l}}}),l.addChild(v)}if(o>0){const v=new B({text:n,fontColor:d,backgroundColor:y,size:{width:u,height:f},layout:{marginStart:32,marginBottom:80,constraints:{bottomToBottomOf:l,startToStartOf:l}}});v.isUserInteractionEnabled=!0,v.onTapDown(()=>{l.game.presentScene(U+"-"+(o+1-1).toString().padStart(2,"0"),r)}),l.addChild(v)}const R=new B({name:"nextButton",text:a,fontColor:X,backgroundColor:O,size:{width:g,height:z},layout:{marginEnd:32,marginBottom:80,constraints:{bottomToBottomOf:l,endToEndOf:l}}});R.isUserInteractionEnabled=!0,o!==t.instructionScenes.length-1?R.onTapDown(()=>{l.game.presentScene(U+"-"+(o+1+1).toString().padStart(2,"0"),h)}):t.postInstructionsScene!==void 0?R.onTapDown(()=>{l.game.presentScene(t.postInstructionsScene??"",h)}):R.onTapDown(()=>{const v=l.game.scenes.indexOf(l);if(v===-1)console.warn("warning: postInstructionsScene is not defined, and next scene cannot be determined.");else{const V=v+1;V<l.game.scenes.length?l.game.presentScene(l.game.scenes[V],h):console.warn("warning: postInstructionsScene is not defined, and there is no next scene to present.")}}),l.addChild(R),e.push(l)}),e}static Create(t){return this.create(t)}}const at=$.sinusoidalInOut,ht=500;class lt extends j{constructor(t){if(super(t),t?.transitionDurationMilliseconds!==void 0&&t?.transition)throw new Error("Both transition and transitionDurationMilliseconds options were provided. Only one should be provided. If using a custom transition, then the duration of that transition must be specified within the custom transition.");let e;if(t?.timerShape?.circle===void 0&&t?.timerShape?.rectangle===void 0||t?.timerShape.circle!==void 0)e=new p({circleOfRadius:t?.timerShape?.circle?.radius??100,layout:{constraints:{topToTopOf:this,bottomToBottomOf:this,startToStartOf:this,endToEndOf:this,verticalBias:t?.timerShape?.verticalBias??.5}},fillColor:t?.timerShape?.fillColor??c.RoyalBlue}),this.addChild(e);else if(t?.timerShape.rectangle!==void 0)e=new p({rect:{width:t?.timerShape?.rectangle?.width??200,height:t?.timerShape?.rectangle?.height??200},cornerRadius:t?.timerShape?.rectangle?.cornerRadius,layout:{constraints:{topToTopOf:this,bottomToBottomOf:this,startToStartOf:this,endToEndOf:this,verticalBias:t?.timerShape?.verticalBias??.5}},fillColor:t?.timerShape?.fillColor??c.RoyalBlue}),this.addChild(e);else throw new Error("Invalid timer shape options.");const i=Math.floor(t.milliseconds/1e3),o=new x({text:"",fontSize:t?.timerNumbersFontSize??50,fontName:t?.timerNumbersFontName,fontColor:t?.timerNumbersFontColor??c.White});e.addChild(o);const h=new x({text:t?.text??"GET READY",fontSize:t?.textFontSize??50,fontName:t?.textFontName,fontColor:t?.textFontColor,layout:{marginTop:t?.textMarginTop??32,constraints:{topToBottomOf:e,startToStartOf:this,endToEndOf:this}}});this.addChild(h);const r=new Array;for(let n=i-1;n>0;n--)r.push(L.wait({duration:1e3})),r.push(L.custom({callback:()=>{o.text=n.toString()}}));r.push(L.wait({duration:1e3})),r.push(L.custom({callback:()=>{o.text=t?.timerZeroString??"0"}})),t?.zeroDwellMilliseconds!==void 0&&r.push(L.wait({duration:t.zeroDwellMilliseconds})),r.push(L.custom({callback:()=>{const n=this.game;n.scenes.indexOf(this)===n.scenes.length-1&&n.end();const u=n.scenes[n.scenes.indexOf(this)+1];n.presentScene(u,t?.transition??K.slide({direction:H.Left,duration:t?.transitionDurationMilliseconds??ht,easing:at}))}})),this.onSetup(()=>{o.text=i.toString()}),this.onAppear(()=>{this.run(L.sequence(r))})}}class dt extends _{constructor(t){super(t),this.compositeType="LocalePicker",this.zPosition=Number.MAX_VALUE,this.DEFAULT_FONT_SIZE=24,this.automaticallyChangeLocale=!0,this._localeOptions=new Array,this._backgroundColor=c.White,this._fontSize=this.DEFAULT_FONT_SIZE,this._fontColor=c.Black,this._cornerRadius=8,this._overlayAlpha=.5,this._icon={svgString:'<svg xmlns="http://www.w3.org/2000/svg" width="420" height="420" stroke="#000" fill="none"><path stroke-width="26" d="M209 15a195 195 0 1 0 2 0z"/><path stroke-width="18" d="M210 15v390m195-195H15M59 90a260 260 0 0 0 302 0m0 240a260 260 0 0 0-302 0M195 20a250 250 0 0 0 0 382m30 0a250 250 0 0 0 0-382"/></svg>',height:32,width:32},this._iconPosition={x:32,y:32},this.LEFT_SELECTION_INDICATOR="\xAB",this.RIGHT_SELECTION_INDICATOR="\xBB",t&&(t.localeOptions&&(this.localeOptions=t.localeOptions),t.backgroundColor&&(this.backgroundColor=t.backgroundColor),t.overlayAlpha!==void 0&&(this.overlayAlpha=t.overlayAlpha),t.fontSize!==void 0&&(this.fontSize=t.fontSize),t.fontColor&&(this.fontColor=t.fontColor),t.cornerRadius&&(this.cornerRadius=t.cornerRadius),t.currentLocale!==void 0&&(this.currentLocale=t.currentLocale),t.icon&&(this.icon=t.icon),t.automaticallyChangeLocale!==void 0&&(this.automaticallyChangeLocale=t.automaticallyChangeLocale))}onResult(t,e){const i={type:C.CompositeCustom,compositeType:"LocalePickerResult",nodeUuid:this.uuid,callback:t};e?.replaceExisting&&(this.eventListeners=this.eventListeners.filter(o=>!(o.nodeUuid===i.nodeUuid&&o.type==="LocalePickerResult"))),this.eventListeners.push(i)}initialize(){if(this.currentLocale===void 0&&(this.currentLocale=this.game.i18n?.locale),this.localeOptions.length===0&&Object.keys(this.game.i18n?.translation||{}).filter(a=>a!=="configuration").forEach(a=>{this.localeOptions.push({text:this.game.i18n?.translation[a].localeName||a,locale:a,svg:this.game.i18n?.translation[a].localeSvg})}),this.localeOptions.length===0)throw new Error("No locales available for LocalePicker");this.children.filter(n=>n.name!=="localePickerIcon").forEach(n=>this.removeChild(n)),this.game.imageManager.loadImages([{imageName:"__localePickerIcon",svgString:this.icon.svgString,height:this.icon.height,width:this.icon.width}]),this.iconSprite||(this.iconSprite=new W({name:"localePickerIcon",imageName:"__localePickerIcon",position:this.iconPosition,isUserInteractionEnabled:!0}),this.addChild(this.iconSprite),this.iconSprite.onTapDown(()=>{this.setDialogVisibility(!0)}));const t=new p({rect:{width:Globals.canvasCssWidth,height:Globals.canvasCssHeight,x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},fillColor:[0,0,0,this.overlayAlpha],zPosition:-1,isUserInteractionEnabled:!0,hidden:!0});t.onTapDown(n=>{n.handled=!0,this.eventListeners.length>0&&this.eventListeners.filter(a=>a.type==="LocalePickerResult").forEach(a=>{const u={type:"LocalePickerResult",target:this,handled:!1,result:{locale:void 0}};a.callback(u)}),this.setDialogVisibility(!1)}),this.addChild(t);const e=this.fontSize/this.DEFAULT_FONT_SIZE*50,i=this.localeOptions.length*e,o=Globals.canvasCssWidth/2,h={x:Globals.canvasCssWidth/2,y:Globals.canvasCssHeight/2},r=new p({rect:{width:o,height:i,x:h.x,y:h.y},cornerRadius:this.cornerRadius,fillColor:this.backgroundColor,isUserInteractionEnabled:!0,hidden:!0});r.onTapDown(n=>{n.handled=!0}),this.addChild(r);for(let n=0;n<this.localeOptions.length;n++){const a=this.localeOptions[n];if(a.svg){this.game.imageManager.loadImages([{imageName:a.text,svgString:a.svg.svgString,height:a.svg.height,width:a.svg.width}]);const u=new W({imageName:a.text,position:{x:h.x,y:h.y+n*e-i/2+e/2},isUserInteractionEnabled:!0,zPosition:1,hidden:!0});if(this.addChild(u),this.currentLocale===a.locale){const g=new x({text:this.LEFT_SELECTION_INDICATOR,fontSize:this.fontSize,fontColor:this.fontColor,position:{x:h.x-a.svg.width/2,y:h.y+n*e-i/2+e/2},hidden:!0,localize:!1});this.addChild(g);const f=new x({text:this.RIGHT_SELECTION_INDICATOR,fontSize:this._fontSize,fontColor:this.fontColor,position:{x:h.x+a.svg.width/2,y:h.y+n*e-i/2+e/2},hidden:!0,localize:!1});this.addChild(f)}u.onTapDown(g=>{this.handleLocaleSelection(g,a)})}else{let u=a.text;this.currentLocale===a.locale&&(u=`${this.LEFT_SELECTION_INDICATOR} ${u} ${this.RIGHT_SELECTION_INDICATOR}`);const g=new x({text:u,fontSize:this.fontSize,fontColor:this.fontColor,position:{x:h.x,y:h.y+n*e-i/2+e/2},isUserInteractionEnabled:!0,zPosition:1,hidden:!0,localize:!1});g.onTapDown(f=>{this.handleLocaleSelection(f,a)}),this.addChild(g)}}this.needsInitialization=!1}handleLocaleSelection(t,e){t.handled=!0,this.eventListeners.length>0&&this.eventListeners.filter(i=>i.type===C.CompositeCustom&&i.compositeType==="LocalePickerResult"&&i.nodeUuid==this.uuid).forEach(i=>{const o={type:C.CompositeCustom,compositeType:"LocalePickerResult",target:this,handled:!1,result:{locale:e.locale}};i.callback(o)}),this.setDialogVisibility(!1),this.automaticallyChangeLocale&&(this.game.i18n?.switchToLocale(e.locale),this.currentLocale=e.locale)}setDialogVisibility(t){this.children.filter(e=>e.name!=="localePickerIcon").forEach(e=>{e.hidden=!t})}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){this._backgroundColor=t,this.needsInitialization=!0}get fontSize(){return this._fontSize}set fontSize(t){this._fontSize=t,this.needsInitialization=!0}get fontColor(){return this._fontColor}set fontColor(t){this._fontColor=t,this.needsInitialization=!0}get cornerRadius(){return this._cornerRadius}set cornerRadius(t){this._cornerRadius=t,this.needsInitialization=!0}get overlayAlpha(){return this._overlayAlpha}set overlayAlpha(t){this._overlayAlpha=t,this.needsInitialization=!0}get icon(){const t=this;return{get svgString(){return t._icon.svgString},set svgString(e){t._icon.svgString=e,t.needsInitialization=!0},get imageName(){return t._icon.imageName},set imageName(e){t._icon.imageName=e,t.needsInitialization=!0},get height(){return t._icon.height},set height(e){t._icon.height=e,t.needsInitialization=!0},get width(){return t._icon.width},set width(e){t._icon.width=e,t.needsInitialization=!0}}}set icon(t){this._icon=t,this.needsInitialization=!0}get iconPosition(){const t=this;return{get x(){return t._iconPosition.x},set x(e){t._iconPosition.x=e,t.iconSprite&&(t.iconSprite.position=t._iconPosition),t.needsInitialization=!0},get y(){return t._iconPosition.y},set y(e){t._iconPosition.y=e,t.iconSprite&&(t.iconSprite.position=t._iconPosition),t.needsInitialization=!0}}}set iconPosition(t){this._iconPosition=t,this.iconSprite&&(this.iconSprite.position=t),this.needsInitialization=!0}get localeOptions(){return this._localeOptions}set localeOptions(t){this._localeOptions=t,this.needsInitialization=!0}get currentLocale(){return this._currentLocale}set currentLocale(t){t!==this.currentLocale&&(this._currentLocale=t,this.needsInitialization=!0)}update(){super.update()}draw(t){super.drawChildren(t)}warmup(t){this.initialize(),this.children.filter(e=>e.isDrawable).forEach(e=>{e.warmup(t)})}duplicate(t){throw new Error(`duplicate not implemented. ${t}`)}}console.log("\u26AA @m2c2kit/addons version 0.3.15 (b3a70752)");export{B as Button,lt as CountdownScene,ot as Dialog,q as DialogResult,nt as DrawPad,k as DrawPadEventType,P as DrawPadItemEventType,F as Grid,rt as Instructions,dt as LocalePicker,st as VirtualKeyboard};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2c2kit/addons",
3
- "version": "0.3.14",
3
+ "version": "0.3.15",
4
4
  "description": "Additions to m2c2kit core functionality, such as button, grid, and instructions",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -31,17 +31,17 @@
31
31
  },
32
32
  "homepage": "https://m2c2-project.github.io/m2c2kit",
33
33
  "dependencies": {
34
- "@m2c2kit/core": "^0.3.17"
34
+ "@m2c2kit/core": "^0.3.18"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@m2c2kit/build-helpers": "^0.3.13",
38
- "@rollup/plugin-replace": "5.0.5",
39
- "rimraf": "5.0.5",
40
- "rollup": "4.13.0",
38
+ "@rollup/plugin-replace": "5.0.7",
39
+ "rimraf": "5.0.7",
40
+ "rollup": "4.18.0",
41
41
  "rollup-plugin-copy": "3.5.0",
42
- "rollup-plugin-dts": "6.1.0",
42
+ "rollup-plugin-dts": "6.1.1",
43
43
  "rollup-plugin-esbuild": "6.1.1",
44
- "typescript": "5.4.2"
44
+ "typescript": "5.4.5"
45
45
  },
46
46
  "engines": {
47
47
  "node": ">=18"