canvasengine 2.0.0-beta.3 → 2.0.0-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/DebugRenderer-DrlzuIVv.js +172 -0
  2. package/dist/DebugRenderer-DrlzuIVv.js.map +1 -0
  3. package/dist/components/Button.d.ts +136 -0
  4. package/dist/components/Button.d.ts.map +1 -0
  5. package/dist/components/Canvas.d.ts +18 -0
  6. package/dist/components/Canvas.d.ts.map +1 -0
  7. package/dist/components/Container.d.ts +80 -0
  8. package/dist/components/Container.d.ts.map +1 -0
  9. package/dist/components/DOMContainer.d.ts +77 -0
  10. package/dist/components/DOMContainer.d.ts.map +1 -0
  11. package/dist/components/DOMElement.d.ts +44 -0
  12. package/dist/components/DOMElement.d.ts.map +1 -0
  13. package/dist/components/DisplayObject.d.ts +82 -0
  14. package/dist/components/DisplayObject.d.ts.map +1 -0
  15. package/dist/components/Graphic.d.ts +65 -0
  16. package/dist/components/Graphic.d.ts.map +1 -0
  17. package/dist/components/Mesh.d.ts +202 -0
  18. package/dist/components/Mesh.d.ts.map +1 -0
  19. package/dist/components/NineSliceSprite.d.ts +17 -0
  20. package/dist/components/NineSliceSprite.d.ts.map +1 -0
  21. package/dist/components/ParticleEmitter.d.ts +5 -0
  22. package/dist/components/ParticleEmitter.d.ts.map +1 -0
  23. package/dist/components/Scene.d.ts +2 -0
  24. package/dist/components/Scene.d.ts.map +1 -0
  25. package/dist/components/Sprite.d.ts +174 -0
  26. package/dist/components/Sprite.d.ts.map +1 -0
  27. package/dist/components/Text.d.ts +21 -0
  28. package/dist/components/Text.d.ts.map +1 -0
  29. package/dist/components/TilingSprite.d.ts +18 -0
  30. package/dist/components/TilingSprite.d.ts.map +1 -0
  31. package/dist/components/Video.d.ts +15 -0
  32. package/dist/components/Video.d.ts.map +1 -0
  33. package/dist/components/Viewport.d.ts +106 -0
  34. package/dist/components/Viewport.d.ts.map +1 -0
  35. package/dist/components/index.d.ts +17 -0
  36. package/dist/components/index.d.ts.map +1 -0
  37. package/dist/components/types/DisplayObject.d.ts +106 -0
  38. package/dist/components/types/DisplayObject.d.ts.map +1 -0
  39. package/dist/components/types/MouseEvent.d.ts +4 -0
  40. package/dist/components/types/MouseEvent.d.ts.map +1 -0
  41. package/dist/components/types/Spritesheet.d.ts +366 -0
  42. package/dist/components/types/Spritesheet.d.ts.map +1 -0
  43. package/dist/components/types/index.d.ts +5 -0
  44. package/dist/components/types/index.d.ts.map +1 -0
  45. package/dist/directives/Drag.d.ts +70 -0
  46. package/dist/directives/Drag.d.ts.map +1 -0
  47. package/dist/directives/KeyboardControls.d.ts +530 -0
  48. package/dist/directives/KeyboardControls.d.ts.map +1 -0
  49. package/dist/directives/Scheduler.d.ts +36 -0
  50. package/dist/directives/Scheduler.d.ts.map +1 -0
  51. package/dist/directives/Sound.d.ts +26 -0
  52. package/dist/directives/Sound.d.ts.map +1 -0
  53. package/dist/directives/Transition.d.ts +11 -0
  54. package/dist/directives/Transition.d.ts.map +1 -0
  55. package/dist/directives/ViewportCull.d.ts +12 -0
  56. package/dist/directives/ViewportCull.d.ts.map +1 -0
  57. package/dist/directives/ViewportFollow.d.ts +19 -0
  58. package/dist/directives/ViewportFollow.d.ts.map +1 -0
  59. package/dist/directives/index.d.ts +2 -0
  60. package/dist/directives/index.d.ts.map +1 -0
  61. package/dist/engine/animation.d.ts +59 -0
  62. package/dist/engine/animation.d.ts.map +1 -0
  63. package/dist/engine/bootstrap.d.ts +16 -0
  64. package/dist/engine/bootstrap.d.ts.map +1 -0
  65. package/dist/engine/directive.d.ts +14 -0
  66. package/dist/engine/directive.d.ts.map +1 -0
  67. package/dist/engine/reactive.d.ts +95 -0
  68. package/dist/engine/reactive.d.ts.map +1 -0
  69. package/dist/engine/signal.d.ts +72 -0
  70. package/dist/engine/signal.d.ts.map +1 -0
  71. package/dist/engine/trigger.d.ts +51 -0
  72. package/dist/engine/trigger.d.ts.map +1 -0
  73. package/dist/engine/utils.d.ts +90 -0
  74. package/dist/engine/utils.d.ts.map +1 -0
  75. package/dist/hooks/addContext.d.ts +2 -0
  76. package/dist/hooks/addContext.d.ts.map +1 -0
  77. package/dist/hooks/useProps.d.ts +42 -0
  78. package/dist/hooks/useProps.d.ts.map +1 -0
  79. package/dist/hooks/useRef.d.ts +5 -0
  80. package/dist/hooks/useRef.d.ts.map +1 -0
  81. package/dist/index-DNDNQN-q.js +11088 -0
  82. package/dist/index-DNDNQN-q.js.map +1 -0
  83. package/dist/index.d.ts +15 -919
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.global.js +29 -0
  86. package/dist/index.global.js.map +1 -0
  87. package/dist/index.js +63 -2950
  88. package/dist/index.js.map +1 -1
  89. package/dist/utils/Ease.d.ts +17 -0
  90. package/dist/utils/Ease.d.ts.map +1 -0
  91. package/dist/utils/RadialGradient.d.ts +58 -0
  92. package/dist/utils/RadialGradient.d.ts.map +1 -0
  93. package/dist/utils/functions.d.ts +2 -0
  94. package/dist/utils/functions.d.ts.map +1 -0
  95. package/index.d.ts +4 -0
  96. package/package.json +12 -7
  97. package/src/components/Button.ts +269 -0
  98. package/src/components/Canvas.ts +53 -45
  99. package/src/components/Container.ts +2 -2
  100. package/src/components/DOMContainer.ts +123 -0
  101. package/src/components/DOMElement.ts +421 -0
  102. package/src/components/DisplayObject.ts +283 -190
  103. package/src/components/Graphic.ts +200 -34
  104. package/src/components/Mesh.ts +222 -0
  105. package/src/components/NineSliceSprite.ts +4 -1
  106. package/src/components/ParticleEmitter.ts +12 -8
  107. package/src/components/Sprite.ts +92 -22
  108. package/src/components/Text.ts +34 -14
  109. package/src/components/Video.ts +110 -0
  110. package/src/components/Viewport.ts +59 -43
  111. package/src/components/index.ts +7 -2
  112. package/src/components/types/DisplayObject.ts +30 -0
  113. package/src/directives/Drag.ts +357 -52
  114. package/src/directives/KeyboardControls.ts +3 -1
  115. package/src/directives/Sound.ts +94 -31
  116. package/src/directives/ViewportFollow.ts +35 -7
  117. package/src/engine/animation.ts +41 -5
  118. package/src/engine/bootstrap.ts +23 -3
  119. package/src/engine/directive.ts +2 -2
  120. package/src/engine/reactive.ts +542 -170
  121. package/src/engine/signal.ts +22 -2
  122. package/src/engine/trigger.ts +65 -9
  123. package/src/engine/utils.ts +97 -9
  124. package/src/hooks/useProps.ts +1 -1
  125. package/src/index.ts +4 -1
  126. package/src/utils/RadialGradient.ts +29 -0
  127. package/src/utils/functions.ts +7 -0
  128. package/testing/index.ts +12 -0
  129. package/tsconfig.json +17 -0
  130. package/vite.config.ts +39 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engine/directive.ts","../src/engine/utils.ts","../src/directives/KeyboardControls.ts","../src/directives/Scheduler.ts","../src/directives/ViewportFollow.ts","../src/directives/Sound.ts","../src/directives/Drag.ts","../src/directives/Transition.ts","../src/index.ts","../src/components/Canvas.ts","../src/engine/reactive.ts","../src/hooks/useProps.ts","../src/components/DisplayObject.ts","../src/components/Container.ts","../src/components/Graphic.ts","../src/engine/signal.ts","../src/components/Scene.ts","../src/components/ParticleEmitter.ts","../src/components/Sprite.ts","../src/engine/animation.ts","../src/components/Text.ts","../src/engine/trigger.ts","../src/components/TilingSprite.ts","../src/components/Viewport.ts","../src/components/NineSliceSprite.ts","../src/engine/bootstrap.ts","../src/utils/Ease.ts","../src/utils/RadialGradient.ts"],"sourcesContent":["import { Element } from \"./reactive\"\n\nexport const directives: { [key: string]: any } = {}\n\nexport abstract class Directive {\n abstract onDestroy();\n abstract onInit(element: Element<any>);\n abstract onMount(element: Element<any>);\n abstract onUpdate(props: any);\n}\n\nexport function registerDirective(name: string, directive: any) {\n directives[name] = directive\n}\n\nexport function applyDirective(element: Element, directiveName: string) {\n if (!directives[directiveName]) {\n return null\n }\n const directive = new directives[directiveName]()\n directive.onInit?.(element)\n return directive\n}","import { ObservablePoint } from \"pixi.js\"\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined'\n}\n\nexport function preciseNow(): number {\n return typeof performance !== 'undefined' ? performance.now() : Date.now()\n}\n\nexport function fps2ms(fps: number): number {\n return 1000 / fps\n}\n\nexport function isPromise(value: any): boolean {\n return value && value instanceof Promise\n}\n\nexport function arrayEquals(a: any[], b: any[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n const v = a[i];\n const bv = b[i];\n if (typeof v === 'object' && v !== null) {\n if (typeof bv !== 'object' || bv === null) return false;\n if (Array.isArray(v)) {\n if (!Array.isArray(bv) || !arrayEquals(v, bv)) return false;\n } else if (!objectEquals(v, bv)) {\n return false;\n }\n } else if (v !== bv) {\n return false;\n }\n }\n return true;\n}\n\nfunction objectEquals(a: object, b: object): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (let key of keysA) {\n if (!b.hasOwnProperty(key)) return false;\n if (!deepEquals(a[key], b[key])) return false;\n }\n return true;\n}\n\nfunction deepEquals(a: any, b: any): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (typeof a === 'object' && a !== null) {\n if (Array.isArray(a)) {\n return Array.isArray(b) && arrayEquals(a, b);\n }\n return objectEquals(a, b);\n }\n return false;\n}\n\nexport function isFunction(val: unknown): boolean {\n return {}.toString.call(val) === '[object Function]'\n}\n\nexport function isObject(val: unknown): boolean {\n return typeof val == 'object' && val != null && !Array.isArray(val)\n}\n\nexport function set(obj, path, value, onlyPlainObject = false) {\n if (Object(obj) !== obj) return obj;\n\n if (typeof path === 'string') {\n path = path.split('.');\n }\n\n let len = path.length;\n if (!len) return obj;\n\n let current = obj;\n for (let i = 0; i < len - 1; i++) {\n let segment = path[i];\n let nextSegment = path[i + 1];\n let isNextNumeric = !isNaN(nextSegment) && isFinite(nextSegment);\n\n if (!current[segment] || typeof current[segment] !== 'object') {\n current[segment] = (isNextNumeric && !onlyPlainObject) ? [] : {};\n }\n\n current = current[segment];\n }\n\n current[path[len - 1]] = value;\n\n return obj;\n}\n\nexport function get(obj, path) {\n const keys = path.split('.');\n let current = obj;\n\n for (let key of keys) {\n if (current[key] === undefined) {\n return undefined;\n }\n current = current[key];\n }\n\n return current;\n}\n\nexport function log(text) {\n console.log(text)\n}\n\nexport function error(text) {\n console.error(text)\n}\n\nexport function setObservablePoint(observablePoint: ObservablePoint, point: { x: number, y: number } | number | [number, number]): void {\n if (typeof point === 'number') {\n observablePoint.set(point);\n }\n else if (Array.isArray(point)) {\n observablePoint.set(point[0], point[1]);\n }\n else {\n observablePoint.set(point.x, point.y);\n }\n}\n\nexport function calculateDistance(x1, y1, x2, y2) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}","import { Directive, registerDirective } from \"../engine/directive\";\nimport { Element } from \"../engine/reactive\";\nimport { fps2ms } from \"../engine/utils\";\n\nexport enum Input {\n Break = 'break',\n Backspace = 'backspace',\n Tab = 'tab',\n Clear = 'clear',\n Enter = 'enter',\n Shift = 'shift',\n Ctrl = 'ctrl',\n Alt = 'alt',\n Pause = 'pause/break',\n CapsLock = 'caps lock',\n Escape = 'escape',\n Conversion = 'conversion',\n NonConversion = 'non-conversion',\n Space = 'space',\n PageUp = 'page up',\n PageDown = 'page down',\n End = 'end',\n Home = 'home',\n Left = 4,\n Up = 1,\n Right = 2,\n Down = 3,\n Select = 'select',\n Print = 'print',\n Execute = 'execute',\n PrintScreen = 'Print Screen',\n Insert = 'insert',\n Delete = 'delete',\n Zero = '0',\n One = '1',\n Two = '2',\n Three = '3',\n Four = '4',\n Five = '5',\n Six = '6',\n Seven = '7',\n Height = '8',\n Nine = '9',\n Equal = '=',\n Semicolon = 'semicolon (firefox), equals',\n LessThan = '<',\n Equals = 'equals (firefox)',\n Beta = 'ß',\n At = '@',\n A = 'a',\n B = 'b',\n C = 'c',\n D = 'd',\n E = 'e',\n F = 'f',\n G = 'g',\n H = 'h',\n I = 'i',\n J = 'j',\n K = 'k',\n L = 'l',\n M = 'm',\n N = 'n',\n O = 'o',\n P = 'p',\n Q = 'q',\n R = 'r',\n S = 's',\n T = 't',\n U = 'u',\n V = 'v',\n W = 'w',\n X = 'x',\n Y = 'y',\n Z = 'z',\n SearchKey = 'Windows Key / Left ⌘ / Chromebook Search key',\n NumPad0 = 'numpad 0',\n NumPad1 = 'numpad 1',\n NumPad2 = 'numpad 2',\n NumPad3 = 'numpad 3',\n NumPad4 = 'numpad 4',\n NumPad5 = 'numpad 5',\n NumPad6 = 'numpad 6',\n NumPad7 = 'numpad 7',\n NumPad8 = 'numpad 8',\n NumPad9 = 'numpad 9',\n Multiply = 'multiply',\n Add = 'add',\n Subtract = 'subtract',\n DecimalPoint = 'decimal point',\n Divide = 'divide',\n F1 = 'f1',\n F2 = 'f2',\n F3 = 'f3',\n F4 = 'f4',\n F5 = 'f5',\n F6 = 'f6',\n F7 = 'f7',\n F8 = 'f8',\n F9 = 'f9',\n F10 = 'f10',\n F11 = 'f11',\n F12 = 'f12',\n F13 = 'f13',\n F14 = 'f14',\n F15 = 'f15',\n F16 = 'f16',\n F17 = 'f17',\n F18 = 'f18',\n F19 = 'f19',\n F20 = 'f20',\n F21 = 'f21',\n F22 = 'f22',\n F23 = 'f23',\n F24 = 'f24',\n NumLock = 'num lock',\n ScrollLock = 'scroll lock',\n CircumflexAccent = '^',\n ExclamationMark = '!',\n Hash = '#',\n Dollar = '$',\n AccentU = 'ù',\n PageBackward = 'page backward',\n PageForWard = 'page forward',\n Star = '*',\n DecreaseVolume = 'decrease volume level',\n IncreaseVolume = 'increase volume level',\n Next = 'next',\n Previous = 'previous',\n Stop = 'stop',\n PlayPause = 'play/pause',\n Email = 'e-mail',\n SemiColon = 'semi-colon / ñ',\n EqualSign = 'equal sign',\n Comma = 'comma',\n Dash = 'dash',\n FowardSlach = 'forward slash / ç',\n GraveAccent = 'grave accent / ñ / æ',\n OpenBracket = 'open bracket',\n BackSlach = 'back slash',\n CloseBracket = 'close bracket / å',\n SingleQuote = 'single quote / ø',\n BackQuote = '`',\n Altgr = 'altgr'\n}\n\nexport interface ControlOptions {\n repeat?: boolean;\n bind: string | string[];\n keyUp?: Function;\n keyDown?: Function;\n delay?: number | {\n duration: number;\n otherControls?: (string)[];\n };\n}\nexport interface Controls {\n [controlName: string]: ControlOptions;\n}\n\n// keyboard handling\nconst keyCodeTable = {\n 3: 'break',\n 8: 'backspace', // backspace / delete\n 9: 'tab',\n 12: 'clear',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 19: 'pause/break',\n 20: 'caps lock',\n 27: 'escape',\n 28: 'conversion',\n 29: 'non-conversion',\n 32: 'space',\n 33: 'page up',\n 34: 'page down',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 41: 'select',\n 42: 'print',\n 43: 'execute',\n 44: 'Print Screen',\n 45: 'insert',\n 46: 'delete',\n 48: 'n0',\n 49: 'n1',\n 50: 'n2',\n 51: 'n3',\n 52: 'n4',\n 53: 'n5',\n 54: 'n6',\n 55: 'n7',\n 56: 'n8',\n 57: 'n9',\n 58: ':',\n 59: 'semicolon (firefox), equals',\n 60: '<',\n 61: 'equals (firefox)',\n 63: 'ß',\n 64: '@',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 91: 'Windows Key / Left ⌘ / Chromebook Search key',\n 92: 'right window key',\n 93: 'Windows Menu / Right ⌘',\n 96: 'numpad 0',\n 97: 'numpad 1',\n 98: 'numpad 2',\n 99: 'numpad 3',\n 100: 'numpad 4',\n 101: 'numpad 5',\n 102: 'numpad 6',\n 103: 'numpad 7',\n 104: 'numpad 8',\n 105: 'numpad 9',\n 106: 'multiply',\n 107: 'add',\n 108: 'numpad period (firefox)',\n 109: 'subtract',\n 110: 'decimal point',\n 111: 'divide',\n 112: 'f1',\n 113: 'f2',\n 114: 'f3',\n 115: 'f4',\n 116: 'f5',\n 117: 'f6',\n 118: 'f7',\n 119: 'f8',\n 120: 'f9',\n 121: 'f10',\n 122: 'f11',\n 123: 'f12',\n 124: 'f13',\n 125: 'f14',\n 126: 'f15',\n 127: 'f16',\n 128: 'f17',\n 129: 'f18',\n 130: 'f19',\n 131: 'f20',\n 132: 'f21',\n 133: 'f22',\n 134: 'f23',\n 135: 'f24',\n 144: 'num lock',\n 145: 'scroll lock',\n 160: '^',\n 161: '!',\n 163: '#',\n 164: '$',\n 165: 'ù',\n 166: 'page backward',\n 167: 'page forward',\n 169: 'closing paren (AZERTY)',\n 170: '*',\n 171: '~ + * key',\n 173: 'minus (firefox), mute/unmute',\n 174: 'decrease volume level',\n 175: 'increase volume level',\n 176: 'next',\n 177: 'previous',\n 178: 'stop',\n 179: 'play/pause',\n 180: 'e-mail',\n 181: 'mute/unmute (firefox)',\n 182: 'decrease volume level (firefox)',\n 183: 'increase volume level (firefox)',\n 186: 'semi-colon / ñ',\n 187: 'equal sign',\n 188: 'comma',\n 189: 'dash',\n 190: 'period',\n 191: 'forward slash / ç',\n 192: 'grave accent / ñ / æ',\n 193: '?, / or °',\n 194: 'numpad period (chrome)',\n 219: 'open bracket',\n 220: 'back slash',\n 221: 'close bracket / å',\n 222: 'single quote / ø',\n 223: '`',\n 224: 'left or right ⌘ key (firefox)',\n 225: 'altgr',\n 226: '< /git >',\n 230: 'GNOME Compose Key',\n 231: 'ç',\n 233: 'XF86Forward',\n 234: 'XF86Back',\n 240: 'alphanumeric',\n 242: 'hiragana/katakana',\n 243: 'half-width/full-width',\n 244: 'kanji',\n 255: 'toggle touchpad'\n};\n\nconst inverse = (obj) => {\n const newObj = {}\n for (let key in obj) {\n const val = obj[key]\n newObj[val] = key\n }\n return newObj\n}\n\nconst inverseKeyCodeTable = inverse(keyCodeTable)\n\ntype BoundKey = { actionName: string, options: ControlOptions, parameters?: any }\n\nexport class KeyboardControls extends Directive {\n private keyState: {\n [keyName: string]: {\n isDown: boolean,\n count: number\n } | null\n } = {}\n private boundKeys: {\n [keyName: string]: BoundKey\n } = {}\n private stop: boolean = false\n private lastKeyPressed: number | null = null\n private _controlsOptions: Controls = {}\n private interval: any\n // TODO: This should be dynamic\n private serverFps: number = 60\n private directionState: {\n up: boolean,\n down: boolean,\n left: boolean,\n right: boolean\n } = {\n up: false,\n down: false,\n left: false,\n right: false\n };\n\n onInit(element: Element) {\n this.setupListeners();\n this.setInputs(element.props.controls.value)\n // The processing is outside the rendering loop because if the FPS are lower (or higher) then the sending to the server would be slower or faster. Here it is constant\n this.interval = setInterval(() => {\n this.preStep()\n }, fps2ms(this.serverFps ?? 60))\n }\n\n onMount(element: Element) {}\n\n onUpdate(props) {\n this.setInputs(props)\n }\n\n onDestroy() {\n clearInterval(this.interval)\n document.removeEventListener('keydown', (e) => { this.onKeyChange(e, true); });\n document.removeEventListener('keyup', (e) => { this.onKeyChange(e, false); });\n }\n\n /** @internal */\n preStep() {\n if (this.stop) return;\n\n const direction = this.getDirection();\n if (direction !== 'none') {\n // Trigger only the composite direction\n const directionControl = this.boundKeys[direction];\n if (directionControl) {\n const { keyDown } = directionControl.options;\n if (keyDown ) {\n this.applyInput(direction);\n }\n }\n } else {\n // Process other controls as before\n const boundKeys = Object.keys(this.boundKeys);\n for (let keyName of boundKeys) {\n this.applyInput(keyName);\n }\n }\n }\n\n private applyInput(keyName: string) {\n const keyState = this.keyState[keyName];\n if (!keyState) return;\n const { isDown, count } = keyState;\n if (isDown) {\n const { repeat, keyDown } = this.boundKeys[keyName].options;\n if ((repeat || count == 0)) {\n let parameters = this.boundKeys[keyName].parameters;\n if (typeof parameters === \"function\") {\n parameters = parameters();\n }\n if (keyDown) {\n keyDown(this.boundKeys[keyName]);\n }\n this.keyState[keyName]!.count++;\n }\n }\n }\n\n private setupListeners() {\n document.addEventListener('keydown', (e) => { this.onKeyChange(e, true); });\n document.addEventListener('keyup', (e) => { this.onKeyChange(e, false); });\n }\n\n private bindKey(keys: Input | Input[], actionName: string, options: ControlOptions, parameters?: object) {\n if (!Array.isArray(keys)) keys = [keys] as Input[]\n const keyOptions = Object.assign({\n repeat: false\n }, options);\n (keys as Input[]).forEach(keyName => {\n this.boundKeys[keyName] = { actionName, options: keyOptions, parameters }\n })\n }\n\n private applyKeyDown(name: string) {\n const code = inverseKeyCodeTable[name]\n const e: any = new Event('keydown')\n e.keyCode = code\n this.onKeyChange(e, true)\n }\n\n private applyKeyUp(name: string) {\n const code = inverseKeyCodeTable[name]\n const e: any = new Event('keyup')\n e.keyCode = code\n this.onKeyChange(e, false)\n }\n\n private applyKeyPress(name: string): Promise<void> {\n return new Promise((resolve: any) => {\n this.applyKeyDown(name)\n setTimeout(() => {\n this.applyKeyUp(name)\n resolve()\n }, 200)\n })\n }\n\n private onKeyChange(e: KeyboardEvent, isDown: boolean) {\n e = (e || window.event) as KeyboardEvent;\n\n const keyName: string = keyCodeTable[e.keyCode];\n\n if (keyName && this.boundKeys[keyName]) {\n if (this.keyState[keyName] == null) {\n this.keyState[keyName] = {\n count: 0,\n isDown: true\n };\n }\n this.keyState[keyName]!.isDown = isDown;\n\n // key up, reset press count\n if (!isDown) {\n this.keyState[keyName]!.count = 0\n const { keyUp } = this.boundKeys[keyName].options\n if (keyUp) {\n keyUp(this.boundKeys[keyName]);\n }\n }\n\n // keep reference to the last key pressed to avoid duplicates\n this.lastKeyPressed = isDown ? e.keyCode : null;\n }\n\n if (keyName) {\n this.updateDirectionState(keyName, isDown);\n }\n }\n\n private updateDirectionState(keyName: string, isDown: boolean) {\n switch (keyName) {\n case 'up':\n this.directionState.up = isDown;\n break;\n case 'down':\n this.directionState.down = isDown;\n break;\n case 'left':\n this.directionState.left = isDown;\n break;\n case 'right':\n this.directionState.right = isDown;\n break;\n }\n }\n\n private getDirection(): string {\n const { up, down, left, right } = this.directionState;\n\n if (up && left) return 'up_left';\n if (up && right) return 'up_right';\n if (down && left) return 'down_left';\n if (down && right) return 'down_right';\n if (up) return 'up';\n if (down) return 'down';\n if (left) return 'left';\n if (right) return 'right';\n\n return 'none';\n }\n\n /**\n * From the name of the entry, we retrieve the control information\n * \n * ```ts \n * import { Input, inject, KeyboardControls } from '@rpgjs/client'\n * \n * const controls = inject(KeyboardControls)\n * controls.getControl(Input.Enter)\n\n * if (control) {\n * console.log(control.actionName) // action\n * }\n * ```\n * @title Get Control\n * @method getControl(inputName)\n * @param {string} inputName\n * @returns { { actionName: string, options: any } | undefined }\n * @memberof KeyboardControls\n */\n getControl(inputName: string): BoundKey | undefined {\n return this.boundKeys[inputName]\n }\n\n /**\n * Returns all controls\n * \n * @method getControls()\n * @since 4.2.0\n * @returns { { [key: string]: BoundKey } }\n * @memberof KeyboardControls\n */\n getControls(): { [key: string]: BoundKey } {\n return this.boundKeys\n }\n\n /**\n * Triggers an input according to the name of the control\n * \n * ```ts \n * import { Control, inject, KeyboardControls } from '@rpgjs/client'\n * \n * const controls = inject(KeyboardControls)\n * controls.applyControl(Control.Action)\n * ```\n * \n * You can put a second parameter or indicate on whether the key is pressed or released\n * \n * ```ts \n * import { Control, inject, KeyboardControls } from '@rpgjs/client'\n * \n * const controls = inject(KeyboardControls)\n * controls.applyControl(Control.Up, true) // keydown\n * controls.applyControl(Control.Up, false) // keyup\n * ```\n * @title Apply Control\n * @method applyControl(controlName,isDown)\n * @param {string} controlName\n * @param {boolean} [isDown]\n * @returns {Promise<void>}\n * @memberof KeyboardControls\n */\n async applyControl(controlName: string | number, isDown?: boolean | undefined): Promise<void> {\n const control = this._controlsOptions[controlName]\n if (control) {\n const input = Array.isArray(control.bind) ? control.bind[0] : control.bind\n if (isDown === undefined) {\n await this.applyKeyPress(input as string)\n }\n else if (isDown) {\n this.applyKeyDown(input as string)\n }\n else {\n this.applyKeyUp(input as string)\n }\n }\n }\n\n /**\n * Stop listening to the inputs. Pressing a key won't do anything\n * \n * @title Stop Inputs\n * @method stopInputs()\n * @returns {void}\n * @memberof KeyboardControls\n */\n stopInputs() {\n this.stop = true\n }\n\n /**\n * Listen to the inputs again\n * \n * @title Listen Inputs\n * @method listenInputs()\n * @returns {void}\n * @memberof KeyboardControls\n */\n listenInputs() {\n this.stop = false\n this.keyState = {}\n }\n\n /**\n * Assign custom inputs to the scene\n * \n * The object is the following:\n * \n * * the key of the object is the name of the control. Either it is existing controls (Up, Dow, Left, Right, Action, Back) or customized controls\n * * The value is an object representing control information:\n * * repeat {boolean} The key can be held down to repeat the action. (false by default)\n * * bind {string | string[]} To which key is linked the control\n * * method {Function} Function to be triggered. If you do not set this property, the name of the control is sent directly to the server.\n * * delay {object|number} (since v3.2.0) Indicates how long (in milliseconds) the player can press the key again to perform the action\n * * delay.duration\n * * delay.otherControls {string | string[]} Indicates the other controls that will also have the delay at the same time\n * \n * ```ts \n * import { Control, Input, inject, KeyboardControls } from '@rpgjs/client'\n * \n * const controls = inject(KeyboardControls)\n * controls.setInputs({\n [Control.Up]: {\n repeat: true,\n bind: Input.Up\n },\n [Control.Down]: {\n repeat: true,\n bind: Input.Down\n },\n [Control.Right]: {\n repeat: true,\n bind: Input.Right\n },\n [Control.Left]: {\n repeat: true,\n bind: Input.Left\n },\n [Control.Action]: {\n bind: [Input.Space, Input.Enter]\n },\n [Control.Back]: {\n bind: Input.Escape\n },\n\n // The myscustom1 control is sent to the server when the A key is pressed.\n mycustom1: {\n bind: Input.A\n },\n\n // the myAction method is executed when the B key is pressed\n mycustom2: {\n bind: Input.B,\n method({ actionName }) {\n console.log('cool', actionName)\n }\n },\n\n // The player can redo the action after 400ms\n mycustom3: {\n bind: Input.C,\n delay: 400 // ms\n },\n\n // The player can redo the action (mycustom4) and the directions after 400ms\n mycustom4: {\n bind: Input.C,\n delay: {\n duration: 400,\n otherControls: [Control.Up, Control.Down, Control.Left, Control.Right]\n }\n }\n })\n * \n * ```\n * @enum {string} Control \n * \n * Control.Up | up\n * Control.Down | down\n * Control.Left | left\n * Control.Right | right\n * Control.Action | action\n * Control.Back | back\n * \n * @enum {string} Mouse Event \n * \n * click | Click\n * dblclick | Double Click\n * mousedown | Mouse Down\n * mouseup | Mouse Up\n * mouseover | Mouse Over\n * mousemove | Mouse Move\n * mouseout | Mouse Out\n * contextmenu | Context Menu\n * \n * \n * @enum {string} Input \n * \n * break | Pause\n * backspace | Backspace / Delete\n * tab | Tab\n * clear | Clear\n * enter | Enter\n * shift | Shift\n * ctrl | Control\n * alt | Alt\n * pause/break | Pause / Break\n * caps lock | Caps Lock\n * escape | Escape\n * conversion | Conversion\n * non-conversion | Non-conversion\n * space | Space\n * page up | Page Up\n * page down | Page Down\n * end | End\n * home | Home\n * left | Left Arrow\n * up | Up Arrow\n * right | Right Arrow\n * down | Down Arrow\n * select | Select\n * print | Print\n * execute | Execute\n * Print Screen | Print Screen\n * insert | Insert\n * delete | Delete\n * n0 | 0\n * n1 | 1\n * n2 | 2\n * n3 | 3\n * n4 | 4\n * n5 | 5\n * n6 | 6\n * n7 | 7\n * n8 | 8\n * n9 | 9\n * : | Colon\n * semicolon (firefox), equals | Semicolon (Firefox), Equals\n * < | Less Than\n * equals (firefox) | Equals (Firefox)\n * ß | Eszett\n * @ | At\n * a | A\n * b | B\n * c | C\n * d | D\n * e | E\n * f | F\n * g | G\n * h | H\n * i | I\n * j | J\n * k | K\n * l | L\n * m | M\n * n | N\n * o | O\n * p | P\n * q | Q\n * r | R\n * s | S\n * t | T\n * u | U\n * v | V\n * w | W\n * x | X\n * y | Y\n * z | Z\n * Windows Key / Left ⌘ / Chromebook Search key | Windows Key / Left Command ⌘ / Chromebook Search Key\n * right window key | Right Windows Key\n * Windows Menu / Right ⌘ | Windows Menu / Right Command ⌘\n * numpad 0 | Numpad 0\n * numpad 1 | Numpad 1\n * numpad 2 | Numpad 2\n * numpad 3 | Numpad 3\n * numpad 4 | Numpad 4\n * numpad 5 | Numpad 5\n * numpad 6 | Numpad 6\n * numpad 7 | Numpad 7\n * numpad 8 | Numpad 8\n * numpad 9 | Numpad 9\n * multiply | Multiply\n * add | Add\n * numpad period (firefox) | Numpad Period (Firefox)\n * subtract | Subtract\n * decimal point | Decimal Point\n * divide | Divide\n * f1 | F1\n * f2 | F2\n * f3 | F3\n * f4 | F4\n * f5 | F5\n * f6 | F6\n * f7 | F7\n * f8 | F8\n * f9 | F9\n * f10 | F10\n * f11 | F11\n * f12 | F12\n * f13 | F13\n * f14 | F14\n * f15 | F15\n * f16 | F16\n * f17 | F17\n * f18 | F18\n * f19 | F19\n * f20 | F20\n * f21 | F21\n * f22 | F22\n * f23 | F23\n * f24 | F24\n * num lock | Num Lock\n * scroll lock | Scroll Lock\n * ^ | Caret\n * ! | Exclamation Point\n * # | Hash\n * $ | Dollar Sign\n * ù | Grave Accent U\n * page backward | Page Backward\n * page forward | Page Forward\n * closing paren (AZERTY) | Closing Parenthesis (AZERTY)\n * * | Asterisk\n * ~ + * key | Tilde + Asterisk Key\n * minus (firefox), mute/unmute | Minus (Firefox), Mute/Unmute\n * decrease volume level | Decrease Volume Level\n * increase volume level | Increase Volume Level\n * next | Next\n * previous | Previous\n * stop | Stop\n * play/pause | Play/Pause\n * e-mail | Email\n * mute/unmute (firefox) | Mute/Unmute (Firefox)\n * decrease volume level (firefox) | Decrease Volume Level (Firefox)\n * increase volume level (firefox) | Increase Volume Level (Firefox)\n * semi-colon / ñ | Semicolon / ñ\n * equal sign | Equal Sign\n * comma | Comma\n * dash | Dash\n * period | Period\n * forward slash / ç | Forward Slash / ç\n * grave accent / ñ / æ | Grave Accent / ñ / æ\n * ?, / or ° | ?, / or °\n * numpad period (chrome) | Numpad Period (Chrome)\n * open bracket | Open Bracket\n * back slash | Backslash\n * close bracket / å | Close Bracket / å\n * single quote / ø | Single Quote / ø\n * \\` | Backtick\n * left or right ⌘ key (firefox) | Left or Right Command Key (Firefox)\n * altgr | AltGr\n * < /git > | < /git >\n * GNOME Compose Key | GNOME Compose Key\n * ç | ç\n * XF86Forward | XF86Forward\n * XF86Back | XF86Back\n * alphanumeric | Alphanumeric\n * hiragana/katakana | Hiragana/Katakana\n * half-width/full-width | Half-Width/Full-Width\n * kanji | Kanji\n * toggle touchpad | Toggle Touchpad\n * \n * @title Set Inputs\n * @method setInputs(inputs)\n * @param {object} inputs\n * @memberof KeyboardControls\n */\n setInputs(inputs: Controls) {\n if (!inputs) return\n this.boundKeys = {}\n let inputsTransformed: any = {}\n for (let control in inputs) {\n const option = inputs[control]\n const { bind } = option\n let inputsKey: any = bind\n if (!Array.isArray(inputsKey)) {\n inputsKey = [bind]\n }\n for (let input of inputsKey) {\n this.bindKey(input, control, option)\n }\n }\n this._controlsOptions = inputs\n }\n\n get options(): Controls {\n return this._controlsOptions\n }\n}\n\nregisterDirective('controls', KeyboardControls)","import { WritableSignal } from '@signe/reactive';\nimport { Directive, registerDirective } from '../engine/directive';\nimport { Element } from '../engine/reactive';\nimport * as Utils from '../engine/utils';\n\nexport interface Tick {\n timestamp: number\n deltaTime: number\n frame: number\n deltaRatio: number\n}\n\nexport class Scheduler extends Directive {\n private maxFps?: number\n private fps: number = 60\n private deltaTime: number = 0\n public frame: number = 0\n private timestamp: number = 0\n private requestedDelay: number = 0\n private lastTimestamp: number = 0\n private _stop: boolean = false\n private tick: WritableSignal<Tick | null>\n \n onInit(element: Element) { \n this.tick = element.propObservables?.tick as any\n }\n\n onDestroy() { }\n onMount(element: Element) { }\n onUpdate(props: any) { }\n\n nextTick(timestamp: number) {\n this.lastTimestamp = this.lastTimestamp || this.timestamp // first\n this.deltaTime = Utils.preciseNow() - this.timestamp\n this.timestamp = timestamp\n this.tick.set({\n timestamp: this.timestamp,\n deltaTime: this.deltaTime,\n frame: this.frame,\n deltaRatio: ~~this.deltaTime / ~~Utils.fps2ms(this.fps)\n })\n this.lastTimestamp = this.timestamp\n this.frame++\n }\n /**\n * start the schedule\n * @return {Scheduler} returns this scheduler instance\n */\n start(options: {\n maxFps?: number\n fps?: number,\n delay?: number\n } = {}) {\n if (options.maxFps) this.maxFps = options.maxFps\n if (options.fps) this.fps = options.fps\n if (options.delay) this.requestedDelay = options.delay\n const requestAnimationFrame = (fn: (timestamp: number) => void) => {\n if (Utils.isBrowser()) {\n window.requestAnimationFrame(fn.bind(this))\n }\n else {\n setTimeout(() => {\n this.requestedDelay = 0\n fn(Utils.preciseNow())\n }, Utils.fps2ms(this.fps) + this.requestedDelay)\n }\n }\n\n if (!this.maxFps) {\n const loop = (timestamp: number) => {\n requestAnimationFrame(loop)\n this.nextTick(timestamp)\n }\n requestAnimationFrame(loop)\n }\n else {\n const msInterval = Utils.fps2ms(this.maxFps)\n let now = Utils.preciseNow()\n let then = Utils.preciseNow()\n const loop = (timestamp: number) => {\n if (this._stop) return\n requestAnimationFrame(loop)\n now = Utils.preciseNow()\n const elapsed = now - then\n if (elapsed > msInterval) {\n then = now - (elapsed % msInterval)\n this.nextTick(timestamp)\n }\n }\n requestAnimationFrame(loop)\n }\n\n return this;\n }\n\n stop() {\n this._stop = true\n }\n}\n\nregisterDirective('tick', Scheduler)","import { ComponentInstance } from '../components/DisplayObject';\nimport { Directive, registerDirective } from '../engine/directive';\nimport { Element } from '../engine/reactive';\nimport { error } from '../engine/utils';\n\nexport class ViewportFollow extends Directive {\n onInit(element: Element<ComponentInstance>) {\n\n }\n onMount(element: Element) {\n const { viewportFollow } = element.props\n const { viewport } = element.props.context\n if (!viewport) {\n throw error('ViewportFollow directive requires a Viewport component to be mounted in the same context')\n }\n viewport.follow(element.componentInstance)\n }\n onUpdate(props: any) {\n\n }\n onDestroy() {\n\n }\n}\n\nregisterDirective('viewportFollow', ViewportFollow)","import { effect } from '@signe/reactive';\nimport { Howl } from 'howler';\nimport { Container } from 'pixi.js';\nimport { Subscription } from 'rxjs';\nimport { Directive, registerDirective } from '../engine/directive';\nimport { Element } from '../engine/reactive';\nimport { calculateDistance, error } from '../engine/utils';\n\nconst EVENTS = ['load', 'loaderror', 'playerror', 'play', 'end', 'pause', 'stop', 'mute', 'volume', 'rate', 'seek', 'fade', 'unlock']\n\nexport class Sound extends Directive {\n private sound: Howl\n private eventsFn: ((...args: any[]) => void)[] = []\n private maxVolume: number = 1\n private maxDistance: number = 100\n private tickSubscription?: Subscription \n\n onInit(element: Element<Container>) { }\n\n onMount(element: Element<Container>) {\n const { props } = element\n const tick = props.context.tick\n const { src, autoplay, loop, volume, spatial } = props.sound\n this.sound = new Howl({\n src,\n autoplay,\n loop,\n volume\n })\n for (let event of EVENTS) {\n if (!props.sound[event]) continue\n const fn = props.sound[event]\n this.eventsFn.push(fn)\n this.sound.on(event, fn);\n }\n\n if (spatial) {\n const { soundListenerPosition } = props.context\n if (!soundListenerPosition) {\n throw new error('SoundListenerPosition directive is required for spatial sound in component parent')\n }\n const { x: listenerX, y: listenerY } = soundListenerPosition\n this.tickSubscription = effect(() => {\n tick()\n const { x, y } = element.componentInstance\n const distance = calculateDistance(x, y, listenerX(), listenerY());\n const volume = Math.max(this.maxVolume - (distance / this.maxDistance), 0)\n this.sound.volume(volume)\n }).subscription\n }\n }\n\n onUpdate(props: any) {\n const { volume, loop, mute, seek, playing, rate, spatial } = props\n if (volume != undefined) this.sound.volume(volume)\n if (loop != undefined) this.sound.loop(loop)\n if (mute != undefined) this.sound.mute(mute)\n if (seek != undefined) this.sound.seek(seek)\n if (playing != undefined) {\n if (playing) this.sound.play()\n else this.sound.pause()\n }\n if (spatial) {\n this.maxVolume = spatial.maxVolume ?? this.maxVolume\n this.maxDistance = spatial.maxDistance ?? this.maxDistance\n }\n if (rate != undefined) this.sound.rate(rate)\n }\n\n onDestroy() {\n this.sound.stop()\n this.tickSubscription?.unsubscribe()\n for (let event of EVENTS) {\n if (this.eventsFn[event]) {\n this.sound.off(event, this.eventsFn[event]);\n }\n }\n }\n}\n\nclass SoundListenerPosition extends Directive {\n onMount(element: Element<any>) {\n element.props.context.soundListenerPosition = element.propObservables?.soundListenerPosition\n }\n onInit(element: Element<any>) { }\n onUpdate(props: any) { }\n onDestroy() { }\n}\n\nregisterDirective('sound', Sound)\nregisterDirective('soundListenerPosition', SoundListenerPosition)","import { effect, isSignal } from '@signe/reactive';\nimport { Container, Rectangle } from 'pixi.js';\nimport { Directive, registerDirective } from '../engine/directive';\nimport { Element } from '../engine/reactive';\nimport { snap } from 'popmotion';\nimport { addContext } from '../hooks/addContext';\n\nexport class Drop extends Directive {\n onInit(element: Element<Container>) {}\n\n onMount(element: Element<Container>) {\n addContext(element, 'drop', element)\n }\n\n onUpdate() {}\n\n onDestroy() {}\n}\n\nexport class Drag extends Directive {\n onInit(element: Element<Container>) {}\n\n onMount(element: Element<Container>) {\n const { rootElement, canvasSize } = element.props.context\n const { propObservables } = element\n const { drag } = element.props\n const instance = element.componentInstance\n const stage = rootElement.componentInstance\n instance.eventMode = 'static'\n stage.eventMode = 'static'\n\n const snapTo = snap(drag?.snap ?? 0);\n\n effect(() => {\n stage.hitArea = new Rectangle(0, 0, canvasSize().width, canvasSize().height)\n })\n\n let x = 0\n let y = 0\n\n const onDragMove = (event) => {\n drag.move?.(event)\n x += event.movementX\n y += event.movementY\n if (drag?.snap) {\n instance.position.x = snapTo(x)\n instance.position.y = snapTo(y)\n } else {\n instance.position.x = x\n instance.position.y = y\n }\n const { x: xProp, y: yProp } = propObservables as any\n if (xProp !== undefined && isSignal(xProp)) {\n xProp.set(instance.position.x)\n }\n if (yProp !== undefined && isSignal(yProp)) {\n yProp.set(instance.position.y)\n }\n }\n\n const onDragEnd = () => {\n drag.end?.()\n stage.off('pointermove', onDragMove)\n console.log(rootElement.allElements)\n } \n\n instance.on('pointerdown', () => {\n drag.start?.()\n stage.on('pointermove', onDragMove)\n });\n\n stage.on('pointerup', onDragEnd)\n stage.on('pointerupoutside', onDragEnd)\n }\n\n onUpdate() {}\n\n onDestroy() {\n\n }\n}\n\n// registerDirective('drag', Drag)\n// registerDirective('drop', Drop)","import { Container, DisplacementFilter, Sprite, Texture, WRAP_MODES } from 'pixi.js';\nimport { animate } from 'popmotion';\nimport { Directive, registerDirective } from '../engine/directive';\nimport { Element } from '../engine/reactive';\n\n\nexport class Transition extends Directive {\n \n\n onInit(element: Element<Container>) {\n }\n\n onMount(element: Element<Container>) {\n const { image } = element.props.transition\n const displacementSprite = new Sprite(Texture.from(image))\n displacementSprite.texture.baseTexture.wrapMode = WRAP_MODES.REPEAT\n const displacementFilter = new DisplacementFilter(displacementSprite)\n const instance = element.componentInstance\n instance.filters = [displacementFilter]\n\n instance.addChild(displacementSprite)\n\n setTimeout(() => {\n animate({\n from: 0,\n to: 1,\n duration: 500,\n onUpdate: (progress) => {\n displacementFilter.scale.x = progress\n displacementFilter.scale.y = progress\n }\n })\n }, 5000)\n }\n\n onUpdate(props: any) {\n\n }\n\n onDestroy() {\n\n }\n}\n\nregisterDirective('transition', Transition)","import './directives'\nexport * from '@signe/reactive'\nexport { Howler } from 'howler'\nexport * from './components'\nexport * from './engine/reactive'\nexport * from './engine/signal'\nexport * from './engine/trigger'\nexport * from './engine/bootstrap'\nexport * from './engine/animation'\nexport { useProps, useDefineProps } from './hooks/useProps'\nexport * from './utils/Ease'\nexport * from './utils/RadialGradient'\nexport * from './components/DisplayObject'\nexport { isObservable } from 'rxjs'","import { effect, Signal, signal } from \"@signe/reactive\";\nimport { Container, autoDetectRenderer } from \"pixi.js\";\nimport { loadYoga } from \"yoga-layout\";\nimport { Props, createComponent, registerComponent, Element } from \"../engine/reactive\";\nimport { useProps } from \"../hooks/useProps\";\nimport { ComponentInstance, DisplayObject } from \"./DisplayObject\";\nimport { ComponentFunction } from \"../engine/signal\";\nimport { SignalOrPrimitive } from \"./types\";\nimport { Size } from \"./types/DisplayObject\";\nimport { Scheduler, Tick } from \"../directives/Scheduler\";\n\ninterface CanvasElement extends Element<ComponentInstance> {\n render: (rootElement: HTMLElement) => void;\n directives: {\n tick: Scheduler\n };\n propObservables: {\n tick: Signal<Tick>\n };\n}\n\nregisterComponent(\"Canvas\", class Canvas extends DisplayObject(Container) {});\n\nexport interface CanvasProps extends Props {\n cursorStyles?: () => any;\n width?: SignalOrPrimitive<Size>;\n height?: SignalOrPrimitive<Size>;\n canvasEl?: HTMLElement;\n selector?: string;\n isRoot?: boolean;\n tick?: any;\n class?: SignalOrPrimitive<string>;\n}\n\nexport const Canvas: ComponentFunction<CanvasProps> = async (props = {}) => {\n let { cursorStyles, width, height, class: className } = useProps(props);\n const Yoga = await loadYoga();\n\n if (!props.width) width = signal<Size>(800)\n if (!props.height) height = signal<Size>(600)\n\n const renderer = await autoDetectRenderer({\n ...props,\n width: width?.(),\n height: height?.(),\n });\n\n const canvasSize = signal({\n width: renderer.width,\n height: renderer.height,\n });\n\n props.isRoot = true;\n const options: CanvasProps = {\n ...props,\n context: {\n Yoga,\n renderer,\n canvasSize,\n },\n width: width?.(),\n height: height?.(),\n };\n\n if (!props.tick) {\n options.context!.tick = options.tick = signal({\n timestamp: 0,\n deltaTime: 0,\n frame: 0,\n deltaRatio: 1,\n });\n }\n const canvasElement = createComponent(\"Canvas\", options) as CanvasElement;\n\n canvasElement.render = (rootElement: HTMLElement) => {\n const canvasEl = renderer.view.canvas as HTMLCanvasElement;\n\n (globalThis as any).__PIXI_STAGE__ = canvasElement.componentInstance;\n (globalThis as any).__PIXI_RENDERER__ = renderer;\n\n if (props.tickStart !== false) canvasElement.directives.tick.start()\n\n effect(() => {\n canvasElement.propObservables!.tick();\n renderer.render(canvasElement.componentInstance as any);\n });\n\n if (cursorStyles) {\n effect(() => {\n renderer.events.cursorStyles = cursorStyles();\n });\n }\n\n if (className) {\n effect(() => {\n canvasEl.classList.add(className());\n });\n }\n\n const resizeCanvas = async () => {\n let w, h;\n if (width?.() === \"100%\" && height?.() === \"100%\") {\n const parent = canvasEl.parentElement;\n w = parent ? parent.clientWidth : window.innerWidth;\n h = parent ? parent.clientHeight : window.innerHeight;\n } else {\n w = width?.() ?? canvasEl.offsetWidth;\n h = height?.() ?? canvasEl.offsetHeight;\n }\n renderer.resize(w, h);\n canvasSize.set({ width: w, height: h });\n canvasElement.componentInstance.setWidth(w)\n canvasElement.componentInstance.setHeight(h)\n };\n\n // Listen for window resize events\n window.addEventListener(\"resize\", resizeCanvas);\n\n // Check if a canvas already exists in the rootElement\n const existingCanvas = rootElement.querySelector('canvas');\n if (existingCanvas) {\n // If it exists, replace it with the new canvas\n rootElement.replaceChild(canvasEl, existingCanvas);\n } else {\n // If it doesn't exist, append the new canvas\n rootElement.appendChild(canvasEl);\n }\n\n // Initial resize\n resizeCanvas();\n };\n\n return canvasElement;\n};\n","import { Signal, WritableArraySignal, isSignal } from \"@signe/reactive\";\nimport {\n Observable,\n Subject,\n Subscription,\n defer,\n from,\n map,\n of,\n switchMap,\n} from \"rxjs\";\nimport { ComponentInstance } from \"../components/DisplayObject\";\nimport { Directive, applyDirective } from \"./directive\";\nimport { isObject, isPromise, set } from \"./utils\";\n\nexport interface Props {\n [key: string]: any;\n}\n\nexport type ArrayChange<T> = {\n type: \"add\" | \"remove\" | \"update\" | \"init\" | \"reset\";\n index?: number;\n items: T[];\n};\n\ntype ElementObservable<T> = Observable<\n ArrayChange<T> & {\n value: Element | Element[];\n }\n>;\n\ntype NestedSignalObjects = {\n [Key in string]: NestedSignalObjects | Signal<any>;\n};\n\nexport interface Element<T = ComponentInstance> {\n tag: string;\n props: Props;\n componentInstance: T;\n propSubscriptions: Subscription[];\n effectSubscriptions: Subscription[];\n effectMounts: (() => void)[];\n effectUnmounts: ((element?: Element) => void)[];\n propObservables: NestedSignalObjects | undefined;\n parent: Element | null;\n context?: {\n [key: string]: any;\n };\n directives: {\n [key: string]: Directive;\n };\n destroy: () => void;\n allElements: Subject<void>;\n}\n\ntype FlowObservable = Observable<{\n elements: Element[];\n prev?: Element;\n}>;\n\nconst components: { [key: string]: any } = {};\n\nexport const isElement = (value: any): value is Element => {\n return (\n value &&\n typeof value === \"object\" &&\n \"tag\" in value &&\n \"props\" in value &&\n \"componentInstance\" in value\n );\n};\n\nexport const isPrimitive = (value) => {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n value === null ||\n value === undefined\n );\n};\n\nexport function registerComponent(name, component) {\n components[name] = component;\n}\n\nfunction destroyElement(element: Element | Element[]) {\n if (Array.isArray(element)) {\n element.forEach((e) => destroyElement(e));\n return;\n }\n if (!element) {\n return;\n }\n element.propSubscriptions.forEach((sub) => sub.unsubscribe());\n element.effectSubscriptions.forEach((sub) => sub.unsubscribe());\n for (let name in element.directives) {\n element.directives[name].onDestroy?.();\n }\n element.componentInstance.onDestroy?.(element.parent as any);\n element.effectUnmounts.forEach((fn) => fn?.());\n}\n\n/**\n * Creates a virtual element or a representation thereof, with properties that can be dynamically updated based on BehaviorSubjects.\n *\n * @param {string} tag - The tag name of the element to create.\n * @param {Object} props - An object containing properties for the element. Each property can either be a direct value\n * or an array where the first element is a function that returns a value based on input parameters,\n * and the second element is an array of BehaviorSubjects. The property is updated dynamically\n * using the combineLatest RxJS operator to wait for all BehaviorSubjects to emit.\n * @returns {Object} An object representing the created element, including tag name and dynamic properties.\n */\nexport function createComponent(tag: string, props?: Props): Element {\n if (!components[tag]) {\n throw new Error(`Component ${tag} is not registered`);\n }\n const instance = new components[tag]();\n const element: Element = {\n tag,\n props: {},\n componentInstance: instance,\n propSubscriptions: [],\n propObservables: props,\n parent: null,\n directives: {},\n effectUnmounts: [],\n effectSubscriptions: [],\n effectMounts: [],\n destroy() {\n destroyElement(this);\n },\n allElements: new Subject(),\n };\n\n // Iterate over each property in the props object\n if (props) {\n const recursiveProps = (props, path = \"\") => {\n const _set = (path, key, value) => {\n if (path == \"\") {\n element.props[key] = value;\n return;\n }\n set(element.props, path + \".\" + key, value);\n };\n\n Object.entries(props).forEach(([key, value]: [string, unknown]) => {\n if (isSignal(value)) {\n const _value = value as Signal<any>;\n if (\"dependencies\" in _value && _value.dependencies.size == 0) {\n _set(path, key, _value());\n return;\n }\n element.propSubscriptions.push(\n _value.observable.subscribe((value) => {\n _set(path, key, value);\n if (element.directives[key]) {\n element.directives[key].onUpdate?.(value);\n }\n if (key == \"tick\") {\n return\n }\n instance.onUpdate?.(\n path == \"\"\n ? {\n [key]: value,\n }\n : set({}, path + \".\" + key, value)\n );\n })\n );\n } else {\n if (isObject(value) && key != \"context\" && !isElement(value)) {\n recursiveProps(value, (path ? path + \".\" : \"\") + key);\n } else {\n _set(path, key, value);\n }\n }\n });\n };\n recursiveProps(props);\n }\n\n instance.onInit?.(element.props);\n instance.onUpdate?.(element.props);\n\n const onMount = (parent: Element, element: Element, index?: number) => {\n element.props.context = parent.props.context;\n element.parent = parent;\n element.componentInstance.onMount?.(element, index);\n for (let name in element.directives) {\n element.directives[name].onMount?.(element);\n }\n element.effectMounts.forEach((fn: any) => {\n element.effectUnmounts.push(fn(element));\n });\n };\n\n const elementsListen = new Subject<any>()\n\n if (props?.isRoot) {\n // propagate recrusively context in all children\n const propagateContext = async (element) => {\n if (!element.props.children) {\n return;\n }\n for (let child of element.props.children) {\n if (!child) continue;\n if (isPromise(child)) {\n child = await child;\n }\n if (child instanceof Observable) {\n child.subscribe(\n ({\n elements: comp,\n prev,\n }: {\n elements: Element[];\n prev?: Element;\n }) => {\n // if prev, insert element after this\n const components = comp.filter((c) => c !== null);\n if (prev) {\n components.forEach((c) => {\n const index = element.props.children.indexOf(prev.props.key);\n onMount(element, c, index + 1);\n propagateContext(c);\n });\n return;\n }\n components.forEach((component) => {\n if (!Array.isArray(component)) {\n onMount(element, component);\n propagateContext(component);\n } else {\n component.forEach((comp) => {\n onMount(element, comp);\n propagateContext(comp);\n });\n }\n });\n elementsListen.next(undefined)\n }\n );\n } else {\n onMount(element, child);\n await propagateContext(child);\n }\n }\n };\n element.allElements = elementsListen\n element.props.context.rootElement = element;\n element.componentInstance.onMount?.(element);\n propagateContext(element);\n }\n\n if (props) {\n for (let key in props) {\n const directive = applyDirective(element, key);\n if (directive) element.directives[key] = directive;\n }\n }\n\n // Return the created element representation\n return element;\n}\n\n/**\n * Observes a BehaviorSubject containing an array of items and dynamically creates child elements for each item.\n *\n * @param {BehaviorSubject<Array>} itemsSubject - A BehaviorSubject that emits an array of items.\n * @param {Function} createElementFn - A function that takes an item and returns an element representation.\n * @returns {Observable} An observable that emits the list of created child elements.\n */\nexport function loop<T = any>(\n itemsSubject: WritableArraySignal<T>,\n createElementFn: (item: any, index: number) => Element | Promise<Element>\n): FlowObservable {\n let elements: Element[] = [];\n\n const addAt = (items, insertIndex: number) => {\n return items.map((item, index) => {\n const element = createElementFn(item, insertIndex + index);\n elements.splice(insertIndex + index, 0, element as Element);\n return element;\n });\n };\n\n return defer(() => {\n let initialItems = [...itemsSubject._subject.items];\n let init = true;\n return itemsSubject.observable.pipe(\n map((event: ArrayChange<T>) => {\n const { type, items, index } = event;\n if (init) {\n if (elements.length > 0) {\n return {\n elements: elements,\n fullElements: elements,\n };\n }\n const newElements = addAt(initialItems, 0);\n initialItems = [];\n init = false;\n return {\n elements: newElements,\n fullElements: elements,\n };\n } else if (type == \"reset\") {\n if (elements.length != 0) {\n elements.forEach((element) => {\n destroyElement(element);\n });\n elements = [];\n }\n const newElements = addAt(items, 0);\n return {\n elements: newElements,\n fullElements: elements,\n };\n } else if (type == \"add\" && index != undefined) {\n const lastElement = elements[index - 1];\n const newElements = addAt(items, index);\n return {\n prev: lastElement,\n elements: newElements,\n fullElements: elements,\n };\n } else if (index != undefined && type == \"remove\") {\n const currentElement = elements[index];\n destroyElement(currentElement);\n elements.splice(index, 1);\n return {\n elements: [],\n };\n }\n return {\n elements: [],\n fullElements: elements,\n };\n })\n );\n });\n}\n\nexport function cond(\n condition: Signal,\n createElementFn: () => Element | Promise<Element>\n): FlowObservable {\n let element: Element | null = null;\n return (condition.observable as Observable<boolean>).pipe(\n switchMap((bool) => {\n if (bool) {\n let _el = createElementFn();\n if (isPromise(_el)) {\n return from(_el as Promise<Element>).pipe(\n map((el) => {\n element = _el as Element;\n return {\n type: \"init\",\n elements: [el],\n };\n })\n );\n }\n element = _el as Element;\n return of({\n type: \"init\",\n elements: [element],\n });\n } else if (element) {\n destroyElement(element);\n }\n return of({\n elements: [],\n });\n })\n );\n}\n","import { isSignal, signal } from \"@signe/reactive\"\nimport { isPrimitive } from \"../engine/reactive\"\n\n/**\n * Converts props into reactive signals if they are primitive values.\n * \n * @param {object} props - The properties to convert.\n * @param {object} [defaults={}] - Default values for properties.\n * @returns {object} An object with reactive signals.\n * \n * @example\n * const props = useProps({ count: 0, name: \"John\" });\n * console.log(props.count()); // 0\n * props.count.set(1);\n * console.log(props.count()); // 1\n */\nexport const useProps = (props, defaults = {}): any => {\n if (isSignal(props)) {\n return props()\n }\n const obj = {}\n for (let key in props) {\n const value = props[key]\n obj[key] = isPrimitive(value) ? signal(value) : value\n }\n for (let key in defaults) {\n if (!(key in obj)) {\n obj[key] = signal(defaults[key])\n }\n }\n return obj\n}\n\ntype PropType = NumberConstructor | StringConstructor | BooleanConstructor | \n FunctionConstructor | ObjectConstructor | ArrayConstructor | \n null | (new (...args: any[]) => any);\n\ninterface PropConfig {\n type?: PropType | PropType[];\n required?: boolean;\n default?: any | ((props: any) => any);\n validator?: (value: any, props: any) => boolean;\n}\n\ntype PropSchema = {\n [key: string]: PropType | PropType[] | PropConfig;\n}\n\n/**\n * Validates and defines properties based on a schema.\n * \n * @param {object} props - The properties to validate.\n * @returns {function} A function that takes a schema and returns validated properties.\n * \n * @example\n * const schema = {\n * age: { type: Number, required: true },\n * name: { type: String, default: \"Anonymous\" }\n * };\n * const validatedProps = useDefineProps({ age: 25 })(schema);\n * console.log(validatedProps.age()); // 25\n * console.log(validatedProps.name()); // \"Anonymous\"\n */\nexport const useDefineProps = (props: any) => {\n return (schema?: PropSchema) => {\n const rawProps = isSignal(props) ? props() : props\n const validatedProps: { [key: string]: any } = {}\n\n for (const key in schema) {\n const propConfig = schema[key]\n const value = rawProps[key]\n let validatedValue: any\n\n // Handle simple type definition\n if (typeof propConfig === 'function') {\n validateType(key, value, [propConfig])\n validatedValue = value\n }\n // Handle array of types\n else if (Array.isArray(propConfig)) {\n validateType(key, value, propConfig)\n validatedValue = value\n }\n // Handle detailed configuration object\n else if (propConfig && typeof propConfig === 'object') {\n // Check required prop\n if (propConfig.required && value === undefined) {\n throw new Error(`Missing required prop: ${key}`)\n }\n \n // Validate type if specified\n if (propConfig.type) {\n const types = Array.isArray(propConfig.type) ? propConfig.type : [propConfig.type]\n validateType(key, value, types)\n }\n \n // Run custom validator if provided\n if (propConfig.validator && !propConfig.validator(value, rawProps)) {\n throw new Error(`Invalid prop: custom validation failed for prop \"${key}\"`)\n }\n \n // Set default value if value is undefined\n if (value === undefined && 'default' in propConfig) {\n validatedValue = typeof propConfig.default === 'function' \n ? propConfig.default(rawProps)\n : propConfig.default\n } else {\n validatedValue = value\n }\n }\n\n validatedProps[key] = isSignal(validatedValue) \n ? validatedValue \n : signal(validatedValue)\n }\n \n return {\n ...useProps(rawProps),\n ...validatedProps\n }\n }\n}\n\n/**\n * Validates the type of a property.\n * \n * @param {string} key - The property key.\n * @param {any} value - The property value.\n * @param {any[]} types - The expected types.\n * @throws Will throw an error if the type check fails.\n */\nfunction validateType(key: string, value: any, types: any[]) {\n if (value === undefined || value === null) return\n \n // Si c'est un signal, on vérifie la valeur du signal\n const valueToCheck = isSignal(value) ? value() : value\n \n const valid = types.some(type => {\n if (type === Number) return typeof valueToCheck === 'number'\n if (type === String) return typeof valueToCheck === 'string'\n if (type === Boolean) return typeof valueToCheck === 'boolean'\n if (type === Function) return typeof valueToCheck === 'function'\n if (type === Object) return typeof valueToCheck === 'object'\n if (type === Array) return Array.isArray(valueToCheck)\n if (type === null) return valueToCheck === null\n return valueToCheck instanceof type\n })\n \n if (!valid) {\n throw new Error(\n `Invalid prop: type check failed for prop \"${key}\". ` +\n `Expected ${types.map(t => t.name).join(' or ')}`\n )\n }\n}","import { Node } from \"yoga-layout\";\nimport { Element, isElement, Props } from \"../engine/reactive\";\nimport { setObservablePoint } from \"../engine/utils\";\nimport type {\n AlignContent,\n EdgeSize,\n FlexDirection,\n Size,\n} from \"./types/DisplayObject\";\nimport { effect, Signal, signal } from \"@signe/reactive\";\nimport { DropShadowFilter } from \"pixi-filters\";\nimport { BlurFilter, ObservablePoint } from \"pixi.js\";\n\nexport interface ComponentInstance extends PixiMixins.ContainerOptions {\n id?: string;\n children?: ComponentInstance[];\n onInit?(props: Props): void;\n onUpdate?(props: Props): void;\n onDestroy?(parent: Element): void;\n onMount?(context: Element, index?: number): void;\n setWidth(width: number): void;\n setHeight(height: number): void;\n}\n\nexport const EVENTS = [\n \"added\",\n \"childAdded\",\n \"childRemoved\",\n \"click\",\n \"clickcapture\",\n \"destroyed\",\n \"globalmousemove\",\n \"globalpointermove\",\n \"globaltouchmove\",\n \"mousedown\",\n \"mousedowncapture\",\n \"mouseenter\",\n \"mouseentercapture\",\n \"mouseleave\",\n \"mouseleavecapture\",\n \"mousemove\",\n \"mousemovecapture\",\n \"mouseout\",\n \"mouseoutcapture\",\n \"mouseover\",\n \"mouseovercapture\",\n \"mouseup\",\n \"mouseupcapture\",\n \"mouseupoutside\",\n \"mouseupoutsidecapture\",\n \"pointercancel\",\n \"pointercancelcapture\",\n \"pointerdown\",\n \"pointerdowncapture\",\n \"pointerenter\",\n \"pointerentercapture\",\n \"pointerleave\",\n \"pointerleavecapture\",\n \"pointermove\",\n \"pointermovecapture\",\n \"pointerout\",\n \"pointeroutcapture\",\n \"pointerover\",\n \"pointerovercapture\",\n \"pointertap\",\n \"pointertapcapture\",\n \"pointerup\",\n \"pointerupcapture\",\n \"pointerupoutside\",\n \"pointerupoutsidecapture\",\n \"removed\",\n \"rightclick\",\n \"rightclickcapture\",\n \"rightdown\",\n \"rightdowncapture\",\n \"rightup\",\n \"rightupcapture\",\n \"rightupoutside\",\n \"rightupoutsidecapture\",\n \"tap\",\n \"tapcapture\",\n \"touchcancel\",\n \"touchcancelcapture\",\n \"touchend\",\n \"touchendcapture\",\n \"touchendoutside\",\n \"touchendoutsidecapture\",\n \"touchmove\",\n \"touchmovecapture\",\n \"touchstart\",\n \"touchstartcapture\",\n \"wheel\",\n \"wheelcapture\",\n];\n\nexport function DisplayObject(extendClass) {\n return class DisplayObject extends extendClass {\n #canvasContext: {\n [key: string]: any;\n } | null = null;\n isFlex: boolean = false;\n fullProps: Props = {};\n isMounted: boolean = false;\n _anchorPoints = new ObservablePoint(\n { _onUpdate: () => {} },\n 0,\n 0\n );\n isCustomAnchor: boolean = false;\n displayWidth = signal(0);\n displayHeight = signal(0);\n overrideProps: string[] = [];\n node: Node;\n\n get yoga() {\n return this.#canvasContext?.Yoga;\n }\n\n get deltaRatio() {\n return this.#canvasContext?.scheduler?.tick.value.deltaRatio;\n }\n\n onInit(props) {\n this._id = props.id;\n for (let event of EVENTS) {\n if (props[event] && !this.overrideProps.includes(event)) {\n this.eventMode = \"static\";\n this.on(event, props[event]);\n }\n }\n }\n\n onMount({ parent, props }: Element<DisplayObject>, index?: number) {\n this.#canvasContext = props.context;\n this.node = this.yoga.Node.create();\n if (parent) {\n const instance = parent.componentInstance as DisplayObject;\n if (index === undefined) {\n instance.addChild(this);\n } else {\n instance.addChildAt(this, index);\n }\n if (instance.layer) this.parentLayer = instance.layer;\n this.isMounted = true;\n this.effectSize(props.width, props.height);\n this.onUpdate(props);\n this.parent.node.insertChild(\n this.node,\n this.parent.node.getChildCount()\n );\n if (parent.props.flexDirection) {\n this.parent.node.calculateLayout();\n for (let child of this.parent.children) {\n const { left, top } = child.getComputedLayout();\n child.x = left;\n child.y = top;\n }\n }\n \n }\n }\n\n effectSize(width: Size, height: Size) {\n const handleSize = (\n size: Size,\n setter: (value: number) => void,\n parentSize: Signal<number>\n ) => {\n if (typeof size === \"string\" && size.endsWith(\"%\")) {\n effect(() => {\n setter(parentSize() * (parseInt(size) / 100));\n if (this.isFlex) {\n this.#applyFlexLayout();\n }\n });\n } else {\n setter(+size);\n }\n };\n\n if (width != undefined)\n handleSize(width, this.setWidth.bind(this), this.parent.displayWidth);\n if (height != undefined)\n handleSize(\n height,\n this.setHeight.bind(this),\n this.parent.displayHeight\n );\n }\n\n #applyFlexLayout() {\n this.calculateLayout();\n for (let child of this.children) {\n const { left, top } = child.node.getComputedLayout();\n child.x = left;\n child.y = top;\n }\n }\n\n #flexRender(props) {\n if (!this.parent) return;\n if (props.flexDirection || props.justifyContent) {\n this.isFlex = true;\n this.#applyFlexLayout();\n }\n }\n\n onUpdate(props) {\n this.fullProps = {\n ...this.fullProps,\n ...props,\n };\n\n if (!this.#canvasContext || !this.parent) return;\n if (props.x !== undefined) this.setX(props.x);\n if (props.y !== undefined) this.setY(props.y);\n if (props.scale !== undefined)\n setObservablePoint(this.scale, props.scale);\n if (props.anchor !== undefined && !this.isCustomAnchor) {\n setObservablePoint(this.anchor, props.anchor);\n }\n if (props.skew !== undefined) setObservablePoint(this.skew, props.skew);\n if (props.tint) this.tint = props.tint;\n if (props.rotation !== undefined) this.rotation = props.rotation;\n if (props.angle !== undefined) this.angle = props.angle;\n if (props.zIndex !== undefined) this.zIndex = props.zIndex;\n if (props.roundPixels !== undefined) this.roundPixels = props.roundPixels;\n if (props.cursor) this.cursor = props.cursor;\n if (props.visible !== undefined) this.visible = props.visible;\n if (props.alpha !== undefined) this.alpha = props.alpha;\n if (props.pivot) setObservablePoint(this.pivot, props.pivot);\n if (props.flexDirection) this.setFlexDirection(props.flexDirection);\n if (props.flexWrap) this.setFlexWrap(props.flexWrap);\n if (props.justifyContent) this.setJustifyContent(props.justifyContent);\n if (props.alignItems) this.setAlignItems(props.alignItems);\n if (props.alignContent) this.setAlignContent(props.alignContent);\n if (props.alignSelf) this.setAlignSelf(props.alignSelf);\n if (props.margin) this.setMargin(props.margin);\n if (props.padding) this.setPadding(props.padding);\n if (props.gap) this.setGap(props.gap);\n if (props.border) this.setBorder(props.border);\n if (props.positionType) this.setPositionType(props.positionType);\n if (props.filters) this.filters = props.filters;\n if (props.maskOf) {\n if (isElement(props.maskOf)) {\n props.maskOf.componentInstance.mask = this;\n }\n }\n if (props.blendMode) this.blendMode = props.blendMode;\n if (props.filterArea) this.filterArea = props.filterArea;\n const currentFilters = this.filters || [];\n\n if (props.shadow) {\n let dropShadowFilter = currentFilters.find(\n (filter) => filter instanceof DropShadowFilter\n );\n if (!dropShadowFilter) {\n dropShadowFilter = new DropShadowFilter();\n currentFilters.push(dropShadowFilter);\n }\n Object.assign(dropShadowFilter, props.shadow);\n }\n\n if (props.blur) {\n let blurFilter = currentFilters.find(\n (filter) => filter instanceof BlurFilter\n );\n if (!blurFilter) {\n const options =\n typeof props.blur === \"number\"\n ? {\n strength: props.blur,\n }\n : props.blur;\n blurFilter = new BlurFilter(options);\n currentFilters.push(blurFilter);\n }\n Object.assign(blurFilter, props.blur);\n }\n\n this.filters = currentFilters;\n\n this.#flexRender(props);\n }\n\n onDestroy() {\n super.destroy();\n this.node?.freeRecursive();\n }\n\n getComputedLayout() {\n return this.node.getComputedLayout();\n }\n\n applyComputedLayout() {\n const layout = this.getComputedLayout();\n this.x = layout.left;\n this.y = layout.top;\n }\n\n calculateLayout() {\n this.node.calculateLayout();\n }\n\n setFlexDirection(direction: FlexDirection) {\n const mapping = {\n row: this.yoga.FLEX_DIRECTION_ROW,\n column: this.yoga.FLEX_DIRECTION_COLUMN,\n \"row-reverse\": this.yoga.FLEX_DIRECTION_ROW_REVERSE,\n \"column-reverse\": this.yoga.FLEX_DIRECTION_COLUMN_REVERSE,\n };\n this.node.setFlexDirection(mapping[direction]);\n }\n\n setFlexWrap(wrap: \"wrap\" | \"nowrap\" | \"wrap-reverse\") {\n const mapping = {\n wrap: this.yoga.WRAP_WRAP,\n nowrap: this.yoga.WRAP_NO_WRAP,\n \"wrap-reverse\": this.yoga.WRAP_WRAP_REVERSE,\n };\n this.node.setFlexWrap(mapping[wrap]);\n }\n\n #setAlign(methodName: string, align: AlignContent) {\n const mapping = {\n auto: this.yoga.ALIGN_AUTO,\n \"flex-start\": this.yoga.ALIGN_FLEX_START,\n \"flex-end\": this.yoga.ALIGN_FLEX_END,\n center: this.yoga.ALIGN_CENTER,\n stretch: this.yoga.ALIGN_STRETCH,\n baseline: this.yoga.ALIGN_BASELINE,\n \"space-between\": this.yoga.ALIGN_SPACE_BETWEEN,\n \"space-around\": this.yoga.ALIGN_SPACE_AROUND,\n };\n const method = (this.node as any)[methodName].bind(this.node);\n method(mapping[align]);\n }\n\n setAlignContent(align: AlignContent) {\n this.#setAlign(\"setAlignContent\", align);\n }\n\n setAlignSelf(align: AlignContent) {\n this.#setAlign(\"setAlignSelf\", align);\n }\n\n setAlignItems(align: AlignContent) {\n this.#setAlign(\"setAlignItems\", align);\n }\n\n setJustifyContent(\n justifyContent:\n | \"flex-start\"\n | \"flex-end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n ) {\n const mapping = {\n \"flex-start\": this.yoga.JUSTIFY_FLEX_START,\n \"flex-end\": this.yoga.JUSTIFY_FLEX_END,\n center: this.yoga.JUSTIFY_CENTER,\n \"space-between\": this.yoga.JUSTIFY_SPACE_BETWEEN,\n \"space-around\": this.yoga.JUSTIFY_SPACE_AROUND,\n };\n this.node.setJustifyContent(mapping[justifyContent]);\n }\n\n #setEdgeSize(methodName: string, size: EdgeSize) {\n const method = (this.node as any)[methodName].bind(this.node);\n if (size instanceof Array) {\n if (size.length === 2) {\n method(this.yoga.EDGE_VERTICAL, size[0]);\n method(this.yoga.EDGE_HORIZONTAL, size[1]);\n } else if (size.length === 4) {\n method(this.yoga.EDGE_TOP, size[0]);\n method(this.yoga.EDGE_RIGHT, size[1]);\n method(this.yoga.EDGE_BOTTOM, size[2]);\n method(this.yoga.EDGE_LEFT, size[3]);\n }\n } else {\n method(this.yoga.EDGE_ALL, size);\n }\n }\n\n setPosition(position: EdgeSize) {\n this.#setEdgeSize(\"setPosition\", position);\n }\n\n setX(x: number) {\n x = x + this.getWidth() * this._anchorPoints.x;\n if (!this.parent.isFlex) {\n this.x = x;\n }\n this.node.setPosition(this.yoga.EDGE_LEFT, x);\n }\n\n setY(y: number) {\n y = y + this.getHeight() * this._anchorPoints.y;\n if (!this.parent.isFlex) {\n this.y = y;\n }\n this.node.setPosition(this.yoga.EDGE_TOP, y);\n }\n\n setPadding(padding: EdgeSize) {\n this.#setEdgeSize(\"setPadding\", padding);\n }\n\n setMargin(margin: EdgeSize) {\n this.#setEdgeSize(\"setMargin\", margin);\n }\n\n setGap(gap: EdgeSize) {\n this.node.setGap(this.yoga.GAP_ALL, +gap);\n }\n\n setBorder(border: EdgeSize) {\n this.#setEdgeSize(\"setBorder\", border);\n }\n\n setPositionType(positionType: \"relative\" | \"absolute\") {\n const mapping = {\n relative: this.yoga.POSITION_TYPE_RELATIVE,\n absolute: this.yoga.POSITION_TYPE_ABSOLUTE,\n };\n this.node.setPositionType(mapping[positionType]);\n }\n\n calculateBounds() {\n super.calculateBounds();\n if (!this._geometry) return;\n const bounds = this._geometry.bounds;\n const width = Math.abs(bounds.minX - bounds.maxX);\n const height = Math.abs(bounds.minY - bounds.maxY);\n // this.node.setWidth(width);\n // this.node.setHeight(height);\n }\n\n setWidth(width: number) {\n this.displayWidth.set(width);\n this.node?.setWidth(width);\n }\n\n setHeight(height: number) {\n this.displayHeight.set(height);\n this.node?.setHeight(height);\n }\n\n getWidth() {\n return this.displayWidth();\n }\n\n getHeight() {\n return this.displayHeight();\n }\n };\n}\n","import { Container as PixiContainer } from \"pixi.js\";\nimport { createComponent, registerComponent } from \"../engine/reactive\";\nimport { DisplayObject } from \"./DisplayObject\";\nimport { ComponentFunction } from \"../engine/signal\";\nimport { DisplayObjectProps } from \"./types/DisplayObject\";\nimport { setObservablePoint } from \"../engine/utils\";\n\ninterface ContainerProps extends DisplayObjectProps {\n sortableChildren?: boolean;\n}\n\nexport class CanvasContainer extends DisplayObject(PixiContainer) {\n isCustomAnchor = true;\n \n onUpdate(props) {\n if (props.anchor) {\n setObservablePoint(this._anchorPoints, props.anchor);\n props.pivot = [\n this.getWidth() * this._anchorPoints.x,\n this.getHeight() * this._anchorPoints.y\n ]\n }\n super.onUpdate(props);\n if (props.sortableChildren != undefined) {\n this.sortableChildren = props.sortableChildren;\n }\n }\n onMount(args) {\n super.onMount(args);\n const { componentInstance, props } = args;\n const { pixiChildren } = props;\n if (pixiChildren) {\n pixiChildren.forEach((child) => {\n componentInstance.addChild(child);\n });\n }\n }\n}\n\nexport interface CanvasContainer extends DisplayObjectProps {}\n\nregisterComponent(\"Container\", CanvasContainer);\n\nexport const Container: ComponentFunction<ContainerProps> = (props) => {\n return createComponent(\"Container\", props);\n};\n","import { effect, Signal } from \"@signe/reactive\";\nimport { Graphics as PixiGraphics } from \"pixi.js\";\nimport { createComponent, registerComponent } from \"../engine/reactive\";\nimport { DisplayObject } from \"./DisplayObject\";\nimport { DisplayObjectProps } from \"./types/DisplayObject\";\nimport { useProps } from \"../hooks/useProps\";\n\ninterface GraphicsProps extends DisplayObjectProps {\n draw?: (graphics: PixiGraphics) => void;\n}\n\ninterface RectProps extends DisplayObjectProps {\n width: number;\n height: number;\n color: string;\n}\n\ninterface CircleProps extends DisplayObjectProps {\n radius: number;\n color: string;\n}\n\ninterface EllipseProps extends DisplayObjectProps {\n width: number;\n height: number;\n color: string;\n}\n\ninterface TriangleProps extends DisplayObjectProps {\n base: number;\n height: number;\n color: string;\n}\n\ninterface SvgProps extends DisplayObjectProps {\n svg: string;\n}\n\nclass CanvasGraphics extends DisplayObject(PixiGraphics) {\n onInit(props: GraphicsProps) {\n super.onInit(props);\n if (props.draw) {\n effect(() => {\n this.clear();\n props.draw?.(this);\n });\n }\n }\n}\n\ninterface CanvasGraphics extends PixiGraphics {}\n\nregisterComponent(\"Graphics\", CanvasGraphics);\n\nexport function Graphics(props: GraphicsProps) {\n return createComponent(\"Graphics\", props);\n}\n\nexport function Rect(props: RectProps) {\n const { width, height, color, borderRadius, border } = useProps(props, {\n borderRadius: null,\n border: null\n })\n return Graphics({\n draw: (g) => {\n if (borderRadius()) {\n g.roundRect(0, 0, width(), height(), borderRadius());\n } else {\n g.rect(0, 0, width(), height());\n }\n if (border) {\n g.stroke(border);\n }\n g.fill(color());\n },\n ...props\n })\n}\n\nfunction drawShape(g: PixiGraphics, shape: 'circle' | 'ellipse', props: {\n radius: Signal<number>;\n color: Signal<string>;\n border: Signal<number>;\n} | {\n width: Signal<number>;\n height: Signal<number>;\n color: Signal<string>;\n border: Signal<number>;\n}) {\n const { color, border } = props;\n if ('radius' in props) {\n g.circle(0, 0, props.radius());\n } else {\n g.ellipse(0, 0, props.width() / 2, props.height() / 2);\n }\n if (border()) {\n g.stroke(border());\n }\n g.fill(color());\n}\n\nexport function Circle(props: CircleProps) { \n const { radius, color, border } = useProps(props, {\n border: null\n })\n return Graphics({\n draw: (g) => drawShape(g, 'circle', { radius, color, border }),\n ...props\n })\n}\n\nexport function Ellipse(props: EllipseProps) {\n const { width, height, color, border } = useProps(props, {\n border: null\n })\n return Graphics({\n draw: (g) => drawShape(g, 'ellipse', { width, height, color, border }),\n ...props\n })\n}\n\nexport function Triangle(props: TriangleProps) {\n const { width, height, color, border } = useProps(props, {\n border: null,\n color: '#000'\n })\n return Graphics({\n draw: (g) => {\n g.moveTo(0, height());\n g.lineTo(width() / 2, 0);\n g.lineTo(width(), height());\n g.lineTo(0, height());\n g.fill(color());\n if (border) {\n g.stroke(border);\n }\n },\n ...props\n })\n}\n\nexport function Svg(props: SvgProps) {\n return Graphics({\n draw: (g) => g.svg(props.svg),\n ...props\n })\n}","import {\n Subscription\n} from \"rxjs\";\nimport type { Element } from \"./reactive\";\nimport { Tick } from \"../directives/Scheduler\";\n\ntype MountFunction = (fn: (element: Element) => void) => void;\n\n// Define ComponentFunction type\nexport type ComponentFunction<P = {}> = (props: P) => Element | Promise<Element>;\n\nexport let currentSubscriptionsTracker: ((subscription: Subscription) => void) | null = null;\nexport let mountTracker: MountFunction | null = null;\n\n/**\n * Registers a mount function to be called when the component is mounted.\n * To unmount the component, the function must return a function that will be called by the engine.\n * \n * @param {(element: Element) => void} fn - The function to be called on mount.\n * @example\n * ```ts\n * mount((el) => {\n * console.log('mounted', el);\n * });\n * ```\n * Unmount the component by returning a function:\n * ```ts\n * mount((el) => {\n * console.log('mounted', el);\n * return () => {\n * console.log('unmounted', el);\n * }\n * });\n * ```\n */\nexport function mount(fn: (element: Element) => void) {\n mountTracker?.(fn);\n}\n\n/**\n * Registers a tick function to be called on each tick of the component's context.\n * @param {(tickValue: Tick, element: Element) => void} fn - The function to be called on each tick.\n * @example\n * ```ts\n * tick((tickValue, el) => {\n * console.log('tick', tickValue, el);\n * });\n * ```\n */\nexport function tick(fn: (tickValue: Tick, element: Element) => void) {\n mount((el: Element) => {\n const { context } = el.props\n let subscription: Subscription | undefined\n if (context.tick) {\n subscription = context.tick.observable.subscribe(({ value }) => {\n fn(value, el)\n })\n }\n return () => {\n subscription?.unsubscribe()\n }\n })\n}\n\n/**\n * Add tracking for subscriptions and mounts, then create an element from a component function.\n * @template C\n * @param {C} componentFunction - The component function to create an element from.\n * @param {Parameters<C>[0]} [props={}] - The props to pass to the component function.\n * @param {...any[]} children - The children elements of the component.\n * @returns {ReturnType<C>}\n * @example\n * ```ts\n * const el = h(MyComponent, {\n * x: 100,\n * y: 100,\n * });\n * ```\n * \n * with children:\n * ```ts\n * const el = h(MyComponent, {\n * x: 100,\n * y: 100,\n * }, \n * h(MyChildComponent, {\n * x: 50,\n * y: 50,\n * }),\n * );\n * ```\n */\nexport function h<C extends ComponentFunction<any>>(\n componentFunction: C,\n props: Parameters<C>[0] = {} as Parameters<C>[0],\n ...children: any[]\n): ReturnType<C> {\n const allSubscriptions = new Set<Subscription>();\n const allMounts = new Set<MountFunction>();\n\n currentSubscriptionsTracker = (subscription) => {\n allSubscriptions.add(subscription);\n };\n\n mountTracker = (fn: any) => {\n allMounts.add(fn);\n };\n\n if (children[0] instanceof Array) {\n children = children[0]\n }\n\n let component = componentFunction({ ...props, children }) as Element;\n\n if (!component) {\n component = {} as any\n }\n\n component.effectSubscriptions = Array.from(allSubscriptions);\n component.effectMounts = [\n ...Array.from(allMounts),\n ...((component as any).effectMounts ?? [])\n ];\n\n // call mount hook for root component\n if (component instanceof Promise) {\n component.then((component) => {\n if (component.props.isRoot) {\n allMounts.forEach((fn) => fn(component));\n }\n })\n }\n\n currentSubscriptionsTracker = null;\n mountTracker = null;\n\n return component as ReturnType<C>;\n}\n","import { h } from \"../engine/signal\";\nimport { Container } from \"./Container\";\n\nexport function Scene(props) {\n return h(Container)\n}","import * as particles from \"@barvynkoa/particle-emitter\";\nimport { createComponent, registerComponent } from \"../engine/reactive\";\nimport { CanvasContainer } from \"./Container\";\nimport { Signal } from \"@signe/reactive\";\n\nclass CanvasParticlesEmitter extends CanvasContainer {\n private emitter: particles.Emitter | null;\n private elapsed: number = Date.now();\n\n onMount(params) {\n super.onMount(params);\n const { props } = params;\n const tick: Signal = props.context.tick;\n this.emitter = new particles.Emitter(this as any, props.config);\n //this.emitter.emit = true\n\n this.subscriptionTick = tick.observable.subscribe((value) => {\n if (!this.emitter) return;\n const now = Date.now();\n this.emitter.update((now - this.elapsed) * 0.001);\n this.elapsed = now;\n });\n }\n\n onUpdate(props) {}\n\n onDestroy(): void {\n super.onDestroy();\n this.emitter?.destroy();\n this.emitter = null;\n this.subscriptionTick.unsubscribe();\n }\n}\n\nregisterComponent(\"ParticlesEmitter\", CanvasParticlesEmitter);\n\nexport function ParticlesEmitter(props) {\n return createComponent(\"ParticlesEmitter\", props);\n}\n","import { computed, effect, isSignal, Signal, WritableSignal } from \"@signe/reactive\";\nimport {\n Assets,\n Container,\n Sprite as PixiSprite,\n Rectangle,\n Texture,\n} from \"pixi.js\";\nimport { Subscription } from \"rxjs\";\nimport {\n Element,\n createComponent,\n registerComponent,\n} from \"../engine/reactive\";\nimport { arrayEquals, isFunction } from \"../engine/utils\";\nimport { DisplayObject } from \"./DisplayObject\";\nimport {\n AnimationFrames,\n FrameOptions,\n SpritesheetOptions,\n TextureOptions,\n TransformOptions,\n} from \"./types/Spritesheet\";\nimport { ComponentFunction } from \"../engine/signal\";\nimport { DisplayObjectProps } from \"./types/DisplayObject\";\nimport { AnimatedSignal, isAnimatedSignal } from \"../engine/animation\";\n\nconst log = console.log;\n\ntype Image = { image: string };\n\ntype TextureOptionsMerging = TextureOptions & {\n spriteWidth: number;\n spriteHeight: number;\n sound?: string;\n} & Image &\n TransformOptions;\n\ntype FrameOptionsMerging = TextureOptionsMerging & FrameOptions;\ntype SpritesheetOptionsMerging = TextureOptionsMerging & SpritesheetOptions;\ntype TransformOptionsAsArray = Pick<\n TransformOptions,\n \"anchor\" | \"scale\" | \"skew\" | \"pivot\"\n>;\n\ntype AnimationDataFrames = {\n sprites: FrameOptionsMerging[];\n frames: Texture[][];\n name: string;\n animations: AnimationFrames;\n params: any[];\n data: TextureOptionsMerging;\n};\n\nexport enum StandardAnimation {\n Stand = \"stand\",\n Walk = \"walk\",\n}\n\nexport class CanvasSprite extends DisplayObject(PixiSprite) {\n public hitbox: { w: number; h: number };\n public applyTransform: (\n frame: FrameOptionsMerging,\n data: TextureOptionsMerging,\n spritesheet: SpritesheetOptionsMerging\n ) => Partial<FrameOptionsMerging>;\n private spritesheet: SpritesheetOptionsMerging;\n private currentAnimation: AnimationDataFrames | null = null;\n private time: number = 0;\n private frameIndex: number = 0;\n private animations: Map<string, AnimationDataFrames> = new Map();\n private subscriptionTick: Subscription;\n private subscriptionSheet: Subscription[] = [];\n private sheetParams: any = {};\n private sheetCurrentAnimation: string = StandardAnimation.Stand;\n onFinish: () => void;\n\n private currentAnimationContainer: Container | null = null;\n\n private async createTextures(\n options: Required<TextureOptionsMerging>\n ): Promise<Texture[][]> {\n const { width, height, framesHeight, framesWidth, image, offset } = options;\n const texture = await Assets.load(image);\n const spriteWidth = options.spriteWidth;\n const spriteHeight = options.spriteHeight;\n const frames: Texture[][] = [];\n const offsetX = (offset && offset.x) || 0;\n const offsetY = (offset && offset.y) || 0;\n for (let i = 0; i < framesHeight; i++) {\n frames[i] = [];\n for (let j = 0; j < framesWidth; j++) {\n const rectX = j * spriteWidth + offsetX;\n const rectY = i * spriteHeight + offsetY;\n if (rectY > height) {\n throw log(\n `Warning, there is a problem with the height of the \"${this.id}\" spritesheet. When cutting into frames, the frame exceeds the height of the image.`\n );\n }\n if (rectX > width) {\n throw log(\n `Warning, there is a problem with the width of the \"${this.id}\" spritesheet. When cutting into frames, the frame exceeds the width of the image.`\n );\n }\n frames[i].push(\n new Texture({\n source: texture.source,\n frame: new Rectangle(rectX, rectY, spriteWidth, spriteHeight),\n })\n );\n }\n }\n return frames;\n }\n\n private async createAnimations() {\n const { textures } = this.spritesheet;\n if (!textures) {\n return;\n }\n for (let animationName in textures) {\n const props: (keyof TextureOptionsMerging)[] = [\n \"width\",\n \"height\",\n \"framesHeight\",\n \"framesWidth\",\n \"rectWidth\",\n \"rectHeight\",\n \"offset\",\n \"image\",\n \"sound\",\n ];\n const parentObj = props.reduce(\n (prev, val) => ({ ...prev, [val]: this.spritesheet[val] }),\n {}\n );\n const optionsTextures: TextureOptionsMerging = {\n ...parentObj,\n ...textures[animationName],\n } as any;\n const {\n rectWidth,\n width = 0,\n framesWidth = 1,\n rectHeight,\n height = 0,\n framesHeight = 1,\n } = optionsTextures;\n optionsTextures.spriteWidth = rectWidth ? rectWidth : width / framesWidth;\n optionsTextures.spriteHeight = rectHeight\n ? rectHeight\n : height / framesHeight;\n this.animations.set(animationName, {\n frames: await this.createTextures(\n optionsTextures as Required<TextureOptionsMerging>\n ),\n name: animationName,\n animations: textures[animationName].animations,\n params: [],\n data: optionsTextures,\n sprites: [],\n });\n }\n }\n\n async onMount(params: Element<CanvasSprite>) {\n const { props, propObservables } = params;\n const tick: Signal = props.context.tick;\n const sheet = props.sheet ?? {};\n if (sheet?.onFinish) {\n this.onFinish = sheet.onFinish;\n }\n this.subscriptionTick = tick.observable.subscribe((value) => {\n this.update(value);\n });\n if (props.sheet?.definition) {\n this.spritesheet = props.sheet.definition;\n await this.createAnimations();\n }\n if (sheet.params) {\n for (let key in propObservables?.sheet[\"params\"]) {\n const value = propObservables?.sheet[\"params\"][key] as Signal;\n if (isSignal(value)) {\n this.subscriptionSheet.push(\n value.observable.subscribe((value) => {\n if (this.animations.size == 0) return;\n this.play(this.sheetCurrentAnimation, [{ [key]: value }]);\n })\n );\n } else {\n this.play(this.sheetCurrentAnimation, [{ [key]: value }]);\n }\n }\n }\n\n const isMoving = computed(() => {\n const { x, y } = propObservables ?? {};\n if (!x || !y) return false;\n const xSignal = x as AnimatedSignal<any>;\n const ySignal = y as AnimatedSignal<any>;\n const isMovingX =\n isAnimatedSignal(xSignal) &&\n xSignal.animatedState().current !== xSignal.animatedState().end;\n const isMovingY =\n isAnimatedSignal(ySignal) &&\n ySignal.animatedState().current !== ySignal.animatedState().end;\n return isMovingX || isMovingY;\n });\n\n effect(() => {\n const _isMoving = isMoving();\n\n if (!this.isMounted) return;\n\n if (_isMoving) {\n this.sheetCurrentAnimation = StandardAnimation.Walk;\n } else {\n this.sheetCurrentAnimation = StandardAnimation.Stand;\n }\n\n this.play(this.sheetCurrentAnimation, [this.sheetParams]);\n });\n\n super.onMount(params);\n }\n\n async onUpdate(props) {\n super.onUpdate(props);\n\n const sheet = props.sheet;\n if (sheet?.params) this.sheetParams = sheet?.params;\n\n if (sheet?.playing && this.isMounted) {\n this.sheetCurrentAnimation = sheet?.playing;\n this.play(this.sheetCurrentAnimation, [this.sheetParams]);\n }\n\n if (props.hitbox) this.hitbox = props.hitbox;\n\n if (props.scaleMode) this.baseTexture.scaleMode = props.scaleMode;\n else if (props.image && this.fullProps.rectangle === undefined) {\n this.texture = await Assets.load(this.fullProps.image);\n } else if (props.texture) {\n this.texture = props.texture;\n }\n\n if (props.rectangle !== undefined) {\n const { x, y, width, height } = props.rectangle?.value ?? props.rectangle;\n const texture = await Assets.load(this.fullProps.image);\n this.texture = new Texture({\n source: texture.source,\n frame: new Rectangle(x, y, width, height),\n });\n }\n }\n\n onDestroy(): void {\n super.onDestroy();\n this.subscriptionSheet.forEach((sub) => sub.unsubscribe());\n this.subscriptionTick.unsubscribe();\n if (this.currentAnimationContainer && this.parent instanceof Container) {\n this.parent.removeChild(this.currentAnimationContainer);\n }\n }\n\n has(name: string): boolean {\n return this.animations.has(name);\n }\n\n get(name: string): AnimationDataFrames {\n return this.animations.get(name) as AnimationDataFrames;\n }\n\n isPlaying(name?: string): boolean {\n if (!name) return !!this.currentAnimation;\n if (this.currentAnimation == null) return false;\n return this.currentAnimation.name == name;\n }\n\n stop() {\n this.currentAnimation = null;\n this.destroy();\n }\n\n play(name: string, params: any[] = []) {\n const animParams = this.currentAnimation?.params;\n\n if (this.isPlaying(name) && arrayEquals(params, animParams || [])) return;\n\n const animation = this.get(name);\n\n if (!animation) {\n throw new Error(\n `Impossible to play the ${name} animation because it doesn't exist on the \"${this.id}\" spritesheet`\n );\n }\n\n const cloneParams = structuredClone(params);\n\n this.removeChildren();\n animation.sprites = [];\n this.currentAnimation = animation;\n this.currentAnimation.params = cloneParams;\n this.time = 0;\n this.frameIndex = 0;\n let animations: any = animation.animations;\n animations = isFunction(animations)\n ? (animations as Function)(...cloneParams)\n : animations;\n\n this.currentAnimationContainer = new Container();\n\n for (let container of animations as FrameOptionsMerging[][]) {\n const sprite = new PixiSprite();\n for (let frame of container) {\n this.currentAnimation.sprites.push(frame);\n }\n this.currentAnimationContainer.addChild(sprite);\n }\n\n const sound = this.currentAnimation.data.sound;\n\n if (sound) {\n //RpgSound.get(sound).play()\n }\n\n // Updates immediately to avoid flickering\n this.update({\n deltaRatio: 1,\n });\n }\n\n update({ deltaRatio }) {\n if (\n !this.isPlaying() ||\n !this.currentAnimation ||\n !this.currentAnimationContainer\n )\n return;\n\n const self = this;\n const { frames, sprites, data } = this.currentAnimation;\n let frame = sprites[this.frameIndex];\n const nextFrame = sprites[this.frameIndex + 1];\n\n for (let _sprite of this.currentAnimationContainer.children) {\n const sprite = _sprite as PixiSprite;\n\n if (!frame || frame.frameY == undefined || frame.frameX == undefined) {\n continue;\n }\n\n this.texture = frames[frame.frameY][frame.frameX];\n\n const getVal = <T extends keyof TransformOptions>(\n prop: T\n ): TransformOptions[T] | undefined => {\n return frame[prop] ?? data[prop] ?? this.spritesheet[prop];\n };\n\n const applyTransform = <T extends keyof TransformOptionsAsArray>(\n prop: T\n ): void => {\n const val = getVal<T>(prop);\n if (val) {\n this[prop as string].set(...val!);\n }\n };\n\n function applyTransformValue<T extends keyof TransformOptions>(prop: T);\n function applyTransformValue<T extends keyof TransformOptions>(\n prop: string,\n alias: T\n );\n function applyTransformValue<T extends keyof TransformOptions>(\n prop: T,\n alias?: T\n ): void {\n const optionProp = alias || prop;\n const val = getVal<T>(optionProp);\n if (val !== undefined) {\n self[prop as string] = val;\n }\n }\n\n if (this.applyTransform) {\n frame = {\n ...frame,\n ...this.applyTransform(frame, data, this.spritesheet),\n };\n }\n\n const realSize = getVal<\"spriteRealSize\">(\"spriteRealSize\");\n const heightOfSprite =\n typeof realSize == \"number\" ? realSize : realSize?.height;\n const widthOfSprite =\n typeof realSize == \"number\" ? realSize : realSize?.width;\n\n const applyAnchorBySize = () => {\n if (heightOfSprite && this.hitbox) {\n const { spriteWidth, spriteHeight } = data;\n const w = (spriteWidth - this.hitbox.w) / 2 / spriteWidth;\n const gap = (spriteHeight - heightOfSprite) / 2;\n const h = (spriteHeight - this.hitbox.h - gap) / spriteHeight;\n this.anchor.set(w, h);\n }\n };\n\n if (frame.sound) {\n //RpgSound.get(frame.sound).play()\n }\n\n applyAnchorBySize();\n\n applyTransform(\"anchor\");\n applyTransform(\"scale\");\n applyTransform(\"skew\");\n applyTransform(\"pivot\");\n\n applyTransformValue(\"alpha\", \"opacity\");\n applyTransformValue(\"x\");\n applyTransformValue(\"y\");\n applyTransformValue(\"angle\");\n applyTransformValue(\"rotation\");\n applyTransformValue(\"visible\");\n }\n\n if (!nextFrame) {\n this.time = 0;\n this.frameIndex = 0;\n if (this.onFinish && sprites.length > 1) this.onFinish();\n return;\n }\n\n this.time += deltaRatio ?? 1;\n\n if (this.time >= nextFrame.time) {\n this.frameIndex++;\n }\n }\n}\n\nexport interface CanvasSprite extends PixiSprite {}\n\nregisterComponent(\"Sprite\", CanvasSprite);\n\n// Define the props interface for Sprite\nexport interface SpriteProps extends DisplayObjectProps {\n sheet?: {\n definition?: SpritesheetOptionsMerging;\n playing?: string;\n params?: any;\n onFinish?: () => void;\n };\n scaleMode?: number;\n image?: string;\n rectangle?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n context?: {\n tick: Signal;\n };\n}\n\nexport interface SpritePropsWithImage extends Omit<SpriteProps, \"sheet\"> {\n image: string;\n rectangle?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport interface SpritePropsWithSheet\n extends Omit<SpriteProps, \"image\" | \"rectangle\"> {\n sheet: {\n definition: SpritesheetOptionsMerging;\n playing?: string;\n params?: any;\n onFinish?: () => void;\n };\n}\n\nexport type SpritePropTypes = SpritePropsWithImage | SpritePropsWithSheet;\n\n// Update the Sprite function to use the props interface\nexport const Sprite: ComponentFunction<SpritePropTypes> = (props) => {\n return createComponent(\"Sprite\", props);\n};\n","import { effect, signal, type WritableSignal } from \"@signe/reactive\";\nimport { animate as animatePopmotion } from \"popmotion\";\n\ninterface AnimateOptions<T> {\n duration?: number;\n ease?: (t: number) => number;\n onUpdate?: (value: T) => void;\n}\n\nexport interface AnimatedState<T> {\n current: T;\n start: T;\n end: T;\n}\n\nexport interface AnimatedSignal<T> extends Omit<WritableSignal<T>, 'set'> {\n (): T;\n set: (newValue: T) => void;\n animatedState: WritableSignal<AnimatedState<T>>;\n update: (updater: (value: T) => T) => void;\n}\n\nexport function isAnimatedSignal(signal: WritableSignal<any>): boolean {\n return (signal as unknown as AnimatedSignal<any>).animatedState !== undefined;\n}\n\n/**\n * Creates an animated signal with the given initial value and animation options.\n * It's a writable signal that can be animated using popmotion. Properties of the animated signal are:\n * - current: the current value of the signal.\n * - start: the start value of the animation.\n * - end: the end value of the animation.\n * \n * @param initialValue The initial value of the signal.\n * @param options The animation options.\n * @returns The animated signal.\n * @example\n * const animatedValue = animatedSignal(0, { duration: 1000 });\n * animatedValue.set(10);\n * animatedValue.update((value) => value + 1);\n * console.log(animatedValue()); // 11\n * \n * animatedValue.animatedState() // { current: 10, start: 10, end: 11 }\n */\nexport function animatedSignal<T>(initialValue: T, options: AnimateOptions<T> = {}): AnimatedSignal<T> {\n const state: AnimatedState<T> = {\n current: initialValue,\n start: initialValue,\n end: initialValue,\n };\n let animation\n\n const publicSignal = signal(initialValue);\n const privateSignal = signal(state);\n\n effect(() => {\n const currentState = privateSignal();\n publicSignal.set(currentState.current);\n });\n\n function animatedSignal(): AnimatedState<T>;\n function animatedSignal(newValue: T): void;\n function animatedSignal(newValue?: T): AnimatedState<T> | void {\n if (newValue === undefined) {\n return privateSignal();\n }\n \n const prevState = privateSignal();\n const newState: AnimatedState<T> = {\n current: prevState.current,\n start: prevState.current,\n end: newValue,\n };\n\n privateSignal.set(newState);\n\n if (animation) {\n animation.stop();\n }\n\n animation = animatePopmotion({\n // TODO\n duration: 20,\n ...options,\n from: prevState.current,\n to: newValue,\n onUpdate: (value) => {\n privateSignal.update(s => ({ ...s, current: value as T }));\n if (options.onUpdate) {\n options.onUpdate(value as T);\n }\n },\n });\n }\n\n const fn = function() {\n return privateSignal().current\n }\n\n for (const key in publicSignal) {\n fn[key] = publicSignal[key]\n }\n\n fn.animatedState = privateSignal\n fn.update = (updater: (value: T) => any) => {\n animatedSignal(updater(privateSignal().current));\n }\n fn.set = (newValue: T) => {\n animatedSignal(newValue);\n }\n\n return fn as any\n}","import { Text as PixiText, TextStyle } from \"pixi.js\";\nimport { createComponent, registerComponent } from \"../engine/reactive\";\nimport { DisplayObject } from \"./DisplayObject\";\nimport { DisplayObjectProps } from \"./types/DisplayObject\";\nimport { Signal } from \"@signe/reactive\";\nimport { on } from \"../engine/trigger\";\n\nenum TextEffect {\n Typewriter = \"typewriter\",\n}\n\ninterface TextProps extends DisplayObjectProps {\n text?: string;\n style?: Partial<TextStyle>;\n color?: string;\n size?: string;\n fontFamily?: string;\n typewriter?: {\n speed?: number;\n start?: () => void;\n onComplete?: () => void;\n skip?: () => void;\n };\n}\n\nclass CanvasText extends DisplayObject(PixiText) {\n private subscriptionTick: any;\n private fullText: string = \"\";\n private currentIndex: number = 0;\n private typewriterSpeed: number = 1; // Default speed\n private _wordWrapWidth: number = 0;\n private typewriterOptions: any = {};\n private skipSignal?: () => void;\n\n onMount(args) {\n super.onMount(args);\n const { props } = args;\n const tick: Signal = props.context.tick;\n\n if (props.text && props.typewriter) {\n this.fullText = props.text;\n this.text = \"\";\n this.currentIndex = 0;\n // Set typewriter options\n if (props.typewriter) {\n this.typewriterOptions = props.typewriter;\n if (this.typewriterOptions.skip) {\n on(this.typewriterOptions.skip, () => {\n this.skipTypewriter();\n });\n }\n }\n }\n this.subscriptionTick = tick.observable.subscribe(() => {\n if (props.typewriter) {\n this.typewriterEffect();\n }\n });\n }\n\n onUpdate(props: TextProps) {\n super.onUpdate(props);\n if (props.typewriter) {\n if (props.typewriter) {\n this.typewriterOptions = props.typewriter;\n }\n }\n if (props.text) {\n this.text = props.text;\n }\n if (props.text !== undefined && props.text !== this.fullText && this.fullProps.typewriter) {\n this.text = \"\";\n this.currentIndex = 0;\n this.fullText = props.text;\n }\n if (props.style) {\n for (const key in props.style) {\n this.style[key] = props.style[key];\n }\n if (props.style.wordWrapWidth) {\n this._wordWrapWidth = props.style.wordWrapWidth;\n }\n }\n if (props.color) {\n this.style.fill = props.color;\n }\n if (props.size) {\n this.style.fontSize = props.size;\n }\n if (props.fontFamily) {\n this.style.fontFamily = props.fontFamily;\n }\n if (this._wordWrapWidth) {\n this.setWidth(this._wordWrapWidth);\n } else {\n this.setWidth(this.width);\n }\n this.setHeight(this.height);\n }\n\n get onCompleteCallback() {\n return this.typewriterOptions.onComplete;\n }\n\n private typewriterEffect() {\n if (this.currentIndex < this.fullText.length) {\n const nextIndex = Math.min(\n this.currentIndex + (this.typewriterOptions.speed ?? 1),\n this.fullText.length\n );\n this.text = this.fullText.slice(0, nextIndex);\n this.currentIndex = nextIndex;\n\n // Check if typewriter effect is complete\n if (\n this.currentIndex === this.fullText.length &&\n this.onCompleteCallback\n ) {\n this.onCompleteCallback();\n }\n }\n }\n\n // Add a method to skip the typewriter effect\n private skipTypewriter() {\n if (this.skipSignal) {\n this.skipSignal();\n }\n this.text = this.fullText;\n this.currentIndex = this.fullText.length;\n }\n\n onDestroy(): void {\n super.onDestroy();\n this.subscriptionTick.unsubscribe();\n }\n}\n\ninterface CanvasText extends PixiText {}\n\nregisterComponent(\"Text\", CanvasText);\n\nexport function Text(props: TextProps) {\n return createComponent(\"Text\", props);\n}\n","import { effect, signal } from \"@signe/reactive\";\n\ninterface Listen<T = any> {\n config: T | undefined;\n seed: number;\n}\n\ninterface Trigger<T = any> {\n start: () => void;\n listen: () => Listen<T> | undefined;\n}\n\nexport function isTrigger(arg: any): arg is Trigger<any> {\n return arg?.start && arg?.listen;\n}\n\nexport function trigger<T = any>(config?: T): Trigger<T> {\n const _signal = signal(0);\n return {\n start: () => {\n _signal.set(Math.random());\n },\n listen: (): Listen<T> | undefined => {\n return {\n config,\n seed: _signal(),\n };\n },\n };\n}\n\nexport function on(triggerSignal: any, callback: (config: any) => void) {\n if (!isTrigger(triggerSignal)) {\n throw new Error(\"In 'on(arg)' must have a trigger signal type\");\n }\n effect(() => {\n const result = triggerSignal.listen();\n if (result?.seed) callback(result.config);\n });\n}\n","import { TilingSprite as PixiTilingSprite, Texture } from 'pixi.js';\nimport { createComponent, registerComponent } from '../engine/reactive';\nimport { DisplayObject } from './DisplayObject';\nimport { DisplayObjectProps } from './types/DisplayObject';\n\ninterface TilingSpriteProps extends DisplayObjectProps {\n image?: string;\n tileScale?: { x: number; y: number };\n tilePosition?: { x: number; y: number };\n width?: number;\n height?: number;\n}\n\nclass CanvasTilingSprite extends DisplayObject(PixiTilingSprite) {\n onUpdate(props: TilingSpriteProps): void {\n super.onUpdate(props);\n if (props.image) {\n this.texture = Texture.from(props.image);\n }\n if (props.tileScale) {\n this.tileScale.set(props.tileScale.x, props.tileScale.y);\n }\n if (props.tilePosition) {\n this.tilePosition.set(props.tilePosition.x, props.tilePosition.y);\n }\n if (props.width !== undefined) {\n this.width = props.width;\n }\n if (props.height !== undefined) {\n this.height = props.height;\n }\n }\n}\n\nregisterComponent('TilingSprite', CanvasTilingSprite)\n\nexport function TilingSprite(props: TilingSpriteProps) {\n return createComponent('TilingSprite', props)\n}","import { Viewport as PixiViewport } from 'pixi-viewport';\nimport { Subscription } from 'rxjs';\nimport { createComponent, registerComponent } from '../engine/reactive';\nimport { DisplayObject } from './DisplayObject';\nimport { effect } from '@signe/reactive';\n\nconst EVENTS = [\n 'bounce-x-end',\n 'bounce-x-start',\n 'bounce-y-end',\n 'bounce-y-start',\n 'clicked',\n 'drag-end',\n 'drag-start',\n 'frame-end',\n 'mouse-edge-end',\n 'mouse-edge-start',\n 'moved',\n 'moved-end',\n 'pinch-end',\n 'pinch-start',\n 'snap-end',\n 'snap-start',\n 'snap-zoom-end',\n 'snap-zoom-start',\n 'wheel-scroll',\n 'zoomed',\n 'zoomed-end'\n]\n\nexport class CanvasViewport extends DisplayObject(PixiViewport) {\n private tickSubscription: Subscription\n overrideProps = ['wheel']\n\n constructor() {\n const defaultOptions = {\n noTicker: true,\n events: {\n domElement: {\n addEventListener: () => {}\n }\n },\n }\n // @ts-ignore\n super(defaultOptions) \n }\n\n onInit(props) {\n super.onInit(props)\n for (let event of EVENTS) {\n const camelCaseEvent = event.replace(/-([a-z])/g, (g) => g[1].toUpperCase());\n if (props[camelCaseEvent]) {\n this.on(event, props[camelCaseEvent])\n }\n }\n }\n\n onMount(element) {\n super.onMount(element)\n const { tick, renderer, canvasSize } = element.props.context\n let isDragging = false\n \n effect(() => {\n this.screenWidth = canvasSize().width\n this.screenHeight = canvasSize().height\n })\n\n renderer.events.domElement.addEventListener(\n 'wheel',\n this.input.wheelFunction\n );\n this.options.events = renderer.events\n \n this.tickSubscription = tick.observable.subscribe(({ value }) => {\n this.update(value.timestamp)\n })\n\n element.props.context.viewport = this\n this.updateViewportSettings(element.props)\n }\n\n onUpdate(props) {\n super.onUpdate(props)\n this.updateViewportSettings(props)\n }\n\n private updateViewportSettings(props) {\n if (props.screenWidth !== undefined) {\n this.screenWidth = props.screenWidth\n }\n if (props.screenHeight !== undefined) {\n this.screenHeight = props.screenHeight\n }\n if (props.worldWidth !== undefined) {\n this.worldWidth = props.worldWidth\n }\n if (props.worldHeight !== undefined) {\n this.worldHeight = props.worldHeight\n }\n // if (props.drag) {\n // if (props.drag === true) {\n \n // } else {\n // this.drag(props.drag)\n // }\n // }\n if (props.clamp) {\n this.clamp(props.clamp)\n }\n if (props.wheel) {\n if (props.wheel === true) {\n this.wheel()\n } else {\n this.wheel(props.wheel)\n }\n }\n if (props.decelerate) {\n if (props.decelerate === true) {\n this.decelerate()\n } else {\n this.decelerate(props.decelerate)\n }\n }\n if (props.pinch) {\n if (props.pinch === true) {\n this.pinch()\n } else {\n this.pinch(props.pinch)\n }\n }\n }\n\n onDestroy(): void {\n super.onDestroy()\n this.tickSubscription.unsubscribe()\n }\n}\n\nexport interface CanvasViewport extends PixiViewport { }\n\nregisterComponent('Viewport', CanvasViewport)\n\nexport interface ViewportProps {\n screenWidth?: number;\n screenHeight?: number;\n worldWidth?: number;\n worldHeight?: number;\n clamp?: boolean | {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n };\n [key: string]: any;\n}\n\nexport function Viewport(props: ViewportProps) {\n return createComponent('Viewport', props);\n}","import { Assets, NineSliceSprite as PixiNineSliceSprite, Texture } from \"pixi.js\";\nimport { createComponent, registerComponent } from \"../engine/reactive\";\nimport { DisplayObject } from \"./DisplayObject\";\nimport { DisplayObjectProps } from \"./types/DisplayObject\";\n\ninterface NineSliceSpriteProps extends DisplayObjectProps {\n image?: string;\n texture?: Texture;\n width?: number;\n height?: number;\n leftWidth?: number;\n rightWidth?: number;\n topHeight?: number;\n bottomHeight?: number;\n roundPixels?: boolean;\n}\n\nclass CanvasNineSliceSprite extends DisplayObject(PixiNineSliceSprite) {\n constructor() {\n // @ts-ignore\n super({\n width: 0,\n height: 0\n });\n }\n\n async onUpdate(props: NineSliceSpriteProps) {\n for (const [key, value] of Object.entries(props)) {\n if (value !== undefined) {\n if (key === 'image') {\n this.texture = await Assets.load(value);\n } else if (key in this) {\n (this as any)[key] = value;\n }\n }\n }\n }\n}\n\ninterface CanvasNineSliceSprite extends PixiNineSliceSprite {}\n\nregisterComponent(\"NineSliceSprite\", CanvasNineSliceSprite);\n\nexport function NineSliceSprite(props: NineSliceSpriteProps) {\n return createComponent(\"NineSliceSprite\", props);\n}\n","import { ComponentFunction, h } from \"./signal\";\n\n/**\n * Bootstraps a canvas element and renders it to the DOM.\n * \n * @param rootElement - The HTML element where the canvas will be rendered. Can be null.\n * @param canvas - A Promise that resolves to an Element representing the canvas component.\n * @returns A Promise that resolves to the rendered canvas element.\n * @throws {Error} If the provided element is not a Canvas component.\n */\nexport const bootstrapCanvas = async (rootElement: HTMLElement | null, canvas: ComponentFunction<any>) => {\n const canvasElement = await h(canvas);\n if (canvasElement.tag != 'Canvas') {\n throw new Error('Canvas is required');\n }\n (canvasElement as any).render(rootElement);\n\n return canvasElement;\n};\n","import { \n linear,\n easeIn,\n easeInOut,\n easeOut,\n circIn,\n circInOut,\n circOut,\n backIn,\n backInOut,\n backOut,\n anticipate,\n bounceIn,\n bounceInOut,\n bounceOut\n} from \"popmotion\"\n\nexport const Easing = {\n linear,\n easeIn,\n easeInOut,\n easeOut,\n circIn,\n circInOut,\n circOut,\n backIn,\n backInOut,\n backOut,\n anticipate,\n bounceIn,\n bounceInOut,\n bounceOut\n}","import { Texture, ImageSource, DOMAdapter, Matrix } from \"pixi.js\";\n\nexport class RadialGradient {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D | null;\n private gradient: CanvasGradient | null = null;\n private texture: Texture | null = null;\n public transform: Matrix;\n\n public size = 600;\n\n constructor(\n private x0: number,\n private y0: number,\n private x1: number,\n private y1: number,\n private x2: number,\n private y2: number,\n private focalPoint: number = 0\n ) {\n this.size = x0;\n const halfSize = this.size * 0.5;\n\n this.canvas = DOMAdapter.get().createCanvas() as any;\n this.canvas.width = this.size;\n this.canvas.height = this.size;\n this.ctx = this.canvas.getContext(\"2d\");\n\n if (this.ctx) {\n this.gradient = this.ctx.createRadialGradient(\n halfSize * (1 - focalPoint),\n halfSize,\n 0,\n halfSize,\n halfSize,\n halfSize - 0.5\n );\n }\n }\n\n addColorStop(offset: number, color: string) {\n if (this.gradient) {\n this.gradient.addColorStop(offset, color);\n }\n }\n\n render({ translate }: { translate?: { x: number; y: number } } = {}) {\n const { x0, y0, x1, y1, x2, y2, focalPoint } = this;\n const defaultSize = this.size;\n if (this.ctx && this.gradient) {\n this.ctx.fillStyle = this.gradient;\n this.ctx.fillRect(0, 0, defaultSize, defaultSize);\n\n this.texture = new Texture({\n source: new ImageSource({\n resource: this.canvas,\n addressModeU: \"clamp-to-edge\",\n addressModeV: \"clamp-to-edge\",\n }),\n });\n\n const m = new Matrix();\n const dx = Math.sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0));\n const dy = Math.sqrt((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0));\n const angle = Math.atan2(y1 - y0, x1 - x0);\n\n // Calculate the scale factors correctly\n const scaleX = dx / defaultSize;\n const scaleY = dy / defaultSize;\n\n // Apply transformations in the correct order\n m.rotate(-angle);\n m.scale(scaleX, scaleY);\n if (translate) {\n m.translate(translate.x, translate.y);\n }\n\n this.transform = m;\n }\n\n return {\n texture: this.texture,\n matrix: this.transform,\n };\n }\n}\n"],"mappings":"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A,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACT;AAEA,IAAM,UAAU,CAAC,QAAQ;AACrB,QAAM,SAAS,CAAC;AAChB,WAAS,OAAO,KAAK;AACjB,UAAM,MAAM,IAAI,GAAG;AACnB,WAAO,GAAG,IAAI;AAAA,EAClB;AACA,SAAO;AACX;AAEA,IAAM,sBAAsB,QAAQ,YAAY;AAIzC,IAAM,mBAAN,cAA+B,UAAU;AAAA,EAAzC;AAAA;AACH,SAAQ,WAKJ,CAAC;AACL,SAAQ,YAEJ,CAAC;AACL,SAAQ,OAAgB;AACxB,SAAQ,iBAAgC;AACxC,SAAQ,mBAA6B,CAAC;AAGtC;AAAA,SAAQ,YAAoB;AAC5B,SAAQ,iBAKJ;AAAA,MACA,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACX;AAAA;AAAA,EAEA,OAAO,SAAkB;AACrB,SAAK,eAAe;AACpB,SAAK,UAAU,QAAQ,MAAM,SAAS,KAAK;AAE3C,SAAK,WAAW,YAAY,MAAM;AAC9B,WAAK,QAAQ;AAAA,IACjB,GAAG,OAAO,KAAK,aAAa,EAAE,CAAC;AAAA,EACnC;AAAA,EAEA,QAAQ,SAAkB;AAAA,EAAC;AAAA,EAE3B,SAAS,OAAO;AACZ,SAAK,UAAU,KAAK;AAAA,EACxB;AAAA,EAEA,YAAY;AACR,kBAAc,KAAK,QAAQ;AAC3B,aAAS,oBAAoB,WAAW,CAAC,MAAM;AAAE,WAAK,YAAY,GAAG,IAAI;AAAA,IAAG,CAAC;AAC7E,aAAS,oBAAoB,SAAS,CAAC,MAAM;AAAE,WAAK,YAAY,GAAG,KAAK;AAAA,IAAG,CAAC;AAAA,EAChF;AAAA;AAAA,EAGA,UAAU;AACN,QAAI,KAAK,KAAM;AAEf,UAAM,YAAY,KAAK,aAAa;AACpC,QAAI,cAAc,QAAQ;AAEtB,YAAM,mBAAmB,KAAK,UAAU,SAAS;AACjD,UAAI,kBAAkB;AAClB,cAAM,EAAE,QAAQ,IAAI,iBAAiB;AACrC,YAAI,SAAU;AACV,eAAK,WAAW,SAAS;AAAA,QAC7B;AAAA,MACJ;AAAA,IACJ,OAAO;AAEH,YAAM,YAAY,OAAO,KAAK,KAAK,SAAS;AAC5C,eAAS,WAAW,WAAW;AAC3B,aAAK,WAAW,OAAO;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,WAAW,SAAiB;AAChC,UAAM,WAAW,KAAK,SAAS,OAAO;AACtC,QAAI,CAAC,SAAU;AACf,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,QAAI,QAAQ;AACR,YAAM,EAAE,QAAQ,QAAQ,IAAI,KAAK,UAAU,OAAO,EAAE;AACpD,UAAK,UAAU,SAAS,GAAI;AACrB,YAAI,aAAa,KAAK,UAAU,OAAO,EAAE;AAC5C,YAAI,OAAO,eAAe,YAAY;AAClC,uBAAa,WAAW;AAAA,QAC5B;AACA,YAAI,SAAS;AACT,kBAAQ,KAAK,UAAU,OAAO,CAAC;AAAA,QACnC;AACA,aAAK,SAAS,OAAO,EAAG;AAAA,MAC5B;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,iBAAiB;AACrB,aAAS,iBAAiB,WAAW,CAAC,MAAM;AAAE,WAAK,YAAY,GAAG,IAAI;AAAA,IAAG,CAAC;AAC1E,aAAS,iBAAiB,SAAS,CAAC,MAAM;AAAE,WAAK,YAAY,GAAG,KAAK;AAAA,IAAG,CAAC;AAAA,EAC7E;AAAA,EAEQ,QAAQ,MAAuB,YAAoB,SAAyB,YAAqB;AACrG,QAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC,IAAI;AACtC,UAAM,aAAa,OAAO,OAAO;AAAA,MAC7B,QAAQ;AAAA,IACZ,GAAG,OAAO;AACV,IAAC,KAAiB,QAAQ,aAAW;AACjC,WAAK,UAAU,OAAO,IAAI,EAAE,YAAY,SAAS,YAAY,WAAW;AAAA,IAC5E,CAAC;AAAA,EACL;AAAA,EAEQ,aAAa,MAAc;AAC/B,UAAM,OAAO,oBAAoB,IAAI;AACrC,UAAM,IAAS,IAAI,MAAM,SAAS;AAClC,MAAE,UAAU;AACZ,SAAK,YAAY,GAAG,IAAI;AAAA,EAC5B;AAAA,EAEQ,WAAW,MAAc;AAC7B,UAAM,OAAO,oBAAoB,IAAI;AACrC,UAAM,IAAS,IAAI,MAAM,OAAO;AAChC,MAAE,UAAU;AACZ,SAAK,YAAY,GAAG,KAAK;AAAA,EAC7B;AAAA,EAEQ,cAAc,MAA6B;AAC/C,WAAO,IAAI,QAAQ,CAAC,YAAiB;AACjC,WAAK,aAAa,IAAI;AACtB,iBAAW,MAAM;AACb,aAAK,WAAW,IAAI;AACpB,gBAAQ;AAAA,MACZ,GAAG,GAAG;AAAA,IACV,CAAC;AAAA,EACL;AAAA,EAEQ,YAAY,GAAkB,QAAiB;AACnD,QAAK,KAAK,OAAO;AAEjB,UAAM,UAAkB,aAAa,EAAE,OAAO;AAE9C,QAAI,WAAW,KAAK,UAAU,OAAO,GAAG;AACpC,UAAI,KAAK,SAAS,OAAO,KAAK,MAAM;AAChC,aAAK,SAAS,OAAO,IAAI;AAAA,UACrB,OAAO;AAAA,UACP,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,WAAK,SAAS,OAAO,EAAG,SAAS;AAGjC,UAAI,CAAC,QAAQ;AACT,aAAK,SAAS,OAAO,EAAG,QAAQ;AAChC,cAAM,EAAE,MAAM,IAAI,KAAK,UAAU,OAAO,EAAE;AAC1C,YAAI,OAAO;AACP,gBAAM,KAAK,UAAU,OAAO,CAAC;AAAA,QACjC;AAAA,MACJ;AAGA,WAAK,iBAAiB,SAAS,EAAE,UAAU;AAAA,IAC/C;AAEA,QAAI,SAAS;AACT,WAAK,qBAAqB,SAAS,MAAM;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEQ,qBAAqB,SAAiB,QAAiB;AAC3D,YAAQ,SAAS;AAAA,MACb,KAAK;AACD,aAAK,eAAe,KAAK;AACzB;AAAA,MACJ,KAAK;AACD,aAAK,eAAe,OAAO;AAC3B;AAAA,MACJ,KAAK;AACD,aAAK,eAAe,OAAO;AAC3B;AAAA,MACJ,KAAK;AACD,aAAK,eAAe,QAAQ;AAC5B;AAAA,IACR;AAAA,EACJ;AAAA,EAEQ,eAAuB;AAC3B,UAAM,EAAE,IAAI,MAAM,MAAM,MAAM,IAAI,KAAK;AAEvC,QAAI,MAAM,KAAM,QAAO;AACvB,QAAI,MAAM,MAAO,QAAO;AACxB,QAAI,QAAQ,KAAM,QAAO;AACzB,QAAI,QAAQ,MAAO,QAAO;AAC1B,QAAI,GAAI,QAAO;AACf,QAAI,KAAM,QAAO;AACjB,QAAI,KAAM,QAAO;AACjB,QAAI,MAAO,QAAO;AAElB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,WAAW,WAAyC;AAChD,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAA2C;AACvC,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BA,MAAM,aAAa,aAA8B,QAA6C;AAC1F,UAAM,UAAU,KAAK,iBAAiB,WAAW;AACjD,QAAI,SAAS;AACT,YAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ;AACtE,UAAI,WAAW,QAAW;AACtB,cAAM,KAAK,cAAc,KAAe;AAAA,MAC5C,WACS,QAAQ;AACb,aAAK,aAAa,KAAe;AAAA,MACrC,OACK;AACD,aAAK,WAAW,KAAe;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,aAAa;AACT,SAAK,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe;AACX,SAAK,OAAO;AACZ,SAAK,WAAW,CAAC;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyQA,UAAU,QAAkB;AACxB,QAAI,CAAC,OAAQ;AACb,SAAK,YAAY,CAAC;AAClB,QAAI,oBAAyB,CAAC;AAC9B,aAAS,WAAW,QAAQ;AACxB,YAAM,SAAS,OAAO,OAAO;AAC7B,YAAM,EAAE,KAAK,IAAI;AACjB,UAAI,YAAiB;AACrB,UAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC3B,oBAAY,CAAC,IAAI;AAAA,MACrB;AACA,eAAS,SAAS,WAAW;AACzB,aAAK,QAAQ,OAAO,SAAS,MAAM;AAAA,MACvC;AAAA,IACJ;AACA,SAAK,mBAAmB;AAAA,EAC5B;AAAA,EAEA,IAAI,UAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AACJ;AAEA,kBAAkB,YAAY,gBAAgB;;;AC74BvC,IAAM,YAAN,cAAwB,UAAU;AAAA,EAAlC;AAAA;AAEH,SAAQ,MAAc;AACtB,SAAQ,YAAoB;AAC5B,SAAO,QAAgB;AACvB,SAAQ,YAAoB;AAC5B,SAAQ,iBAAyB;AACjC,SAAQ,gBAAwB;AAChC,SAAQ,QAAiB;AAAA;AAAA,EAGzB,OAAO,SAAkB;AACrB,SAAK,OAAO,QAAQ,iBAAiB;AAAA,EACzC;AAAA,EAEA,YAAY;AAAA,EAAE;AAAA,EACd,QAAQ,SAAkB;AAAA,EAAE;AAAA,EAC5B,SAAS,OAAY;AAAA,EAAE;AAAA,EAEvB,SAAS,WAAmB;AACxB,SAAK,gBAAgB,KAAK,iBAAiB,KAAK;AAChD,SAAK,YAAkB,WAAW,IAAI,KAAK;AAC3C,SAAK,YAAY;AACjB,SAAK,KAAK,IAAI;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,YAAY,CAAC,CAAC,KAAK,YAAY,CAAC,CAAO,OAAO,KAAK,GAAG;AAAA,IAC1D,CAAC;AACD,SAAK,gBAAgB,KAAK;AAC1B,SAAK;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAIF,CAAC,GAAG;AACJ,QAAI,QAAQ,OAAQ,MAAK,SAAS,QAAQ;AAC1C,QAAI,QAAQ,IAAK,MAAK,MAAM,QAAQ;AACpC,QAAI,QAAQ,MAAO,MAAK,iBAAiB,QAAQ;AACjD,UAAM,wBAAwB,CAAC,OAAoC;AAC/D,UAAU,UAAU,GAAG;AACnB,eAAO,sBAAsB,GAAG,KAAK,IAAI,CAAC;AAAA,MAC9C,OACK;AACD,mBAAW,MAAM;AACb,eAAK,iBAAiB;AACtB,aAAS,WAAW,CAAC;AAAA,QACzB,GAAS,OAAO,KAAK,GAAG,IAAI,KAAK,cAAc;AAAA,MACnD;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,QAAQ;AACd,YAAMA,QAAO,CAAC,cAAsB;AAChC,8BAAsBA,KAAI;AAC1B,aAAK,SAAS,SAAS;AAAA,MAC3B;AACA,4BAAsBA,KAAI;AAAA,IAC9B,OACK;AACD,YAAM,aAAmB,OAAO,KAAK,MAAM;AAC3C,UAAI,MAAY,WAAW;AAC3B,UAAI,OAAa,WAAW;AAC5B,YAAMA,QAAO,CAAC,cAAsB;AAChC,YAAI,KAAK,MAAO;AAChB,8BAAsBA,KAAI;AAC1B,cAAY,WAAW;AACvB,cAAM,UAAU,MAAM;AACtB,YAAI,UAAU,YAAY;AACtB,iBAAO,MAAO,UAAU;AACxB,eAAK,SAAS,SAAS;AAAA,QAC3B;AAAA,MACJ;AACA,4BAAsBA,KAAI;AAAA,IAC9B;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,OAAO;AACH,SAAK,QAAQ;AAAA,EACjB;AACJ;AAEA,kBAAkB,QAAQ,SAAS;;;AC/F5B,IAAM,iBAAN,cAA6B,UAAU;AAAA,EAC1C,OAAO,SAAqC;AAAA,EAE5C;AAAA,EACA,QAAQ,SAAkB;AACtB,UAAM,EAAE,eAAe,IAAI,QAAQ;AACnC,UAAM,EAAE,SAAS,IAAI,QAAQ,MAAM;AACnC,QAAI,CAAC,UAAU;AACX,YAAM,MAAM,0FAA0F;AAAA,IAC1G;AACA,aAAS,OAAO,QAAQ,iBAAiB;AAAA,EAC7C;AAAA,EACA,SAAS,OAAY;AAAA,EAErB;AAAA,EACA,YAAY;AAAA,EAEZ;AACJ;AAEA,kBAAkB,kBAAkB,cAAc;;;ACzBlD,SAAS,cAAc;AACvB,SAAS,YAAY;AAOrB,IAAM,SAAS,CAAC,QAAQ,aAAa,aAAa,QAAQ,OAAO,SAAS,QAAQ,QAAQ,UAAU,QAAQ,QAAQ,QAAQ,QAAQ;AAE7H,IAAM,QAAN,cAAoB,UAAU;AAAA,EAA9B;AAAA;AAEH,SAAQ,WAAyC,CAAC;AAClD,SAAQ,YAAoB;AAC5B,SAAQ,cAAsB;AAAA;AAAA,EAG9B,OAAO,SAA6B;AAAA,EAAE;AAAA,EAEtC,QAAQ,SAA6B;AACjC,UAAM,EAAE,MAAM,IAAI;AAClB,UAAMC,QAAO,MAAM,QAAQ;AAC3B,UAAM,EAAE,KAAK,UAAU,MAAAC,OAAM,QAAQ,QAAQ,IAAI,MAAM;AACvD,SAAK,QAAQ,IAAI,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,MACA,MAAAA;AAAA,MACA;AAAA,IACJ,CAAC;AACD,aAAS,SAAS,QAAQ;AACtB,UAAI,CAAC,MAAM,MAAM,KAAK,EAAG;AACzB,YAAM,KAAK,MAAM,MAAM,KAAK;AAC5B,WAAK,SAAS,KAAK,EAAE;AACrB,WAAK,MAAM,GAAG,OAAO,EAAE;AAAA,IAC3B;AAEA,QAAI,SAAS;AACT,YAAM,EAAE,sBAAsB,IAAI,MAAM;AACxC,UAAI,CAAC,uBAAuB;AACxB,cAAM,IAAI,MAAM,mFAAmF;AAAA,MACvG;AACA,YAAM,EAAE,GAAG,WAAW,GAAG,UAAU,IAAI;AACvC,WAAK,mBAAmB,OAAO,MAAM;AACjC,QAAAD,MAAK;AACL,cAAM,EAAE,GAAG,EAAE,IAAI,QAAQ;AACzB,cAAM,WAAW,kBAAkB,GAAG,GAAG,UAAU,GAAG,UAAU,CAAC;AACjE,cAAME,UAAS,KAAK,IAAI,KAAK,YAAa,WAAW,KAAK,aAAc,CAAC;AACzE,aAAK,MAAM,OAAOA,OAAM;AAAA,MAC5B,CAAC,EAAE;AAAA,IACP;AAAA,EACJ;AAAA,EAEA,SAAS,OAAY;AACjB,UAAM,EAAE,QAAQ,MAAAD,OAAM,MAAM,MAAM,SAAS,MAAM,QAAQ,IAAI;AAC7D,QAAI,UAAU,OAAW,MAAK,MAAM,OAAO,MAAM;AACjD,QAAIA,SAAQ,OAAW,MAAK,MAAM,KAAKA,KAAI;AAC3C,QAAI,QAAQ,OAAW,MAAK,MAAM,KAAK,IAAI;AAC3C,QAAI,QAAQ,OAAW,MAAK,MAAM,KAAK,IAAI;AAC3C,QAAI,WAAW,QAAW;AACtB,UAAI,QAAS,MAAK,MAAM,KAAK;AAAA,UACxB,MAAK,MAAM,MAAM;AAAA,IAC1B;AACA,QAAI,SAAS;AACT,WAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,WAAK,cAAc,QAAQ,eAAe,KAAK;AAAA,IACnD;AACA,QAAI,QAAQ,OAAW,MAAK,MAAM,KAAK,IAAI;AAAA,EAC/C;AAAA,EAEA,YAAY;AACR,SAAK,MAAM,KAAK;AAChB,SAAK,kBAAkB,YAAY;AACnC,aAAS,SAAS,QAAQ;AACtB,UAAI,KAAK,SAAS,KAAK,GAAG;AACtB,aAAK,MAAM,IAAI,OAAO,KAAK,SAAS,KAAK,CAAC;AAAA,MAC9C;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAM,wBAAN,cAAoC,UAAU;AAAA,EAC1C,QAAQ,SAAuB;AAC3B,YAAQ,MAAM,QAAQ,wBAAwB,QAAQ,iBAAiB;AAAA,EAC3E;AAAA,EACA,OAAO,SAAuB;AAAA,EAAE;AAAA,EAChC,SAAS,OAAY;AAAA,EAAE;AAAA,EACvB,YAAY;AAAA,EAAE;AAClB;AAEA,kBAAkB,SAAS,KAAK;AAChC,kBAAkB,yBAAyB,qBAAqB;;;AC1FhE,SAAS,UAAAE,SAAQ,gBAAgB;AACjC,SAAoB,iBAAiB;AAGrC,SAAS,YAAY;;;ACJrB,SAAoB,oBAAoB,QAAQ,SAAS,kBAAkB;AAC3E,SAAS,eAAe;AAKjB,IAAM,aAAN,cAAyB,UAAU;AAAA,EAGtC,OAAO,SAA6B;AAAA,EACpC;AAAA,EAEA,QAAQ,SAA6B;AACjC,UAAM,EAAE,MAAM,IAAI,QAAQ,MAAM;AAChC,UAAM,qBAAqB,IAAI,OAAO,QAAQ,KAAK,KAAK,CAAC;AACzD,uBAAmB,QAAQ,YAAY,WAAW,WAAW;AAC7D,UAAM,qBAAqB,IAAI,mBAAmB,kBAAkB;AACpE,UAAM,WAAW,QAAQ;AACzB,aAAS,UAAU,CAAC,kBAAkB;AAEtC,aAAS,SAAS,kBAAkB;AAEpC,eAAW,MAAM;AACb,cAAQ;AAAA,QACJ,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,UAAU,CAAC,aAAa;AACpB,6BAAmB,MAAM,IAAI;AAC7B,6BAAmB,MAAM,IAAI;AAAA,QACjC;AAAA,MACJ,CAAC;AAAA,IACL,GAAG,GAAI;AAAA,EACX;AAAA,EAEA,SAAS,OAAY;AAAA,EAErB;AAAA,EAEA,YAAY;AAAA,EAEZ;AACJ;AAEA,kBAAkB,cAAc,UAAU;;;AC3C1C,cAAc;AACd,SAAS,cAAc;;;ACFvB,SAAS,UAAAC,SAAgB,UAAAC,eAAc;AACvC,SAAS,aAAAC,YAAW,0BAA0B;AAC9C,SAAS,gBAAgB;;;ACFzB,SAAsC,YAAAC,iBAAgB;AACtD;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkDP,IAAM,aAAqC,CAAC;AAErC,IAAM,YAAY,CAAC,UAAiC;AACzD,SACE,SACA,OAAO,UAAU,YACjB,SAAS,SACT,WAAW,SACX,uBAAuB;AAE3B;AAEO,IAAM,cAAc,CAAC,UAAU;AACpC,SACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU,aACjB,UAAU,QACV,UAAU;AAEd;AAEO,SAAS,kBAAkB,MAAM,WAAW;AACjD,aAAW,IAAI,IAAI;AACrB;AAEA,SAAS,eAAe,SAA8B;AACpD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,YAAQ,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC;AACxC;AAAA,EACF;AACA,MAAI,CAAC,SAAS;AACZ;AAAA,EACF;AACA,UAAQ,kBAAkB,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC;AAC5D,UAAQ,oBAAoB,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC;AAC9D,WAAS,QAAQ,QAAQ,YAAY;AACnC,YAAQ,WAAW,IAAI,EAAE,YAAY;AAAA,EACvC;AACA,UAAQ,kBAAkB,YAAY,QAAQ,MAAa;AAC3D,UAAQ,eAAe,QAAQ,CAAC,OAAO,KAAK,CAAC;AAC/C;AAYO,SAAS,gBAAgB,KAAa,OAAwB;AACnE,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,UAAM,IAAI,MAAM,aAAa,GAAG,oBAAoB;AAAA,EACtD;AACA,QAAM,WAAW,IAAI,WAAW,GAAG,EAAE;AACrC,QAAM,UAAmB;AAAA,IACvB;AAAA,IACA,OAAO,CAAC;AAAA,IACR,mBAAmB;AAAA,IACnB,mBAAmB,CAAC;AAAA,IACpB,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,YAAY,CAAC;AAAA,IACb,gBAAgB,CAAC;AAAA,IACjB,qBAAqB,CAAC;AAAA,IACtB,cAAc,CAAC;AAAA,IACf,UAAU;AACR,qBAAe,IAAI;AAAA,IACrB;AAAA,IACA,aAAa,IAAI,QAAQ;AAAA,EAC3B;AAGA,MAAI,OAAO;AACT,UAAM,iBAAiB,CAACC,QAAO,OAAO,OAAO;AAC3C,YAAM,OAAO,CAACC,OAAM,KAAK,UAAU;AACjC,YAAIA,SAAQ,IAAI;AACd,kBAAQ,MAAM,GAAG,IAAI;AACrB;AAAA,QACF;AACA,YAAI,QAAQ,OAAOA,QAAO,MAAM,KAAK,KAAK;AAAA,MAC5C;AAEA,aAAO,QAAQD,MAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAyB;AACjE,YAAIE,UAAS,KAAK,GAAG;AACnB,gBAAM,SAAS;AACf,cAAI,kBAAkB,UAAU,OAAO,aAAa,QAAQ,GAAG;AAC7D,iBAAK,MAAM,KAAK,OAAO,CAAC;AACxB;AAAA,UACF;AACA,kBAAQ,kBAAkB;AAAA,YACxB,OAAO,WAAW,UAAU,CAACC,WAAU;AACrC,mBAAK,MAAM,KAAKA,MAAK;AACrB,kBAAI,QAAQ,WAAW,GAAG,GAAG;AAC3B,wBAAQ,WAAW,GAAG,EAAE,WAAWA,MAAK;AAAA,cAC1C;AACA,kBAAI,OAAO,QAAQ;AACjB;AAAA,cACF;AACA,uBAAS;AAAA,gBACP,QAAQ,KACJ;AAAA,kBACE,CAAC,GAAG,GAAGA;AAAA,gBACT,IACA,IAAI,CAAC,GAAG,OAAO,MAAM,KAAKA,MAAK;AAAA,cACrC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,cAAI,SAAS,KAAK,KAAK,OAAO,aAAa,CAAC,UAAU,KAAK,GAAG;AAC5D,2BAAe,QAAQ,OAAO,OAAO,MAAM,MAAM,GAAG;AAAA,UACtD,OAAO;AACL,iBAAK,MAAM,KAAK,KAAK;AAAA,UACvB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,mBAAe,KAAK;AAAA,EACtB;AAEA,WAAS,SAAS,QAAQ,KAAK;AAC/B,WAAS,WAAW,QAAQ,KAAK;AAEjC,QAAM,UAAU,CAAC,QAAiBC,UAAkB,UAAmB;AACrE,IAAAA,SAAQ,MAAM,UAAU,OAAO,MAAM;AACrC,IAAAA,SAAQ,SAAS;AACjB,IAAAA,SAAQ,kBAAkB,UAAUA,UAAS,KAAK;AAClD,aAAS,QAAQA,SAAQ,YAAY;AACnC,MAAAA,SAAQ,WAAW,IAAI,EAAE,UAAUA,QAAO;AAAA,IAC5C;AACA,IAAAA,SAAQ,aAAa,QAAQ,CAAC,OAAY;AACxC,MAAAA,SAAQ,eAAe,KAAK,GAAGA,QAAO,CAAC;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,IAAI,QAAa;AAExC,MAAI,OAAO,QAAQ;AAEjB,UAAM,mBAAmB,OAAOA,aAAY;AAC1C,UAAI,CAACA,SAAQ,MAAM,UAAU;AAC3B;AAAA,MACF;AACA,eAAS,SAASA,SAAQ,MAAM,UAAU;AACxC,YAAI,CAAC,MAAO;AACZ,YAAI,UAAU,KAAK,GAAG;AACpB,kBAAQ,MAAM;AAAA,QAChB;AACA,YAAI,iBAAiB,YAAY;AAC/B,gBAAM;AAAA,YACJ,CAAC;AAAA,cACC,UAAU;AAAA,cACV;AAAA,YACF,MAGM;AAEJ,oBAAMC,cAAa,KAAK,OAAO,CAAC,MAAM,MAAM,IAAI;AAChD,kBAAI,MAAM;AACR,gBAAAA,YAAW,QAAQ,CAAC,MAAM;AACxB,wBAAM,QAAQD,SAAQ,MAAM,SAAS,QAAQ,KAAK,MAAM,GAAG;AAC3D,0BAAQA,UAAS,GAAG,QAAQ,CAAC;AAC7B,mCAAiB,CAAC;AAAA,gBACpB,CAAC;AACD;AAAA,cACF;AACA,cAAAC,YAAW,QAAQ,CAAC,cAAc;AAChC,oBAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,0BAAQD,UAAS,SAAS;AAC1B,mCAAiB,SAAS;AAAA,gBAC5B,OAAO;AACL,4BAAU,QAAQ,CAACE,UAAS;AAC1B,4BAAQF,UAASE,KAAI;AACrB,qCAAiBA,KAAI;AAAA,kBACvB,CAAC;AAAA,gBACH;AAAA,cACF,CAAC;AACD,6BAAe,KAAK,MAAS;AAAA,YAC/B;AAAA,UACF;AAAA,QACF,OAAO;AACL,kBAAQF,UAAS,KAAK;AACtB,gBAAM,iBAAiB,KAAK;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AACA,YAAQ,cAAc;AACtB,YAAQ,MAAM,QAAQ,cAAc;AACpC,YAAQ,kBAAkB,UAAU,OAAO;AAC3C,qBAAiB,OAAO;AAAA,EAC1B;AAEA,MAAI,OAAO;AACT,aAAS,OAAO,OAAO;AACrB,YAAM,YAAY,eAAe,SAAS,GAAG;AAC7C,UAAI,UAAW,SAAQ,WAAW,GAAG,IAAI;AAAA,IAC3C;AAAA,EACF;AAGA,SAAO;AACT;AASO,SAAS,KACd,cACA,iBACgB;AAChB,MAAI,WAAsB,CAAC;AAE3B,QAAM,QAAQ,CAAC,OAAO,gBAAwB;AAC5C,WAAO,MAAM,IAAI,CAAC,MAAM,UAAU;AAChC,YAAM,UAAU,gBAAgB,MAAM,cAAc,KAAK;AACzD,eAAS,OAAO,cAAc,OAAO,GAAG,OAAkB;AAC1D,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO,MAAM,MAAM;AACjB,QAAI,eAAe,CAAC,GAAG,aAAa,SAAS,KAAK;AAClD,QAAI,OAAO;AACX,WAAO,aAAa,WAAW;AAAA,MAC7B,IAAI,CAAC,UAA0B;AAC7B,cAAM,EAAE,MAAM,OAAO,MAAM,IAAI;AAC/B,YAAI,MAAM;AACR,cAAI,SAAS,SAAS,GAAG;AACvB,mBAAO;AAAA,cACL;AAAA,cACA,cAAc;AAAA,YAChB;AAAA,UACF;AACA,gBAAM,cAAc,MAAM,cAAc,CAAC;AACzC,yBAAe,CAAC;AAChB,iBAAO;AACP,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF,WAAW,QAAQ,SAAS;AAC1B,cAAI,SAAS,UAAU,GAAG;AACxB,qBAAS,QAAQ,CAAC,YAAY;AAC5B,6BAAe,OAAO;AAAA,YACxB,CAAC;AACD,uBAAW,CAAC;AAAA,UACd;AACA,gBAAM,cAAc,MAAM,OAAO,CAAC;AAClC,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF,WAAW,QAAQ,SAAS,SAAS,QAAW;AAC9C,gBAAM,cAAc,SAAS,QAAQ,CAAC;AACtC,gBAAM,cAAc,MAAM,OAAO,KAAK;AACtC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF,WAAW,SAAS,UAAa,QAAQ,UAAU;AACjD,gBAAM,iBAAiB,SAAS,KAAK;AACrC,yBAAe,cAAc;AAC7B,mBAAS,OAAO,OAAO,CAAC;AACxB,iBAAO;AAAA,YACL,UAAU,CAAC;AAAA,UACb;AAAA,QACF;AACA,eAAO;AAAA,UACL,UAAU,CAAC;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,SAAS,KACd,WACA,iBACgB;AAChB,MAAI,UAA0B;AAC9B,SAAQ,UAAU,WAAmC;AAAA,IACnD,UAAU,CAAC,SAAS;AAClB,UAAI,MAAM;AACR,YAAI,MAAM,gBAAgB;AAC1B,YAAI,UAAU,GAAG,GAAG;AAClB,iBAAO,KAAK,GAAuB,EAAE;AAAA,YACnC,IAAI,CAAC,OAAO;AACV,wBAAU;AACV,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,UAAU,CAAC,EAAE;AAAA,cACf;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AACA,kBAAU;AACV,eAAO,GAAG;AAAA,UACR,MAAM;AAAA,UACN,UAAU,CAAC,OAAO;AAAA,QACpB,CAAC;AAAA,MACH,WAAW,SAAS;AAClB,uBAAe,OAAO;AAAA,MACxB;AACA,aAAO,GAAG;AAAA,QACR,UAAU,CAAC;AAAA,MACb,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;AC1XA,SAAS,YAAAG,WAAU,cAAc;AAgB1B,IAAM,WAAW,CAAC,OAAO,WAAW,CAAC,MAAW;AACnD,MAAIC,UAAS,KAAK,GAAG;AACjB,WAAO,MAAM;AAAA,EACjB;AACA,QAAM,MAAM,CAAC;AACb,WAAS,OAAO,OAAO;AACnB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,GAAG,IAAI,YAAY,KAAK,IAAI,OAAO,KAAK,IAAI;AAAA,EACpD;AACA,WAAS,OAAO,UAAU;AACtB,QAAI,EAAE,OAAO,MAAM;AACf,UAAI,GAAG,IAAI,OAAO,SAAS,GAAG,CAAC;AAAA,IACnC;AAAA,EACJ;AACA,SAAO;AACX;AAgCO,IAAM,iBAAiB,CAAC,UAAe;AAC1C,SAAO,CAAC,WAAwB;AAC5B,UAAM,WAAWA,UAAS,KAAK,IAAI,MAAM,IAAI;AAC7C,UAAM,iBAAyC,CAAC;AAEhD,eAAW,OAAO,QAAQ;AACtB,YAAM,aAAa,OAAO,GAAG;AAC7B,YAAM,QAAQ,SAAS,GAAG;AAC1B,UAAI;AAGJ,UAAI,OAAO,eAAe,YAAY;AAClC,qBAAa,KAAK,OAAO,CAAC,UAAU,CAAC;AACrC,yBAAiB;AAAA,MACrB,WAES,MAAM,QAAQ,UAAU,GAAG;AAChC,qBAAa,KAAK,OAAO,UAAU;AACnC,yBAAiB;AAAA,MACrB,WAES,cAAc,OAAO,eAAe,UAAU;AAEnD,YAAI,WAAW,YAAY,UAAU,QAAW;AAC5C,gBAAM,IAAI,MAAM,0BAA0B,GAAG,EAAE;AAAA,QACnD;AAGA,YAAI,WAAW,MAAM;AACjB,gBAAM,QAAQ,MAAM,QAAQ,WAAW,IAAI,IAAI,WAAW,OAAO,CAAC,WAAW,IAAI;AACjF,uBAAa,KAAK,OAAO,KAAK;AAAA,QAClC;AAGA,YAAI,WAAW,aAAa,CAAC,WAAW,UAAU,OAAO,QAAQ,GAAG;AAChE,gBAAM,IAAI,MAAM,oDAAoD,GAAG,GAAG;AAAA,QAC9E;AAGA,YAAI,UAAU,UAAa,aAAa,YAAY;AAChD,2BAAiB,OAAO,WAAW,YAAY,aACzC,WAAW,QAAQ,QAAQ,IAC3B,WAAW;AAAA,QACrB,OAAO;AACH,2BAAiB;AAAA,QACrB;AAAA,MACJ;AAEA,qBAAe,GAAG,IAAIA,UAAS,cAAc,IACvC,iBACA,OAAO,cAAc;AAAA,IAC/B;AAEA,WAAO;AAAA,MACH,GAAG,SAAS,QAAQ;AAAA,MACpB,GAAG;AAAA,IACP;AAAA,EACJ;AACJ;AAUA,SAAS,aAAa,KAAa,OAAY,OAAc;AACzD,MAAI,UAAU,UAAa,UAAU,KAAM;AAG3C,QAAM,eAAeA,UAAS,KAAK,IAAI,MAAM,IAAI;AAEjD,QAAM,QAAQ,MAAM,KAAK,UAAQ;AAC7B,QAAI,SAAS,OAAQ,QAAO,OAAO,iBAAiB;AACpD,QAAI,SAAS,OAAQ,QAAO,OAAO,iBAAiB;AACpD,QAAI,SAAS,QAAS,QAAO,OAAO,iBAAiB;AACrD,QAAI,SAAS,SAAU,QAAO,OAAO,iBAAiB;AACtD,QAAI,SAAS,OAAQ,QAAO,OAAO,iBAAiB;AACpD,QAAI,SAAS,MAAO,QAAO,MAAM,QAAQ,YAAY;AACrD,QAAI,SAAS,KAAM,QAAO,iBAAiB;AAC3C,WAAO,wBAAwB;AAAA,EACnC,CAAC;AAED,MAAI,CAAC,OAAO;AACR,UAAM,IAAI;AAAA,MACN,6CAA6C,GAAG,eACpC,MAAM,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC;AAAA,IACnD;AAAA,EACJ;AACJ;;;ACjJA,SAAS,UAAAC,SAAgB,UAAAC,eAAc;AACvC,SAAS,wBAAwB;AACjC,SAAS,YAAY,uBAAuB;AAarC,IAAMC,UAAS;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,cAAc,aAAa;AA/F3C;AAgGE,SAAO,mBAA4B,YAAY;AAAA,IAAxC;AAAA;AAAA;AACL,yCAEW;AACX,oBAAkB;AAClB,uBAAmB,CAAC;AACpB,uBAAqB;AACrB,2BAAgB,IAAI;AAAA,QAClB,EAAE,WAAW,MAAM;AAAA,QAAC,EAAE;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AACA,4BAA0B;AAC1B,0BAAeC,QAAO,CAAC;AACvB,2BAAgBA,QAAO,CAAC;AACxB,2BAA0B,CAAC;AAAA;AAAA,IAG3B,IAAI,OAAO;AACT,aAAO,mBAAK,iBAAgB;AAAA,IAC9B;AAAA,IAEA,IAAI,aAAa;AACf,aAAO,mBAAK,iBAAgB,WAAW,KAAK,MAAM;AAAA,IACpD;AAAA,IAEA,OAAO,OAAO;AACZ,WAAK,MAAM,MAAM;AACjB,eAAS,SAASD,SAAQ;AACxB,YAAI,MAAM,KAAK,KAAK,CAAC,KAAK,cAAc,SAAS,KAAK,GAAG;AACvD,eAAK,YAAY;AACjB,eAAK,GAAG,OAAO,MAAM,KAAK,CAAC;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ,EAAE,QAAQ,MAAM,GAA2B,OAAgB;AACjE,yBAAK,gBAAiB,MAAM;AAC5B,WAAK,OAAO,KAAK,KAAK,KAAK,OAAO;AAClC,UAAI,QAAQ;AACV,cAAM,WAAW,OAAO;AACxB,YAAI,UAAU,QAAW;AACvB,mBAAS,SAAS,IAAI;AAAA,QACxB,OAAO;AACL,mBAAS,WAAW,MAAM,KAAK;AAAA,QACjC;AACA,YAAI,SAAS,MAAO,MAAK,cAAc,SAAS;AAChD,aAAK,YAAY;AACjB,aAAK,WAAW,MAAM,OAAO,MAAM,MAAM;AACzC,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO,KAAK;AAAA,UACf,KAAK;AAAA,UACL,KAAK,OAAO,KAAK,cAAc;AAAA,QACjC;AACA,YAAI,OAAO,MAAM,eAAe;AAC9B,eAAK,OAAO,KAAK,gBAAgB;AACjC,mBAAS,SAAS,KAAK,OAAO,UAAU;AACtC,kBAAM,EAAE,MAAM,IAAI,IAAI,MAAM,kBAAkB;AAC9C,kBAAM,IAAI;AACV,kBAAM,IAAI;AAAA,UACZ;AAAA,QACF;AAAA,MAEF;AAAA,IACF;AAAA,IAEA,WAAW,OAAa,QAAc;AACpC,YAAM,aAAa,CACjB,MACA,QACA,eACG;AACH,YAAI,OAAO,SAAS,YAAY,KAAK,SAAS,GAAG,GAAG;AAClD,UAAAE,QAAO,MAAM;AACX,mBAAO,WAAW,KAAK,SAAS,IAAI,IAAI,IAAI;AAC5C,gBAAI,KAAK,QAAQ;AACf,oCAAK,8CAAL;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,iBAAO,CAAC,IAAI;AAAA,QACd;AAAA,MACF;AAEA,UAAI,SAAS;AACX,mBAAW,OAAO,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;AACtE,UAAI,UAAU;AACZ;AAAA,UACE;AAAA,UACA,KAAK,UAAU,KAAK,IAAI;AAAA,UACxB,KAAK,OAAO;AAAA,QACd;AAAA,IACJ;AAAA,IAmBA,SAAS,OAAO;AACd,WAAK,YAAY;AAAA,QACf,GAAG,KAAK;AAAA,QACR,GAAG;AAAA,MACL;AAEA,UAAI,CAAC,mBAAK,mBAAkB,CAAC,KAAK,OAAQ;AAC1C,UAAI,MAAM,MAAM,OAAW,MAAK,KAAK,MAAM,CAAC;AAC5C,UAAI,MAAM,MAAM,OAAW,MAAK,KAAK,MAAM,CAAC;AAC5C,UAAI,MAAM,UAAU;AAClB,2BAAmB,KAAK,OAAO,MAAM,KAAK;AAC5C,UAAI,MAAM,WAAW,UAAa,CAAC,KAAK,gBAAgB;AACtD,2BAAmB,KAAK,QAAQ,MAAM,MAAM;AAAA,MAC9C;AACA,UAAI,MAAM,SAAS,OAAW,oBAAmB,KAAK,MAAM,MAAM,IAAI;AACtE,UAAI,MAAM,KAAM,MAAK,OAAO,MAAM;AAClC,UAAI,MAAM,aAAa,OAAW,MAAK,WAAW,MAAM;AACxD,UAAI,MAAM,UAAU,OAAW,MAAK,QAAQ,MAAM;AAClD,UAAI,MAAM,WAAW,OAAW,MAAK,SAAS,MAAM;AACpD,UAAI,MAAM,gBAAgB,OAAW,MAAK,cAAc,MAAM;AAC9D,UAAI,MAAM,OAAQ,MAAK,SAAS,MAAM;AACtC,UAAI,MAAM,YAAY,OAAW,MAAK,UAAU,MAAM;AACtD,UAAI,MAAM,UAAU,OAAW,MAAK,QAAQ,MAAM;AAClD,UAAI,MAAM,MAAO,oBAAmB,KAAK,OAAO,MAAM,KAAK;AAC3D,UAAI,MAAM,cAAe,MAAK,iBAAiB,MAAM,aAAa;AAClE,UAAI,MAAM,SAAU,MAAK,YAAY,MAAM,QAAQ;AACnD,UAAI,MAAM,eAAgB,MAAK,kBAAkB,MAAM,cAAc;AACrE,UAAI,MAAM,WAAY,MAAK,cAAc,MAAM,UAAU;AACzD,UAAI,MAAM,aAAc,MAAK,gBAAgB,MAAM,YAAY;AAC/D,UAAI,MAAM,UAAW,MAAK,aAAa,MAAM,SAAS;AACtD,UAAI,MAAM,OAAQ,MAAK,UAAU,MAAM,MAAM;AAC7C,UAAI,MAAM,QAAS,MAAK,WAAW,MAAM,OAAO;AAChD,UAAI,MAAM,IAAK,MAAK,OAAO,MAAM,GAAG;AACpC,UAAI,MAAM,OAAQ,MAAK,UAAU,MAAM,MAAM;AAC7C,UAAI,MAAM,aAAc,MAAK,gBAAgB,MAAM,YAAY;AAC/D,UAAI,MAAM,QAAS,MAAK,UAAU,MAAM;AACxC,UAAI,MAAM,QAAQ;AAChB,YAAI,UAAU,MAAM,MAAM,GAAG;AAC3B,gBAAM,OAAO,kBAAkB,OAAO;AAAA,QACxC;AAAA,MACF;AACA,UAAI,MAAM,UAAW,MAAK,YAAY,MAAM;AAC5C,UAAI,MAAM,WAAY,MAAK,aAAa,MAAM;AAC9C,YAAM,iBAAiB,KAAK,WAAW,CAAC;AAExC,UAAI,MAAM,QAAQ;AAChB,YAAI,mBAAmB,eAAe;AAAA,UACpC,CAAC,WAAW,kBAAkB;AAAA,QAChC;AACA,YAAI,CAAC,kBAAkB;AACrB,6BAAmB,IAAI,iBAAiB;AACxC,yBAAe,KAAK,gBAAgB;AAAA,QACtC;AACA,eAAO,OAAO,kBAAkB,MAAM,MAAM;AAAA,MAC9C;AAEA,UAAI,MAAM,MAAM;AACd,YAAI,aAAa,eAAe;AAAA,UAC9B,CAAC,WAAW,kBAAkB;AAAA,QAChC;AACA,YAAI,CAAC,YAAY;AACf,gBAAM,UACJ,OAAO,MAAM,SAAS,WAClB;AAAA,YACE,UAAU,MAAM;AAAA,UAClB,IACA,MAAM;AACZ,uBAAa,IAAI,WAAW,OAAO;AACnC,yBAAe,KAAK,UAAU;AAAA,QAChC;AACA,eAAO,OAAO,YAAY,MAAM,IAAI;AAAA,MACtC;AAEA,WAAK,UAAU;AAEf,4BAAK,yCAAL,WAAiB;AAAA,IACnB;AAAA,IAEA,YAAY;AACV,YAAM,QAAQ;AACd,WAAK,MAAM,cAAc;AAAA,IAC3B;AAAA,IAEA,oBAAoB;AAClB,aAAO,KAAK,KAAK,kBAAkB;AAAA,IACrC;AAAA,IAEA,sBAAsB;AACpB,YAAM,SAAS,KAAK,kBAAkB;AACtC,WAAK,IAAI,OAAO;AAChB,WAAK,IAAI,OAAO;AAAA,IAClB;AAAA,IAEA,kBAAkB;AAChB,WAAK,KAAK,gBAAgB;AAAA,IAC5B;AAAA,IAEA,iBAAiB,WAA0B;AACzC,YAAM,UAAU;AAAA,QACd,KAAK,KAAK,KAAK;AAAA,QACf,QAAQ,KAAK,KAAK;AAAA,QAClB,eAAe,KAAK,KAAK;AAAA,QACzB,kBAAkB,KAAK,KAAK;AAAA,MAC9B;AACA,WAAK,KAAK,iBAAiB,QAAQ,SAAS,CAAC;AAAA,IAC/C;AAAA,IAEA,YAAY,MAA0C;AACpD,YAAM,UAAU;AAAA,QACd,MAAM,KAAK,KAAK;AAAA,QAChB,QAAQ,KAAK,KAAK;AAAA,QAClB,gBAAgB,KAAK,KAAK;AAAA,MAC5B;AACA,WAAK,KAAK,YAAY,QAAQ,IAAI,CAAC;AAAA,IACrC;AAAA,IAiBA,gBAAgB,OAAqB;AACnC,4BAAK,uCAAL,WAAe,mBAAmB;AAAA,IACpC;AAAA,IAEA,aAAa,OAAqB;AAChC,4BAAK,uCAAL,WAAe,gBAAgB;AAAA,IACjC;AAAA,IAEA,cAAc,OAAqB;AACjC,4BAAK,uCAAL,WAAe,iBAAiB;AAAA,IAClC;AAAA,IAEA,kBACE,gBAMA;AACA,YAAM,UAAU;AAAA,QACd,cAAc,KAAK,KAAK;AAAA,QACxB,YAAY,KAAK,KAAK;AAAA,QACtB,QAAQ,KAAK,KAAK;AAAA,QAClB,iBAAiB,KAAK,KAAK;AAAA,QAC3B,gBAAgB,KAAK,KAAK;AAAA,MAC5B;AACA,WAAK,KAAK,kBAAkB,QAAQ,cAAc,CAAC;AAAA,IACrD;AAAA,IAmBA,YAAY,UAAoB;AAC9B,4BAAK,0CAAL,WAAkB,eAAe;AAAA,IACnC;AAAA,IAEA,KAAK,GAAW;AACd,UAAI,IAAI,KAAK,SAAS,IAAI,KAAK,cAAc;AAC7C,UAAI,CAAC,KAAK,OAAO,QAAQ;AACvB,aAAK,IAAI;AAAA,MACX;AACA,WAAK,KAAK,YAAY,KAAK,KAAK,WAAW,CAAC;AAAA,IAC9C;AAAA,IAEA,KAAK,GAAW;AACd,UAAI,IAAI,KAAK,UAAU,IAAI,KAAK,cAAc;AAC9C,UAAI,CAAC,KAAK,OAAO,QAAQ;AACvB,aAAK,IAAI;AAAA,MACX;AACA,WAAK,KAAK,YAAY,KAAK,KAAK,UAAU,CAAC;AAAA,IAC7C;AAAA,IAEA,WAAW,SAAmB;AAC5B,4BAAK,0CAAL,WAAkB,cAAc;AAAA,IAClC;AAAA,IAEA,UAAU,QAAkB;AAC1B,4BAAK,0CAAL,WAAkB,aAAa;AAAA,IACjC;AAAA,IAEA,OAAO,KAAe;AACpB,WAAK,KAAK,OAAO,KAAK,KAAK,SAAS,CAAC,GAAG;AAAA,IAC1C;AAAA,IAEA,UAAU,QAAkB;AAC1B,4BAAK,0CAAL,WAAkB,aAAa;AAAA,IACjC;AAAA,IAEA,gBAAgB,cAAuC;AACrD,YAAM,UAAU;AAAA,QACd,UAAU,KAAK,KAAK;AAAA,QACpB,UAAU,KAAK,KAAK;AAAA,MACtB;AACA,WAAK,KAAK,gBAAgB,QAAQ,YAAY,CAAC;AAAA,IACjD;AAAA,IAEA,kBAAkB;AAChB,YAAM,gBAAgB;AACtB,UAAI,CAAC,KAAK,UAAW;AACrB,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,KAAK,IAAI,OAAO,OAAO,OAAO,IAAI;AAChD,YAAM,SAAS,KAAK,IAAI,OAAO,OAAO,OAAO,IAAI;AAAA,IAGnD;AAAA,IAEA,SAAS,OAAe;AACtB,WAAK,aAAa,IAAI,KAAK;AAC3B,WAAK,MAAM,SAAS,KAAK;AAAA,IAC3B;AAAA,IAEA,UAAU,QAAgB;AACxB,WAAK,cAAc,IAAI,MAAM;AAC7B,WAAK,MAAM,UAAU,MAAM;AAAA,IAC7B;AAAA,IAEA,WAAW;AACT,aAAO,KAAK,aAAa;AAAA,IAC3B;AAAA,IAEA,YAAY;AACV,aAAO,KAAK,cAAc;AAAA,IAC5B;AAAA,EACF,GAvWE,gCADK,0CA8FL,qBAAgB,WAAG;AACjB,SAAK,gBAAgB;AACrB,aAAS,SAAS,KAAK,UAAU;AAC/B,YAAM,EAAE,MAAM,IAAI,IAAI,MAAM,KAAK,kBAAkB;AACnD,YAAM,IAAI;AACV,YAAM,IAAI;AAAA,IACZ;AAAA,EACF,GAEA,gBAAW,SAAC,OAAO;AACjB,QAAI,CAAC,KAAK,OAAQ;AAClB,QAAI,MAAM,iBAAiB,MAAM,gBAAgB;AAC/C,WAAK,SAAS;AACd,4BAAK,8CAAL;AAAA,IACF;AAAA,EACF,GAsHA,cAAS,SAAC,YAAoB,OAAqB;AACjD,UAAM,UAAU;AAAA,MACd,MAAM,KAAK,KAAK;AAAA,MAChB,cAAc,KAAK,KAAK;AAAA,MACxB,YAAY,KAAK,KAAK;AAAA,MACtB,QAAQ,KAAK,KAAK;AAAA,MAClB,SAAS,KAAK,KAAK;AAAA,MACnB,UAAU,KAAK,KAAK;AAAA,MACpB,iBAAiB,KAAK,KAAK;AAAA,MAC3B,gBAAgB,KAAK,KAAK;AAAA,IAC5B;AACA,UAAM,SAAU,KAAK,KAAa,UAAU,EAAE,KAAK,KAAK,IAAI;AAC5D,WAAO,QAAQ,KAAK,CAAC;AAAA,EACvB,GAgCA,iBAAY,SAAC,YAAoB,MAAgB;AAC/C,UAAM,SAAU,KAAK,KAAa,UAAU,EAAE,KAAK,KAAK,IAAI;AAC5D,QAAI,gBAAgB,OAAO;AACzB,UAAI,KAAK,WAAW,GAAG;AACrB,eAAO,KAAK,KAAK,eAAe,KAAK,CAAC,CAAC;AACvC,eAAO,KAAK,KAAK,iBAAiB,KAAK,CAAC,CAAC;AAAA,MAC3C,WAAW,KAAK,WAAW,GAAG;AAC5B,eAAO,KAAK,KAAK,UAAU,KAAK,CAAC,CAAC;AAClC,eAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC;AACpC,eAAO,KAAK,KAAK,aAAa,KAAK,CAAC,CAAC;AACrC,eAAO,KAAK,KAAK,WAAW,KAAK,CAAC,CAAC;AAAA,MACrC;AAAA,IACF,OAAO;AACL,aAAO,KAAK,KAAK,UAAU,IAAI;AAAA,IACjC;AAAA,EACF,GA/RK;AAyWT;;;AHpbA,kBAAkB,UAAU,MAAM,eAAe,cAAcC,UAAS,EAAE;AAAC,CAAC;AAarE,IAAMC,UAAyC,OAAO,QAAQ,CAAC,MAAM;AAC1E,MAAI,EAAE,cAAc,OAAO,QAAQ,OAAO,UAAU,IAAI,SAAS,KAAK;AACtE,QAAM,OAAO,MAAM,SAAS;AAE5B,MAAI,CAAC,MAAM,MAAO,SAAQC,QAAa,GAAG;AAC1C,MAAI,CAAC,MAAM,OAAQ,UAASA,QAAa,GAAG;AAE5C,QAAM,WAAW,MAAM,mBAAmB;AAAA,IACxC,GAAG;AAAA,IACH,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,aAAaA,QAAO;AAAA,IACxB,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,EACnB,CAAC;AAED,QAAM,SAAS;AACf,QAAM,UAAuB;AAAA,IAC3B,GAAG;AAAA,IACH,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS;AAAA,EACnB;AAEA,MAAI,CAAC,MAAM,MAAM;AACf,YAAQ,QAAS,OAAO,QAAQ,OAAOA,QAAO;AAAA,MAC5C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,OAAO;AAAA,MACP,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACA,QAAM,gBAAgB,gBAAgB,UAAU,OAAO;AAEvD,gBAAc,SAAS,CAAC,gBAA6B;AACnD,UAAM,WAAW,SAAS,KAAK;AAE/B,IAAC,WAAmB,iBAAiB,cAAc;AACnD,IAAC,WAAmB,oBAAoB;AAExC,QAAI,MAAM,cAAc,MAAO,eAAc,WAAW,KAAK,MAAM;AAEnE,IAAAC,QAAO,MAAM;AACX,oBAAc,gBAAiB,KAAK;AACpC,eAAS,OAAO,cAAc,iBAAwB;AAAA,IACxD,CAAC;AAED,QAAI,cAAc;AAChB,MAAAA,QAAO,MAAM;AACX,iBAAS,OAAO,eAAe,aAAa;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,QAAI,WAAW;AACb,MAAAA,QAAO,MAAM;AACX,iBAAS,UAAU,IAAI,UAAU,CAAC;AAAA,MACpC,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,YAAY;AAC/B,UAAI,GAAGC;AACP,UAAI,QAAQ,MAAM,UAAU,SAAS,MAAM,QAAQ;AACjD,cAAM,SAAS,SAAS;AACxB,YAAI,SAAS,OAAO,cAAc,OAAO;AACzC,QAAAA,KAAI,SAAS,OAAO,eAAe,OAAO;AAAA,MAC5C,OAAO;AACL,YAAI,QAAQ,KAAK,SAAS;AAC1B,QAAAA,KAAI,SAAS,KAAK,SAAS;AAAA,MAC7B;AACA,eAAS,OAAO,GAAGA,EAAC;AACpB,iBAAW,IAAI,EAAE,OAAO,GAAG,QAAQA,GAAE,CAAC;AACtC,oBAAc,kBAAkB,SAAS,CAAC;AAC1C,oBAAc,kBAAkB,UAAUA,EAAC;AAAA,IAC7C;AAGA,WAAO,iBAAiB,UAAU,YAAY;AAG9C,UAAM,iBAAiB,YAAY,cAAc,QAAQ;AACzD,QAAI,gBAAgB;AAElB,kBAAY,aAAa,UAAU,cAAc;AAAA,IACnD,OAAO;AAEL,kBAAY,YAAY,QAAQ;AAAA,IAClC;AAGC,iBAAa;AAAA,EAChB;AAEA,SAAO;AACT;;;AIrIA,SAAS,aAAa,qBAAqB;AAWpC,IAAM,kBAAN,cAA8B,cAAc,aAAa,EAAE;AAAA,EAA3D;AAAA;AACL,0BAAiB;AAAA;AAAA,EAEjB,SAAS,OAAO;AACd,QAAI,MAAM,QAAQ;AAChB,yBAAmB,KAAK,eAAe,MAAM,MAAM;AACnD,YAAM,QAAQ;AAAA,QACZ,KAAK,SAAS,IAAI,KAAK,cAAc;AAAA,QACrC,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,MACxC;AAAA,IACF;AACA,UAAM,SAAS,KAAK;AACpB,QAAI,MAAM,oBAAoB,QAAW;AACvC,WAAK,mBAAmB,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,UAAM,EAAE,mBAAmB,MAAM,IAAI;AACrC,UAAM,EAAE,aAAa,IAAI;AACzB,QAAI,cAAc;AAChB,mBAAa,QAAQ,CAAC,UAAU;AAC9B,0BAAkB,SAAS,KAAK;AAAA,MAClC,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAIA,kBAAkB,aAAa,eAAe;AAEvC,IAAMC,aAA+C,CAAC,UAAU;AACrE,SAAO,gBAAgB,aAAa,KAAK;AAC3C;;;AC7CA,SAAS,UAAAC,eAAsB;AAC/B,SAAS,YAAY,oBAAoB;AAqCzC,IAAM,iBAAN,cAA6B,cAAc,YAAY,EAAE;AAAA,EACvD,OAAO,OAAsB;AAC3B,UAAM,OAAO,KAAK;AAClB,QAAI,MAAM,MAAM;AACd,MAAAC,QAAO,MAAM;AACX,aAAK,MAAM;AACX,cAAM,OAAO,IAAI;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAIA,kBAAkB,YAAY,cAAc;AAErC,SAAS,SAAS,OAAsB;AAC7C,SAAO,gBAAgB,YAAY,KAAK;AAC1C;AAEO,SAAS,KAAK,OAAkB;AACrC,QAAM,EAAE,OAAO,QAAQ,OAAO,cAAc,OAAO,IAAI,SAAS,OAAO;AAAA,IACrE,cAAc;AAAA,IACd,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,SAAS;AAAA,IACd,MAAM,CAAC,MAAM;AACX,UAAI,aAAa,GAAG;AAClB,UAAE,UAAU,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAAA,MACrD,OAAO;AACL,UAAE,KAAK,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;AAAA,MAChC;AACA,UAAI,QAAQ;AACV,UAAE,OAAO,MAAM;AAAA,MACjB;AACA,QAAE,KAAK,MAAM,CAAC;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAEA,SAAS,UAAU,GAAiB,OAA6B,OAS9D;AACD,QAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,MAAI,YAAY,OAAO;AACrB,MAAE,OAAO,GAAG,GAAG,MAAM,OAAO,CAAC;AAAA,EAC/B,OAAO;AACL,MAAE,QAAQ,GAAG,GAAG,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,IAAI,CAAC;AAAA,EACvD;AACA,MAAI,OAAO,GAAG;AACZ,MAAE,OAAO,OAAO,CAAC;AAAA,EACnB;AACA,IAAE,KAAK,MAAM,CAAC;AAChB;AAEO,SAAS,OAAO,OAAoB;AACzC,QAAM,EAAE,QAAQ,OAAO,OAAO,IAAI,SAAS,OAAO;AAAA,IAChD,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,SAAS;AAAA,IACd,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,IAC7D,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,QAAQ,OAAqB;AAC3C,QAAM,EAAE,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS,OAAO;AAAA,IACvD,QAAQ;AAAA,EACV,CAAC;AACD,SAAO,SAAS;AAAA,IACd,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,EAAE,OAAO,QAAQ,OAAO,OAAO,CAAC;AAAA,IACrE,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,SAAS,OAAsB;AAC7C,QAAM,EAAE,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS,OAAO;AAAA,IACvD,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC;AACD,SAAO,SAAS;AAAA,IACd,MAAM,CAAC,MAAM;AACX,QAAE,OAAO,GAAG,OAAO,CAAC;AACpB,QAAE,OAAO,MAAM,IAAI,GAAG,CAAC;AACvB,QAAE,OAAO,MAAM,GAAG,OAAO,CAAC;AAC1B,QAAE,OAAO,GAAG,OAAO,CAAC;AACpB,QAAE,KAAK,MAAM,CAAC;AACd,UAAI,QAAQ;AACV,UAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACH;AAEO,SAAS,IAAI,OAAiB;AACnC,SAAO,SAAS;AAAA,IACd,MAAM,CAAC,MAAM,EAAE,IAAI,MAAM,GAAG;AAAA,IAC5B,GAAG;AAAA,EACL,CAAC;AACH;;;ACvIO,IAAI,8BAA6E;AACjF,IAAI,eAAqC;AAuBzC,SAAS,MAAM,IAAgC;AACpD,iBAAe,EAAE;AACnB;AAYO,SAAS,KAAK,IAAiD;AACpE,QAAM,CAAC,OAAgB;AACrB,UAAM,EAAE,QAAQ,IAAI,GAAG;AACvB,QAAI;AACJ,QAAI,QAAQ,MAAM;AAChB,qBAAe,QAAQ,KAAK,WAAW,UAAU,CAAC,EAAE,MAAM,MAAM;AAC5D,WAAG,OAAO,EAAE;AAAA,MAChB,CAAC;AAAA,IACH;AACA,WAAO,MAAM;AACX,oBAAc,YAAY;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AA8BO,SAAS,EACd,mBACA,QAA0B,CAAC,MACxB,UACY;AACf,QAAM,mBAAmB,oBAAI,IAAkB;AAC/C,QAAM,YAAY,oBAAI,IAAmB;AAEzC,gCAA8B,CAAC,iBAAiB;AAC9C,qBAAiB,IAAI,YAAY;AAAA,EACnC;AAEA,iBAAe,CAAC,OAAY;AAC1B,cAAU,IAAI,EAAE;AAAA,EAClB;AAEA,MAAI,SAAS,CAAC,aAAa,OAAO;AAChC,eAAW,SAAS,CAAC;AAAA,EACvB;AAEA,MAAI,YAAY,kBAAkB,EAAE,GAAG,OAAO,SAAS,CAAC;AAExD,MAAI,CAAC,WAAW;AACd,gBAAY,CAAC;AAAA,EACf;AAEA,YAAU,sBAAsB,MAAM,KAAK,gBAAgB;AAC3D,YAAU,eAAe;AAAA,IACvB,GAAG,MAAM,KAAK,SAAS;AAAA,IACvB,GAAK,UAAkB,gBAAgB,CAAC;AAAA,EAC1C;AAGA,MAAI,qBAAqB,SAAS;AAChC,cAAU,KAAK,CAACC,eAAc;AAC5B,UAAIA,WAAU,MAAM,QAAQ;AAC1B,kBAAU,QAAQ,CAAC,OAAO,GAAGA,UAAS,CAAC;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,gCAA8B;AAC9B,iBAAe;AAEf,SAAO;AACT;;;ACtIO,SAAS,MAAM,OAAO;AACzB,SAAO,EAAEC,UAAS;AACtB;;;ACLA,YAAY,eAAe;AAK3B,IAAM,yBAAN,cAAqC,gBAAgB;AAAA,EAArD;AAAA;AAEE,SAAQ,UAAkB,KAAK,IAAI;AAAA;AAAA,EAEnC,QAAQ,QAAQ;AACd,UAAM,QAAQ,MAAM;AACpB,UAAM,EAAE,MAAM,IAAI;AAClB,UAAMC,QAAe,MAAM,QAAQ;AACnC,SAAK,UAAU,IAAc,kBAAQ,MAAa,MAAM,MAAM;AAG9D,SAAK,mBAAmBA,MAAK,WAAW,UAAU,CAAC,UAAU;AAC3D,UAAI,CAAC,KAAK,QAAS;AACnB,YAAM,MAAM,KAAK,IAAI;AACrB,WAAK,QAAQ,QAAQ,MAAM,KAAK,WAAW,IAAK;AAChD,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,OAAO;AAAA,EAAC;AAAA,EAEjB,YAAkB;AAChB,UAAM,UAAU;AAChB,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU;AACf,SAAK,iBAAiB,YAAY;AAAA,EACpC;AACF;AAEA,kBAAkB,oBAAoB,sBAAsB;AAErD,SAAS,iBAAiB,OAAO;AACtC,SAAO,gBAAgB,oBAAoB,KAAK;AAClD;;;ACtCA,SAAS,UAAU,UAAAC,SAAQ,YAAAC,iBAAwC;AACnE;AAAA,EACE;AAAA,EACA,aAAAC;AAAA,EACA,UAAU;AAAA,EACV,aAAAC;AAAA,EACA,WAAAC;AAAA,OACK;;;ACPP,SAAS,UAAAC,SAAQ,UAAAC,eAAmC;AACpD,SAAS,WAAW,wBAAwB;AAqBrC,SAAS,iBAAiBA,SAAsC;AACrE,SAAQA,QAA0C,kBAAkB;AACtE;AAoBO,SAAS,eAAkB,cAAiB,UAA6B,CAAC,GAAsB;AACrG,QAAM,QAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,EACP;AACA,MAAI;AAEJ,QAAM,eAAeA,QAAO,YAAY;AACxC,QAAM,gBAAgBA,QAAO,KAAK;AAElC,EAAAD,QAAO,MAAM;AACX,UAAM,eAAe,cAAc;AACnC,iBAAa,IAAI,aAAa,OAAO;AAAA,EACvC,CAAC;AAID,WAASE,gBAAe,UAAuC;AAC7D,QAAI,aAAa,QAAW;AAC1B,aAAO,cAAc;AAAA,IACvB;AAEA,UAAM,YAAY,cAAc;AAChC,UAAM,WAA6B;AAAA,MACjC,SAAS,UAAU;AAAA,MACnB,OAAO,UAAU;AAAA,MACjB,KAAK;AAAA,IACP;AAEA,kBAAc,IAAI,QAAQ;AAE1B,QAAI,WAAW;AACb,gBAAU,KAAK;AAAA,IACjB;AAEA,gBAAY,iBAAiB;AAAA;AAAA,MAE1B,UAAU;AAAA,MACX,GAAG;AAAA,MACH,MAAM,UAAU;AAAA,MAChB,IAAI;AAAA,MACJ,UAAU,CAAC,UAAU;AACnB,sBAAc,OAAO,QAAM,EAAE,GAAG,GAAG,SAAS,MAAW,EAAE;AACzD,YAAI,QAAQ,UAAU;AACpB,kBAAQ,SAAS,KAAU;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,KAAK,WAAW;AACpB,WAAO,cAAc,EAAE;AAAA,EACzB;AAEA,aAAW,OAAO,cAAc;AAC9B,OAAG,GAAG,IAAI,aAAa,GAAG;AAAA,EAC5B;AAEA,KAAG,gBAAgB;AACnB,KAAG,SAAS,CAAC,YAA+B;AAC1C,IAAAA,gBAAe,QAAQ,cAAc,EAAE,OAAO,CAAC;AAAA,EACjD;AACA,KAAG,MAAM,CAAC,aAAgB;AACxB,IAAAA,gBAAe,QAAQ;AAAA,EACzB;AAEA,SAAO;AACT;;;ADrFA,IAAM,MAAM,QAAQ;AAgCb,IAAM,eAAN,cAA2B,cAAc,UAAU,EAAE;AAAA,EAArD;AAAA;AAQL,SAAQ,mBAA+C;AACvD,SAAQ,OAAe;AACvB,SAAQ,aAAqB;AAC7B,SAAQ,aAA+C,oBAAI,IAAI;AAE/D,SAAQ,oBAAoC,CAAC;AAC7C,SAAQ,cAAmB,CAAC;AAC5B,SAAQ,wBAAgC;AAGxC,SAAQ,4BAA8C;AAAA;AAAA,EAEtD,MAAc,eACZ,SACsB;AACtB,UAAM,EAAE,OAAO,QAAQ,cAAc,aAAa,OAAO,OAAO,IAAI;AACpE,UAAM,UAAU,MAAM,OAAO,KAAK,KAAK;AACvC,UAAM,cAAc,QAAQ;AAC5B,UAAM,eAAe,QAAQ;AAC7B,UAAM,SAAsB,CAAC;AAC7B,UAAM,UAAW,UAAU,OAAO,KAAM;AACxC,UAAM,UAAW,UAAU,OAAO,KAAM;AACxC,aAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,aAAO,CAAC,IAAI,CAAC;AACb,eAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,cAAM,QAAQ,IAAI,cAAc;AAChC,cAAM,QAAQ,IAAI,eAAe;AACjC,YAAI,QAAQ,QAAQ;AAClB,gBAAM;AAAA,YACJ,uDAAuD,KAAK,EAAE;AAAA,UAChE;AAAA,QACF;AACA,YAAI,QAAQ,OAAO;AACjB,gBAAM;AAAA,YACJ,sDAAsD,KAAK,EAAE;AAAA,UAC/D;AAAA,QACF;AACA,eAAO,CAAC,EAAE;AAAA,UACR,IAAIC,SAAQ;AAAA,YACV,QAAQ,QAAQ;AAAA,YAChB,OAAO,IAAIC,WAAU,OAAO,OAAO,aAAa,YAAY;AAAA,UAC9D,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,mBAAmB;AAC/B,UAAM,EAAE,SAAS,IAAI,KAAK;AAC1B,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,aAAS,iBAAiB,UAAU;AAClC,YAAM,QAAyC;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,YAAY,MAAM;AAAA,QACtB,CAAC,MAAM,SAAS,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,YAAY,GAAG,EAAE;AAAA,QACxD,CAAC;AAAA,MACH;AACA,YAAM,kBAAyC;AAAA,QAC7C,GAAG;AAAA,QACH,GAAG,SAAS,aAAa;AAAA,MAC3B;AACA,YAAM;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR,cAAc;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QACT,eAAe;AAAA,MACjB,IAAI;AACJ,sBAAgB,cAAc,YAAY,YAAY,QAAQ;AAC9D,sBAAgB,eAAe,aAC3B,aACA,SAAS;AACb,WAAK,WAAW,IAAI,eAAe;AAAA,QACjC,QAAQ,MAAM,KAAK;AAAA,UACjB;AAAA,QACF;AAAA,QACA,MAAM;AAAA,QACN,YAAY,SAAS,aAAa,EAAE;AAAA,QACpC,QAAQ,CAAC;AAAA,QACT,MAAM;AAAA,QACN,SAAS,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAA+B;AAC3C,UAAM,EAAE,OAAO,gBAAgB,IAAI;AACnC,UAAMC,QAAe,MAAM,QAAQ;AACnC,UAAM,QAAQ,MAAM,SAAS,CAAC;AAC9B,QAAI,OAAO,UAAU;AACnB,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,SAAK,mBAAmBA,MAAK,WAAW,UAAU,CAAC,UAAU;AAC3D,WAAK,OAAO,KAAK;AAAA,IACnB,CAAC;AACD,QAAI,MAAM,OAAO,YAAY;AAC3B,WAAK,cAAc,MAAM,MAAM;AAC/B,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AACA,QAAI,MAAM,QAAQ;AAChB,eAAS,OAAO,iBAAiB,MAAM,QAAQ,GAAG;AAChD,cAAM,QAAQ,iBAAiB,MAAM,QAAQ,EAAE,GAAG;AAClD,YAAIC,UAAS,KAAK,GAAG;AACnB,eAAK,kBAAkB;AAAA,YACrB,MAAM,WAAW,UAAU,CAACC,WAAU;AACpC,kBAAI,KAAK,WAAW,QAAQ,EAAG;AAC/B,mBAAK,KAAK,KAAK,uBAAuB,CAAC,EAAE,CAAC,GAAG,GAAGA,OAAM,CAAC,CAAC;AAAA,YAC1D,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,eAAK,KAAK,KAAK,uBAAuB,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,SAAS,MAAM;AAC9B,YAAM,EAAE,GAAG,EAAE,IAAI,mBAAmB,CAAC;AACrC,UAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,YAAM,UAAU;AAChB,YAAM,UAAU;AAChB,YAAM,YACJ,iBAAiB,OAAO,KACxB,QAAQ,cAAc,EAAE,YAAY,QAAQ,cAAc,EAAE;AAC9D,YAAM,YACJ,iBAAiB,OAAO,KACxB,QAAQ,cAAc,EAAE,YAAY,QAAQ,cAAc,EAAE;AAC9D,aAAO,aAAa;AAAA,IACtB,CAAC;AAED,IAAAC,QAAO,MAAM;AACX,YAAM,YAAY,SAAS;AAE3B,UAAI,CAAC,KAAK,UAAW;AAErB,UAAI,WAAW;AACb,aAAK,wBAAwB;AAAA,MAC/B,OAAO;AACL,aAAK,wBAAwB;AAAA,MAC/B;AAEA,WAAK,KAAK,KAAK,uBAAuB,CAAC,KAAK,WAAW,CAAC;AAAA,IAC1D,CAAC;AAED,UAAM,QAAQ,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,SAAS,OAAO;AACpB,UAAM,SAAS,KAAK;AAEpB,UAAM,QAAQ,MAAM;AACpB,QAAI,OAAO,OAAQ,MAAK,cAAc,OAAO;AAE7C,QAAI,OAAO,WAAW,KAAK,WAAW;AACpC,WAAK,wBAAwB,OAAO;AACpC,WAAK,KAAK,KAAK,uBAAuB,CAAC,KAAK,WAAW,CAAC;AAAA,IAC1D;AAEA,QAAI,MAAM,OAAQ,MAAK,SAAS,MAAM;AAEtC,QAAI,MAAM,UAAW,MAAK,YAAY,YAAY,MAAM;AAAA,aAC/C,MAAM,SAAS,KAAK,UAAU,cAAc,QAAW;AAC9D,WAAK,UAAU,MAAM,OAAO,KAAK,KAAK,UAAU,KAAK;AAAA,IACvD,WAAW,MAAM,SAAS;AACxB,WAAK,UAAU,MAAM;AAAA,IACvB;AAEA,QAAI,MAAM,cAAc,QAAW;AACjC,YAAM,EAAE,GAAG,GAAG,OAAO,OAAO,IAAI,MAAM,WAAW,SAAS,MAAM;AAChE,YAAM,UAAU,MAAM,OAAO,KAAK,KAAK,UAAU,KAAK;AACtD,WAAK,UAAU,IAAIL,SAAQ;AAAA,QACzB,QAAQ,QAAQ;AAAA,QAChB,OAAO,IAAIC,WAAU,GAAG,GAAG,OAAO,MAAM;AAAA,MAC1C,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,YAAkB;AAChB,UAAM,UAAU;AAChB,SAAK,kBAAkB,QAAQ,CAAC,QAAQ,IAAI,YAAY,CAAC;AACzD,SAAK,iBAAiB,YAAY;AAClC,QAAI,KAAK,6BAA6B,KAAK,kBAAkBK,YAAW;AACtE,WAAK,OAAO,YAAY,KAAK,yBAAyB;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,IAAI,MAAuB;AACzB,WAAO,KAAK,WAAW,IAAI,IAAI;AAAA,EACjC;AAAA,EAEA,IAAI,MAAmC;AACrC,WAAO,KAAK,WAAW,IAAI,IAAI;AAAA,EACjC;AAAA,EAEA,UAAU,MAAwB;AAChC,QAAI,CAAC,KAAM,QAAO,CAAC,CAAC,KAAK;AACzB,QAAI,KAAK,oBAAoB,KAAM,QAAO;AAC1C,WAAO,KAAK,iBAAiB,QAAQ;AAAA,EACvC;AAAA,EAEA,OAAO;AACL,SAAK,mBAAmB;AACxB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,KAAK,MAAc,SAAgB,CAAC,GAAG;AACrC,UAAM,aAAa,KAAK,kBAAkB;AAE1C,QAAI,KAAK,UAAU,IAAI,KAAK,YAAY,QAAQ,cAAc,CAAC,CAAC,EAAG;AAEnE,UAAM,YAAY,KAAK,IAAI,IAAI;AAE/B,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR,0BAA0B,IAAI,+CAA+C,KAAK,EAAE;AAAA,MACtF;AAAA,IACF;AAEA,UAAM,cAAc,gBAAgB,MAAM;AAE1C,SAAK,eAAe;AACpB,cAAU,UAAU,CAAC;AACrB,SAAK,mBAAmB;AACxB,SAAK,iBAAiB,SAAS;AAC/B,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,QAAI,aAAkB,UAAU;AAChC,iBAAa,WAAW,UAAU,IAC7B,WAAwB,GAAG,WAAW,IACvC;AAEJ,SAAK,4BAA4B,IAAIA,WAAU;AAE/C,aAAS,aAAa,YAAuC;AAC3D,YAAM,SAAS,IAAI,WAAW;AAC9B,eAAS,SAAS,WAAW;AAC3B,aAAK,iBAAiB,QAAQ,KAAK,KAAK;AAAA,MAC1C;AACA,WAAK,0BAA0B,SAAS,MAAM;AAAA,IAChD;AAEA,UAAM,QAAQ,KAAK,iBAAiB,KAAK;AAEzC,QAAI,OAAO;AAAA,IAEX;AAGA,SAAK,OAAO;AAAA,MACV,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,EAAE,WAAW,GAAG;AACrB,QACE,CAAC,KAAK,UAAU,KAChB,CAAC,KAAK,oBACN,CAAC,KAAK;AAEN;AAEF,UAAM,OAAO;AACb,UAAM,EAAE,QAAQ,SAAS,KAAK,IAAI,KAAK;AACvC,QAAI,QAAQ,QAAQ,KAAK,UAAU;AACnC,UAAM,YAAY,QAAQ,KAAK,aAAa,CAAC;AAE7C,aAAS,WAAW,KAAK,0BAA0B,UAAU;AA6B3D,UAAS,sBAAT,SACE,MACA,OACM;AACN,cAAM,aAAa,SAAS;AAC5B,cAAM,MAAM,OAAU,UAAU;AAChC,YAAI,QAAQ,QAAW;AACrB,eAAK,IAAc,IAAI;AAAA,QACzB;AAAA,MACF;AArCA,YAAM,SAAS;AAEf,UAAI,CAAC,SAAS,MAAM,UAAU,UAAa,MAAM,UAAU,QAAW;AACpE;AAAA,MACF;AAEA,WAAK,UAAU,OAAO,MAAM,MAAM,EAAE,MAAM,MAAM;AAEhD,YAAM,SAAS,CACb,SACoC;AACpC,eAAO,MAAM,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,YAAY,IAAI;AAAA,MAC3D;AAEA,YAAM,iBAAiB,CACrB,SACS;AACT,cAAM,MAAM,OAAU,IAAI;AAC1B,YAAI,KAAK;AACP,eAAK,IAAc,EAAE,IAAI,GAAG,GAAI;AAAA,QAClC;AAAA,MACF;AAkBA,UAAI,KAAK,gBAAgB;AACvB,gBAAQ;AAAA,UACN,GAAG;AAAA,UACH,GAAG,KAAK,eAAe,OAAO,MAAM,KAAK,WAAW;AAAA,QACtD;AAAA,MACF;AAEA,YAAM,WAAW,OAAyB,gBAAgB;AAC1D,YAAM,iBACJ,OAAO,YAAY,WAAW,WAAW,UAAU;AACrD,YAAM,gBACJ,OAAO,YAAY,WAAW,WAAW,UAAU;AAErD,YAAM,oBAAoB,MAAM;AAC9B,YAAI,kBAAkB,KAAK,QAAQ;AACjC,gBAAM,EAAE,aAAa,aAAa,IAAI;AACtC,gBAAM,KAAK,cAAc,KAAK,OAAO,KAAK,IAAI;AAC9C,gBAAM,OAAO,eAAe,kBAAkB;AAC9C,gBAAMC,MAAK,eAAe,KAAK,OAAO,IAAI,OAAO;AACjD,eAAK,OAAO,IAAI,GAAGA,EAAC;AAAA,QACtB;AAAA,MACF;AAEA,UAAI,MAAM,OAAO;AAAA,MAEjB;AAEA,wBAAkB;AAElB,qBAAe,QAAQ;AACvB,qBAAe,OAAO;AACtB,qBAAe,MAAM;AACrB,qBAAe,OAAO;AAEtB,0BAAoB,SAAS,SAAS;AACtC,0BAAoB,GAAG;AACvB,0BAAoB,GAAG;AACvB,0BAAoB,OAAO;AAC3B,0BAAoB,UAAU;AAC9B,0BAAoB,SAAS;AAAA,IAC/B;AAEA,QAAI,CAAC,WAAW;AACd,WAAK,OAAO;AACZ,WAAK,aAAa;AAClB,UAAI,KAAK,YAAY,QAAQ,SAAS,EAAG,MAAK,SAAS;AACvD;AAAA,IACF;AAEA,SAAK,QAAQ,cAAc;AAE3B,QAAI,KAAK,QAAQ,UAAU,MAAM;AAC/B,WAAK;AAAA,IACP;AAAA,EACF;AACF;AAIA,kBAAkB,UAAU,YAAY;AA8CjC,IAAMC,UAA6C,CAAC,UAAU;AACnE,SAAO,gBAAgB,UAAU,KAAK;AACxC;;;AE5eA,SAAS,QAAQ,gBAA2B;;;ACA5C,SAAS,UAAAC,SAAQ,UAAAC,eAAc;AAYxB,SAAS,UAAU,KAA+B;AACvD,SAAO,KAAK,SAAS,KAAK;AAC5B;AAEO,SAAS,QAAiB,QAAwB;AACvD,QAAM,UAAUA,QAAO,CAAC;AACxB,SAAO;AAAA,IACL,OAAO,MAAM;AACX,cAAQ,IAAI,KAAK,OAAO,CAAC;AAAA,IAC3B;AAAA,IACA,QAAQ,MAA6B;AACnC,aAAO;AAAA,QACL;AAAA,QACA,MAAM,QAAQ;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,GAAG,eAAoB,UAAiC;AACtE,MAAI,CAAC,UAAU,aAAa,GAAG;AAC7B,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,EAAAD,QAAO,MAAM;AACX,UAAM,SAAS,cAAc,OAAO;AACpC,QAAI,QAAQ,KAAM,UAAS,OAAO,MAAM;AAAA,EAC1C,CAAC;AACH;;;ADdA,IAAM,aAAN,cAAyB,cAAc,QAAQ,EAAE;AAAA,EAAjD;AAAA;AAEE,SAAQ,WAAmB;AAC3B,SAAQ,eAAuB;AAC/B,SAAQ,kBAA0B;AAClC;AAAA,SAAQ,iBAAyB;AACjC,SAAQ,oBAAyB,CAAC;AAAA;AAAA,EAGlC,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,UAAM,EAAE,MAAM,IAAI;AAClB,UAAME,QAAe,MAAM,QAAQ;AAEnC,QAAI,MAAM,QAAQ,MAAM,YAAY;AAClC,WAAK,WAAW,MAAM;AACtB,WAAK,OAAO;AACZ,WAAK,eAAe;AAEpB,UAAI,MAAM,YAAY;AACpB,aAAK,oBAAoB,MAAM;AAC/B,YAAI,KAAK,kBAAkB,MAAM;AAC/B,aAAG,KAAK,kBAAkB,MAAM,MAAM;AACpC,iBAAK,eAAe;AAAA,UACtB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,SAAK,mBAAmBA,MAAK,WAAW,UAAU,MAAM;AACtD,UAAI,MAAM,YAAY;AACpB,aAAK,iBAAiB;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,OAAkB;AACzB,UAAM,SAAS,KAAK;AACpB,QAAI,MAAM,YAAY;AACpB,UAAI,MAAM,YAAY;AACpB,aAAK,oBAAoB,MAAM;AAAA,MACjC;AAAA,IACF;AACA,QAAI,MAAM,MAAM;AACd,WAAK,OAAO,MAAM;AAAA,IACpB;AACA,QAAI,MAAM,SAAS,UAAa,MAAM,SAAS,KAAK,YAAY,KAAK,UAAU,YAAY;AACzF,WAAK,OAAO;AACZ,WAAK,eAAe;AACpB,WAAK,WAAW,MAAM;AAAA,IACxB;AACA,QAAI,MAAM,OAAO;AACf,iBAAW,OAAO,MAAM,OAAO;AAC7B,aAAK,MAAM,GAAG,IAAI,MAAM,MAAM,GAAG;AAAA,MACnC;AACA,UAAI,MAAM,MAAM,eAAe;AAC7B,aAAK,iBAAiB,MAAM,MAAM;AAAA,MACpC;AAAA,IACF;AACA,QAAI,MAAM,OAAO;AACf,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AACA,QAAI,MAAM,MAAM;AACd,WAAK,MAAM,WAAW,MAAM;AAAA,IAC9B;AACA,QAAI,MAAM,YAAY;AACpB,WAAK,MAAM,aAAa,MAAM;AAAA,IAChC;AACA,QAAI,KAAK,gBAAgB;AACvB,WAAK,SAAS,KAAK,cAAc;AAAA,IACnC,OAAO;AACL,WAAK,SAAS,KAAK,KAAK;AAAA,IAC1B;AACA,SAAK,UAAU,KAAK,MAAM;AAAA,EAC5B;AAAA,EAEA,IAAI,qBAAqB;AACvB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEQ,mBAAmB;AACzB,QAAI,KAAK,eAAe,KAAK,SAAS,QAAQ;AAC5C,YAAM,YAAY,KAAK;AAAA,QACrB,KAAK,gBAAgB,KAAK,kBAAkB,SAAS;AAAA,QACrD,KAAK,SAAS;AAAA,MAChB;AACA,WAAK,OAAO,KAAK,SAAS,MAAM,GAAG,SAAS;AAC5C,WAAK,eAAe;AAGpB,UACE,KAAK,iBAAiB,KAAK,SAAS,UACpC,KAAK,oBACL;AACA,aAAK,mBAAmB;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGQ,iBAAiB;AACvB,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW;AAAA,IAClB;AACA,SAAK,OAAO,KAAK;AACjB,SAAK,eAAe,KAAK,SAAS;AAAA,EACpC;AAAA,EAEA,YAAkB;AAChB,UAAM,UAAU;AAChB,SAAK,iBAAiB,YAAY;AAAA,EACpC;AACF;AAIA,kBAAkB,QAAQ,UAAU;AAE7B,SAAS,KAAK,OAAkB;AACrC,SAAO,gBAAgB,QAAQ,KAAK;AACtC;;;AEhJA,SAAS,gBAAgB,kBAAkB,WAAAC,gBAAe;AAa1D,IAAM,qBAAN,cAAiC,cAAc,gBAAgB,EAAE;AAAA,EAC7D,SAAS,OAAgC;AACrC,UAAM,SAAS,KAAK;AACpB,QAAI,MAAM,OAAO;AACb,WAAK,UAAUC,SAAQ,KAAK,MAAM,KAAK;AAAA,IAC3C;AACA,QAAI,MAAM,WAAW;AACjB,WAAK,UAAU,IAAI,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;AAAA,IAC3D;AACA,QAAI,MAAM,cAAc;AACpB,WAAK,aAAa,IAAI,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;AAAA,IACpE;AACA,QAAI,MAAM,UAAU,QAAW;AAC3B,WAAK,QAAQ,MAAM;AAAA,IACvB;AACA,QAAI,MAAM,WAAW,QAAW;AAC5B,WAAK,SAAS,MAAM;AAAA,IACxB;AAAA,EACJ;AACJ;AAEA,kBAAkB,gBAAgB,kBAAkB;AAE7C,SAAS,aAAa,OAA0B;AACnD,SAAO,gBAAgB,gBAAgB,KAAK;AAChD;;;ACtCA,SAAS,YAAY,oBAAoB;AAIzC,SAAS,UAAAC,eAAc;AAEvB,IAAMC,UAAS;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,iBAAN,cAA6B,cAAc,YAAY,EAAE;AAAA,EAI5D,cAAc;AACV,UAAM,iBAAiB;AAAA,MACnB,UAAU;AAAA,MACV,QAAQ;AAAA,QACJ,YAAY;AAAA,UACR,kBAAkB,MAAM;AAAA,UAAC;AAAA,QAC7B;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,cAAc;AAZxB,yBAAgB,CAAC,OAAO;AAAA,EAaxB;AAAA,EAEA,OAAO,OAAO;AACV,UAAM,OAAO,KAAK;AAClB,aAAS,SAASA,SAAQ;AACtB,YAAM,iBAAiB,MAAM,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC;AAC3E,UAAI,MAAM,cAAc,GAAG;AACvB,aAAK,GAAG,OAAO,MAAM,cAAc,CAAC;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,QAAQ,SAAS;AACb,UAAM,QAAQ,OAAO;AACrB,UAAM,EAAE,MAAAC,OAAM,UAAU,WAAW,IAAI,QAAQ,MAAM;AACrD,QAAI,aAAa;AAEjB,IAAAF,QAAO,MAAM;AACT,WAAK,cAAc,WAAW,EAAE;AAChC,WAAK,eAAe,WAAW,EAAE;AAAA,IACrC,CAAC;AAED,aAAS,OAAO,WAAW;AAAA,MACvB;AAAA,MACA,KAAK,MAAM;AAAA,IACf;AACA,SAAK,QAAQ,SAAS,SAAS;AAE/B,SAAK,mBAAmBE,MAAK,WAAW,UAAU,CAAC,EAAE,MAAM,MAAM;AAC7D,WAAK,OAAO,MAAM,SAAS;AAAA,IAC/B,CAAC;AAED,YAAQ,MAAM,QAAQ,WAAW;AACjC,SAAK,uBAAuB,QAAQ,KAAK;AAAA,EAC7C;AAAA,EAEA,SAAS,OAAO;AACZ,UAAM,SAAS,KAAK;AACpB,SAAK,uBAAuB,KAAK;AAAA,EACrC;AAAA,EAEQ,uBAAuB,OAAO;AAClC,QAAI,MAAM,gBAAgB,QAAW;AACjC,WAAK,cAAc,MAAM;AAAA,IAC7B;AACA,QAAI,MAAM,iBAAiB,QAAW;AAClC,WAAK,eAAe,MAAM;AAAA,IAC9B;AACA,QAAI,MAAM,eAAe,QAAW;AAChC,WAAK,aAAa,MAAM;AAAA,IAC5B;AACA,QAAI,MAAM,gBAAgB,QAAW;AACjC,WAAK,cAAc,MAAM;AAAA,IAC7B;AAQA,QAAI,MAAM,OAAO;AACb,WAAK,MAAM,MAAM,KAAK;AAAA,IAC1B;AACA,QAAI,MAAM,OAAO;AACb,UAAI,MAAM,UAAU,MAAM;AACtB,aAAK,MAAM;AAAA,MACf,OAAO;AACH,aAAK,MAAM,MAAM,KAAK;AAAA,MAC1B;AAAA,IACJ;AACA,QAAI,MAAM,YAAY;AAClB,UAAI,MAAM,eAAe,MAAM;AAC3B,aAAK,WAAW;AAAA,MACpB,OAAO;AACH,aAAK,WAAW,MAAM,UAAU;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,MAAM,OAAO;AACb,UAAI,MAAM,UAAU,MAAM;AACtB,aAAK,MAAM;AAAA,MACf,OAAO;AACH,aAAK,MAAM,MAAM,KAAK;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,YAAkB;AACd,UAAM,UAAU;AAChB,SAAK,iBAAiB,YAAY;AAAA,EACtC;AACJ;AAIA,kBAAkB,YAAY,cAAc;AAgBrC,SAAS,SAAS,OAAsB;AAC3C,SAAO,gBAAgB,YAAY,KAAK;AAC5C;;;AC9JA,SAAS,UAAAC,SAAQ,mBAAmB,2BAAoC;AAiBxE,IAAM,wBAAN,cAAoC,cAAc,mBAAmB,EAAE;AAAA,EACrE,cAAc;AAEZ,UAAM;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,OAA6B;AAC1C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,UAAI,UAAU,QAAW;AACvB,YAAI,QAAQ,SAAS;AACnB,eAAK,UAAU,MAAMC,QAAO,KAAK,KAAK;AAAA,QACxC,WAAW,OAAO,MAAM;AACtB,UAAC,KAAa,GAAG,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAIA,kBAAkB,mBAAmB,qBAAqB;AAEnD,SAAS,gBAAgB,OAA6B;AAC3D,SAAO,gBAAgB,mBAAmB,KAAK;AACjD;;;ACnCO,IAAM,kBAAkB,OAAO,aAAiC,WAAmC;AACxG,QAAM,gBAAgB,MAAM,EAAE,MAAM;AACpC,MAAI,cAAc,OAAO,UAAU;AACjC,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,EAAC,cAAsB,OAAO,WAAW;AAEzC,SAAO;AACT;;;AClBA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAEA,IAAM,SAAS;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;;;AChCA,SAAS,WAAAC,UAAS,aAAa,YAAY,cAAc;AAElD,IAAM,iBAAN,MAAqB;AAAA,EAS1B,YACU,IACA,IACA,IACA,IACA,IACA,IACA,aAAqB,GAC7B;AAPQ;AACA;AACA;AACA;AACA;AACA;AACA;AAbV,SAAQ,WAAkC;AAC1C,SAAQ,UAA0B;AAGlC,SAAO,OAAO;AAWZ,SAAK,OAAO;AACZ,UAAM,WAAW,KAAK,OAAO;AAE7B,SAAK,SAAS,WAAW,IAAI,EAAE,aAAa;AAC5C,SAAK,OAAO,QAAQ,KAAK;AACzB,SAAK,OAAO,SAAS,KAAK;AAC1B,SAAK,MAAM,KAAK,OAAO,WAAW,IAAI;AAEtC,QAAI,KAAK,KAAK;AACZ,WAAK,WAAW,KAAK,IAAI;AAAA,QACvB,YAAY,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa,QAAgB,OAAe;AAC1C,QAAI,KAAK,UAAU;AACjB,WAAK,SAAS,aAAa,QAAQ,KAAK;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,UAAU,IAA8C,CAAC,GAAG;AACnE,UAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,WAAW,IAAI;AAC/C,UAAM,cAAc,KAAK;AACzB,QAAI,KAAK,OAAO,KAAK,UAAU;AAC7B,WAAK,IAAI,YAAY,KAAK;AAC1B,WAAK,IAAI,SAAS,GAAG,GAAG,aAAa,WAAW;AAEhD,WAAK,UAAU,IAAIA,SAAQ;AAAA,QACzB,QAAQ,IAAI,YAAY;AAAA,UACtB,UAAU,KAAK;AAAA,UACf,cAAc;AAAA,UACd,cAAc;AAAA,QAChB,CAAC;AAAA,MACH,CAAC;AAED,YAAM,IAAI,IAAI,OAAO;AACrB,YAAM,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,GAAG;AAClE,YAAM,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,GAAG;AAClE,YAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AAGzC,YAAM,SAAS,KAAK;AACpB,YAAM,SAAS,KAAK;AAGpB,QAAE,OAAO,CAAC,KAAK;AACf,QAAE,MAAM,QAAQ,MAAM;AACtB,UAAI,WAAW;AACb,UAAE,UAAU,UAAU,GAAG,UAAU,CAAC;AAAA,MACtC;AAEA,WAAK,YAAY;AAAA,IACnB;AAEA,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AACF;;;AnBxEA,SAAS,oBAAoB;","names":["loop","tick","loop","volume","effect","effect","signal","Container","isSignal","props","path","isSignal","value","element","components","comp","isSignal","isSignal","effect","signal","EVENTS","signal","effect","Container","Canvas","signal","effect","h","Container","effect","effect","component","Container","tick","effect","isSignal","Container","Rectangle","Texture","effect","signal","animatedSignal","Texture","Rectangle","tick","isSignal","value","effect","Container","h","Sprite","effect","signal","tick","Texture","Texture","effect","EVENTS","tick","Assets","Assets","Texture"]}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,17 @@
1
+ export declare const Easing: {
2
+ linear: import('popmotion').Easing;
3
+ easeIn: import('popmotion').Easing;
4
+ easeInOut: import('popmotion').Easing;
5
+ easeOut: import('popmotion').Easing;
6
+ circIn: import('popmotion').Easing;
7
+ circInOut: import('popmotion').Easing;
8
+ circOut: import('popmotion').Easing;
9
+ backIn: import('popmotion').Easing;
10
+ backInOut: import('popmotion').Easing;
11
+ backOut: import('popmotion').Easing;
12
+ anticipate: import('popmotion').Easing;
13
+ bounceIn: import('popmotion').Easing;
14
+ bounceInOut: (p: number) => number;
15
+ bounceOut: (p: number) => number;
16
+ };
17
+ //# sourceMappingURL=Ease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ease.d.ts","sourceRoot":"","sources":["../../src/utils/Ease.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;CAelB,CAAA"}
@@ -0,0 +1,58 @@
1
+ import { Texture, Matrix } from 'pixi.js';
2
+
3
+ /**
4
+ * Creates a radial gradient texture that can be used in PixiJS.
5
+ * @example
6
+ * const gradient = new RadialGradient(size, size, 0, size, size, 0);
7
+ * gradient.addColorStop(0, "rgba(255, 255, 0, 1)");
8
+ * gradient.addColorStop(0.5, "rgba(255, 255, 0, 0.3)");
9
+ * gradient.addColorStop(0.8, "rgba(255, 255, 0, 0)");
10
+ */
11
+ export declare class RadialGradient {
12
+ private x0;
13
+ private y0;
14
+ private x1;
15
+ private y1;
16
+ private x2;
17
+ private y2;
18
+ private focalPoint;
19
+ private canvas;
20
+ private ctx;
21
+ private gradient;
22
+ private texture;
23
+ transform: Matrix;
24
+ size: number;
25
+ /**
26
+ * Creates a new RadialGradient instance
27
+ * @param x0 - The x-coordinate of the starting circle
28
+ * @param y0 - The y-coordinate of the starting circle
29
+ * @param x1 - The x-coordinate of the ending circle
30
+ * @param y1 - The y-coordinate of the ending circle
31
+ * @param x2 - The x-coordinate for gradient transformation
32
+ * @param y2 - The y-coordinate for gradient transformation
33
+ * @param focalPoint - The focal point of the gradient (0-1), defaults to 0
34
+ */
35
+ constructor(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, focalPoint?: number);
36
+ /**
37
+ * Adds a color stop to the gradient
38
+ * @param offset - The position of the color stop (0-1)
39
+ * @param color - The color value (any valid CSS color string)
40
+ */
41
+ addColorStop(offset: number, color: string): void;
42
+ /**
43
+ * Renders the gradient and returns the texture with its transformation matrix
44
+ * @param options - Render options
45
+ * @param options.translate - Optional translation coordinates
46
+ * @returns Object containing the texture and transformation matrix
47
+ */
48
+ render({ translate }?: {
49
+ translate?: {
50
+ x: number;
51
+ y: number;
52
+ };
53
+ }): {
54
+ texture: Texture<import('pixi.js').TextureSource<any>>;
55
+ matrix: Matrix;
56
+ };
57
+ }
58
+ //# sourceMappingURL=RadialGradient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadialGradient.d.ts","sourceRoot":"","sources":["../../src/utils/RadialGradient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;GAOG;AACH,qBAAa,cAAc;IAoBvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAzBpB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAwB;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,IAAI,SAAO;IAElB;;;;;;;;;OASG;gBAEO,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,UAAU,GAAE,MAAU;IAsBhC;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAM1C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,GAAE;QAAE,SAAS,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAO;;;;CAuCpE"}
@@ -0,0 +1,2 @@
1
+ export declare function isPercent(value?: string | number): boolean;
2
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/utils/functions.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,WAMhD"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ declare module '*.ce' {
2
+ const content: import("./dist/index").ComponentFunction;
3
+ export default content;
4
+ }
package/package.json CHANGED
@@ -1,22 +1,27 @@
1
1
  {
2
2
  "name": "canvasengine",
3
- "version": "2.0.0-beta.3",
3
+ "version": "2.0.0-beta.31",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "peerDependencies": {
8
+ "pixi.js": "^8.9.2"
9
+ },
7
10
  "dependencies": {
8
11
  "@barvynkoa/particle-emitter": "^0.0.1",
9
- "@signe/reactive": "^1.0.1",
12
+ "@pixi/layout": "^3.0.2",
13
+ "@signe/reactive": "^2.3.3",
10
14
  "howler": "^2.2.4",
11
15
  "pixi-filters": "^6.0.5",
12
16
  "pixi-viewport": "^6.0.3",
13
- "pixi.js": "^8.6.4",
14
17
  "popmotion": "^11.0.5",
15
18
  "rxjs": "^7.8.1",
16
- "yoga-layout": "^2.0.1"
19
+ "yoga-layout": "^3.2.1"
17
20
  },
18
21
  "devDependencies": {
19
- "@types/howler": "^2.2.11"
22
+ "@types/howler": "^2.2.11",
23
+ "vite": "^5.0.0",
24
+ "vite-plugin-dts": "^3.0.0"
20
25
  },
21
26
  "author": "Samuel Ronce",
22
27
  "license": "MIT",
@@ -38,7 +43,7 @@
38
43
  "access": "public"
39
44
  },
40
45
  "scripts": {
41
- "build": "tsup",
42
- "dev": "tsup --watch"
46
+ "build": "vite build",
47
+ "dev": "vite build --watch"
43
48
  }
44
49
  }