angular-three-soba 4.2.1 → 4.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-gizmos.mjs","sources":["../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-helper.ts","../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-viewcube.ts","../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-viewport.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/axis-arrow.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/axis-rotator.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/plane-slider.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/scaling-sphere.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/pivot-controls.ts","../../../../libs/soba/gizmos/src/lib/transform-controls.ts","../../../../libs/soba/gizmos/src/angular-three-soba-gizmos.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tInjector,\n\tinput,\n\toutput,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, hasListener, injectStore, NgtPortal, NgtPortalAutoRender, pick } from 'angular-three';\nimport { NgtsOrthographicCamera } from 'angular-three-soba/cameras';\nimport CameraControls from 'camera-controls';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { OrbitControls } from 'three-stdlib';\n\nconst turnRate = 2 * Math.PI; // turn rate in angles per second\nconst dummy = new THREE.Object3D();\nconst matrix = new THREE.Matrix4();\nconst [q1, q2] = [new THREE.Quaternion(), new THREE.Quaternion()];\nconst target = new THREE.Vector3();\nconst targetPosition = new THREE.Vector3();\n\n/**\n * A directive that marks a template as gizmo helper content.\n *\n * Use this directive on an ng-template to provide custom content for the\n * gizmo helper. The template context provides access to the container object\n * and the portal's injector.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent let-container=\"container\">\n * <ngts-gizmo-viewport />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Directive({ selector: 'ng-template[gizmoHelperContent]' })\nexport class NgtsGizmoHelperContent {\n\t/**\n\t * Type guard for the template context.\n\t *\n\t * @param _ - The directive instance\n\t * @param ctx - The template context\n\t * @returns True if the context matches the expected shape\n\t */\n\tstatic ngTemplateContextGuard(\n\t\t_: NgtsGizmoHelperContent,\n\t\tctx: unknown,\n\t): ctx is { container: THREE.Object3D; injector: Injector } {\n\t\treturn true;\n\t}\n}\n\n/**\n * Internal interface for controls with update and target capabilities.\n */\ntype ControlsProto = { update(delta?: number): void; target: THREE.Vector3 };\n\n/**\n * Configuration options for the NgtsGizmoHelper component.\n *\n * These options control the positioning and rendering behavior of the gizmo helper.\n */\nexport interface NgtsGizmoHelperOptions {\n\t/**\n\t * The position of the gizmo helper in the viewport.\n\t * @default 'bottom-right'\n\t */\n\talignment:\n\t\t| 'top-left'\n\t\t| 'top-right'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'bottom-center'\n\t\t| 'center-right'\n\t\t| 'center-left'\n\t\t| 'center-center'\n\t\t| 'top-center';\n\t/**\n\t * Margin from the edge of the viewport in pixels [x, y].\n\t * @default [80, 80]\n\t */\n\tmargin: [number, number];\n\t/**\n\t * Render priority for the gizmo portal.\n\t * @default 1\n\t */\n\trenderPriority: number;\n\t/**\n\t * Whether to auto-clear the renderer before rendering the gizmo.\n\t */\n\tautoClear?: boolean;\n}\n\nconst defaultOptions: NgtsGizmoHelperOptions = {\n\talignment: 'bottom-right',\n\tmargin: [80, 80],\n\trenderPriority: 1,\n};\n\n/**\n * A component that displays an orientation gizmo helper in a corner of the viewport.\n *\n * The gizmo helper provides a visual indicator of the current camera orientation\n * and allows users to click on axes to animate the camera to predefined views.\n * It renders in a separate portal with its own orthographic camera.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper [options]=\"{ alignment: 'bottom-right', margin: [80, 80] }\">\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewport />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n *\n * @example\n * ```html\n * <ngts-gizmo-helper [options]=\"{ alignment: 'top-left' }\">\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewcube />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-helper',\n\ttemplate: `\n\t\t@let _renderPriority = renderPriority();\n\n\t\t<ngt-portal\n\t\t\t[container]=\"scene\"\n\t\t\t[autoRender]=\"_renderPriority\"\n\t\t\t[state]=\"{ events: { priority: _renderPriority + 1 } }\"\n\t\t>\n\t\t\t<ng-template portalContent let-injector=\"injector\">\n\t\t\t\t<ngts-orthographic-camera [options]=\"{ makeDefault: true, position: [0, 0, 200] }\" />\n\t\t\t\t<ngt-group #gizmo [position]=\"[x(), y(), 0]\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"content()\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ container: scene, injector }\"\n\t\t\t\t\t\t[ngTemplateOutletInjector]=\"injector\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-group>\n\t\t\t</ng-template>\n\t\t</ngt-portal>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtPortal, NgtPortalAutoRender, NgtsOrthographicCamera, NgTemplateOutlet],\n})\nexport class NgtsGizmoHelperImpl {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tupdate = output<void>();\n\n\tprotected renderPriority = pick(this.options, 'renderPriority');\n\tprotected margin = pick(this.options, 'margin');\n\tprotected alignment = pick(this.options, 'alignment');\n\n\tprotected scene = new THREE.Scene();\n\n\tprotected content = contentChild.required(NgtsGizmoHelperContent, { read: TemplateRef });\n\n\tprivate gizmoRef = viewChild<ElementRef<THREE.Group>>('gizmo');\n\tprivate virtualCameraRef = viewChild(NgtsOrthographicCamera);\n\n\tprivate store = injectStore();\n\n\tprotected x = computed(() => {\n\t\tconst alignment = this.alignment();\n\t\tif (alignment.endsWith('-center')) return 0;\n\n\t\tconst [width, [marginX]] = [this.store.size.width(), this.margin()];\n\t\treturn alignment.endsWith('-left') ? -width / 2 + marginX : width / 2 - marginX;\n\t});\n\tprotected y = computed(() => {\n\t\tconst alignment = this.alignment();\n\t\tif (alignment.startsWith('center-')) return 0;\n\n\t\tconst [height, [marginY]] = [this.store.size.height(), this.margin()];\n\t\treturn alignment.startsWith('top-') ? height / 2 - marginY : -height / 2 + marginY;\n\t});\n\n\tprivate animating = false;\n\tprivate radius = 0;\n\tprivate focusPoint = new THREE.Vector3(0, 0, 0);\n\tprivate defaultUp = new THREE.Vector3(0, 0, 0);\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tthis.updateDefaultUpEffect();\n\t\t});\n\n\t\tbeforeRender(({ delta }) => {\n\t\t\tconst [virtualCamera, gizmo] = [\n\t\t\t\tthis.virtualCameraRef()?.cameraRef()?.nativeElement,\n\t\t\t\tthis.gizmoRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tif (!virtualCamera || !gizmo) return;\n\n\t\t\tconst [defaultControls, mainCamera, invalidate] = [\n\t\t\t\tthis.store.snapshot.controls as unknown as ControlsProto,\n\t\t\t\tthis.store.snapshot.camera,\n\t\t\t\tthis.store.snapshot.invalidate,\n\t\t\t];\n\n\t\t\t// Animate step\n\t\t\tif (this.animating) {\n\t\t\t\tif (q1.angleTo(q2) < 0.01) {\n\t\t\t\t\tthis.animating = false;\n\t\t\t\t\t// Orbit controls uses UP vector as the orbit axes,\n\t\t\t\t\t// so we need to reset it after the animation is done\n\t\t\t\t\t// moving it around for the controls to work correctly\n\t\t\t\t\tif (this.isOrbitControls(defaultControls)) {\n\t\t\t\t\t\tmainCamera.up.copy(this.defaultUp);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst step = delta * turnRate;\n\t\t\t\t\t// animate position by doing a slerp and then scaling the position on the unit sphere\n\t\t\t\t\tq1.rotateTowards(q2, step);\n\t\t\t\t\t// animate orientation\n\t\t\t\t\tmainCamera.position\n\t\t\t\t\t\t.set(0, 0, 1)\n\t\t\t\t\t\t.applyQuaternion(q1)\n\t\t\t\t\t\t.multiplyScalar(this.radius)\n\t\t\t\t\t\t.add(this.focusPoint);\n\t\t\t\t\tmainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();\n\t\t\t\t\tmainCamera.quaternion.copy(q1);\n\n\t\t\t\t\tif (this.isCameraControls(defaultControls)) {\n\t\t\t\t\t\tvoid defaultControls.setPosition(\n\t\t\t\t\t\t\tmainCamera.position.x,\n\t\t\t\t\t\t\tmainCamera.position.y,\n\t\t\t\t\t\t\tmainCamera.position.z,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (hasListener(this.update)) this.update.emit();\n\t\t\t\t\telse if (defaultControls) defaultControls.update(delta);\n\n\t\t\t\t\tinvalidate();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sync Gizmo with main camera orientation\n\t\t\tmatrix.copy(mainCamera.matrix).invert();\n\t\t\tgizmo.quaternion.setFromRotationMatrix(matrix);\n\t\t});\n\t}\n\n\t/**\n\t * Animates the main camera to look from a specific direction.\n\t *\n\t * @param direction - The direction vector to look from\n\t */\n\ttweenCamera(direction: THREE.Vector3) {\n\t\tconst [defaultControls, invalidate, mainCamera] = [\n\t\t\tthis.store.snapshot.controls as unknown as ControlsProto,\n\t\t\tthis.store.snapshot.invalidate,\n\t\t\tthis.store.snapshot.camera,\n\t\t];\n\n\t\tthis.animating = true;\n\t\tif (defaultControls) {\n\t\t\tthis.focusPoint = this.isCameraControls(defaultControls)\n\t\t\t\t? defaultControls.getTarget(this.focusPoint)\n\t\t\t\t: defaultControls.target;\n\t\t}\n\t\tthis.radius = mainCamera.position.distanceTo(target);\n\n\t\t// Rotate from current camera orientation\n\t\tq1.copy(mainCamera.quaternion);\n\n\t\t// To new current camera orientation\n\t\ttargetPosition.copy(direction).multiplyScalar(this.radius).add(target);\n\t\tdummy.lookAt(targetPosition);\n\t\tq2.copy(dummy.quaternion);\n\n\t\tinvalidate();\n\t}\n\n\tprivate updateDefaultUpEffect() {\n\t\tconst mainCamera = this.store.camera();\n\t\tthis.defaultUp.copy(mainCamera.up);\n\t\tdummy.up.copy(mainCamera.up);\n\t}\n\n\tprivate isOrbitControls(controls: ControlsProto): controls is OrbitControls {\n\t\treturn 'minPolarAngle' in (controls as OrbitControls);\n\t}\n\n\tprivate isCameraControls(controls: CameraControls | ControlsProto): controls is CameraControls {\n\t\treturn 'getTarget' in (controls as CameraControls);\n\t}\n}\n\n/**\n * Combined export of the gizmo helper component and content directive.\n *\n * Use this as an import to get both NgtsGizmoHelperImpl and NgtsGizmoHelperContent.\n */\nexport const NgtsGizmoHelper = [NgtsGizmoHelperImpl, NgtsGizmoHelperContent] as const;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDOCUMENT,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetEmitter,\n\thasListener,\n\tinjectStore,\n\tNgtArgs,\n\tNgtEventHandlers,\n\tNgtThreeEvent,\n\tobjectEvents,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BoxGeometry, Group, Mesh, MeshBasicMaterial } from 'three';\nimport { NgtsGizmoHelperImpl } from './gizmo-helper';\n\n/**\n * Tuple type for [x, y, z] coordinates.\n */\ntype XYZ = [number, number, number];\n\nconst colors = { bg: '#f0f0f0', hover: '#999', text: 'black', stroke: 'black' };\nconst defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'];\n\n/**\n * Common configuration options shared between viewcube components.\n *\n * These options control the visual appearance of the viewcube faces and labels.\n */\nexport interface NgtsViewcubeCommonOptions {\n\t/**\n\t * CSS font specification for face labels.\n\t * @default '20px Inter var, Arial, sans-serif'\n\t */\n\tfont: string;\n\t/**\n\t * Opacity of the cube faces.\n\t * @default 1\n\t */\n\topacity: number;\n\t/**\n\t * Background color of the cube faces.\n\t * @default '#f0f0f0'\n\t */\n\tcolor: string;\n\t/**\n\t * Color when a face is hovered.\n\t * @default '#999'\n\t */\n\thoverColor: string;\n\t/**\n\t * Color of the face label text.\n\t * @default 'black'\n\t */\n\ttextColor: string;\n\t/**\n\t * Color of the face border stroke.\n\t * @default 'black'\n\t */\n\tstrokeColor: string;\n\t/**\n\t * Labels for each face in order: Right, Left, Top, Bottom, Front, Back.\n\t * @default ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back']\n\t */\n\tfaces: string[];\n}\n\nconst defaultFaceMaterialOptions: NgtsViewcubeCommonOptions = {\n\tfont: '20px Inter var, Arial, sans-serif',\n\tfaces: defaultFaces,\n\tcolor: colors.bg,\n\thoverColor: colors.hover,\n\ttextColor: colors.text,\n\tstrokeColor: colors.stroke,\n\topacity: 1,\n};\n\n/**\n * Internal component that renders a material for a viewcube face.\n *\n * This component creates a canvas texture with the face label and applies it\n * as a material to one face of the viewcube.\n */\n@Component({\n\tselector: 'viewcube-face-material',\n\ttemplate: `\n\t\t<ngt-mesh-basic-material\n\t\t\t[attach]=\"['material', index()]\"\n\t\t\t[map]=\"texture()\"\n\t\t\t[color]=\"materialColor()\"\n\t\t\ttransparent\n\t\t\t[opacity]=\"opacity()\"\n\t\t/>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FaceMaterial {\n\thover = input.required<boolean>();\n\tindex = input.required<number>();\n\toptions = input(defaultFaceMaterialOptions, { transform: mergeInputs(defaultFaceMaterialOptions) });\n\n\tprivate faces = pick(this.options, 'faces');\n\tprivate font = pick(this.options, 'font');\n\tprivate color = pick(this.options, 'color');\n\tprivate textColor = pick(this.options, 'textColor');\n\tprivate strokeColor = pick(this.options, 'strokeColor');\n\tprivate hoverColor = pick(this.options, 'hoverColor');\n\n\tprivate document = inject(DOCUMENT);\n\tprivate store = injectStore();\n\n\tprotected opacity = pick(this.options, 'opacity');\n\tprotected materialColor = computed(() => (this.hover() ? this.hoverColor() : 'white'));\n\tprotected texture = computed(() => {\n\t\tconst [index, faces, font, color, textColor, strokeColor, gl] = [\n\t\t\tthis.index(),\n\t\t\tthis.faces(),\n\t\t\tthis.font(),\n\t\t\tthis.color(),\n\t\t\tthis.textColor(),\n\t\t\tthis.strokeColor(),\n\t\t\tthis.store.gl(),\n\t\t];\n\n\t\tconst canvas = this.document.createElement('canvas');\n\t\tcanvas.width = 128;\n\t\tcanvas.height = 128;\n\n\t\tconst context = canvas.getContext('2d')!;\n\t\tcontext.fillStyle = color;\n\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\t\tcontext.strokeStyle = strokeColor;\n\t\tcontext.strokeRect(0, 0, canvas.width, canvas.height);\n\t\tcontext.font = font;\n\t\tcontext.textAlign = 'center';\n\t\tcontext.fillStyle = textColor;\n\t\tcontext.fillText(faces[index].toUpperCase(), 64, 76);\n\n\t\tconst texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.anisotropy = gl.capabilities.getMaxAnisotropy() || 1;\n\n\t\treturn texture;\n\t});\n\n\tconstructor() {\n\t\textend({ MeshBasicMaterial });\n\t}\n}\n\n/**\n * Internal component that renders the main cube body of the viewcube.\n *\n * This component creates a box geometry with labeled faces that respond\n * to hover and click interactions for camera orientation changes.\n */\n@Component({\n\tselector: 'viewcube-face-cube',\n\ttemplate: `\n\t\t<ngt-mesh #mesh (click)=\"internalOnClick($any($event))\">\n\t\t\t<ngt-box-geometry />\n\t\t\t@for (face of count; track $index) {\n\t\t\t\t<viewcube-face-material [index]=\"$index\" [hover]=\"hover() === $index\" [options]=\"options()\" />\n\t\t\t}\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [FaceMaterial],\n})\nexport class FaceCube {\n\toptions = input({} as Partial<NgtsViewcubeCommonOptions>);\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\n\tprotected hover = signal(-1);\n\tprotected count = Array.from({ length: 6 });\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerout: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(-1);\n\t\t\t},\n\t\t\tpointermove: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tev.faceIndex != null && this.hover.set(Math.floor(ev.faceIndex / 2));\n\t\t\t},\n\t\t});\n\t}\n\n\tprotected internalOnClick(event: NgtThreeEvent<MouseEvent>) {\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.gizmoHelper.tweenCamera(event.face!.normal);\n\t\t}\n\t}\n\n\tprotected readonly Math = Math;\n}\n\n/**\n * Internal component that renders an interactive edge or corner section of the viewcube.\n *\n * This component creates clickable edge and corner regions that allow users\n * to orient the camera to diagonal viewing angles.\n */\n@Component({\n\tselector: 'viewcube-edge-cube',\n\ttemplate: `\n\t\t<ngt-mesh #mesh [scale]=\"1.01\" [position]=\"position()\" (click)=\"internalOnClick($any($event))\">\n\t\t\t<ngt-mesh-basic-material transparent [opacity]=\"0.6\" [color]=\"color()\" [visible]=\"hover()\" />\n\t\t\t<ngt-box-geometry *args=\"dimensions()\" />\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class EdgeCube {\n\tdimensions = input.required<XYZ>();\n\tposition = input.required<THREE.Vector3>();\n\thoverColor = input(colors.hover, {\n\t\ttransform: (value: string | undefined) => {\n\t\t\tif (value === undefined) return colors.hover;\n\t\t\treturn value;\n\t\t},\n\t});\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\n\tprotected hover = signal(false);\n\tprotected color = computed(() => (this.hover() ? this.hoverColor() : 'white'));\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerout: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(false);\n\t\t\t},\n\t\t\tpointerover: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(true);\n\t\t\t},\n\t\t});\n\t}\n\n\tprotected internalOnClick(event: NgtThreeEvent<MouseEvent>) {\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.gizmoHelper.tweenCamera(this.position());\n\t\t}\n\t}\n}\n\n/**\n * Configuration options for the NgtsGizmoViewcube component.\n *\n * Extends NgtsViewcubeCommonOptions with all properties optional.\n */\nexport type NgtsGizmoViewcubeOptions = Partial<NgtsViewcubeCommonOptions>;\n\n/**\n * A component that renders a 3D cube-style orientation gizmo.\n *\n * The viewcube displays a cube with labeled faces (Front, Back, Left, Right, Top, Bottom)\n * and clickable edges and corners for orienting the camera to standard or diagonal views.\n * It is typically used inside NgtsGizmoHelper.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewcube [options]=\"{ color: '#fff', hoverColor: '#ccc' }\" />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-viewcube',\n\ttemplate: `\n\t\t<ngt-group [scale]=\"60\">\n\t\t\t<viewcube-face-cube [options]=\"options()\" [onClick]=\"onClick\" />\n\t\t\t@for (edge of edges; track $index) {\n\t\t\t\t<viewcube-edge-cube\n\t\t\t\t\t[position]=\"edge\"\n\t\t\t\t\t[dimensions]=\"edgeDimensions[$index]\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t[hoverColor]=\"hoverColor()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t\t@for (corner of corners; track $index) {\n\t\t\t\t<viewcube-edge-cube\n\t\t\t\t\t[position]=\"corner\"\n\t\t\t\t\t[dimensions]=\"cornerDimensions\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t[hoverColor]=\"hoverColor()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [FaceCube, EdgeCube],\n})\nexport class NgtsGizmoViewcube {\n\toptions = input({} as Partial<NgtsGizmoViewcubeOptions>);\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\n\tprotected hoverColor = pick(this.options, 'hoverColor');\n\n\tprotected corners: THREE.Vector3[] = [\n\t\t[1, 1, 1],\n\t\t[1, 1, -1],\n\t\t[1, -1, 1],\n\t\t[1, -1, -1],\n\t\t[-1, 1, 1],\n\t\t[-1, 1, -1],\n\t\t[-1, -1, 1],\n\t\t[-1, -1, -1],\n\t].map(this.makePositionVector);\n\tprotected cornerDimensions: XYZ = [0.25, 0.25, 0.25];\n\tprotected edges: THREE.Vector3[] = [\n\t\t[1, 1, 0],\n\t\t[1, 0, 1],\n\t\t[1, 0, -1],\n\t\t[1, -1, 0],\n\t\t[0, 1, 1],\n\t\t[0, 1, -1],\n\t\t[0, -1, 1],\n\t\t[0, -1, -1],\n\t\t[-1, 1, 0],\n\t\t[-1, 0, 1],\n\t\t[-1, 0, -1],\n\t\t[-1, -1, 0],\n\t].map(this.makePositionVector);\n\tprotected edgeDimensions = this.edges.map(\n\t\t(edge) => edge.toArray().map((axis: number): number => (axis == 0 ? 0.5 : 0.25)) as XYZ,\n\t);\n\n\tconstructor() {\n\t\textend({ Group });\n\t}\n\n\tprotected get onClick() {\n\t\tif (hasListener(this.click)) return getEmitter(this.click);\n\t\treturn undefined;\n\t}\n\n\tprivate makePositionVector(xyz: number[]) {\n\t\treturn new THREE.Vector3(...xyz).multiplyScalar(0.38);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDOCUMENT,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetEmitter,\n\thasListener,\n\tinjectStore,\n\tNgtArgs,\n\tNgtEuler,\n\tNgtEventHandlers,\n\tNgtThreeElements,\n\tNgtThreeEvent,\n\tNgtVector3,\n\tobjectEvents,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BoxGeometry, Group, Mesh, MeshBasicMaterial, Sprite, SpriteMaterial } from 'three';\nimport { NgtsGizmoHelperImpl } from './gizmo-helper';\n\n/**\n * Internal component that renders a single axis line for the gizmo viewport.\n *\n * This component creates a colored box representing one axis direction,\n * used as part of the NgtsGizmoViewport visualization.\n */\n@Component({\n\tselector: 'viewport-axis',\n\ttemplate: `\n\t\t<ngt-group [rotation]=\"rotation()\">\n\t\t\t<ngt-mesh [position]=\"[0.4, 0, 0]\">\n\t\t\t\t<ngt-box-geometry *args=\"scale()\" />\n\t\t\t\t<ngt-mesh-basic-material [color]=\"color()\" [toneMapped]=\"false\" />\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class Axis {\n\tscale = input([0.8, 0.05, 0.05], {\n\t\ttransform: (value: [number, number, number] | undefined) => {\n\t\t\tif (value === undefined) return [0.8, 0.05, 0.05];\n\t\t\treturn value;\n\t\t},\n\t});\n\tcolor = input<THREE.ColorRepresentation>();\n\trotation = input<NgtEuler>([0, 0, 0]);\n\n\tconstructor() {\n\t\textend({ Group, Mesh, BoxGeometry, MeshBasicMaterial });\n\t}\n}\n\n/**\n * Internal component that renders an interactive axis head (sphere) for the gizmo viewport.\n *\n * This component creates a clickable sprite at the end of each axis that displays\n * an optional label and handles user interaction for camera orientation changes.\n */\n@Component({\n\tselector: 'viewport-axis-head',\n\ttemplate: `\n\t\t<ngt-sprite #sprite [scale]=\"scale()\" [position]=\"position()\">\n\t\t\t<ngt-sprite-material\n\t\t\t\t[map]=\"texture()\"\n\t\t\t\t[alphaTest]=\"0.3\"\n\t\t\t\t[opacity]=\"label() ? 1 : 0.75\"\n\t\t\t\t[toneMapped]=\"false\"\n\t\t\t/>\n\t\t</ngt-sprite>\n\t`,\n\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AxisHead {\n\tarcStyle = input.required<string>();\n\tposition = input.required<NgtVector3>();\n\tlabel = input<string>();\n\tlabelColor = input('#000');\n\taxisHeadScale = input(1);\n\tdisabled = input(false);\n\tfont = input('18px Inter var, Arial, sans-serif');\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate spriteRef = viewChild.required<ElementRef<THREE.Sprite>>('sprite');\n\n\tprivate document = inject(DOCUMENT);\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\tprivate store = injectStore();\n\n\tprotected texture = computed(() => {\n\t\tconst [arcStyle, label, labelColor, font, gl] = [\n\t\t\tthis.arcStyle(),\n\t\t\tthis.label(),\n\t\t\tthis.labelColor(),\n\t\t\tthis.font(),\n\t\t\tthis.store.gl(),\n\t\t];\n\n\t\tconst canvas = this.document.createElement('canvas');\n\t\tcanvas.width = 64;\n\t\tcanvas.height = 64;\n\n\t\tconst context = canvas.getContext('2d')!;\n\t\tcontext.beginPath();\n\t\tcontext.arc(32, 32, 16, 0, 2 * Math.PI);\n\t\tcontext.closePath();\n\t\tcontext.fillStyle = arcStyle;\n\t\tcontext.fill();\n\n\t\tif (label) {\n\t\t\tcontext.font = font;\n\t\t\tcontext.textAlign = 'center';\n\t\t\tcontext.fillStyle = labelColor;\n\t\t\tcontext.fillText(label, 32, 41);\n\t\t}\n\n\t\tconst texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.anisotropy = gl.capabilities.getMaxAnisotropy() || 1;\n\t\treturn texture;\n\t});\n\n\tprotected active = signal(false);\n\tprotected scale = computed(() => (this.label() ? 1 : 0.75) * (this.active() ? 1.2 : 1) * this.axisHeadScale());\n\n\tconstructor() {\n\t\textend({ Sprite, SpriteMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.spriteRef, {\n\t\t\tpointerover: this.onPointerOver.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t});\n\t}\n\n\tprotected onPointerOver(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\n\t\tevent.stopPropagation();\n\t\tthis.active.set(true);\n\t}\n\n\tprotected onPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.active.set(false);\n\t\t}\n\t}\n\n\tprotected onPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\t\tevent.stopPropagation();\n\t\tthis.gizmoHelper.tweenCamera(event.object.position);\n\t}\n}\n\n/**\n * Configuration options for the NgtsGizmoViewport component.\n *\n * These options control the appearance and behavior of the viewport-style\n * gizmo with axis lines and interactive heads.\n */\nexport interface NgtsGizmoViewportOptions extends Partial<NgtThreeElements['ngt-group']> {\n\t/**\n\t * Colors for the X, Y, and Z axes.\n\t * @default ['#ff2060', '#20df80', '#2080ff']\n\t */\n\taxisColors: [string, string, string];\n\t/**\n\t * Scale of the axis lines [x, y, z].\n\t */\n\taxisScale?: [number, number, number];\n\t/**\n\t * Labels for the X, Y, and Z axis heads.\n\t * @default ['X', 'Y', 'Z']\n\t */\n\tlabels: [string, string, string];\n\t/**\n\t * Scale factor for the axis head sprites.\n\t * @default 1\n\t */\n\taxisHeadScale: number;\n\t/**\n\t * Color of the axis labels.\n\t * @default '#000'\n\t */\n\tlabelColor: string;\n\t/**\n\t * Whether to hide the negative axis heads (-X, -Y, -Z).\n\t * @default false\n\t */\n\thideNegativeAxes: boolean;\n\t/**\n\t * Whether to hide all axis heads.\n\t * @default false\n\t */\n\thideAxisHeads: boolean;\n\t/**\n\t * Whether the gizmo is disabled (non-interactive).\n\t * @default false\n\t */\n\tdisabled: boolean;\n\t/**\n\t * CSS font specification for axis labels.\n\t * @default '18px Inter var, Arial, sans-serif'\n\t */\n\tfont: string;\n}\n\nconst defaultOptions: NgtsGizmoViewportOptions = {\n\taxisColors: ['#ff2060', '#20df80', '#2080ff'],\n\tlabels: ['X', 'Y', 'Z'],\n\taxisHeadScale: 1,\n\tlabelColor: '#000',\n\thideNegativeAxes: false,\n\thideAxisHeads: false,\n\tdisabled: false,\n\tfont: '18px Inter var, Arial, sans-serif',\n};\n\n/**\n * A component that renders a viewport-style gizmo with colored axes and interactive heads.\n *\n * This gizmo displays three perpendicular axes (X, Y, Z) with labeled heads that\n * can be clicked to animate the camera to the corresponding view direction.\n * It is typically used inside NgtsGizmoHelper.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewport [options]=\"{ axisColors: ['red', 'green', 'blue'] }\" />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-viewport',\n\ttemplate: `\n\t\t@let _axisScale = axisScale();\n\t\t@let _axisHeadScale = axisHeadScale();\n\t\t@let _labels = labels();\n\t\t@let _labelColor = labelColor();\n\t\t@let _axisColors = axisColors();\n\t\t@let _font = font();\n\t\t@let _disabled = disabled();\n\n\t\t<ngt-group [scale]=\"40\" [parameters]=\"parameters()\">\n\t\t\t<viewport-axis [color]=\"_axisColors[0]\" [rotation]=\"[0, 0, 0]\" [scale]=\"_axisScale\" />\n\t\t\t<viewport-axis [color]=\"_axisColors[1]\" [rotation]=\"[0, 0, Math.PI / 2]\" [scale]=\"_axisScale\" />\n\t\t\t<viewport-axis [color]=\"_axisColors[2]\" [rotation]=\"[0, -Math.PI / 2, 0]\" [scale]=\"_axisScale\" />\n\n\t\t\t@if (!hideAxisHeads()) {\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[0]\"\n\t\t\t\t\t[position]=\"[1, 0, 0]\"\n\t\t\t\t\t[label]=\"_labels[0]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[1]\"\n\t\t\t\t\t[position]=\"[0, 1, 0]\"\n\t\t\t\t\t[label]=\"_labels[1]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[2]\"\n\t\t\t\t\t[position]=\"[0, 0, 1]\"\n\t\t\t\t\t[label]=\"_labels[2]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\n\t\t\t\t@if (!hideNegativeAxes()) {\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[0]\"\n\t\t\t\t\t\t[position]=\"[-1, 0, 0]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[1]\"\n\t\t\t\t\t\t[position]=\"[0, -1, 0]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[2]\"\n\t\t\t\t\t\t[position]=\"[0, 0, -1]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t}\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [Axis, AxisHead],\n})\nexport class NgtsGizmoViewport {\n\tprotected readonly Math = Math;\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'axisColors',\n\t\t'axisScale',\n\t\t'labels',\n\t\t'axisHeadScale',\n\t\t'labelColor',\n\t\t'hideNegativeAxes',\n\t\t'hideAxisHeads',\n\t\t'disabled',\n\t\t'font',\n\t]);\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\n\tprotected axisColors = pick(this.options, 'axisColors');\n\tprotected axisScale = pick(this.options, 'axisScale');\n\tprotected hideAxisHeads = pick(this.options, 'hideAxisHeads');\n\tprotected hideNegativeAxes = pick(this.options, 'hideNegativeAxes');\n\tprotected labels = pick(this.options, 'labels');\n\tprotected axisHeadScale = pick(this.options, 'axisHeadScale');\n\tprotected labelColor = pick(this.options, 'labelColor');\n\tprotected disabled = pick(this.options, 'disabled');\n\tprotected font = pick(this.options, 'font');\n\n\tconstructor() {\n\t\textend({ Group });\n\t}\n\n\tprotected get onClick() {\n\t\tif (hasListener(this.click)) return getEmitter(this.click);\n\t\treturn undefined;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtArgs, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { ConeGeometry, CylinderGeometry, Group, Mesh, MeshBasicMaterial } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst vec1 = new THREE.Vector3();\nconst vec2 = new THREE.Vector3();\n\n/**\n * Calculates the offset distance along an axis from a click point to the current ray position.\n *\n * This function is used to determine how far the user has dragged along a specific axis\n * by projecting the ray onto the plane defined by the click point and axis direction.\n *\n * @param clickPoint - The initial click point in world space\n * @param normal - The axis direction vector (normalized)\n * @param rayStart - The origin of the current pointer ray\n * @param rayDir - The direction of the current pointer ray\n * @returns The offset distance along the axis\n */\nexport function calculateOffset(\n\tclickPoint: THREE.Vector3,\n\tnormal: THREE.Vector3,\n\trayStart: THREE.Vector3,\n\trayDir: THREE.Vector3,\n) {\n\tconst e1 = normal.dot(normal);\n\tconst e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n\tconst e3 = normal.dot(rayDir);\n\n\tif (e3 === 0) {\n\t\treturn -e2 / e1;\n\t}\n\n\tvec1.copy(rayDir)\n\t\t.multiplyScalar(e1 / e3)\n\t\t.sub(normal);\n\tvec2.copy(rayDir)\n\t\t.multiplyScalar(e2 / e3)\n\t\t.add(rayStart)\n\t\t.sub(clickPoint);\n\n\treturn -vec1.dot(vec2) / vec1.dot(vec1);\n}\n\nconst upV = new THREE.Vector3(0, 1, 0);\nconst offsetMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders an axis arrow handle for the pivot controls.\n *\n * This component creates a draggable arrow gizmo that allows translation along\n * a single axis. It includes visual feedback on hover and optional value annotations.\n */\n@Component({\n\tselector: 'ngts-axis-arrow',\n\ttemplate: `\n\t\t<ngt-group #group>\n\t\t\t<ngt-group #innerGroup [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t\t<ngts-html [options]=\"{ position: [0, -coneLength(), 0] }\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#annotation\n\t\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap;\"\n\t\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</ngts-html>\n\t\t\t\t}\n\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t[visible]=\"false\"\n\t\t\t\t\t[position]=\"[0, (cylinderLength() + coneLength()) / 2.0, 0]\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-cylinder-geometry\n\t\t\t\t\t\t*args=\"[coneWidth() * 1.4, coneWidth() * 1.4, cylinderLength() + coneLength(), 8, 1]\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\n\t\t\t\t<ngts-line\n\t\t\t\t\t[points]=\"[0, 0, 0, 0, cylinderLength(), 0]\"\n\t\t\t\t\t[options]=\"{\n\t\t\t\t\t\traycast: null,\n\t\t\t\t\t\tside: DoubleSide,\n\t\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\ttransparent: true,\n\t\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\t\tcolor: color(),\n\t\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\t}\"\n\t\t\t\t/>\n\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t[raycast]=\"null\"\n\t\t\t\t\t[position]=\"[0, cylinderLength() + coneLength() / 2.0, 0]\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-cone-geometry *args=\"[coneWidth(), coneLength(), 24, 1]\" />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[opacity]=\"pivotControls.opacity()\"\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t\t[fog]=\"false\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs, NgtsLine, NgtsHTML],\n})\nexport class NgtsAxisArrow {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdirection = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tprivate groupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate innerGroupRef = viewChild.required<ElementRef<THREE.Group>>('innerGroup');\n\tprivate annotationRef = viewChild<'string', ElementRef<HTMLElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate clickInfo: { clickPoint: THREE.Vector3; dir: THREE.Vector3 } | null = null;\n\tprivate offset0 = 0;\n\n\tprotected color = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\n\tprotected coneWidth = computed(() =>\n\t\tthis.pivotControls.fixed()\n\t\t\t? (this.pivotControls.lineWidth() / this.pivotControls.scale()) * 1.6\n\t\t\t: this.pivotControls.scale() / 20,\n\t);\n\tprotected coneLength = computed(() => (this.pivotControls.fixed() ? 0.2 : this.pivotControls.scale() / 5));\n\tprotected cylinderLength = computed(() =>\n\t\tthis.pivotControls.fixed() ? 1 - this.coneLength() : this.pivotControls.scale() - this.coneLength(),\n\t);\n\tprotected matrixL = computed(() => {\n\t\tconst quaternion = new THREE.Quaternion().setFromUnitVectors(upV, this.direction().clone().normalize());\n\t\treturn new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n\t});\n\n\tconstructor() {\n\t\textend({ Group, Mesh, ConeGeometry, CylinderGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.innerGroupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [group, direction, axis, controls, annotation] = [\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.direction(),\n\t\t\tthis.axis(),\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${this.pivotControls.translation[axis].toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\n\t\tconst rotation = new THREE.Matrix4().extractRotation(group.matrixWorld);\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst clickPoint = event.point.clone();\n\t\tconst dir = direction.clone().applyMatrix4(rotation).normalize();\n\t\tthis.clickInfo = { clickPoint, dir };\n\t\tthis.offset0 = this.pivotControls.translation[axis];\n\t\tthis.pivotControls.onDragStart({ component: 'Arrow', axis, origin, directions: [dir] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\n\t\tif (!this.hovered()) {\n\t\t\tthis.hovered.set(true);\n\t\t}\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, dir } = this.clickInfo;\n\t\t\tconst [translationLimits, annotation, axis] = [\n\t\t\t\tthis.pivotControls.translationLimits(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t\tthis.axis(),\n\t\t\t];\n\n\t\t\tconst [min, max] = translationLimits?.[axis] || [undefined, undefined];\n\n\t\t\tlet offset = calculateOffset(clickPoint, dir, event.ray.origin, event.ray.direction);\n\t\t\tif (min !== undefined) {\n\t\t\t\toffset = Math.max(offset, min - this.offset0);\n\t\t\t}\n\n\t\t\tif (max !== undefined) {\n\t\t\t\toffset = Math.min(offset, max - this.offset0);\n\t\t\t}\n\n\t\t\tthis.pivotControls.translation[axis] = this.offset0 + offset;\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.pivotControls.translation[axis].toFixed(2)}`;\n\t\t\t}\n\n\t\t\toffsetMatrix.makeTranslation(dir.x * offset, dir.y * offset, dir.z * offset);\n\t\t\tthis.pivotControls.onDrag(offsetMatrix);\n\t\t}\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst clickDir = new THREE.Vector3();\nconst intersectionDir = new THREE.Vector3();\n\n/**\n * Converts radians to degrees.\n *\n * @param radians - Angle in radians\n * @returns Angle in degrees\n */\nfunction toDegrees(radians: number) {\n\treturn (radians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param degrees - Angle in degrees\n * @returns Angle in radians\n */\nfunction toRadians(degrees: number) {\n\treturn (degrees * Math.PI) / 180;\n}\n\n/**\n * Calculates the angle between two points relative to an origin and basis vectors.\n *\n * Used to determine rotation angle from initial click to current intersection point.\n *\n * @param clickPoint - The initial click point\n * @param intersectionPoint - The current intersection point\n * @param origin - The center of rotation\n * @param e1 - First basis vector\n * @param e2 - Second basis vector\n * @returns The angle difference in radians\n */\nfunction calculateAngle(\n\tclickPoint: THREE.Vector3,\n\tintersectionPoint: THREE.Vector3,\n\torigin: THREE.Vector3,\n\te1: THREE.Vector3,\n\te2: THREE.Vector3,\n) {\n\tclickDir.copy(clickPoint).sub(origin);\n\tintersectionDir.copy(intersectionPoint).sub(origin);\n\tconst dote1e1 = e1.dot(e1);\n\tconst dote2e2 = e2.dot(e2);\n\tconst uClick = clickDir.dot(e1) / dote1e1;\n\tconst vClick = clickDir.dot(e2) / dote2e2;\n\tconst uIntersection = intersectionDir.dot(e1) / dote1e1;\n\tconst vIntersection = intersectionDir.dot(e2) / dote2e2;\n\tconst angleClick = Math.atan2(vClick, uClick);\n\tconst angleIntersection = Math.atan2(vIntersection, uIntersection);\n\treturn angleIntersection - angleClick;\n}\n\n/**\n * Floating-point modulo operation that handles negative numbers correctly.\n *\n * @param num - The numerator\n * @param denom - The denominator\n * @returns The remainder\n */\nfunction fmod(num: number, denom: number) {\n\tlet k = Math.floor(num / denom);\n\tk = k < 0 ? k + 1 : k;\n\n\treturn num - k * denom;\n}\n\n/**\n * Normalizes an angle to be within [0, 2π) range.\n *\n * @param angle - The input angle in radians\n * @returns The normalized angle\n */\nfunction minimizeAngle(angle: number) {\n\tlet result = fmod(angle, 2 * Math.PI);\n\n\tif (Math.abs(result) < 1e-6) {\n\t\treturn 0.0;\n\t}\n\n\tif (result < 0.0) {\n\t\tresult += 2 * Math.PI;\n\t}\n\n\treturn result;\n}\n\nconst rotMatrix = new THREE.Matrix4();\nconst posNew = new THREE.Vector3();\nconst ray = new THREE.Ray();\nconst intersection = new THREE.Vector3();\n\n/**\n * Internal component that renders a rotation arc handle for the pivot controls.\n *\n * This component creates a quarter-circle arc that allows rotation around a single axis.\n * Users can drag along the arc to rotate the controlled object, with optional snapping\n * when holding Shift.\n */\n@Component({\n\tselector: 'ngts-axis-rotator',\n\ttemplate: `\n\t\t<ngt-group #group [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t<ngts-html [options]=\"{ position: [r(), r(), 0] }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t#annotation\n\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap\"\n\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t></div>\n\t\t\t\t</ngts-html>\n\t\t\t}\n\n\t\t\t<ngts-line\n\t\t\t\t[points]=\"arc()\"\n\t\t\t\t[options]=\"{\n\t\t\t\t\tlineWidth: pivotControls.lineWidth() * 4,\n\t\t\t\t\tvisible: false,\n\t\t\t\t\tuserData: pivotControls.userData(),\n\t\t\t\t}\"\n\t\t\t/>\n\n\t\t\t<ngts-line\n\t\t\t\t[points]=\"arc()\"\n\t\t\t\t[options]=\"{\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\traycast: null,\n\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\tside: DoubleSide,\n\t\t\t\t\tcolor: hovered() ? pivotControls.hoveredColor() : pivotControls.axisColors()[axis()],\n\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\tfog: false,\n\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t}\"\n\t\t\t/>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsLine, NgtsHTML],\n})\nexport class NgtsAxisRotator {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdir1 = input.required<THREE.Vector3>();\n\tdir2 = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprotected hovered = signal(false);\n\tprivate angle = 0;\n\tprivate angle0 = 0;\n\tprivate clickInfo: {\n\t\tclickPoint: THREE.Vector3;\n\t\torigin: THREE.Vector3;\n\t\te1: THREE.Vector3;\n\t\te2: THREE.Vector3;\n\t\tnormal: THREE.Vector3;\n\t\tplane: THREE.Plane;\n\t} | null = null;\n\n\tprotected matrixL = computed(() => {\n\t\tconst dir1N = this.dir1().clone().normalize();\n\t\tconst dir2N = this.dir2().clone().normalize();\n\t\treturn new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n\t});\n\tprotected r = computed(() => (this.pivotControls.fixed() ? 0.65 : this.pivotControls.scale() * 0.65));\n\tprotected arc = computed(() => {\n\t\tconst segments = 32;\n\t\tconst points: THREE.Vector3[] = [];\n\t\tfor (let j = 0; j <= segments; j++) {\n\t\t\tconst angle = (j * (Math.PI / 2)) / segments;\n\t\t\tpoints.push(new THREE.Vector3(Math.cos(angle) * this.r(), Math.sin(angle) * this.r(), 0));\n\t\t}\n\t\treturn points;\n\t});\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.groupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, group, axis, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.axis(),\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${toDegrees(this.angle).toFixed(0)}º`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst e1 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 0).normalize();\n\t\tconst e2 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 1).normalize();\n\t\tconst normal = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 2).normalize();\n\t\tconst plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n\t\tthis.clickInfo = { clickPoint, origin, e1, e2, normal, plane };\n\t\tthis.pivotControls.onDragStart({ component: 'Rotator', axis, origin, directions: [e1, e2, normal] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not a function on PointerEvent\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, origin, e1, e2, normal, plane } = this.clickInfo;\n\t\t\tconst [rotationLimits, axis, annotation] = [\n\t\t\t\tthis.pivotControls.rotationLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tconst [min, max] = rotationLimits?.[axis] || [undefined, undefined];\n\n\t\t\tray.copy(event.ray);\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tray.direction.negate();\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tlet deltaAngle = calculateAngle(clickPoint, intersection, origin, e1, e2);\n\t\t\tlet degrees = toDegrees(deltaAngle);\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tdegrees = Math.round(degrees / 10) * 10;\n\t\t\t\tdeltaAngle = toRadians(degrees);\n\t\t\t}\n\n\t\t\tif (min !== undefined && max !== undefined && max - min < 2 * Math.PI) {\n\t\t\t\tdeltaAngle = minimizeAngle(deltaAngle);\n\t\t\t\tdeltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle;\n\t\t\t\tdeltaAngle = Math.round(deltaAngle / 10) * 10;\n\t\t\t\tthis.angle = this.angle0 + deltaAngle;\n\t\t\t} else {\n\t\t\t\tthis.angle = minimizeAngle(this.angle0 + deltaAngle);\n\t\t\t\tthis.angle = this.angle > Math.PI ? this.angle - 2 * Math.PI : this.angle;\n\t\t\t}\n\n\t\t\tif (annotation) {\n\t\t\t\tdegrees = toDegrees(this.angle);\n\t\t\t\tannotation.innerText = `${degrees.toFixed(0)}º`;\n\t\t\t}\n\n\t\t\trotMatrix.makeRotationAxis(normal, deltaAngle);\n\t\t\tposNew.copy(origin).applyMatrix4(rotMatrix).sub(origin).negate();\n\t\t\trotMatrix.setPosition(posNew);\n\t\t\tthis.pivotControls.onDrag(rotMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not a function on PointerEvent\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\n/**\n * Decomposes an offset vector into components along two basis vectors.\n *\n * This function projects a 3D offset onto a plane defined by two basis vectors\n * and returns the scalar coefficients for each basis vector.\n *\n * @param e1 - First basis vector\n * @param e2 - Second basis vector\n * @param offset - The offset vector to decompose\n * @returns Tuple of [coefficient for e1, coefficient for e2]\n */\nfunction decomposeIntoBasis(e1: THREE.Vector3, e2: THREE.Vector3, offset: THREE.Vector3) {\n\tconst i1 =\n\t\tMath.abs(e1.x) >= Math.abs(e1.y) && Math.abs(e1.x) >= Math.abs(e1.z)\n\t\t\t? 0\n\t\t\t: Math.abs(e1.y) >= Math.abs(e1.x) && Math.abs(e1.y) >= Math.abs(e1.z)\n\t\t\t\t? 1\n\t\t\t\t: 2;\n\tconst e2DegrowthOrder = [0, 1, 2].sort((a, b) => Math.abs(e2.getComponent(b)) - Math.abs(e2.getComponent(a)));\n\tconst i2 = i1 === e2DegrowthOrder[0] ? e2DegrowthOrder[1] : e2DegrowthOrder[0];\n\tconst a1 = e1.getComponent(i1);\n\tconst a2 = e1.getComponent(i2);\n\tconst b1 = e2.getComponent(i1);\n\tconst b2 = e2.getComponent(i2);\n\tconst c1 = offset.getComponent(i1);\n\tconst c2 = offset.getComponent(i2);\n\n\tconst y = (c2 - c1 * (a2 / a1)) / (b2 - b1 * (a2 / a1));\n\tconst x = (c1 - y * b1) / a1;\n\n\treturn [x, y];\n}\n\nconst ray = new THREE.Ray();\nconst intersection = new THREE.Vector3();\nconst offsetMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders a plane slider handle for the pivot controls.\n *\n * This component creates a small square that allows translation along two axes\n * simultaneously (movement in a plane). It's positioned at the intersection of\n * two axis arrows.\n */\n@Component({\n\tselector: 'ngts-plane-slider',\n\ttemplate: `\n\t\t<ngt-group #group [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t<ngts-html [options]=\"{ position: [0, 0, 0] }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t#annotation\n\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap\"\n\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t></div>\n\t\t\t\t</ngts-html>\n\t\t\t}\n\t\t\t<ngt-group [position]=\"[pos1() * 1.7, pos1() * 1.7, 0]\">\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t#mesh\n\t\t\t\t\tvisible\n\t\t\t\t\t[scale]=\"length()\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-plane-geometry />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t\t[fog]=\"false\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t\t<ngts-line\n\t\t\t\t\t[points]=\"points()\"\n\t\t\t\t\t[options]=\"{\n\t\t\t\t\t\tposition: [-length() / 2, -length() / 2, 0],\n\t\t\t\t\t\ttransparent: true,\n\t\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\t\tcolor: color(),\n\t\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\t\tuserData: pivotControls.userData(),\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t\t}\"\n\t\t\t\t/>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsHTML, NgtsLine],\n})\nexport class NgtsPlaneSlider {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdir1 = input.required<THREE.Vector3>();\n\tdir2 = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate clickInfo: { clickPoint: THREE.Vector3; e1: THREE.Vector3; e2: THREE.Vector3; plane: THREE.Plane } | null =\n\t\tnull;\n\tprivate offsetX0 = 0;\n\tprivate offsetY0 = 0;\n\n\tprotected matrixL = computed(() => {\n\t\tconst dir1N = this.dir1().clone().normalize();\n\t\tconst dir2N = this.dir2().clone().normalize();\n\t\treturn new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n\t});\n\n\tprotected pos1 = computed(() => (this.pivotControls.fixed() ? 1 / 7 : this.pivotControls.scale() / 7));\n\tprotected length = computed(() => (this.pivotControls.fixed() ? 0.225 : this.pivotControls.scale() * 0.225));\n\tprotected color = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\tpoints = computed(() => {\n\t\tconst length = this.length();\n\t\treturn [\n\t\t\tnew THREE.Vector3(0, 0, 0),\n\t\t\tnew THREE.Vector3(0, length, 0),\n\t\t\tnew THREE.Vector3(length, length, 0),\n\t\t\tnew THREE.Vector3(length, 0, 0),\n\t\t\tnew THREE.Vector3(0, 0, 0),\n\t\t];\n\t});\n\n\tconstructor() {\n\t\textend({ Group, Mesh, PlaneGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, axis, group, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.axis(),\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${this.pivotControls.translation[(axis + 1) % 3].toFixed(2)}, ${this.pivotControls.translation[(axis + 2) % 3].toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst e1 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 0).normalize();\n\t\tconst e2 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 1).normalize();\n\t\tconst normal = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 2).normalize();\n\t\tconst plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n\t\tthis.clickInfo = { clickPoint, e1, e2, plane };\n\t\tthis.offsetX0 = this.pivotControls.translation[(axis + 1) % 3];\n\t\tthis.offsetY0 = this.pivotControls.translation[(axis + 2) % 3];\n\t\tthis.pivotControls.onDragStart({ component: 'Slider', axis, origin, directions: [e1, e2, normal] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not defined on ThreeEvent\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, e1, e2, plane } = this.clickInfo;\n\t\t\tconst [translationLimits, axis, annotation] = [\n\t\t\t\tthis.pivotControls.translationLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tconst [minX, maxX] = translationLimits?.[(axis + 1) % 3] || [undefined, undefined];\n\t\t\tconst [minY, maxY] = translationLimits?.[(axis + 2) % 3] || [undefined, undefined];\n\n\t\t\tray.copy(event.ray);\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tray.direction.negate();\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tintersection.sub(clickPoint);\n\t\t\tlet [offsetX, offsetY] = decomposeIntoBasis(e1, e2, intersection);\n\t\t\t/* let offsetY = (intersection.y - (intersection.x * e1.y) / e1.x) / (e2.y - (e2.x * e1.y) / e1.x)\n let offsetX = (intersection.x - offsetY * e2.x) / e1.x */\n\t\t\tif (minX !== undefined) {\n\t\t\t\toffsetX = Math.max(offsetX, minX - this.offsetX0);\n\t\t\t}\n\t\t\tif (maxX !== undefined) {\n\t\t\t\toffsetX = Math.min(offsetX, maxX - this.offsetX0);\n\t\t\t}\n\t\t\tif (minY !== undefined) {\n\t\t\t\toffsetY = Math.max(offsetY, minY - this.offsetY0);\n\t\t\t}\n\t\t\tif (maxY !== undefined) {\n\t\t\t\toffsetY = Math.min(offsetY, maxY - this.offsetY0);\n\t\t\t}\n\t\t\tthis.pivotControls.translation[(axis + 1) % 3] = this.offsetX0 + offsetX;\n\t\t\tthis.pivotControls.translation[(axis + 2) % 3] = this.offsetY0 + offsetY;\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.pivotControls.translation[(axis + 1) % 3].toFixed(2)}, ${this.pivotControls.translation[(axis + 2) % 3].toFixed(2)}`;\n\t\t\t}\n\n\t\t\toffsetMatrix.makeTranslation(\n\t\t\t\toffsetX * e1.x + offsetY * e2.x,\n\t\t\t\toffsetX * e1.y + offsetY * e2.y,\n\t\t\t\toffsetX * e1.z + offsetY * e2.z,\n\t\t\t);\n\t\t\tthis.pivotControls.onDrag(offsetMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not defined on ThreeEvent\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtArgs, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { calculateScaleFactor, NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group, Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst vec1 = new THREE.Vector3();\nconst vec2 = new THREE.Vector3();\n\n/**\n * Calculates the offset distance along an axis from a click point to the current ray position.\n *\n * This function is used to determine how far the user has dragged along a specific axis\n * by projecting the ray onto the plane defined by the click point and axis direction.\n * Used for calculating scale factor based on drag distance.\n *\n * @param clickPoint - The initial click point in world space\n * @param normal - The axis direction vector (normalized)\n * @param rayStart - The origin of the current pointer ray\n * @param rayDir - The direction of the current pointer ray\n * @returns The offset distance along the axis\n */\nexport function calculateOffset(\n\tclickPoint: THREE.Vector3,\n\tnormal: THREE.Vector3,\n\trayStart: THREE.Vector3,\n\trayDir: THREE.Vector3,\n) {\n\tconst e1 = normal.dot(normal);\n\tconst e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n\tconst e3 = normal.dot(rayDir);\n\n\tif (e3 === 0) {\n\t\treturn -e2 / e1;\n\t}\n\n\tvec1.copy(rayDir)\n\t\t.multiplyScalar(e1 / e3)\n\t\t.sub(normal);\n\tvec2.copy(rayDir)\n\t\t.multiplyScalar(e2 / e3)\n\t\t.add(rayStart)\n\t\t.sub(clickPoint);\n\n\treturn -vec1.dot(vec2) / vec1.dot(vec1);\n}\n\nconst upV = new THREE.Vector3(0, 1, 0);\nconst scaleV = new THREE.Vector3();\nconst scaleMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders a scaling sphere handle for the pivot controls.\n *\n * This component creates a sphere at the end of an axis that allows non-uniform\n * scaling along that axis. Dragging the sphere away from the origin increases scale,\n * while dragging toward the origin decreases it. Shift key enables snapping.\n */\n@Component({\n\tselector: 'ngts-scaling-sphere',\n\ttemplate: `\n\t\t<ngt-group #group>\n\t\t\t<ngt-group #innerGroup [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t\t<ngts-html [options]=\"{ position: [0, position() / 2, 0] }\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#annotation\n\t\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap;\"\n\t\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</ngts-html>\n\t\t\t\t}\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t#mesh\n\t\t\t\t\t[position]=\"[0, position(), 0]\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-sphere-geometry *args=\"[radius(), 12, 12]\" />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[opacity]=\"pivotControls.opacity()\"\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsHTML, NgtArgs],\n})\nexport class NgtsScalingSphere {\n\tdirection = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate innerGroupRef = viewChild.required<ElementRef<THREE.Group>>('innerGroup');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\tmeshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate scale0 = 1;\n\tprivate scaleCurrent = 1;\n\tprivate clickInfo: {\n\t\tclickPoint: THREE.Vector3;\n\t\tdir: THREE.Vector3;\n\t\tmPLG: THREE.Matrix4;\n\t\tmPLGInv: THREE.Matrix4;\n\t\toffsetMultiplier: number;\n\t} | null = null;\n\n\tprotected position = computed(() => (this.pivotControls.fixed() ? 1.2 : 1.2 * this.pivotControls.scale()));\n\tprotected radius = computed(() =>\n\t\tthis.pivotControls.fixed()\n\t\t\t? (this.pivotControls.lineWidth() / this.pivotControls.scale()) * 1.8\n\t\t\t: this.pivotControls.scale() / 22.5,\n\t);\n\tmatrixL = computed(() => {\n\t\tconst quaternion = new THREE.Quaternion().setFromUnitVectors(upV, this.direction().clone().normalize());\n\t\treturn new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n\t});\n\tcolor = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\n\tconstructor() {\n\t\textend({ Group, Mesh, SphereGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.innerGroupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls, fixed, scale, direction, axis, size, group] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.pivotControls.fixed(),\n\t\t\tthis.pivotControls.scale(),\n\t\t\tthis.direction(),\n\t\t\tthis.axis(),\n\t\t\tthis.store.size(),\n\t\t\tthis.groupRef().nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${scale.toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst rotation = new THREE.Matrix4().extractRotation(group.matrixWorld);\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst dir = direction.clone().applyMatrix4(rotation).normalize();\n\t\tconst mPLG = group.matrixWorld.clone();\n\t\tconst mPLGInv = mPLG.clone().invert();\n\t\tconst offsetMultiplier = fixed\n\t\t\t? 1 / calculateScaleFactor(group.getWorldPosition(vec1), scale, event.camera, size)\n\t\t\t: 1;\n\t\tthis.clickInfo = { clickPoint, dir, mPLG, mPLGInv, offsetMultiplier };\n\t\tthis.pivotControls.onDragStart({ component: 'Sphere', axis, origin, directions: [dir] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, dir, mPLG, mPLGInv, offsetMultiplier } = this.clickInfo;\n\t\t\tconst [scaleLimits, axis, position, annotation, fixed, scale, mesh] = [\n\t\t\t\tthis.pivotControls.scaleLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.position(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t\tthis.pivotControls.fixed(),\n\t\t\t\tthis.pivotControls.scale(),\n\t\t\t\tthis.meshRef().nativeElement,\n\t\t\t];\n\n\t\t\tconst [min, max] = scaleLimits?.[axis] || [1e-5, undefined]; // always limit the minimal value, since setting it very low might break the transform\n\t\t\tconst offsetW = calculateOffset(clickPoint, dir, event.ray.origin, event.ray.direction);\n\t\t\tconst offsetL = offsetW * offsetMultiplier;\n\t\t\tconst offsetH = fixed ? offsetL : offsetL / scale;\n\t\t\tlet upscale = Math.pow(2, offsetH * 0.2);\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tupscale = Math.round(upscale * 10) / 10;\n\t\t\t}\n\n\t\t\tupscale = Math.max(upscale, min / this.scale0);\n\n\t\t\tif (max !== undefined) {\n\t\t\t\tupscale = Math.min(upscale, max / this.scale0);\n\t\t\t}\n\n\t\t\tthis.scaleCurrent = this.scale0 * upscale;\n\t\t\tmesh.position.set(0, position + offsetL, 0);\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.scaleCurrent.toFixed(2)}`;\n\t\t\t}\n\n\t\t\tscaleV.set(1, 1, 1);\n\t\t\tscaleV.setComponent(axis, upscale);\n\t\t\tscaleMatrix.makeScale(scaleV.x, scaleV.y, scaleV.z).premultiply(mPLG).multiply(mPLGInv);\n\t\t\tthis.pivotControls.onDrag(scaleMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls, position, mesh] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.position(),\n\t\t\tthis.meshRef().nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tthis.scale0 = this.scaleCurrent;\n\t\tthis.clickInfo = null;\n\t\tmesh.position.set(0, position, 0);\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not in the type definition\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\toutput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, getInstanceState, injectStore, is, NgtAnyRecord, omit, pick } from 'angular-three';\nimport { calculateScaleFactor } from 'angular-three-soba/misc';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { NgtsAxisArrow } from './axis-arrow';\nimport { NgtsAxisRotator } from './axis-rotator';\nimport { NgtsPlaneSlider } from './plane-slider';\nimport { NgtsScalingSphere } from './scaling-sphere';\n\n/**\n * Parameters passed when a drag operation starts on the pivot controls.\n */\nexport interface OnDragStartParameters {\n\t/**\n\t * The type of component being dragged.\n\t */\n\tcomponent: 'Arrow' | 'Slider' | 'Rotator' | 'Sphere';\n\t/**\n\t * The axis index (0 = X, 1 = Y, 2 = Z).\n\t */\n\taxis: 0 | 1 | 2;\n\t/**\n\t * The world-space origin of the drag operation.\n\t */\n\torigin: THREE.Vector3;\n\t/**\n\t * Direction vectors relevant to the drag operation.\n\t */\n\tdirections: THREE.Vector3[];\n}\n\n/**\n * Parameters passed during a drag operation on the pivot controls.\n */\nexport interface OnDragParameters {\n\t/**\n\t * The current local transformation matrix.\n\t */\n\tl: THREE.Matrix4;\n\t/**\n\t * The delta (change) in local transformation.\n\t */\n\tdeltaL: THREE.Matrix4;\n\t/**\n\t * The current world transformation matrix.\n\t */\n\tw: THREE.Matrix4;\n\t/**\n\t * The delta (change) in world transformation.\n\t */\n\tdeltaW: THREE.Matrix4;\n}\n\nconst mL0 = new THREE.Matrix4();\nconst mW0 = new THREE.Matrix4();\nconst mP = new THREE.Matrix4();\nconst mPInv = new THREE.Matrix4();\nconst mW = new THREE.Matrix4();\nconst mL = new THREE.Matrix4();\nconst mL0Inv = new THREE.Matrix4();\nconst mdL = new THREE.Matrix4();\nconst mG = new THREE.Matrix4();\n\nconst bb = new THREE.Box3();\nconst bbObj = new THREE.Box3();\nconst vCenter = new THREE.Vector3();\nconst vSize = new THREE.Vector3();\nconst vAnchorOffset = new THREE.Vector3();\nconst vPosition = new THREE.Vector3();\nconst vScale = new THREE.Vector3();\n\nconst xDir = new THREE.Vector3(1, 0, 0);\nconst yDir = new THREE.Vector3(0, 1, 0);\nconst zDir = new THREE.Vector3(0, 0, 1);\n\n/**\n * Configuration options for the NgtsPivotControls component.\n *\n * These options control the behavior, appearance, and constraints of the\n * interactive pivot gizmo used for manipulating 3D objects.\n */\nexport interface NgtsPivotControlsOptions {\n\t/**\n\t * Enables/disables the control.\n\t * @default true\n\t */\n\tenabled: boolean;\n\t/**\n\t * Scale of the gizmo.\n\t * @default 1\n\t */\n\tscale: number;\n\t/**\n\t * Width of the gizmo lines (THREE.Line2 prop).\n\t * @default 4\n\t */\n\tlineWidth: number;\n\t/**\n\t * If true, the gizmo remains constant in screen size. Scale is then in pixels.\n\t * @default false\n\t */\n\tfixed: boolean;\n\t/**\n\t * Position offset of the pivot point. Does not shift content, only the gizmo position.\n\t * @default [0, 0, 0]\n\t */\n\toffset: [number, number, number];\n\t/**\n\t * Starting rotation of the gizmo in radians [x, y, z].\n\t * @default [0, 0, 0]\n\t */\n\trotation: [number, number, number];\n\n\t/**\n\t * Starting transformation matrix. If provided, the group uses this matrix.\n\t */\n\tmatrix?: THREE.Matrix4;\n\t/**\n\t * Bounding box anchor point. Each axis can be -1 (min), 0 (center), or +1 (max).\n\t */\n\tanchor?: [number, number, number];\n\t/**\n\t * If true, automatically applies the local transform on drag.\n\t * @default true\n\t */\n\tautoTransform: boolean;\n\t/**\n\t * Which axes are active and can be manipulated [x, y, z].\n\t * @default [true, true, true]\n\t */\n\tactiveAxes: [boolean, boolean, boolean];\n\n\t/**\n\t * Disables all translation arrows.\n\t * @default false\n\t */\n\tdisableAxes: boolean;\n\t/**\n\t * Disables all plane sliders.\n\t * @default false\n\t */\n\tdisableSliders: boolean;\n\t/**\n\t * Disables all rotation handles.\n\t * @default false\n\t */\n\tdisableRotations: boolean;\n\t/**\n\t * Disables all scaling spheres.\n\t * @default false\n\t */\n\tdisableScaling: boolean;\n\n\t/**\n\t * Translation limits for each axis as [min, max] pairs. Undefined means no limit.\n\t */\n\ttranslationLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\t/**\n\t * Rotation limits for each axis as [min, max] pairs in radians. Undefined means no limit.\n\t */\n\trotationLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\t/**\n\t * Scale limits for each axis as [min, max] pairs. Undefined means no limit.\n\t */\n\tscaleLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\n\t/**\n\t * Colors for the X, Y, and Z axes.\n\t * @default ['#ff2060', '#20df80', '#2080ff']\n\t */\n\taxisColors: [string | number, string | number, string | number];\n\t/**\n\t * Color when a gizmo element is hovered.\n\t * @default '#ffff40'\n\t */\n\thoveredColor: string | number;\n\t/**\n\t * Whether to show HTML value annotations during drag.\n\t * @default false\n\t */\n\tannotations: boolean;\n\t/**\n\t * CSS class name applied to the HTML annotations.\n\t */\n\tannotationsClass?: string;\n\t/**\n\t * Whether the gizmo should be occluded by scene geometry.\n\t * @default true\n\t */\n\tdepthTest: boolean;\n\t/**\n\t * Render order for the gizmo.\n\t * @default 500\n\t */\n\trenderOrder: number;\n\t/**\n\t * Opacity of the gizmo elements.\n\t * @default 1\n\t */\n\topacity?: number;\n\t/**\n\t * Whether the gizmo is visible.\n\t * @default true\n\t */\n\tvisible: boolean;\n\t/**\n\t * Custom user data to attach to gizmo meshes.\n\t */\n\tuserData?: NgtAnyRecord;\n}\n\nconst defaultOptions: NgtsPivotControlsOptions = {\n\tenabled: true,\n\tautoTransform: true,\n\tdisableAxes: false,\n\tdisableSliders: false,\n\tdisableRotations: false,\n\tdisableScaling: false,\n\tactiveAxes: [true, true, true],\n\toffset: [0, 0, 0],\n\trotation: [0, 0, 0],\n\tscale: 1,\n\tlineWidth: 4,\n\tfixed: false,\n\tdepthTest: true,\n\taxisColors: ['#ff2060', '#20df80', '#2080ff'],\n\thoveredColor: '#ffff40',\n\tannotations: false,\n\topacity: 1,\n\tvisible: true,\n\trenderOrder: 500,\n};\n\n/**\n * A component that provides an interactive pivot-style gizmo for manipulating 3D objects.\n *\n * NgtsPivotControls creates a multi-axis gizmo with arrows for translation, plane sliders\n * for 2D movement, rotators for rotation, and spheres for scaling. The gizmo can be\n * customized to enable/disable specific transformation types and constrained with limits.\n *\n * @example\n * ```html\n * <ngts-pivot-controls [options]=\"{ scale: 0.5 }\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-pivot-controls>\n * ```\n *\n * @example\n * ```html\n * <ngts-pivot-controls\n * [options]=\"{\n * disableRotations: true,\n * disableScaling: true,\n * translationLimits: [[-1, 1], undefined, undefined]\n * }\"\n * (dragged)=\"onDrag($event)\"\n * (dragStarted)=\"onDragStart($event)\"\n * (dragEnded)=\"onDragEnd()\"\n * >\n * <ngt-mesh />\n * </ngts-pivot-controls>\n * ```\n */\n@Component({\n\tselector: 'ngts-pivot-controls',\n\ttemplate: `\n\t\t<ngt-group #parent>\n\t\t\t<ngt-group #group [matrix]=\"matrix()\" [matrixAutoUpdate]=\"false\" [parameters]=\"parameters()\">\n\t\t\t\t<ngt-group #gizmo [visible]=\"visible()\" [position]=\"offset()\" [rotation]=\"rotation()\">\n\t\t\t\t\t@if (enabled()) {\n\t\t\t\t\t\t@let _disableAxes = disableAxes();\n\t\t\t\t\t\t@let _disableSliders = disableSliders();\n\t\t\t\t\t\t@let _disableRotations = disableRotations();\n\t\t\t\t\t\t@let _disableScaling = disableScaling();\n\t\t\t\t\t\t@let _activeAxes = activeAxes();\n\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[0]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"0\" [direction]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"1\" [direction]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"2\" [direction]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[0] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"2\" [dir1]=\"xDir\" [dir2]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[0] && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"1\" [dir1]=\"zDir\" [dir2]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[2] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"0\" [dir1]=\"yDir\" [dir2]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[0] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"2\" [dir1]=\"xDir\" [dir2]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[0] && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"1\" [dir1]=\"zDir\" [dir2]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[2] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"0\" [dir1]=\"yDir\" [dir2]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[0]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"0\" [direction]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"1\" [direction]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"2\" [direction]=\"zDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</ngt-group>\n\t\t\t\t<ngt-group #children>\n\t\t\t\t\t<ng-content />\n\t\t\t\t</ngt-group>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsAxisArrow, NgtsPlaneSlider, NgtsAxisRotator, NgtsScalingSphere],\n})\nexport class NgtsPivotControls {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'matrix',\n\t\t'autoTransform',\n\t\t'anchor',\n\t\t'disableAxes',\n\t\t'disableSliders',\n\t\t'disableRotations',\n\t\t'disableScaling',\n\t\t'activeAxes',\n\t\t'offset',\n\t\t'rotation',\n\t\t'scale',\n\t\t'lineWidth',\n\t\t'fixed',\n\t\t'translationLimits',\n\t\t'rotationLimits',\n\t\t'scaleLimits',\n\t\t'depthTest',\n\t\t'axisColors',\n\t\t'hoveredColor',\n\t\t'annotations',\n\t\t'annotationsClass',\n\t\t'opacity',\n\t\t'visible',\n\t\t'userData',\n\t\t'renderOrder',\n\t]);\n\n\tdragStarted = output<OnDragStartParameters>();\n\tdragEnded = output<void>();\n\tdragged = output<OnDragParameters>();\n\n\tprivate autoTransform = pick(this.options, 'autoTransform');\n\tprotected matrix = pick(this.options, 'matrix');\n\tprotected offset = pick(this.options, 'offset');\n\tprotected rotation = pick(this.options, 'rotation');\n\tprotected visible = pick(this.options, 'visible');\n\tprotected enabled = pick(this.options, 'enabled');\n\tprotected disableAxes = pick(this.options, 'disableAxes');\n\tprotected disableSliders = pick(this.options, 'disableSliders');\n\tprotected disableRotations = pick(this.options, 'disableRotations');\n\tprotected disableScaling = pick(this.options, 'disableScaling');\n\tprotected activeAxes = pick(this.options, 'activeAxes');\n\n\tannotations = pick(this.options, 'annotations');\n\tannotationsClass = pick(this.options, 'annotationsClass');\n\ttranslationLimits = pick(this.options, 'translationLimits');\n\trotationLimits = pick(this.options, 'rotationLimits');\n\tscaleLimits = pick(this.options, 'scaleLimits');\n\tfixed = pick(this.options, 'fixed');\n\thoveredColor = pick(this.options, 'hoveredColor');\n\taxisColors = pick(this.options, 'axisColors');\n\tlineWidth = pick(this.options, 'lineWidth');\n\tscale = pick(this.options, 'scale');\n\tuserData = pick(this.options, 'userData');\n\topacity = pick(this.options, 'opacity');\n\tdepthTest = pick(this.options, 'depthTest');\n\trenderOrder = pick(this.options, 'renderOrder');\n\n\tprotected xDir = xDir;\n\tprotected yDir = yDir;\n\tprotected zDir = zDir;\n\n\tparentRef = viewChild.required<ElementRef<THREE.Group>>('parent');\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tgizmoRef = viewChild.required<ElementRef<THREE.Group>>('gizmo');\n\tchildrenRef = viewChild.required<ElementRef<THREE.Group>>('children');\n\n\tprivate store = injectStore();\n\n\ttranslation: [number, number, number] = [0, 0, 0];\n\n\tprivate anchor = pick(this.options, 'anchor');\n\tprivate cameraScale = new THREE.Vector3(1, 1, 1);\n\tprivate gizmoScale = new THREE.Vector3(1, 1, 1);\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tconst anchor = this.anchor();\n\t\t\tif (!anchor) return;\n\n\t\t\tconst childrenContainer = this.childrenRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(childrenContainer);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst [gizmo, offset, invalidate] = [\n\t\t\t\tthis.gizmoRef().nativeElement,\n\t\t\t\tthis.offset(),\n\t\t\t\tthis.store.invalidate(),\n\t\t\t\tthis.options(),\n\t\t\t\t[instanceState.objects(), instanceState.nonObjects()],\n\t\t\t];\n\t\t\tchildrenContainer.updateWorldMatrix(true, true);\n\n\t\t\tmPInv.copy(childrenContainer.matrixWorld).invert();\n\t\t\tbb.makeEmpty();\n\n\t\t\tchildrenContainer.traverse((obj) => {\n\t\t\t\tif (!(obj as THREE.Mesh).geometry) return;\n\t\t\t\tif (!(obj as THREE.Mesh).geometry.boundingBox) (obj as THREE.Mesh).geometry.computeBoundingBox();\n\t\t\t\tmL.copy(obj.matrixWorld).premultiply(mPInv);\n\t\t\t\tconst boundingBox = (obj as THREE.Mesh).geometry.boundingBox;\n\t\t\t\tif (boundingBox) {\n\t\t\t\t\tbbObj.copy(boundingBox);\n\t\t\t\t\tbbObj.applyMatrix4(mL);\n\t\t\t\t\tbb.union(bbObj);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvCenter.copy(bb.max).add(bb.min).multiplyScalar(0.5);\n\t\t\tvSize.copy(bb.max).sub(bb.min).multiplyScalar(0.5);\n\t\t\tvAnchorOffset\n\t\t\t\t.copy(vSize)\n\t\t\t\t.multiply(new THREE.Vector3(...anchor))\n\t\t\t\t.add(vCenter);\n\t\t\tvPosition.set(...offset).add(vAnchorOffset);\n\t\t\tgizmo.position.copy(vPosition);\n\t\t\tinvalidate();\n\t\t});\n\n\t\tconst vec = new THREE.Vector3();\n\t\tbeforeRender(({ camera, size, invalidate }) => {\n\t\t\tconst [{ fixed, scale, matrix }, gizmo, group] = [\n\t\t\t\tthis.options(),\n\t\t\t\tthis.gizmoRef().nativeElement,\n\t\t\t\tthis.groupRef().nativeElement,\n\t\t\t];\n\n\t\t\tif (fixed) {\n\t\t\t\tconst sf = calculateScaleFactor(gizmo.getWorldPosition(vec), scale, camera, size);\n\t\t\t\tthis.cameraScale.setScalar(sf);\n\t\t\t}\n\n\t\t\tif (is.three<THREE.Matrix4>(matrix, 'isMatrix4')) {\n\t\t\t\tgroup.matrix = matrix;\n\t\t\t}\n\n\t\t\t// Update gizmo scale in accordance with matrix changes\n\t\t\t// Without this, there might be noticeable turbulence if scaling happens fast enough\n\t\t\tgizmo.updateWorldMatrix(true, true);\n\n\t\t\tmG.makeRotationFromEuler(gizmo.rotation).setPosition(gizmo.position).premultiply(group.matrixWorld);\n\t\t\tthis.gizmoScale.setFromMatrixScale(mG);\n\n\t\t\tvScale.copy(this.cameraScale).divide(this.gizmoScale);\n\n\t\t\tif (\n\t\t\t\tMath.abs(gizmo.scale.x - vScale.x) > 1e-4 ||\n\t\t\t\tMath.abs(gizmo.scale.y - vScale.y) > 1e-4 ||\n\t\t\t\tMath.abs(gizmo.scale.z - vScale.z) > 1e-4\n\t\t\t) {\n\t\t\t\tgizmo.scale.copy(vScale);\n\t\t\t\tinvalidate();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Called when a drag operation starts. Captures the initial transform state.\n\t *\n\t * @param parameters - Information about the drag operation\n\t */\n\tonDragStart(parameters: OnDragStartParameters) {\n\t\tconst group = this.groupRef().nativeElement;\n\t\tmL0.copy(group.matrix);\n\t\tmW0.copy(group.matrixWorld);\n\t\tthis.dragStarted.emit(parameters);\n\t\tthis.store.snapshot.invalidate();\n\t}\n\n\t/**\n\t * Called during a drag operation. Updates the transform and emits the dragged event.\n\t *\n\t * @param mdW - The world-space delta transformation matrix\n\t */\n\tonDrag(mdW: THREE.Matrix4) {\n\t\tconst [parent, group, autoTransform] = [\n\t\t\tthis.parentRef().nativeElement,\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.autoTransform(),\n\t\t];\n\n\t\tmP.copy(parent.matrixWorld);\n\t\tmPInv.copy(mP).invert();\n\t\t// After applying the delta\n\t\tmW.copy(mW0).premultiply(mdW);\n\t\tmL.copy(mW).premultiply(mPInv);\n\t\tmL0Inv.copy(mL0).invert();\n\t\tmdL.copy(mL).multiply(mL0Inv);\n\n\t\tif (autoTransform) {\n\t\t\tgroup.matrix.copy(mL);\n\t\t}\n\n\t\tthis.dragged.emit({ l: mL, deltaL: mdL, w: mW, deltaW: mdW });\n\t\tthis.store.snapshot.invalidate();\n\t}\n\n\t/**\n\t * Called when a drag operation ends. Emits the dragEnded event.\n\t */\n\tonDragEnd() {\n\t\tthis.dragEnded.emit();\n\t\tthis.store.snapshot.invalidate();\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\toutput,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetInstanceState,\n\tinjectStore,\n\tNgtArgs,\n\tNgtThreeElement,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n\tresolveRef,\n} from 'angular-three';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { TransformControls } from 'three-stdlib';\n\n/**\n * Internal interface for controls with an enabled property.\n */\ninterface ControlsProto {\n\tenabled: boolean;\n}\n\n/**\n * Type representing the TransformControls Three.js element.\n */\nexport type NgtsTransformControlsObject = NgtThreeElement<typeof TransformControls>;\n\n/**\n * Configuration options for the NgtsTransformControls component.\n *\n * These options control the behavior and appearance of the transform gizmo\n * used for manipulating 3D objects in the scene.\n */\nexport type NgtsTransformControlsOptions = Partial<NgtsTransformControlsObject> &\n\tPartial<NgtThreeElements['ngt-group']> & {\n\t\t/**\n\t\t * Whether the controls are enabled.\n\t\t * @default true\n\t\t */\n\t\tenabled?: boolean;\n\t\t/**\n\t\t * Restricts transformation to a specific axis ('X', 'Y', 'Z', 'XY', 'YZ', 'XZ', 'XYZ').\n\t\t */\n\t\taxis?: string | null;\n\t\t/**\n\t\t * The DOM element to attach controls to.\n\t\t */\n\t\tdomElement?: HTMLElement;\n\t\t/**\n\t\t * The transformation mode.\n\t\t * @default 'translate'\n\t\t */\n\t\tmode?: 'translate' | 'rotate' | 'scale';\n\t\t/**\n\t\t * Snap increment for translation in units.\n\t\t */\n\t\ttranslationSnap?: number | null;\n\t\t/**\n\t\t * Snap increment for rotation in radians.\n\t\t */\n\t\trotationSnap?: number | null;\n\t\t/**\n\t\t * Snap increment for scaling.\n\t\t */\n\t\tscaleSnap?: number | null;\n\t\t/**\n\t\t * The coordinate space for transformations.\n\t\t * @default 'world'\n\t\t */\n\t\tspace?: 'world' | 'local';\n\t\t/**\n\t\t * The size of the gizmo.\n\t\t * @default 1\n\t\t */\n\t\tsize?: number;\n\t\t/**\n\t\t * Whether to show the X axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowX?: boolean;\n\t\t/**\n\t\t * Whether to show the Y axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowY?: boolean;\n\t\t/**\n\t\t * Whether to show the Z axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowZ?: boolean;\n\t\t/**\n\t\t * The camera to use for the controls.\n\t\t */\n\t\tcamera?: THREE.Camera;\n\t\t/**\n\t\t * Whether to make these the default controls in the store.\n\t\t * @default false\n\t\t */\n\t\tmakeDefault?: boolean;\n\t};\n\n/**\n * A component that provides interactive transform controls for manipulating 3D objects.\n *\n * NgtsTransformControls wraps Three.js TransformControls to provide an interactive\n * gizmo for translating, rotating, and scaling objects in the scene. It can be\n * attached to a specific object or wrap content as a group.\n *\n * @example\n * ```html\n * <ngts-transform-controls [options]=\"{ mode: 'translate' }\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-transform-controls>\n * ```\n *\n * @example\n * ```html\n * <ngts-transform-controls\n * [object]=\"meshRef\"\n * [options]=\"{ mode: 'rotate', showX: false }\"\n * (change)=\"onTransform($event)\"\n * (objectChange)=\"onObjectChange($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'ngts-transform-controls',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[controls()]\" [parameters]=\"controlsOptions()\" />\n\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsTransformControls {\n\tobject = input<THREE.Object3D | ElementRef<THREE.Object3D> | undefined | null>(null);\n\toptions = input({} as Partial<NgtsTransformControlsOptions>);\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'axis',\n\t\t'mode',\n\t\t'translationSnap',\n\t\t'rotationSnap',\n\t\t'scaleSnap',\n\t\t'space',\n\t\t'size',\n\t\t'showX',\n\t\t'showY',\n\t\t'showZ',\n\t\t'domElement',\n\t\t'makeDefault',\n\t\t'camera',\n\t]);\n\n\tprotected controlsOptions = pick(this.options, [\n\t\t'enabled',\n\t\t'axis',\n\t\t'mode',\n\t\t'translationSnap',\n\t\t'rotationSnap',\n\t\t'scaleSnap',\n\t\t'space',\n\t\t'size',\n\t\t'showX',\n\t\t'showY',\n\t\t'showZ',\n\t]);\n\n\tprivate camera = pick(this.options, 'camera');\n\tprivate domElement = pick(this.options, 'domElement');\n\tprivate makeDefault = pick(this.options, 'makeDefault');\n\n\tchange = output<THREE.Event>();\n\tmouseDown = output<THREE.Event>();\n\tmouseUp = output<THREE.Event>();\n\tobjectChange = output<THREE.Event>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate store = injectStore();\n\n\tcontrols = computed(() => {\n\t\tlet camera = this.camera();\n\t\tif (!camera) {\n\t\t\tcamera = this.store.camera();\n\t\t}\n\n\t\tlet domElement = this.domElement();\n\t\tif (!domElement) {\n\t\t\tdomElement = this.store.events().connected || this.store.gl.domElement();\n\t\t}\n\n\t\treturn new TransformControls(camera, domElement);\n\t});\n\n\tconstructor() {\n\t\textend({ Group });\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.updateDefaultControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.attachControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.disableDefaultControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.setupControlsEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t}\n\n\tprivate attachControlsEffect() {\n\t\tconst group = this.groupRef().nativeElement;\n\t\tif (!group) return;\n\n\t\tconst instanceState = getInstanceState(group);\n\t\tif (!instanceState) return;\n\n\t\tconst [object, controls] = [resolveRef(this.object()), this.controls(), instanceState.objects()];\n\t\tif (object) {\n\t\t\tcontrols.attach(object);\n\t\t} else {\n\t\t\tcontrols.attach(group);\n\t\t}\n\n\t\treturn () => controls.detach();\n\t}\n\n\tprivate disableDefaultControlsEffect() {\n\t\tconst defaultControls = this.store.controls() as unknown as ControlsProto;\n\t\tif (!defaultControls) return;\n\n\t\tconst controls = this.controls();\n\t\tconst callback = (event: any) => {\n\t\t\tdefaultControls.enabled = !event.value;\n\t\t};\n\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('dragging-changed', callback);\n\t\treturn () => {\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('dragging-changed', callback);\n\t\t};\n\t}\n\n\tprivate setupControlsEventsEffect() {\n\t\tconst [controls, invalidate] = [this.controls(), this.store.invalidate()];\n\t\tconst onChange = (event: THREE.Event) => {\n\t\t\tinvalidate();\n\t\t\tif (!this.change['destroyed']) {\n\t\t\t\tthis.change.emit(event);\n\t\t\t}\n\t\t};\n\t\tconst onMouseDown = this.mouseDown.emit.bind(this.mouseDown);\n\t\tconst onMouseUp = this.mouseUp.emit.bind(this.mouseUp);\n\t\tconst onObjectChange = this.objectChange.emit.bind(this.objectChange);\n\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('change', onChange);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('mouseDown', onMouseDown);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('mouseUp', onMouseUp);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('objectChange', onObjectChange);\n\n\t\treturn () => {\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('change', onChange);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('mouseDown', onMouseDown);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('mouseUp', onMouseUp);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('objectChange', onObjectChange);\n\t\t};\n\t}\n\n\tprivate updateDefaultControlsEffect() {\n\t\tconst [controls, makeDefault] = [this.controls(), this.makeDefault()];\n\t\tif (!makeDefault) return;\n\n\t\tconst oldControls = this.store.snapshot.controls;\n\t\tthis.store.update({ controls });\n\t\treturn () => this.store.update(() => ({ controls: oldControls }));\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions","vec1","vec2","calculateOffset","upV","offsetMatrix","i1","ray","intersection","i1_1"],"mappings":";;;;;;;;;;;;;;AAwBA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC7B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AACjE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAE1C;;;;;;;;;;;;;;;AAeG;MAEU,sBAAsB,CAAA;AAClC;;;;;;AAMG;AACH,IAAA,OAAO,sBAAsB,CAC5B,CAAyB,EACzB,GAAY,EAAA;AAEZ,QAAA,OAAO,IAAI;IACZ;8GAbY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,SAAS;mBAAC,EAAE,QAAQ,EAAE,iCAAiC,EAAE;;AA0D1D,MAAMA,gBAAc,GAA2B;AAC9C,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAChB,IAAA,cAAc,EAAE,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MA2BU,mBAAmB,CAAA;AAqC/B,IAAA,WAAA,GAAA;AApCA,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAACA,gBAAc,CAAC,EAAA,CAAG;QAC3E,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QAEb,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrD,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAE3C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AAEzB,QAAA,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAEhF,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAA0B,OAAO,oDAAC;AACtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,sBAAsB,4DAAC;QAEpD,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAEnB,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAE,gBAAA,OAAO,CAAC;YAE3C,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACnE,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,GAAG,OAAO;AAChF,QAAA,CAAC,6CAAC;AACQ,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;AAAE,gBAAA,OAAO,CAAC;YAE7C,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO;AACnF,QAAA,CAAC,6CAAC;QAEM,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,MAAM,GAAG,CAAC;AACV,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAG7C,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QAEjB,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,qBAAqB,EAAE;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAI;AAC1B,YAAA,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa;AACnD,gBAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;aAC9B;AAED,YAAA,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK;gBAAE;AAE9B,YAAA,MAAM,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG;AACjD,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAoC;AACxD,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;AAC1B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU;aAC9B;;AAGD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE;AAC1B,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;;;AAItB,oBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE;wBAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBACnC;gBACD;qBAAO;AACN,oBAAA,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ;;AAE7B,oBAAA,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC;;AAE1B,oBAAA,UAAU,CAAC;AACT,yBAAA,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;yBACX,eAAe,CAAC,EAAE;AAClB,yBAAA,cAAc,CAAC,IAAI,CAAC,MAAM;AAC1B,yBAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACtB,oBAAA,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE;AAC1D,oBAAA,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAE9B,oBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE;wBAC3C,KAAK,eAAe,CAAC,WAAW,CAC/B,UAAU,CAAC,QAAQ,CAAC,CAAC,EACrB,UAAU,CAAC,QAAQ,CAAC,CAAC,EACrB,UAAU,CAAC,QAAQ,CAAC,CAAC,CACrB;oBACF;AAEA,oBAAA,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAAE,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAC3C,yBAAA,IAAI,eAAe;AAAE,wBAAA,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC;AAEvD,oBAAA,UAAU,EAAE;gBACb;YACD;;YAGA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACvC,YAAA,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAC/C,QAAA,CAAC,CAAC;IACH;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,SAAwB,EAAA;AACnC,QAAA,MAAM,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG;AACjD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAoC;AACxD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;SAC1B;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,eAAe,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe;kBACpD,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU;AAC3C,kBAAE,eAAe,CAAC,MAAM;QAC1B;QACA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;;AAGpD,QAAA,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;;AAG9B,QAAA,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACtE,QAAA,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;AAC5B,QAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AAEzB,QAAA,UAAU,EAAE;IACb;IAEQ,qBAAqB,GAAA;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7B;AAEQ,IAAA,eAAe,CAAC,QAAuB,EAAA;QAC9C,OAAO,eAAe,IAAK,QAA0B;IACtD;AAEQ,IAAA,gBAAgB,CAAC,QAAwC,EAAA;QAChE,OAAO,WAAW,IAAK,QAA2B;IACnD;8GAjJY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,2RAUW,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGhD,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCjD;;;;;;;;;;;;;;;;;;;AAmBT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGoB,mBAAmB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEtE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1B/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;AAmBT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,SAAS,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;AACnF,iBAAA;qQAW0C,sBAAsB,CAAA,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAEjC,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACxB,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAuI5D;;;;AAIG;MACU,eAAe,GAAG,CAAC,mBAAmB,EAAE,sBAAsB;;ACzR3E,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC/E,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;AA6CxE,MAAM,0BAA0B,GAA8B;AAC7D,IAAA,IAAI,EAAE,mCAAmC;AACzC,IAAA,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,MAAM,CAAC,EAAE;IAChB,UAAU,EAAE,MAAM,CAAC,KAAK;IACxB,SAAS,EAAE,MAAM,CAAC,IAAI;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM;AAC1B,IAAA,OAAO,EAAE,CAAC;CACV;AAED;;;;;AAKG;MAeU,YAAY,CAAA;AAgDxB,IAAA,WAAA,GAAA;AA/CA,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAW;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAU;AAChC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,0BAA0B,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,0BAA0B,CAAC,EAAA,CAAG;QAE3F,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACjC,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAE7C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;QAEnB,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC5E,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG;gBAC/D,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;aACf;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,YAAA,MAAM,CAAC,KAAK,GAAG,GAAG;AAClB,YAAA,MAAM,CAAC,MAAM,GAAG,GAAG;YAEnB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;AACxC,YAAA,OAAO,CAAC,SAAS,GAAG,KAAK;AACzB,YAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AACnD,YAAA,OAAO,CAAC,WAAW,GAAG,WAAW;AACjC,YAAA,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AACrD,YAAA,OAAO,CAAC,IAAI,GAAG,IAAI;AACnB,YAAA,OAAO,CAAC,SAAS,GAAG,QAAQ;AAC5B,YAAA,OAAO,CAAC,SAAS,GAAG,SAAS;AAC7B,YAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAEpD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAE5D,YAAA,OAAO,OAAO;AACf,QAAA,CAAC,mDAAC;AAGD,QAAA,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B;8GAlDY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZd;;;;;;;;AAQT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIW,YAAY,EAAA,UAAA,EAAA,CAAA;kBAdxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;;AAsDD;;;;;AAKG;MAeU,QAAQ,CAAA;AAWpB,IAAA,WAAA,GAAA;AAVA,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAwC,mDAAC;QACzD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAEpC,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAyB,MAAM,CAAC;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEvC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,iDAAC;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QA2BxB,IAAA,CAAA,IAAI,GAAG,IAAI;AAxB7B,QAAA,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;;AAG7B,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,UAAU,EAAE,CAAC,EAAE,KAAI;gBAClB,EAAE,CAAC,eAAe,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;AACD,YAAA,WAAW,EAAE,CAAC,EAAE,KAAI;gBACnB,EAAE,CAAC,eAAe,EAAE;gBACpB,EAAE,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrE,CAAC;AACD,SAAA,CAAC;IACH;AAEU,IAAA,eAAe,CAAC,KAAgC,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC;aACtB;YACJ,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,CAAC,MAAM,CAAC;QACjD;IACD;8GAlCY,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZV;;;;;;;AAOT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApEW,YAAY,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAyEZ,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE;;;;;;;AAOT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,iBAAA;2RAK6D,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAmCpE;;;;;AAKG;MAaU,QAAQ,CAAA;AAkBpB,IAAA,WAAA,GAAA;AAjBA,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAO;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAiB;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,GAAA,EAAA,CAAA,EAC9B,SAAS,EAAE,CAAC,KAAyB,KAAI;gBACxC,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC,KAAK;AAC5C,gBAAA,OAAO,KAAK;AACb,YAAA,CAAC,GACA;QACF,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAEpC,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAyB,MAAM,CAAC;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEvC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,KAAK,iDAAC;QACrB,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;QAG7E,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;;AAGhD,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,UAAU,EAAE,CAAC,EAAE,KAAI;gBAClB,EAAE,CAAC,eAAe,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB,CAAC;AACD,YAAA,WAAW,EAAE,CAAC,EAAE,KAAI;gBACnB,EAAE,CAAC,eAAe,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACrB,CAAC;AACD,SAAA,CAAC;IACH;AAEU,IAAA,eAAe,CAAC,KAAgC,EAAA;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC;aACtB;YACJ,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9C;IACD;8GAzCY,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVV;;;;;AAKT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEL,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAZpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE;;;;;AAKT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,iBAAA;meAY6D,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAwCpE;;;;;;;;;;;;;;;AAeG;MA4BU,iBAAiB,CAAA;AAmC7B,IAAA,WAAA,GAAA;AAlCA,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAAuC,mDAAC;QACxD,IAAA,CAAA,KAAK,GAAG,MAAM,EAA6B;QAEjC,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAE7C,QAAA,IAAA,CAAA,OAAO,GAAoB;AACpC,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACX,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACZ,SAAA,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACpB,IAAA,CAAA,gBAAgB,GAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAoB;AAClC,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACV,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACX,SAAA,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACpB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CACxC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAY,MAAc,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAQ,CACvF;AAGA,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAClB;AAEA,IAAA,IAAc,OAAO,GAAA;AACpB,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1D,QAAA,OAAO,SAAS;IACjB;AAEQ,IAAA,kBAAkB,CAAC,GAAa,EAAA;AACvC,QAAA,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;IACtD;8GA9CY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBnB;;;;;;;;;;;;;;;;;;;;EAoBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlJW,QAAQ,+FAyDR,QAAQ,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA8FR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3B7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;AAoBT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7B,iBAAA;;;AC5SD;;;;;AAKG;MAeU,IAAI,CAAA;AAUhB,IAAA,WAAA,GAAA;AATA,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,kDAC9B,SAAS,EAAE,CAAC,KAA2C,KAAI;gBAC1D,IAAI,KAAK,KAAK,SAAS;AAAE,oBAAA,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AACjD,gBAAA,OAAO,KAAK;AACb,YAAA,CAAC,GACA;QACF,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;QAC1C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;QAGpC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACxD;8GAZY,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAJ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAI,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZN;;;;;;;AAOT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEL,IAAI,EAAA,UAAA,EAAA,CAAA;kBAdhB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,iBAAA;;AAgBD;;;;;AAKG;MAiBU,QAAQ,CAAA;AAmDpB,IAAA,WAAA,GAAA;AAlDA,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAc;QACvC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,MAAM,sDAAC;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,CAAC,yDAAC;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,mCAAmC,gDAAC;QACjD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA6B;AAEpC,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA2B,QAAQ,CAAC;AAElE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;QACzC,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAEnB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG;gBAC/C,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;aACf;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACpD,YAAA,MAAM,CAAC,KAAK,GAAG,EAAE;AACjB,YAAA,MAAM,CAAC,MAAM,GAAG,EAAE;YAElB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE;YACxC,OAAO,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,CAAC,SAAS,GAAG,QAAQ;YAC5B,OAAO,CAAC,IAAI,EAAE;YAEd,IAAI,KAAK,EAAE;AACV,gBAAA,OAAO,CAAC,IAAI,GAAG,IAAI;AACnB,gBAAA,OAAO,CAAC,SAAS,GAAG,QAAQ;AAC5B,gBAAA,OAAO,CAAC,SAAS,GAAG,UAAU;gBAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;YAChC;YAEA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;YAC/C,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAC5D,YAAA,OAAO,OAAO;AACf,QAAA,CAAC,mDAAC;AAEQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,iDAAC;AAG7G,QAAA,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;;AAGlC,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;YAC5B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,SAAA,CAAC;IACH;AAEU,IAAA,aAAa,CAAC,KAAkC,EAAA;QACzD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAErB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;AAEU,IAAA,YAAY,CAAC,KAAkC,EAAA;QACxD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC;aACtB;YACJ,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB;IACD;AAEU,IAAA,aAAa,CAAC,KAAkC,EAAA;QACzD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;IACpD;8GApFY,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdV;;;;;;;;;AAST,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKW,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAhBpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,CAAA,CAAA;oBAED,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;61BAWiE,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAkI1E,MAAMA,gBAAc,GAA6B;AAChD,IAAA,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAC7C,IAAA,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACvB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,mCAAmC;CACzC;AAED;;;;;;;;;;;;;;;AAeG;MA+EU,iBAAiB,CAAA;AA2B7B,IAAA,WAAA,GAAA;QA1BmB,IAAA,CAAA,IAAI,GAAG,IAAI;AAE9B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAACA,gBAAc,CAAC,EAAA,CAAG;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzC,YAAY;YACZ,WAAW;YACX,QAAQ;YACR,eAAe;YACf,YAAY;YACZ,kBAAkB;YAClB,eAAe;YACf,UAAU;YACV,MAAM;AACN,SAAA,CAAC;QACF,IAAA,CAAA,KAAK,GAAG,MAAM,EAA6B;QAEjC,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7C,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QACnD,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACzD,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QACnD,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7C,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AAG1C,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAClB;AAEA,IAAA,IAAc,OAAO,GAAA;AACpB,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1D,QAAA,OAAO,SAAS;IACjB;8GAlCY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5EnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArRW,IAAI,kGAqCJ,QAAQ,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAqPR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA9E7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuET,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;AACzB,iBAAA;;;AC5TD,MAAMC,MAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAChC,MAAMC,MAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAEhC;;;;;;;;;;;AAWG;AACG,SAAUC,iBAAe,CAC9B,UAAyB,EACzB,MAAqB,EACrB,QAAuB,EACvB,MAAqB,EAAA;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAE7B,IAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACb,QAAA,OAAO,CAAC,EAAE,GAAG,EAAE;IAChB;AAEA,IAAAF,MAAI,CAAC,IAAI,CAAC,MAAM;AACd,SAAA,cAAc,CAAC,EAAE,GAAG,EAAE;SACtB,GAAG,CAAC,MAAM,CAAC;AACb,IAAAC,MAAI,CAAC,IAAI,CAAC,MAAM;AACd,SAAA,cAAc,CAAC,EAAE,GAAG,EAAE;SACtB,GAAG,CAAC,QAAQ;SACZ,GAAG,CAAC,UAAU,CAAC;AAEjB,IAAA,OAAO,CAACD,MAAI,CAAC,GAAG,CAACC,MAAI,CAAC,GAAGD,MAAI,CAAC,GAAG,CAACA,MAAI,CAAC;AACxC;AAEA,MAAMG,KAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,MAAMC,cAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAExC;;;;;AAKG;MAmEU,aAAa,CAAA;AAmCzB,IAAA,WAAA,GAAA;AAlCmB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,UAAU;AAEhD,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAiB;AAC3C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAE1B,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AAC/D,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAAC,QAAQ,CAA0B,YAAY,CAAC;QACzE,IAAA,CAAA,aAAa,GAAG,SAAS,CAAoC,YAAY,0DAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAE9F,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QACvB,IAAA,CAAA,SAAS,GAA6D,IAAI;QAC1E,IAAA,CAAA,OAAO,GAAG,CAAC;AAET,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,iDACjG;QAES,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,CAAC,KAAK;AACvB,cAAE,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI;cAChE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAClC;AACS,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,sDAAC;AAChG,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,0DACnG;AACS,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAACD,KAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;YACvG,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAClE,QAAA,CAAC,mDAAC;AAGD,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;;AAG1E,QAAA,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE;YAChC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,SAAA,CAAC;IACH;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG;AACtD,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;YAC7B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;AACxD,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;SACnC;QAED,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3E,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACnC;QAEA,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC;AACvE,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;AACtC,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;QAChE,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAEvF,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;QAGtC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAChD;AAEA,IAAA,WAAW,CAAC,KAAkC,EAAA;AAC7C,QAAA,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC9B,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;SACxD;QAED,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAClC;QAEA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAE9B,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;;QAGrC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IACpD;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;AAC1C,YAAA,MAAM,CAAC,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;gBACnC,IAAI,CAAC,IAAI,EAAE;aACX;AAED,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAEtE,IAAI,MAAM,GAAGD,iBAAe,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACpF,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACtB,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9C;AAEA,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACtB,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9C;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM;YAE5D,IAAI,UAAU,EAAE;AACf,gBAAA,UAAU,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC5E;YAEAE,cAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5E,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAACA,cAAY,CAAC;QACxC;IACD;AAEA,IAAA,YAAY,CAAC,KAAkC,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;8GAzIY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAQkE,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2DT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,OAAO,gFAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEf,aAAa,EAAA,UAAA,EAAA,CAAA;kBAlEzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACtC,iBAAA;wRAO+D,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACF,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACX,YAAY,OAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3HxG,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACpC,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAE3C;;;;;AAKG;AACH,SAAS,SAAS,CAAC,OAAe,EAAA;IACjC,OAAO,CAAC,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE;AACjC;AAEA;;;;;AAKG;AACH,SAAS,SAAS,CAAC,OAAe,EAAA;IACjC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG;AACjC;AAEA;;;;;;;;;;;AAWG;AACH,SAAS,cAAc,CACtB,UAAyB,EACzB,iBAAgC,EAChC,MAAqB,EACrB,EAAiB,EACjB,EAAiB,EAAA;IAEjB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACrC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACnD,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO;IACzC,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO;IACvD,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;IAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC;IAClE,OAAO,iBAAiB,GAAG,UAAU;AACtC;AAEA;;;;;;AAMG;AACH,SAAS,IAAI,CAAC,GAAW,EAAE,KAAa,EAAA;IACvC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;AAC/B,IAAA,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAErB,IAAA,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK;AACvB;AAEA;;;;;AAKG;AACH,SAAS,aAAa,CAAC,KAAa,EAAA;AACnC,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAErC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE;AAC5B,QAAA,OAAO,GAAG;IACX;AAEA,IAAA,IAAI,MAAM,GAAG,GAAG,EAAE;AACjB,QAAA,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;IACtB;AAEA,IAAA,OAAO,MAAM;AACd;AAEA,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACrC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,MAAMC,KAAG,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B,MAAMC,cAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAExC;;;;;;AAMG;MA+CU,eAAe,CAAA;AAyC3B,IAAA,WAAA,GAAA;AAxCmB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,UAAU;AAEhD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAiB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAiB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAElC,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;QAC/D,IAAA,CAAA,aAAa,GAAG,SAAS,CAAqC,YAAY,0DAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAEvF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAEnB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QACzB,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,SAAS,GAON,IAAI;AAEL,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;AAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;YAC7C,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/E,QAAA,CAAC,mDAAC;AACQ,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,6CAAC;AAC3F,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAK;YAC7B,MAAM,QAAQ,GAAG,EAAE;YACnB,MAAM,MAAM,GAAoB,EAAE;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ;AAC5C,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F;AACA,YAAA,OAAO,MAAM;AACd,QAAA,CAAC,+CAAC;AAGD,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;;AAGjB,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,SAAA,CAAC;IACH;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG;AAC3C,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;YAC7B,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;SACxD;QAED,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;AAC7D,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACnC;QAEA,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3E,QAAA,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACpF,QAAA,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACpF,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACxF,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7E,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QAC9D,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;AAEpG,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;QAGtC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAChD;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS;AACpE,YAAA,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG;AAC1C,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;gBACnC,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;aACnC;AAED,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;AAEnE,YAAAD,KAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,YAAAA,KAAG,CAAC,cAAc,CAAC,KAAK,EAAEC,cAAY,CAAC;AACvC,YAAAD,KAAG,CAAC,SAAS,CAAC,MAAM,EAAE;AACtB,YAAAA,KAAG,CAAC,cAAc,CAAC,KAAK,EAAEC,cAAY,CAAC;AACvC,YAAA,IAAI,UAAU,GAAG,cAAc,CAAC,UAAU,EAAEA,cAAY,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;AACzE,YAAA,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC;AAEnC,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACnB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;AACvC,gBAAA,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;YAChC;AAEA,YAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AACtE,gBAAA,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC;gBACtC,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,UAAU;gBACzE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,EAAE;gBAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU;YACtC;iBAAO;gBACN,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;AACpD,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK;YAC1E;YAEA,IAAI,UAAU,EAAE;AACf,gBAAA,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;YAChD;AAEA,YAAA,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC;AAC9C,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAChE,YAAA,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;QACrC;IACD;AAEA,IAAA,WAAW,CAAC,KAAkC,EAAA;AAC7C,QAAA,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC9B,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;SACxD;QACD,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAClC;QACA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAE9B,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;;QAGrC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IACpD;AAEA,IAAA,YAAY,CAAC,KAAkC,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;8GAtJY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAQyD,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEN,eAAe,EAAA,UAAA,EAAA,CAAA;kBA9C3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7B,iBAAA;AAQuD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,OAAO,uEACA,YAAY,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC3JjG;;;;;;;;;;AAUG;AACH,SAAS,kBAAkB,CAAC,EAAiB,EAAE,EAAiB,EAAE,MAAqB,EAAA;AACtF,IAAA,MAAM,EAAE,GACP,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClE,UAAE;AACF,UAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpE,cAAE;cACA,CAAC;AACN,IAAA,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,EAAE,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAC9E,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IAElC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AAE5B,IAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACd;AAEA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;AAC3B,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACxC,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAExC;;;;;;AAMG;MAyDU,eAAe,CAAA;AA0C3B,IAAA,WAAA,GAAA;AAzCmB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,UAAU;AAEhD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAiB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAiB;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAElC,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AACvD,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAyB,MAAM,CAAC;QACpE,IAAA,CAAA,aAAa,GAAG,SAAS,CAAqC,YAAY,0DAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AAEvF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QACvB,IAAA,CAAA,SAAS,GAChB,IAAI;QACG,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,QAAQ,GAAG,CAAC;AAEV,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;AAC7C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;YAC7C,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/E,QAAA,CAAC,mDAAC;AAEQ,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,gDAAC;AAC5F,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,kDAAC;AAClG,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAC1B,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,iDACjG;AACD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO;gBACN,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC1B;AACF,QAAA,CAAC,kDAAC;QAGD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;;AAGzD,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;YAC1B,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,SAAA,CAAC;IACH;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG;AAC3C,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YACnC,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;SACxD;QAED,IAAI,UAAU,EAAE;YACf,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACnJ,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACnC;QAEA,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3E,QAAA,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACpF,QAAA,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACpF,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;AACxF,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC;AAC7E,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;AAEnG,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;QAGtC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAChD;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS;AACpD,YAAA,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;gBACtC,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;aACnC;YAED,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAClF,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;AAElF,YAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,YAAA,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;AACvC,YAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;AACtB,YAAA,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC;AACvC,YAAA,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC;AACjE;AAC4D;AAC5D,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClD;AACA,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClD;AACA,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClD;AACA,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAClD;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO;AACxE,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO;YAExE,IAAI,UAAU,EAAE;gBACf,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpJ;AAEA,YAAA,YAAY,CAAC,eAAe,CAC3B,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,EAC/B,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,EAC/B,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAC/B;AACD,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC;QACxC;IACD;AAEA,IAAA,WAAW,CAAC,KAAkC,EAAA;AAC7C,QAAA,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC9B,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;SACxD;QACD,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAClC;QACA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAE9B,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;;QAGrC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IACpD;AAEA,IAAA,YAAY,CAAC,KAAkC,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;8GA7JY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EASyD,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/DpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGmB,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEhB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAxD3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7B,iBAAA;qWAQuD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACD,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACL,YAAY,OAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC9GjG,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAChC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAEhC;;;;;;;;;;;;AAYG;AACG,SAAU,eAAe,CAC9B,UAAyB,EACzB,MAAqB,EACrB,QAAuB,EACvB,MAAqB,EAAA;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AAE7B,IAAA,IAAI,EAAE,KAAK,CAAC,EAAE;AACb,QAAA,OAAO,CAAC,EAAE,GAAG,EAAE;IAChB;AAEA,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM;AACd,SAAA,cAAc,CAAC,EAAE,GAAG,EAAE;SACtB,GAAG,CAAC,MAAM,CAAC;AACb,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM;AACd,SAAA,cAAc,CAAC,EAAE,GAAG,EAAE;SACtB,GAAG,CAAC,QAAQ;SACZ,GAAG,CAAC,UAAU,CAAC;AAEjB,IAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AAEA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAEvC;;;;;;AAMG;MAuCU,iBAAiB,CAAA;AAqC7B,IAAA,WAAA,GAAA;AApCA,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAiB;AAC3C,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAElC,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AACvD,QAAA,IAAA,CAAA,aAAa,GAAG,SAAS,CAAC,QAAQ,CAA0B,YAAY,CAAC;QACjF,IAAA,CAAA,aAAa,GAAG,SAAS,CAAqC,YAAY,0DAAI,IAAI,EAAE,UAAU,EAAA,CAAG;AACjG,QAAA,IAAA,CAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAyB,MAAM,CAAC;AAElD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QACvB,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,SAAS,GAMN,IAAI;AAEL,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,oDAAC;QAChG,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAC3B,IAAI,CAAC,aAAa,CAAC,KAAK;AACvB,cAAE,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI;cAChE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACpC;AACD,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;YACvB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;YACvG,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAClE,QAAA,CAAC,mDAAC;AACF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAChB,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,iDACjG;QAGA,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;;AAG1D,QAAA,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE;YAChC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1C,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,SAAA,CAAC;IACH;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;AAC/C,QAAA,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG;AAC1E,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;AACxD,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;SAC7B;QAED,IAAI,UAAU,EAAE;YACf,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE;AAC5C,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;QACnC;QAEA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3E,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QACrC,MAAM,gBAAgB,GAAG;AACxB,cAAE,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI;cAChF,CAAC;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE;QACrE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAExF,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,KAAK;;QAGtC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAChD;AAEA,IAAA,aAAa,CAAC,KAAkC,EAAA;QAC/C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS;AAC3E,YAAA,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG;AACrE,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;gBAChC,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa;aAC5B;AAED,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACvF,YAAA,MAAM,OAAO,GAAG,OAAO,GAAG,gBAAgB;AAC1C,YAAA,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK;AACjD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC;AAExC,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACnB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;YACxC;AAEA,YAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AAE9C,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACtB,gBAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YAC/C;YAEA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAC,CAAC;YAE3C,IAAI,UAAU,EAAE;AACf,gBAAA,UAAU,CAAC,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACzD;YAEA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;YAClC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvF,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC;IACD;AAEA,IAAA,WAAW,CAAC,KAAkC,EAAA;QAC7C,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AAC9C,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAqC;YACxD,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa;SAC5B;QAED,IAAI,UAAU,EAAE;AACf,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAClC;QAEA,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAE9B,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,CAAC,OAAO,GAAG,IAAI;;QAGrC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IACpD;AAEA,IAAA,YAAY,CAAC,KAAkC,EAAA;QAC9C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;8GA9JY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMuD,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1CpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGmB,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtC7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5B,iBAAA;wRAKuD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACM,YAAY,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAClB,YAAY,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC3C,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AClD5D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC/B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACjC,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC9B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC9B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAClC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC/B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAE9B,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC9B,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACnC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACjC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACzC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AACrC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAElC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AA0IvC,MAAM,cAAc,GAA6B;AAChD,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC9B,IAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjB,IAAA,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAC7C,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,WAAW,EAAE,GAAG;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;MAiEU,iBAAiB,CAAA;AA+E7B,IAAA,WAAA,GAAA;AA9EA,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,cAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAA,CAAG;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzC,SAAS;YACT,QAAQ;YACR,eAAe;YACf,QAAQ;YACR,aAAa;YACb,gBAAgB;YAChB,kBAAkB;YAClB,gBAAgB;YAChB,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,OAAO;YACP,WAAW;YACX,OAAO;YACP,mBAAmB;YACnB,gBAAgB;YAChB,aAAa;YACb,WAAW;YACX,YAAY;YACZ,cAAc;YACd,aAAa;YACb,kBAAkB;YAClB,SAAS;YACT,SAAS;YACT,UAAU;YACV,aAAa;AACb,SAAA,CAAC;QAEF,IAAA,CAAA,WAAW,GAAG,MAAM,EAAyB;QAC7C,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;QAC1B,IAAA,CAAA,OAAO,GAAG,MAAM,EAAoB;QAE5B,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;QACjD,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrD,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACzD,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrD,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAEvD,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACzD,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;QAC3D,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACrD,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAC/C,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;QACjD,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7C,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACnC,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC3C,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAErC,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,IAAI,GAAG,IAAI;AAErB,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAA0B,QAAQ,CAAC;AACjE,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AAC/D,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;AAC/D,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAA0B,UAAU,CAAC;QAE7D,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;QAE7B,IAAA,CAAA,WAAW,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAG9C,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;QAEjB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM;gBAAE;YAEb,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,aAAa;AAC1D,YAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,iBAAiB,CAAC;AACzD,YAAA,IAAI,CAAC,aAAa;gBAAE;AAEpB,YAAA,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG;AACnC,gBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;gBAC7B,IAAI,CAAC,MAAM,EAAE;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvB,IAAI,CAAC,OAAO,EAAE;gBACd,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;aACrD;AACD,YAAA,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;YAE/C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;YAClD,EAAE,CAAC,SAAS,EAAE;AAEd,YAAA,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAI;gBAClC,IAAI,CAAE,GAAkB,CAAC,QAAQ;oBAAE;AACnC,gBAAA,IAAI,CAAE,GAAkB,CAAC,QAAQ,CAAC,WAAW;AAAG,oBAAA,GAAkB,CAAC,QAAQ,CAAC,kBAAkB,EAAE;AAChG,gBAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,gBAAA,MAAM,WAAW,GAAI,GAAkB,CAAC,QAAQ,CAAC,WAAW;gBAC5D,IAAI,WAAW,EAAE;AAChB,oBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACvB,oBAAA,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;AACtB,oBAAA,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBAChB;AACD,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;AACpD,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;YAClD;iBACE,IAAI,CAAC,KAAK;iBACV,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;iBACrC,GAAG,CAAC,OAAO,CAAC;YACd,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;AAC3C,YAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,YAAA,UAAU,EAAE;AACb,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;QAC/B,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAI;AAC7C,YAAA,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG;gBAChD,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC7B,gBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;aAC7B;YAED,IAAI,KAAK,EAAE;AACV,gBAAA,MAAM,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;AACjF,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B;YAEA,IAAI,EAAE,CAAC,KAAK,CAAgB,MAAM,EAAE,WAAW,CAAC,EAAE;AACjD,gBAAA,KAAK,CAAC,MAAM,GAAG,MAAM;YACtB;;;AAIA,YAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC;YAEnC,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;AACnG,YAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;AAEtC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAErD,YAAA,IACC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;AACzC,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EACxC;AACD,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,gBAAA,UAAU,EAAE;YACb;AACD,QAAA,CAAC,CAAC;IACH;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,UAAiC,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC3C,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACtB,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;IACjC;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,GAAkB,EAAA;AACxB,QAAA,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG;AACtC,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa;AAC9B,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;YAC7B,IAAI,CAAC,aAAa,EAAE;SACpB;AAED,QAAA,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;;QAEvB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAE7B,IAAI,aAAa,EAAE;AAClB,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB;QAEA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;IACjC;AAEA;;AAEG;IACH,SAAS,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;IACjC;8GAjNY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9DnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,gGAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEhE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAhE7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,CAAC;AAC7E,iBAAA;AAmEwD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACT,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACP,OAAO,qEACJ,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1SrE;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAcU,qBAAqB,CAAA;AA6DjC,IAAA,WAAA,GAAA;AA5DA,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAiE,IAAI,kDAAC;AACpF,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,EAA2C,mDAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACzC,SAAS;YACT,MAAM;YACN,MAAM;YACN,iBAAiB;YACjB,cAAc;YACd,WAAW;YACX,OAAO;YACP,MAAM;YACN,OAAO;YACP,OAAO;YACP,OAAO;YACP,YAAY;YACZ,aAAa;YACb,QAAQ;AACR,SAAA,CAAC;AAEQ,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC9C,SAAS;YACT,MAAM;YACN,MAAM;YACN,iBAAiB;YACjB,cAAc;YACd,WAAW;YACX,OAAO;YACP,MAAM;YACN,OAAO;YACP,OAAO;YACP,OAAO;AACP,SAAA,CAAC;QAEM,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACrC,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAC7C,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;QAEvD,IAAA,CAAA,MAAM,GAAG,MAAM,EAAe;QAC9B,IAAA,CAAA,SAAS,GAAG,MAAM,EAAe;QACjC,IAAA,CAAA,OAAO,GAAG,MAAM,EAAe;QAC/B,IAAA,CAAA,YAAY,GAAG,MAAM,EAAe;AAEpC,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA0B,OAAO,CAAC;QAEvD,IAAA,CAAA,KAAK,GAAG,WAAW,EAAE;AAE7B,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC1B,IAAI,CAAC,MAAM,EAAE;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC7B;AAEA,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,UAAU,EAAE;AAChB,gBAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE;YACzE;AAEA,YAAA,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC;AACjD,QAAA,CAAC,oDAAC;AAGD,QAAA,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,EAAE;YAClD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE;YAC3C,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,EAAE;YACnD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;YAChD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;IACH;IAEQ,oBAAoB,GAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC3C,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa;YAAE;QAEpB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC;QAChG,IAAI,MAAM,EAAE;AACX,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACxB;aAAO;AACN,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACvB;AAEA,QAAA,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE;IAC/B;IAEQ,4BAA4B,GAAA;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAA8B;AACzE,QAAA,IAAI,CAAC,eAAe;YAAE;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAU,KAAI;AAC/B,YAAA,eAAe,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK;AACvC,QAAA,CAAC;;AAGD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AACvD,QAAA,OAAO,MAAK;;AAEX,YAAA,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAC3D,QAAA,CAAC;IACF;IAEQ,yBAAyB,GAAA;AAChC,QAAA,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACzE,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAkB,KAAI;AACvC,YAAA,UAAU,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACxB;AACD,QAAA,CAAC;AACD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGrE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAE7C,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;;AAEnD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;;AAE/C,QAAA,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC;AAEzD,QAAA,OAAO,MAAK;;AAEX,YAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAEhD,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;;AAEtD,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;;AAElD,YAAA,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC;AAC7D,QAAA,CAAC;IACF;IAEQ,2BAA2B,GAAA;AAClC,QAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,WAAW;YAAE;QAElB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;QAChD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IAClE;8GA3JY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXvB;;;;;;AAMT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,OAAO,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE;;;;;;AAMT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,OAAO,CAAC;AAClB,iBAAA;kfA4CuD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnM/D;;AAEG;;;;"}
1
+ {"version":3,"file":"angular-three-soba-gizmos.mjs","sources":["../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-helper.ts","../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-viewcube.ts","../../../../libs/soba/gizmos/src/lib/gizmo-helper/gizmo-viewport.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/axis-arrow.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/axis-rotator.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/plane-slider.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/scaling-sphere.ts","../../../../libs/soba/gizmos/src/lib/pivot-controls/pivot-controls.ts","../../../../libs/soba/gizmos/src/lib/transform-controls.ts","../../../../libs/soba/gizmos/src/angular-three-soba-gizmos.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tInjector,\n\tinput,\n\toutput,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, hasListener, injectStore, NgtPortal, NgtPortalAutoRender, pick } from 'angular-three';\nimport { NgtsOrthographicCamera } from 'angular-three-soba/cameras';\nimport CameraControls from 'camera-controls';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { OrbitControls } from 'three-stdlib';\n\nconst turnRate = 2 * Math.PI; // turn rate in angles per second\nconst dummy = new THREE.Object3D();\nconst matrix = new THREE.Matrix4();\nconst [q1, q2] = [new THREE.Quaternion(), new THREE.Quaternion()];\nconst target = new THREE.Vector3();\nconst targetPosition = new THREE.Vector3();\n\n/**\n * A directive that marks a template as gizmo helper content.\n *\n * Use this directive on an ng-template to provide custom content for the\n * gizmo helper. The template context provides access to the container object\n * and the portal's injector.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent let-container=\"container\">\n * <ngts-gizmo-viewport />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Directive({ selector: 'ng-template[gizmoHelperContent]' })\nexport class NgtsGizmoHelperContent {\n\t/**\n\t * Type guard for the template context.\n\t *\n\t * @param _ - The directive instance\n\t * @param ctx - The template context\n\t * @returns True if the context matches the expected shape\n\t */\n\tstatic ngTemplateContextGuard(\n\t\t_: NgtsGizmoHelperContent,\n\t\tctx: unknown,\n\t): ctx is { container: THREE.Object3D; injector: Injector } {\n\t\treturn true;\n\t}\n}\n\n/**\n * Internal interface for controls with update and target capabilities.\n */\ntype ControlsProto = { update(delta?: number): void; target: THREE.Vector3 };\n\n/**\n * Configuration options for the NgtsGizmoHelper component.\n *\n * These options control the positioning and rendering behavior of the gizmo helper.\n */\nexport interface NgtsGizmoHelperOptions {\n\t/**\n\t * The position of the gizmo helper in the viewport.\n\t * @default 'bottom-right'\n\t */\n\talignment:\n\t\t| 'top-left'\n\t\t| 'top-right'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'bottom-center'\n\t\t| 'center-right'\n\t\t| 'center-left'\n\t\t| 'center-center'\n\t\t| 'top-center';\n\t/**\n\t * Margin from the edge of the viewport in pixels [x, y].\n\t * @default [80, 80]\n\t */\n\tmargin: [number, number];\n\t/**\n\t * Render priority for the gizmo portal.\n\t * @default 1\n\t */\n\trenderPriority: number;\n\t/**\n\t * Whether to auto-clear the renderer before rendering the gizmo.\n\t */\n\tautoClear?: boolean;\n}\n\nconst defaultOptions: NgtsGizmoHelperOptions = {\n\talignment: 'bottom-right',\n\tmargin: [80, 80],\n\trenderPriority: 1,\n};\n\n/**\n * A component that displays an orientation gizmo helper in a corner of the viewport.\n *\n * The gizmo helper provides a visual indicator of the current camera orientation\n * and allows users to click on axes to animate the camera to predefined views.\n * It renders in a separate portal with its own orthographic camera.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper [options]=\"{ alignment: 'bottom-right', margin: [80, 80] }\">\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewport />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n *\n * @example\n * ```html\n * <ngts-gizmo-helper [options]=\"{ alignment: 'top-left' }\">\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewcube />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-helper',\n\ttemplate: `\n\t\t@let _renderPriority = renderPriority();\n\n\t\t<ngt-portal\n\t\t\t[container]=\"scene\"\n\t\t\t[autoRender]=\"_renderPriority\"\n\t\t\t[state]=\"{ events: { priority: _renderPriority + 1 } }\"\n\t\t>\n\t\t\t<ng-template portalContent let-injector=\"injector\">\n\t\t\t\t<ngts-orthographic-camera [options]=\"{ makeDefault: true, position: [0, 0, 200] }\" />\n\t\t\t\t<ngt-group #gizmo [position]=\"[x(), y(), 0]\">\n\t\t\t\t\t<ng-container\n\t\t\t\t\t\t[ngTemplateOutlet]=\"content()\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ container: scene, injector }\"\n\t\t\t\t\t\t[ngTemplateOutletInjector]=\"injector\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-group>\n\t\t\t</ng-template>\n\t\t</ngt-portal>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtPortal, NgtPortalAutoRender, NgtsOrthographicCamera, NgTemplateOutlet],\n})\nexport class NgtsGizmoHelperImpl {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tupdate = output<void>();\n\n\tprotected renderPriority = pick(this.options, 'renderPriority');\n\tprotected margin = pick(this.options, 'margin');\n\tprotected alignment = pick(this.options, 'alignment');\n\n\tprotected scene = new THREE.Scene();\n\n\tprotected content = contentChild.required(NgtsGizmoHelperContent, { read: TemplateRef });\n\n\tprivate gizmoRef = viewChild<ElementRef<THREE.Group>>('gizmo');\n\tprivate virtualCameraRef = viewChild(NgtsOrthographicCamera);\n\n\tprivate store = injectStore();\n\n\tprotected x = computed(() => {\n\t\tconst alignment = this.alignment();\n\t\tif (alignment.endsWith('-center')) return 0;\n\n\t\tconst [width, [marginX]] = [this.store.size.width(), this.margin()];\n\t\treturn alignment.endsWith('-left') ? -width / 2 + marginX : width / 2 - marginX;\n\t});\n\tprotected y = computed(() => {\n\t\tconst alignment = this.alignment();\n\t\tif (alignment.startsWith('center-')) return 0;\n\n\t\tconst [height, [marginY]] = [this.store.size.height(), this.margin()];\n\t\treturn alignment.startsWith('top-') ? height / 2 - marginY : -height / 2 + marginY;\n\t});\n\n\tprivate animating = false;\n\tprivate radius = 0;\n\tprivate focusPoint = new THREE.Vector3(0, 0, 0);\n\tprivate defaultUp = new THREE.Vector3(0, 0, 0);\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tthis.updateDefaultUpEffect();\n\t\t});\n\n\t\tbeforeRender(({ delta }) => {\n\t\t\tconst [virtualCamera, gizmo] = [\n\t\t\t\tthis.virtualCameraRef()?.cameraRef()?.nativeElement,\n\t\t\t\tthis.gizmoRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tif (!virtualCamera || !gizmo) return;\n\n\t\t\tconst [defaultControls, mainCamera, invalidate] = [\n\t\t\t\tthis.store.snapshot.controls as unknown as ControlsProto,\n\t\t\t\tthis.store.snapshot.camera,\n\t\t\t\tthis.store.snapshot.invalidate,\n\t\t\t];\n\n\t\t\t// Animate step\n\t\t\tif (this.animating) {\n\t\t\t\tif (q1.angleTo(q2) < 0.01) {\n\t\t\t\t\tthis.animating = false;\n\t\t\t\t\t// Orbit controls uses UP vector as the orbit axes,\n\t\t\t\t\t// so we need to reset it after the animation is done\n\t\t\t\t\t// moving it around for the controls to work correctly\n\t\t\t\t\tif (this.isOrbitControls(defaultControls)) {\n\t\t\t\t\t\tmainCamera.up.copy(this.defaultUp);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst step = delta * turnRate;\n\t\t\t\t\t// animate position by doing a slerp and then scaling the position on the unit sphere\n\t\t\t\t\tq1.rotateTowards(q2, step);\n\t\t\t\t\t// animate orientation\n\t\t\t\t\tmainCamera.position\n\t\t\t\t\t\t.set(0, 0, 1)\n\t\t\t\t\t\t.applyQuaternion(q1)\n\t\t\t\t\t\t.multiplyScalar(this.radius)\n\t\t\t\t\t\t.add(this.focusPoint);\n\t\t\t\t\tmainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();\n\t\t\t\t\tmainCamera.quaternion.copy(q1);\n\n\t\t\t\t\tif (this.isCameraControls(defaultControls)) {\n\t\t\t\t\t\tvoid defaultControls.setPosition(\n\t\t\t\t\t\t\tmainCamera.position.x,\n\t\t\t\t\t\t\tmainCamera.position.y,\n\t\t\t\t\t\t\tmainCamera.position.z,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (hasListener(this.update)) this.update.emit();\n\t\t\t\t\telse if (defaultControls) defaultControls.update(delta);\n\n\t\t\t\t\tinvalidate();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sync Gizmo with main camera orientation\n\t\t\tmatrix.copy(mainCamera.matrix).invert();\n\t\t\tgizmo.quaternion.setFromRotationMatrix(matrix);\n\t\t});\n\t}\n\n\t/**\n\t * Animates the main camera to look from a specific direction.\n\t *\n\t * @param direction - The direction vector to look from\n\t */\n\ttweenCamera(direction: THREE.Vector3) {\n\t\tconst [defaultControls, invalidate, mainCamera] = [\n\t\t\tthis.store.snapshot.controls as unknown as ControlsProto,\n\t\t\tthis.store.snapshot.invalidate,\n\t\t\tthis.store.snapshot.camera,\n\t\t];\n\n\t\tthis.animating = true;\n\t\tif (defaultControls) {\n\t\t\tthis.focusPoint = this.isCameraControls(defaultControls)\n\t\t\t\t? defaultControls.getTarget(this.focusPoint)\n\t\t\t\t: defaultControls.target;\n\t\t}\n\t\tthis.radius = mainCamera.position.distanceTo(target);\n\n\t\t// Rotate from current camera orientation\n\t\tq1.copy(mainCamera.quaternion);\n\n\t\t// To new current camera orientation\n\t\ttargetPosition.copy(direction).multiplyScalar(this.radius).add(target);\n\t\tdummy.lookAt(targetPosition);\n\t\tq2.copy(dummy.quaternion);\n\n\t\tinvalidate();\n\t}\n\n\tprivate updateDefaultUpEffect() {\n\t\tconst mainCamera = this.store.camera();\n\t\tthis.defaultUp.copy(mainCamera.up);\n\t\tdummy.up.copy(mainCamera.up);\n\t}\n\n\tprivate isOrbitControls(controls: ControlsProto): controls is OrbitControls {\n\t\treturn 'minPolarAngle' in (controls as OrbitControls);\n\t}\n\n\tprivate isCameraControls(controls: CameraControls | ControlsProto): controls is CameraControls {\n\t\treturn 'getTarget' in (controls as CameraControls);\n\t}\n}\n\n/**\n * Combined export of the gizmo helper component and content directive.\n *\n * Use this as an import to get both NgtsGizmoHelperImpl and NgtsGizmoHelperContent.\n */\nexport const NgtsGizmoHelper = [NgtsGizmoHelperImpl, NgtsGizmoHelperContent] as const;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDOCUMENT,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetEmitter,\n\thasListener,\n\tinjectStore,\n\tNgtArgs,\n\tNgtEventHandlers,\n\tNgtThreeEvent,\n\tobjectEvents,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BoxGeometry, Group, Mesh, MeshBasicMaterial } from 'three';\nimport { NgtsGizmoHelperImpl } from './gizmo-helper';\n\n/**\n * Tuple type for [x, y, z] coordinates.\n */\ntype XYZ = [number, number, number];\n\nconst colors = { bg: '#f0f0f0', hover: '#999', text: 'black', stroke: 'black' };\nconst defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'];\n\n/**\n * Common configuration options shared between viewcube components.\n *\n * These options control the visual appearance of the viewcube faces and labels.\n */\nexport interface NgtsViewcubeCommonOptions {\n\t/**\n\t * CSS font specification for face labels.\n\t * @default '20px Inter var, Arial, sans-serif'\n\t */\n\tfont: string;\n\t/**\n\t * Opacity of the cube faces.\n\t * @default 1\n\t */\n\topacity: number;\n\t/**\n\t * Background color of the cube faces.\n\t * @default '#f0f0f0'\n\t */\n\tcolor: string;\n\t/**\n\t * Color when a face is hovered.\n\t * @default '#999'\n\t */\n\thoverColor: string;\n\t/**\n\t * Color of the face label text.\n\t * @default 'black'\n\t */\n\ttextColor: string;\n\t/**\n\t * Color of the face border stroke.\n\t * @default 'black'\n\t */\n\tstrokeColor: string;\n\t/**\n\t * Labels for each face in order: Right, Left, Top, Bottom, Front, Back.\n\t * @default ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back']\n\t */\n\tfaces: string[];\n}\n\nconst defaultFaceMaterialOptions: NgtsViewcubeCommonOptions = {\n\tfont: '20px Inter var, Arial, sans-serif',\n\tfaces: defaultFaces,\n\tcolor: colors.bg,\n\thoverColor: colors.hover,\n\ttextColor: colors.text,\n\tstrokeColor: colors.stroke,\n\topacity: 1,\n};\n\n/**\n * Internal component that renders a material for a viewcube face.\n *\n * This component creates a canvas texture with the face label and applies it\n * as a material to one face of the viewcube.\n */\n@Component({\n\tselector: 'viewcube-face-material',\n\ttemplate: `\n\t\t<ngt-mesh-basic-material\n\t\t\t[attach]=\"['material', index()]\"\n\t\t\t[map]=\"texture()\"\n\t\t\t[color]=\"materialColor()\"\n\t\t\ttransparent\n\t\t\t[opacity]=\"opacity()\"\n\t\t/>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FaceMaterial {\n\thover = input.required<boolean>();\n\tindex = input.required<number>();\n\toptions = input(defaultFaceMaterialOptions, { transform: mergeInputs(defaultFaceMaterialOptions) });\n\n\tprivate faces = pick(this.options, 'faces');\n\tprivate font = pick(this.options, 'font');\n\tprivate color = pick(this.options, 'color');\n\tprivate textColor = pick(this.options, 'textColor');\n\tprivate strokeColor = pick(this.options, 'strokeColor');\n\tprivate hoverColor = pick(this.options, 'hoverColor');\n\n\tprivate document = inject(DOCUMENT);\n\tprivate store = injectStore();\n\n\tprotected opacity = pick(this.options, 'opacity');\n\tprotected materialColor = computed(() => (this.hover() ? this.hoverColor() : 'white'));\n\tprotected texture = computed(() => {\n\t\tconst [index, faces, font, color, textColor, strokeColor, gl] = [\n\t\t\tthis.index(),\n\t\t\tthis.faces(),\n\t\t\tthis.font(),\n\t\t\tthis.color(),\n\t\t\tthis.textColor(),\n\t\t\tthis.strokeColor(),\n\t\t\tthis.store.gl(),\n\t\t];\n\n\t\tconst canvas = this.document.createElement('canvas');\n\t\tcanvas.width = 128;\n\t\tcanvas.height = 128;\n\n\t\tconst context = canvas.getContext('2d')!;\n\t\tcontext.fillStyle = color;\n\t\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\t\tcontext.strokeStyle = strokeColor;\n\t\tcontext.strokeRect(0, 0, canvas.width, canvas.height);\n\t\tcontext.font = font;\n\t\tcontext.textAlign = 'center';\n\t\tcontext.fillStyle = textColor;\n\t\tcontext.fillText(faces[index].toUpperCase(), 64, 76);\n\n\t\tconst texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.anisotropy = gl.capabilities.getMaxAnisotropy() || 1;\n\n\t\treturn texture;\n\t});\n\n\tconstructor() {\n\t\textend({ MeshBasicMaterial });\n\t}\n}\n\n/**\n * Internal component that renders the main cube body of the viewcube.\n *\n * This component creates a box geometry with labeled faces that respond\n * to hover and click interactions for camera orientation changes.\n */\n@Component({\n\tselector: 'viewcube-face-cube',\n\ttemplate: `\n\t\t<ngt-mesh #mesh (click)=\"internalOnClick($any($event))\">\n\t\t\t<ngt-box-geometry />\n\t\t\t@for (face of count; track $index) {\n\t\t\t\t<viewcube-face-material [index]=\"$index\" [hover]=\"hover() === $index\" [options]=\"options()\" />\n\t\t\t}\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [FaceMaterial],\n})\nexport class FaceCube {\n\toptions = input({} as Partial<NgtsViewcubeCommonOptions>);\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\n\tprotected hover = signal(-1);\n\tprotected count = Array.from({ length: 6 });\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerout: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(-1);\n\t\t\t},\n\t\t\tpointermove: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tev.faceIndex != null && this.hover.set(Math.floor(ev.faceIndex / 2));\n\t\t\t},\n\t\t});\n\t}\n\n\tprotected internalOnClick(event: NgtThreeEvent<MouseEvent>) {\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.gizmoHelper.tweenCamera(event.face!.normal);\n\t\t}\n\t}\n\n\tprotected readonly Math = Math;\n}\n\n/**\n * Internal component that renders an interactive edge or corner section of the viewcube.\n *\n * This component creates clickable edge and corner regions that allow users\n * to orient the camera to diagonal viewing angles.\n */\n@Component({\n\tselector: 'viewcube-edge-cube',\n\ttemplate: `\n\t\t<ngt-mesh #mesh [scale]=\"1.01\" [position]=\"position()\" (click)=\"internalOnClick($any($event))\">\n\t\t\t<ngt-mesh-basic-material transparent [opacity]=\"0.6\" [color]=\"color()\" [visible]=\"hover()\" />\n\t\t\t<ngt-box-geometry *args=\"dimensions()\" />\n\t\t</ngt-mesh>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class EdgeCube {\n\tdimensions = input.required<XYZ>();\n\tposition = input.required<THREE.Vector3>();\n\thoverColor = input(colors.hover, {\n\t\ttransform: (value: string | undefined) => {\n\t\t\tif (value === undefined) return colors.hover;\n\t\t\treturn value;\n\t\t},\n\t});\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\n\tprotected hover = signal(false);\n\tprotected color = computed(() => (this.hover() ? this.hoverColor() : 'white'));\n\n\tconstructor() {\n\t\textend({ Mesh, BoxGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerout: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(false);\n\t\t\t},\n\t\t\tpointerover: (ev) => {\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.hover.set(true);\n\t\t\t},\n\t\t});\n\t}\n\n\tprotected internalOnClick(event: NgtThreeEvent<MouseEvent>) {\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.gizmoHelper.tweenCamera(this.position());\n\t\t}\n\t}\n}\n\n/**\n * Configuration options for the NgtsGizmoViewcube component.\n *\n * Extends NgtsViewcubeCommonOptions with all properties optional.\n */\nexport type NgtsGizmoViewcubeOptions = Partial<NgtsViewcubeCommonOptions>;\n\n/**\n * A component that renders a 3D cube-style orientation gizmo.\n *\n * The viewcube displays a cube with labeled faces (Front, Back, Left, Right, Top, Bottom)\n * and clickable edges and corners for orienting the camera to standard or diagonal views.\n * It is typically used inside NgtsGizmoHelper.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewcube [options]=\"{ color: '#fff', hoverColor: '#ccc' }\" />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-viewcube',\n\ttemplate: `\n\t\t<ngt-group [scale]=\"60\">\n\t\t\t<viewcube-face-cube [options]=\"options()\" [onClick]=\"onClick\" />\n\t\t\t@for (edge of edges; track $index) {\n\t\t\t\t<viewcube-edge-cube\n\t\t\t\t\t[position]=\"edge\"\n\t\t\t\t\t[dimensions]=\"edgeDimensions[$index]\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t[hoverColor]=\"hoverColor()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t\t@for (corner of corners; track $index) {\n\t\t\t\t<viewcube-edge-cube\n\t\t\t\t\t[position]=\"corner\"\n\t\t\t\t\t[dimensions]=\"cornerDimensions\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t[hoverColor]=\"hoverColor()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [FaceCube, EdgeCube],\n})\nexport class NgtsGizmoViewcube {\n\toptions = input({} as Partial<NgtsGizmoViewcubeOptions>);\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\n\tprotected hoverColor = pick(this.options, 'hoverColor');\n\n\tprotected corners: THREE.Vector3[] = [\n\t\t[1, 1, 1],\n\t\t[1, 1, -1],\n\t\t[1, -1, 1],\n\t\t[1, -1, -1],\n\t\t[-1, 1, 1],\n\t\t[-1, 1, -1],\n\t\t[-1, -1, 1],\n\t\t[-1, -1, -1],\n\t].map(this.makePositionVector);\n\tprotected cornerDimensions: XYZ = [0.25, 0.25, 0.25];\n\tprotected edges: THREE.Vector3[] = [\n\t\t[1, 1, 0],\n\t\t[1, 0, 1],\n\t\t[1, 0, -1],\n\t\t[1, -1, 0],\n\t\t[0, 1, 1],\n\t\t[0, 1, -1],\n\t\t[0, -1, 1],\n\t\t[0, -1, -1],\n\t\t[-1, 1, 0],\n\t\t[-1, 0, 1],\n\t\t[-1, 0, -1],\n\t\t[-1, -1, 0],\n\t].map(this.makePositionVector);\n\tprotected edgeDimensions = this.edges.map(\n\t\t(edge) => edge.toArray().map((axis: number): number => (axis == 0 ? 0.5 : 0.25)) as XYZ,\n\t);\n\n\tconstructor() {\n\t\textend({ Group });\n\t}\n\n\tprotected get onClick() {\n\t\tif (hasListener(this.click)) return getEmitter(this.click);\n\t\treturn undefined;\n\t}\n\n\tprivate makePositionVector(xyz: number[]) {\n\t\treturn new THREE.Vector3(...xyz).multiplyScalar(0.38);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDOCUMENT,\n\tElementRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetEmitter,\n\thasListener,\n\tinjectStore,\n\tNgtArgs,\n\tNgtEuler,\n\tNgtEventHandlers,\n\tNgtThreeElements,\n\tNgtThreeEvent,\n\tNgtVector3,\n\tobjectEvents,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { BoxGeometry, Group, Mesh, MeshBasicMaterial, Sprite, SpriteMaterial } from 'three';\nimport { NgtsGizmoHelperImpl } from './gizmo-helper';\n\n/**\n * Internal component that renders a single axis line for the gizmo viewport.\n *\n * This component creates a colored box representing one axis direction,\n * used as part of the NgtsGizmoViewport visualization.\n */\n@Component({\n\tselector: 'viewport-axis',\n\ttemplate: `\n\t\t<ngt-group [rotation]=\"rotation()\">\n\t\t\t<ngt-mesh [position]=\"[0.4, 0, 0]\">\n\t\t\t\t<ngt-box-geometry *args=\"scale()\" />\n\t\t\t\t<ngt-mesh-basic-material [color]=\"color()\" [toneMapped]=\"false\" />\n\t\t\t</ngt-mesh>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class Axis {\n\tscale = input([0.8, 0.05, 0.05], {\n\t\ttransform: (value: [number, number, number] | undefined) => {\n\t\t\tif (value === undefined) return [0.8, 0.05, 0.05];\n\t\t\treturn value;\n\t\t},\n\t});\n\tcolor = input<THREE.ColorRepresentation>();\n\trotation = input<NgtEuler>([0, 0, 0]);\n\n\tconstructor() {\n\t\textend({ Group, Mesh, BoxGeometry, MeshBasicMaterial });\n\t}\n}\n\n/**\n * Internal component that renders an interactive axis head (sphere) for the gizmo viewport.\n *\n * This component creates a clickable sprite at the end of each axis that displays\n * an optional label and handles user interaction for camera orientation changes.\n */\n@Component({\n\tselector: 'viewport-axis-head',\n\ttemplate: `\n\t\t<ngt-sprite #sprite [scale]=\"scale()\" [position]=\"position()\">\n\t\t\t<ngt-sprite-material\n\t\t\t\t[map]=\"texture()\"\n\t\t\t\t[alphaTest]=\"0.3\"\n\t\t\t\t[opacity]=\"label() ? 1 : 0.75\"\n\t\t\t\t[toneMapped]=\"false\"\n\t\t\t/>\n\t\t</ngt-sprite>\n\t`,\n\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AxisHead {\n\tarcStyle = input.required<string>();\n\tposition = input.required<NgtVector3>();\n\tlabel = input<string>();\n\tlabelColor = input('#000');\n\taxisHeadScale = input(1);\n\tdisabled = input(false);\n\tfont = input('18px Inter var, Arial, sans-serif');\n\tonClick = input<NgtEventHandlers['click']>();\n\n\tprivate spriteRef = viewChild.required<ElementRef<THREE.Sprite>>('sprite');\n\n\tprivate document = inject(DOCUMENT);\n\tprivate gizmoHelper = inject(NgtsGizmoHelperImpl);\n\tprivate store = injectStore();\n\n\tprotected texture = computed(() => {\n\t\tconst [arcStyle, label, labelColor, font, gl] = [\n\t\t\tthis.arcStyle(),\n\t\t\tthis.label(),\n\t\t\tthis.labelColor(),\n\t\t\tthis.font(),\n\t\t\tthis.store.gl(),\n\t\t];\n\n\t\tconst canvas = this.document.createElement('canvas');\n\t\tcanvas.width = 64;\n\t\tcanvas.height = 64;\n\n\t\tconst context = canvas.getContext('2d')!;\n\t\tcontext.beginPath();\n\t\tcontext.arc(32, 32, 16, 0, 2 * Math.PI);\n\t\tcontext.closePath();\n\t\tcontext.fillStyle = arcStyle;\n\t\tcontext.fill();\n\n\t\tif (label) {\n\t\t\tcontext.font = font;\n\t\t\tcontext.textAlign = 'center';\n\t\t\tcontext.fillStyle = labelColor;\n\t\t\tcontext.fillText(label, 32, 41);\n\t\t}\n\n\t\tconst texture = new THREE.CanvasTexture(canvas);\n\t\ttexture.anisotropy = gl.capabilities.getMaxAnisotropy() || 1;\n\t\treturn texture;\n\t});\n\n\tprotected active = signal(false);\n\tprotected scale = computed(() => (this.label() ? 1 : 0.75) * (this.active() ? 1.2 : 1) * this.axisHeadScale());\n\n\tconstructor() {\n\t\textend({ Sprite, SpriteMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.spriteRef, {\n\t\t\tpointerover: this.onPointerOver.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t});\n\t}\n\n\tprotected onPointerOver(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\n\t\tevent.stopPropagation();\n\t\tthis.active.set(true);\n\t}\n\n\tprotected onPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\n\t\tconst onClick = this.onClick();\n\t\tif (onClick) onClick(event);\n\t\telse {\n\t\t\tevent.stopPropagation();\n\t\t\tthis.active.set(false);\n\t\t}\n\t}\n\n\tprotected onPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tif (this.disabled()) return;\n\t\tevent.stopPropagation();\n\t\tthis.gizmoHelper.tweenCamera(event.object.position);\n\t}\n}\n\n/**\n * Configuration options for the NgtsGizmoViewport component.\n *\n * These options control the appearance and behavior of the viewport-style\n * gizmo with axis lines and interactive heads.\n */\nexport interface NgtsGizmoViewportOptions extends Partial<NgtThreeElements['ngt-group']> {\n\t/**\n\t * Colors for the X, Y, and Z axes.\n\t * @default ['#ff2060', '#20df80', '#2080ff']\n\t */\n\taxisColors: [string, string, string];\n\t/**\n\t * Scale of the axis lines [x, y, z].\n\t */\n\taxisScale?: [number, number, number];\n\t/**\n\t * Labels for the X, Y, and Z axis heads.\n\t * @default ['X', 'Y', 'Z']\n\t */\n\tlabels: [string, string, string];\n\t/**\n\t * Scale factor for the axis head sprites.\n\t * @default 1\n\t */\n\taxisHeadScale: number;\n\t/**\n\t * Color of the axis labels.\n\t * @default '#000'\n\t */\n\tlabelColor: string;\n\t/**\n\t * Whether to hide the negative axis heads (-X, -Y, -Z).\n\t * @default false\n\t */\n\thideNegativeAxes: boolean;\n\t/**\n\t * Whether to hide all axis heads.\n\t * @default false\n\t */\n\thideAxisHeads: boolean;\n\t/**\n\t * Whether the gizmo is disabled (non-interactive).\n\t * @default false\n\t */\n\tdisabled: boolean;\n\t/**\n\t * CSS font specification for axis labels.\n\t * @default '18px Inter var, Arial, sans-serif'\n\t */\n\tfont: string;\n}\n\nconst defaultOptions: NgtsGizmoViewportOptions = {\n\taxisColors: ['#ff2060', '#20df80', '#2080ff'],\n\tlabels: ['X', 'Y', 'Z'],\n\taxisHeadScale: 1,\n\tlabelColor: '#000',\n\thideNegativeAxes: false,\n\thideAxisHeads: false,\n\tdisabled: false,\n\tfont: '18px Inter var, Arial, sans-serif',\n};\n\n/**\n * A component that renders a viewport-style gizmo with colored axes and interactive heads.\n *\n * This gizmo displays three perpendicular axes (X, Y, Z) with labeled heads that\n * can be clicked to animate the camera to the corresponding view direction.\n * It is typically used inside NgtsGizmoHelper.\n *\n * @example\n * ```html\n * <ngts-gizmo-helper>\n * <ng-template gizmoHelperContent>\n * <ngts-gizmo-viewport [options]=\"{ axisColors: ['red', 'green', 'blue'] }\" />\n * </ng-template>\n * </ngts-gizmo-helper>\n * ```\n */\n@Component({\n\tselector: 'ngts-gizmo-viewport',\n\ttemplate: `\n\t\t@let _axisScale = axisScale();\n\t\t@let _axisHeadScale = axisHeadScale();\n\t\t@let _labels = labels();\n\t\t@let _labelColor = labelColor();\n\t\t@let _axisColors = axisColors();\n\t\t@let _font = font();\n\t\t@let _disabled = disabled();\n\n\t\t<ngt-group [scale]=\"40\" [parameters]=\"parameters()\">\n\t\t\t<viewport-axis [color]=\"_axisColors[0]\" [rotation]=\"[0, 0, 0]\" [scale]=\"_axisScale\" />\n\t\t\t<viewport-axis [color]=\"_axisColors[1]\" [rotation]=\"[0, 0, Math.PI / 2]\" [scale]=\"_axisScale\" />\n\t\t\t<viewport-axis [color]=\"_axisColors[2]\" [rotation]=\"[0, -Math.PI / 2, 0]\" [scale]=\"_axisScale\" />\n\n\t\t\t@if (!hideAxisHeads()) {\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[0]\"\n\t\t\t\t\t[position]=\"[1, 0, 0]\"\n\t\t\t\t\t[label]=\"_labels[0]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[1]\"\n\t\t\t\t\t[position]=\"[0, 1, 0]\"\n\t\t\t\t\t[label]=\"_labels[1]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\t\t\t\t<viewport-axis-head\n\t\t\t\t\t[arcStyle]=\"_axisColors[2]\"\n\t\t\t\t\t[position]=\"[0, 0, 1]\"\n\t\t\t\t\t[label]=\"_labels[2]\"\n\t\t\t\t\t[labelColor]=\"_labelColor\"\n\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t[font]=\"_font\"\n\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t/>\n\n\t\t\t\t@if (!hideNegativeAxes()) {\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[0]\"\n\t\t\t\t\t\t[position]=\"[-1, 0, 0]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[1]\"\n\t\t\t\t\t\t[position]=\"[0, -1, 0]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t\t<viewport-axis-head\n\t\t\t\t\t\t[arcStyle]=\"_axisColors[2]\"\n\t\t\t\t\t\t[position]=\"[0, 0, -1]\"\n\t\t\t\t\t\t[axisHeadScale]=\"_axisHeadScale\"\n\t\t\t\t\t\t[disabled]=\"_disabled\"\n\t\t\t\t\t\t[onClick]=\"onClick\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t}\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [Axis, AxisHead],\n})\nexport class NgtsGizmoViewport {\n\tprotected readonly Math = Math;\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'axisColors',\n\t\t'axisScale',\n\t\t'labels',\n\t\t'axisHeadScale',\n\t\t'labelColor',\n\t\t'hideNegativeAxes',\n\t\t'hideAxisHeads',\n\t\t'disabled',\n\t\t'font',\n\t]);\n\tclick = output<NgtThreeEvent<MouseEvent>>();\n\n\tprotected axisColors = pick(this.options, 'axisColors');\n\tprotected axisScale = pick(this.options, 'axisScale');\n\tprotected hideAxisHeads = pick(this.options, 'hideAxisHeads');\n\tprotected hideNegativeAxes = pick(this.options, 'hideNegativeAxes');\n\tprotected labels = pick(this.options, 'labels');\n\tprotected axisHeadScale = pick(this.options, 'axisHeadScale');\n\tprotected labelColor = pick(this.options, 'labelColor');\n\tprotected disabled = pick(this.options, 'disabled');\n\tprotected font = pick(this.options, 'font');\n\n\tconstructor() {\n\t\textend({ Group });\n\t}\n\n\tprotected get onClick() {\n\t\tif (hasListener(this.click)) return getEmitter(this.click);\n\t\treturn undefined;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtArgs, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { ConeGeometry, CylinderGeometry, Group, Mesh, MeshBasicMaterial } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst vec1 = new THREE.Vector3();\nconst vec2 = new THREE.Vector3();\n\n/**\n * Calculates the offset distance along an axis from a click point to the current ray position.\n *\n * This function is used to determine how far the user has dragged along a specific axis\n * by projecting the ray onto the plane defined by the click point and axis direction.\n *\n * @param clickPoint - The initial click point in world space\n * @param normal - The axis direction vector (normalized)\n * @param rayStart - The origin of the current pointer ray\n * @param rayDir - The direction of the current pointer ray\n * @returns The offset distance along the axis\n */\nexport function calculateOffset(\n\tclickPoint: THREE.Vector3,\n\tnormal: THREE.Vector3,\n\trayStart: THREE.Vector3,\n\trayDir: THREE.Vector3,\n) {\n\tconst e1 = normal.dot(normal);\n\tconst e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n\tconst e3 = normal.dot(rayDir);\n\n\tif (e3 === 0) {\n\t\treturn -e2 / e1;\n\t}\n\n\tvec1.copy(rayDir)\n\t\t.multiplyScalar(e1 / e3)\n\t\t.sub(normal);\n\tvec2.copy(rayDir)\n\t\t.multiplyScalar(e2 / e3)\n\t\t.add(rayStart)\n\t\t.sub(clickPoint);\n\n\treturn -vec1.dot(vec2) / vec1.dot(vec1);\n}\n\nconst upV = new THREE.Vector3(0, 1, 0);\nconst offsetMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders an axis arrow handle for the pivot controls.\n *\n * This component creates a draggable arrow gizmo that allows translation along\n * a single axis. It includes visual feedback on hover and optional value annotations.\n */\n@Component({\n\tselector: 'ngts-axis-arrow',\n\ttemplate: `\n\t\t<ngt-group #group>\n\t\t\t<ngt-group #innerGroup [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t\t<ngts-html [options]=\"{ position: [0, -coneLength(), 0] }\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#annotation\n\t\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap;\"\n\t\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</ngts-html>\n\t\t\t\t}\n\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t[visible]=\"false\"\n\t\t\t\t\t[position]=\"[0, (cylinderLength() + coneLength()) / 2.0, 0]\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-cylinder-geometry\n\t\t\t\t\t\t*args=\"[coneWidth() * 1.4, coneWidth() * 1.4, cylinderLength() + coneLength(), 8, 1]\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\n\t\t\t\t<ngts-line\n\t\t\t\t\t[points]=\"[0, 0, 0, 0, cylinderLength(), 0]\"\n\t\t\t\t\t[options]=\"{\n\t\t\t\t\t\traycast: null,\n\t\t\t\t\t\tside: DoubleSide,\n\t\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\ttransparent: true,\n\t\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\t\tcolor: color(),\n\t\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\t}\"\n\t\t\t\t/>\n\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t[raycast]=\"null\"\n\t\t\t\t\t[position]=\"[0, cylinderLength() + coneLength() / 2.0, 0]\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-cone-geometry *args=\"[coneWidth(), coneLength(), 24, 1]\" />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[opacity]=\"pivotControls.opacity()\"\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t\t[fog]=\"false\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs, NgtsLine, NgtsHTML],\n})\nexport class NgtsAxisArrow {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdirection = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tprivate groupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate innerGroupRef = viewChild.required<ElementRef<THREE.Group>>('innerGroup');\n\tprivate annotationRef = viewChild<'string', ElementRef<HTMLElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate clickInfo: { clickPoint: THREE.Vector3; dir: THREE.Vector3 } | null = null;\n\tprivate offset0 = 0;\n\n\tprotected color = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\n\tprotected coneWidth = computed(() =>\n\t\tthis.pivotControls.fixed()\n\t\t\t? (this.pivotControls.lineWidth() / this.pivotControls.scale()) * 1.6\n\t\t\t: this.pivotControls.scale() / 20,\n\t);\n\tprotected coneLength = computed(() => (this.pivotControls.fixed() ? 0.2 : this.pivotControls.scale() / 5));\n\tprotected cylinderLength = computed(() =>\n\t\tthis.pivotControls.fixed() ? 1 - this.coneLength() : this.pivotControls.scale() - this.coneLength(),\n\t);\n\tprotected matrixL = computed(() => {\n\t\tconst quaternion = new THREE.Quaternion().setFromUnitVectors(upV, this.direction().clone().normalize());\n\t\treturn new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n\t});\n\n\tconstructor() {\n\t\textend({ Group, Mesh, ConeGeometry, CylinderGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.innerGroupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [group, direction, axis, controls, annotation] = [\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.direction(),\n\t\t\tthis.axis(),\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${this.pivotControls.translation[axis].toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\n\t\tconst rotation = new THREE.Matrix4().extractRotation(group.matrixWorld);\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst clickPoint = event.point.clone();\n\t\tconst dir = direction.clone().applyMatrix4(rotation).normalize();\n\t\tthis.clickInfo = { clickPoint, dir };\n\t\tthis.offset0 = this.pivotControls.translation[axis];\n\t\tthis.pivotControls.onDragStart({ component: 'Arrow', axis, origin, directions: [dir] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\n\t\tif (!this.hovered()) {\n\t\t\tthis.hovered.set(true);\n\t\t}\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, dir } = this.clickInfo;\n\t\t\tconst [translationLimits, annotation, axis] = [\n\t\t\t\tthis.pivotControls.translationLimits(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t\tthis.axis(),\n\t\t\t];\n\n\t\t\tconst [min, max] = translationLimits?.[axis] || [undefined, undefined];\n\n\t\t\tlet offset = calculateOffset(clickPoint, dir, event.ray.origin, event.ray.direction);\n\t\t\tif (min !== undefined) {\n\t\t\t\toffset = Math.max(offset, min - this.offset0);\n\t\t\t}\n\n\t\t\tif (max !== undefined) {\n\t\t\t\toffset = Math.min(offset, max - this.offset0);\n\t\t\t}\n\n\t\t\tthis.pivotControls.translation[axis] = this.offset0 + offset;\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.pivotControls.translation[axis].toFixed(2)}`;\n\t\t\t}\n\n\t\t\toffsetMatrix.makeTranslation(dir.x * offset, dir.y * offset, dir.z * offset);\n\t\t\tthis.pivotControls.onDrag(offsetMatrix);\n\t\t}\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst clickDir = new THREE.Vector3();\nconst intersectionDir = new THREE.Vector3();\n\n/**\n * Converts radians to degrees.\n *\n * @param radians - Angle in radians\n * @returns Angle in degrees\n */\nfunction toDegrees(radians: number) {\n\treturn (radians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param degrees - Angle in degrees\n * @returns Angle in radians\n */\nfunction toRadians(degrees: number) {\n\treturn (degrees * Math.PI) / 180;\n}\n\n/**\n * Calculates the angle between two points relative to an origin and basis vectors.\n *\n * Used to determine rotation angle from initial click to current intersection point.\n *\n * @param clickPoint - The initial click point\n * @param intersectionPoint - The current intersection point\n * @param origin - The center of rotation\n * @param e1 - First basis vector\n * @param e2 - Second basis vector\n * @returns The angle difference in radians\n */\nfunction calculateAngle(\n\tclickPoint: THREE.Vector3,\n\tintersectionPoint: THREE.Vector3,\n\torigin: THREE.Vector3,\n\te1: THREE.Vector3,\n\te2: THREE.Vector3,\n) {\n\tclickDir.copy(clickPoint).sub(origin);\n\tintersectionDir.copy(intersectionPoint).sub(origin);\n\tconst dote1e1 = e1.dot(e1);\n\tconst dote2e2 = e2.dot(e2);\n\tconst uClick = clickDir.dot(e1) / dote1e1;\n\tconst vClick = clickDir.dot(e2) / dote2e2;\n\tconst uIntersection = intersectionDir.dot(e1) / dote1e1;\n\tconst vIntersection = intersectionDir.dot(e2) / dote2e2;\n\tconst angleClick = Math.atan2(vClick, uClick);\n\tconst angleIntersection = Math.atan2(vIntersection, uIntersection);\n\treturn angleIntersection - angleClick;\n}\n\n/**\n * Floating-point modulo operation that handles negative numbers correctly.\n *\n * @param num - The numerator\n * @param denom - The denominator\n * @returns The remainder\n */\nfunction fmod(num: number, denom: number) {\n\tlet k = Math.floor(num / denom);\n\tk = k < 0 ? k + 1 : k;\n\n\treturn num - k * denom;\n}\n\n/**\n * Normalizes an angle to be within [0, 2π) range.\n *\n * @param angle - The input angle in radians\n * @returns The normalized angle\n */\nfunction minimizeAngle(angle: number) {\n\tlet result = fmod(angle, 2 * Math.PI);\n\n\tif (Math.abs(result) < 1e-6) {\n\t\treturn 0.0;\n\t}\n\n\tif (result < 0.0) {\n\t\tresult += 2 * Math.PI;\n\t}\n\n\treturn result;\n}\n\nconst rotMatrix = new THREE.Matrix4();\nconst posNew = new THREE.Vector3();\nconst ray = new THREE.Ray();\nconst intersection = new THREE.Vector3();\n\n/**\n * Internal component that renders a rotation arc handle for the pivot controls.\n *\n * This component creates a quarter-circle arc that allows rotation around a single axis.\n * Users can drag along the arc to rotate the controlled object, with optional snapping\n * when holding Shift.\n */\n@Component({\n\tselector: 'ngts-axis-rotator',\n\ttemplate: `\n\t\t<ngt-group #group [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t<ngts-html [options]=\"{ position: [r(), r(), 0] }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t#annotation\n\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap\"\n\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t></div>\n\t\t\t\t</ngts-html>\n\t\t\t}\n\n\t\t\t<ngts-line\n\t\t\t\t[points]=\"arc()\"\n\t\t\t\t[options]=\"{\n\t\t\t\t\tlineWidth: pivotControls.lineWidth() * 4,\n\t\t\t\t\tvisible: false,\n\t\t\t\t\tuserData: pivotControls.userData(),\n\t\t\t\t}\"\n\t\t\t/>\n\n\t\t\t<ngts-line\n\t\t\t\t[points]=\"arc()\"\n\t\t\t\t[options]=\"{\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\traycast: null,\n\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\tside: DoubleSide,\n\t\t\t\t\tcolor: hovered() ? pivotControls.hoveredColor() : pivotControls.axisColors()[axis()],\n\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\tfog: false,\n\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t}\"\n\t\t\t/>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsLine, NgtsHTML],\n})\nexport class NgtsAxisRotator {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdir1 = input.required<THREE.Vector3>();\n\tdir2 = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprotected hovered = signal(false);\n\tprivate angle = 0;\n\tprivate angle0 = 0;\n\tprivate clickInfo: {\n\t\tclickPoint: THREE.Vector3;\n\t\torigin: THREE.Vector3;\n\t\te1: THREE.Vector3;\n\t\te2: THREE.Vector3;\n\t\tnormal: THREE.Vector3;\n\t\tplane: THREE.Plane;\n\t} | null = null;\n\n\tprotected matrixL = computed(() => {\n\t\tconst dir1N = this.dir1().clone().normalize();\n\t\tconst dir2N = this.dir2().clone().normalize();\n\t\treturn new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n\t});\n\tprotected r = computed(() => (this.pivotControls.fixed() ? 0.65 : this.pivotControls.scale() * 0.65));\n\tprotected arc = computed(() => {\n\t\tconst segments = 32;\n\t\tconst points: THREE.Vector3[] = [];\n\t\tfor (let j = 0; j <= segments; j++) {\n\t\t\tconst angle = (j * (Math.PI / 2)) / segments;\n\t\t\tpoints.push(new THREE.Vector3(Math.cos(angle) * this.r(), Math.sin(angle) * this.r(), 0));\n\t\t}\n\t\treturn points;\n\t});\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.groupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, group, axis, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.axis(),\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${toDegrees(this.angle).toFixed(0)}º`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst e1 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 0).normalize();\n\t\tconst e2 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 1).normalize();\n\t\tconst normal = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 2).normalize();\n\t\tconst plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n\t\tthis.clickInfo = { clickPoint, origin, e1, e2, normal, plane };\n\t\tthis.pivotControls.onDragStart({ component: 'Rotator', axis, origin, directions: [e1, e2, normal] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not a function on PointerEvent\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, origin, e1, e2, normal, plane } = this.clickInfo;\n\t\t\tconst [rotationLimits, axis, annotation] = [\n\t\t\t\tthis.pivotControls.rotationLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tconst [min, max] = rotationLimits?.[axis] || [undefined, undefined];\n\n\t\t\tray.copy(event.ray);\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tray.direction.negate();\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tlet deltaAngle = calculateAngle(clickPoint, intersection, origin, e1, e2);\n\t\t\tlet degrees = toDegrees(deltaAngle);\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tdegrees = Math.round(degrees / 10) * 10;\n\t\t\t\tdeltaAngle = toRadians(degrees);\n\t\t\t}\n\n\t\t\tif (min !== undefined && max !== undefined && max - min < 2 * Math.PI) {\n\t\t\t\tdeltaAngle = minimizeAngle(deltaAngle);\n\t\t\t\tdeltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle;\n\t\t\t\tdeltaAngle = Math.round(deltaAngle / 10) * 10;\n\t\t\t\tthis.angle = this.angle0 + deltaAngle;\n\t\t\t} else {\n\t\t\t\tthis.angle = minimizeAngle(this.angle0 + deltaAngle);\n\t\t\t\tthis.angle = this.angle > Math.PI ? this.angle - 2 * Math.PI : this.angle;\n\t\t\t}\n\n\t\t\tif (annotation) {\n\t\t\t\tdegrees = toDegrees(this.angle);\n\t\t\t\tannotation.innerText = `${degrees.toFixed(0)}º`;\n\t\t\t}\n\n\t\t\trotMatrix.makeRotationAxis(normal, deltaAngle);\n\t\t\tposNew.copy(origin).applyMatrix4(rotMatrix).sub(origin).negate();\n\t\t\trotMatrix.setPosition(posNew);\n\t\t\tthis.pivotControls.onDrag(rotMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not a function on PointerEvent\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\n/**\n * Decomposes an offset vector into components along two basis vectors.\n *\n * This function projects a 3D offset onto a plane defined by two basis vectors\n * and returns the scalar coefficients for each basis vector.\n *\n * @param e1 - First basis vector\n * @param e2 - Second basis vector\n * @param offset - The offset vector to decompose\n * @returns Tuple of [coefficient for e1, coefficient for e2]\n */\nfunction decomposeIntoBasis(e1: THREE.Vector3, e2: THREE.Vector3, offset: THREE.Vector3) {\n\tconst i1 =\n\t\tMath.abs(e1.x) >= Math.abs(e1.y) && Math.abs(e1.x) >= Math.abs(e1.z)\n\t\t\t? 0\n\t\t\t: Math.abs(e1.y) >= Math.abs(e1.x) && Math.abs(e1.y) >= Math.abs(e1.z)\n\t\t\t\t? 1\n\t\t\t\t: 2;\n\tconst e2DegrowthOrder = [0, 1, 2].sort((a, b) => Math.abs(e2.getComponent(b)) - Math.abs(e2.getComponent(a)));\n\tconst i2 = i1 === e2DegrowthOrder[0] ? e2DegrowthOrder[1] : e2DegrowthOrder[0];\n\tconst a1 = e1.getComponent(i1);\n\tconst a2 = e1.getComponent(i2);\n\tconst b1 = e2.getComponent(i1);\n\tconst b2 = e2.getComponent(i2);\n\tconst c1 = offset.getComponent(i1);\n\tconst c2 = offset.getComponent(i2);\n\n\tconst y = (c2 - c1 * (a2 / a1)) / (b2 - b1 * (a2 / a1));\n\tconst x = (c1 - y * b1) / a1;\n\n\treturn [x, y];\n}\n\nconst ray = new THREE.Ray();\nconst intersection = new THREE.Vector3();\nconst offsetMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders a plane slider handle for the pivot controls.\n *\n * This component creates a small square that allows translation along two axes\n * simultaneously (movement in a plane). It's positioned at the intersection of\n * two axis arrows.\n */\n@Component({\n\tselector: 'ngts-plane-slider',\n\ttemplate: `\n\t\t<ngt-group #group [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t<ngts-html [options]=\"{ position: [0, 0, 0] }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t#annotation\n\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap\"\n\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t></div>\n\t\t\t\t</ngts-html>\n\t\t\t}\n\t\t\t<ngt-group [position]=\"[pos1() * 1.7, pos1() * 1.7, 0]\">\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t#mesh\n\t\t\t\t\tvisible\n\t\t\t\t\t[scale]=\"length()\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-plane-geometry />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t\t[side]=\"DoubleSide\"\n\t\t\t\t\t\t[fog]=\"false\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t\t<ngts-line\n\t\t\t\t\t[points]=\"points()\"\n\t\t\t\t\t[options]=\"{\n\t\t\t\t\t\tposition: [-length() / 2, -length() / 2, 0],\n\t\t\t\t\t\ttransparent: true,\n\t\t\t\t\t\tdepthTest: pivotControls.depthTest(),\n\t\t\t\t\t\tlineWidth: pivotControls.lineWidth(),\n\t\t\t\t\t\tcolor: color(),\n\t\t\t\t\t\topacity: pivotControls.opacity(),\n\t\t\t\t\t\tpolygonOffset: true,\n\t\t\t\t\t\tpolygonOffsetFactor: -10,\n\t\t\t\t\t\tuserData: pivotControls.userData(),\n\t\t\t\t\t\tfog: false,\n\t\t\t\t\t\trenderOrder: pivotControls.renderOrder(),\n\t\t\t\t\t}\"\n\t\t\t\t/>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsHTML, NgtsLine],\n})\nexport class NgtsPlaneSlider {\n\tprotected readonly DoubleSide = THREE.DoubleSide;\n\n\tdir1 = input.required<THREE.Vector3>();\n\tdir2 = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate meshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate clickInfo: { clickPoint: THREE.Vector3; e1: THREE.Vector3; e2: THREE.Vector3; plane: THREE.Plane } | null =\n\t\tnull;\n\tprivate offsetX0 = 0;\n\tprivate offsetY0 = 0;\n\n\tprotected matrixL = computed(() => {\n\t\tconst dir1N = this.dir1().clone().normalize();\n\t\tconst dir2N = this.dir2().clone().normalize();\n\t\treturn new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n\t});\n\n\tprotected pos1 = computed(() => (this.pivotControls.fixed() ? 1 / 7 : this.pivotControls.scale() / 7));\n\tprotected length = computed(() => (this.pivotControls.fixed() ? 0.225 : this.pivotControls.scale() * 0.225));\n\tprotected color = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\tpoints = computed(() => {\n\t\tconst length = this.length();\n\t\treturn [\n\t\t\tnew THREE.Vector3(0, 0, 0),\n\t\t\tnew THREE.Vector3(0, length, 0),\n\t\t\tnew THREE.Vector3(length, length, 0),\n\t\t\tnew THREE.Vector3(length, 0, 0),\n\t\t\tnew THREE.Vector3(0, 0, 0),\n\t\t];\n\t});\n\n\tconstructor() {\n\t\textend({ Group, Mesh, PlaneGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.meshRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, axis, group, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.axis(),\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${this.pivotControls.translation[(axis + 1) % 3].toFixed(2)}, ${this.pivotControls.translation[(axis + 2) % 3].toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst e1 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 0).normalize();\n\t\tconst e2 = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 1).normalize();\n\t\tconst normal = new THREE.Vector3().setFromMatrixColumn(group.matrixWorld, 2).normalize();\n\t\tconst plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n\t\tthis.clickInfo = { clickPoint, e1, e2, plane };\n\t\tthis.offsetX0 = this.pivotControls.translation[(axis + 1) % 3];\n\t\tthis.offsetY0 = this.pivotControls.translation[(axis + 2) % 3];\n\t\tthis.pivotControls.onDragStart({ component: 'Slider', axis, origin, directions: [e1, e2, normal] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not defined on ThreeEvent\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, e1, e2, plane } = this.clickInfo;\n\t\t\tconst [translationLimits, axis, annotation] = [\n\t\t\t\tthis.pivotControls.translationLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t];\n\n\t\t\tconst [minX, maxX] = translationLimits?.[(axis + 1) % 3] || [undefined, undefined];\n\t\t\tconst [minY, maxY] = translationLimits?.[(axis + 2) % 3] || [undefined, undefined];\n\n\t\t\tray.copy(event.ray);\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tray.direction.negate();\n\t\t\tray.intersectPlane(plane, intersection);\n\t\t\tintersection.sub(clickPoint);\n\t\t\tlet [offsetX, offsetY] = decomposeIntoBasis(e1, e2, intersection);\n\t\t\t/* let offsetY = (intersection.y - (intersection.x * e1.y) / e1.x) / (e2.y - (e2.x * e1.y) / e1.x)\n let offsetX = (intersection.x - offsetY * e2.x) / e1.x */\n\t\t\tif (minX !== undefined) {\n\t\t\t\toffsetX = Math.max(offsetX, minX - this.offsetX0);\n\t\t\t}\n\t\t\tif (maxX !== undefined) {\n\t\t\t\toffsetX = Math.min(offsetX, maxX - this.offsetX0);\n\t\t\t}\n\t\t\tif (minY !== undefined) {\n\t\t\t\toffsetY = Math.max(offsetY, minY - this.offsetY0);\n\t\t\t}\n\t\t\tif (maxY !== undefined) {\n\t\t\t\toffsetY = Math.min(offsetY, maxY - this.offsetY0);\n\t\t\t}\n\t\t\tthis.pivotControls.translation[(axis + 1) % 3] = this.offsetX0 + offsetX;\n\t\t\tthis.pivotControls.translation[(axis + 2) % 3] = this.offsetY0 + offsetY;\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.pivotControls.translation[(axis + 1) % 3].toFixed(2)}, ${this.pivotControls.translation[(axis + 2) % 3].toFixed(2)}`;\n\t\t\t}\n\n\t\t\toffsetMatrix.makeTranslation(\n\t\t\t\toffsetX * e1.x + offsetY * e2.x,\n\t\t\t\toffsetX * e1.y + offsetY * e2.y,\n\t\t\t\toffsetX * e1.z + offsetY * e2.z,\n\t\t\t);\n\t\t\tthis.pivotControls.onDrag(offsetMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t];\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\t\tevent.stopPropagation();\n\t\tthis.clickInfo = null;\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not defined on ThreeEvent\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectStore, NgtArgs, NgtThreeEvent, objectEvents } from 'angular-three';\nimport { calculateScaleFactor, NgtsHTML } from 'angular-three-soba/misc';\nimport * as THREE from 'three';\nimport { Group, Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\nimport { NgtsPivotControls } from './pivot-controls';\n\nconst vec1 = new THREE.Vector3();\nconst vec2 = new THREE.Vector3();\n\n/**\n * Calculates the offset distance along an axis from a click point to the current ray position.\n *\n * This function is used to determine how far the user has dragged along a specific axis\n * by projecting the ray onto the plane defined by the click point and axis direction.\n * Used for calculating scale factor based on drag distance.\n *\n * @param clickPoint - The initial click point in world space\n * @param normal - The axis direction vector (normalized)\n * @param rayStart - The origin of the current pointer ray\n * @param rayDir - The direction of the current pointer ray\n * @returns The offset distance along the axis\n */\nexport function calculateOffset(\n\tclickPoint: THREE.Vector3,\n\tnormal: THREE.Vector3,\n\trayStart: THREE.Vector3,\n\trayDir: THREE.Vector3,\n) {\n\tconst e1 = normal.dot(normal);\n\tconst e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n\tconst e3 = normal.dot(rayDir);\n\n\tif (e3 === 0) {\n\t\treturn -e2 / e1;\n\t}\n\n\tvec1.copy(rayDir)\n\t\t.multiplyScalar(e1 / e3)\n\t\t.sub(normal);\n\tvec2.copy(rayDir)\n\t\t.multiplyScalar(e2 / e3)\n\t\t.add(rayStart)\n\t\t.sub(clickPoint);\n\n\treturn -vec1.dot(vec2) / vec1.dot(vec1);\n}\n\nconst upV = new THREE.Vector3(0, 1, 0);\nconst scaleV = new THREE.Vector3();\nconst scaleMatrix = new THREE.Matrix4();\n\n/**\n * Internal component that renders a scaling sphere handle for the pivot controls.\n *\n * This component creates a sphere at the end of an axis that allows non-uniform\n * scaling along that axis. Dragging the sphere away from the origin increases scale,\n * while dragging toward the origin decreases it. Shift key enables snapping.\n */\n@Component({\n\tselector: 'ngts-scaling-sphere',\n\ttemplate: `\n\t\t<ngt-group #group>\n\t\t\t<ngt-group #innerGroup [matrix]=\"matrixL()\" [matrixAutoUpdate]=\"false\">\n\t\t\t\t@if (pivotControls.annotations()) {\n\t\t\t\t\t<ngts-html [options]=\"{ position: [0, position() / 2, 0] }\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t#annotation\n\t\t\t\t\t\t\thtmlContent\n\t\t\t\t\t\t\tstyle=\"display: none; background: #151520; color: white; padding: 6px 8px; border-radius: 7px; white-space: nowrap;\"\n\t\t\t\t\t\t\t[class]=\"pivotControls.annotationsClass()\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</ngts-html>\n\t\t\t\t}\n\t\t\t\t<ngt-mesh\n\t\t\t\t\t#mesh\n\t\t\t\t\t[position]=\"[0, position(), 0]\"\n\t\t\t\t\t[renderOrder]=\"pivotControls.renderOrder()\"\n\t\t\t\t\t[userData]=\"pivotControls.userData()\"\n\t\t\t\t>\n\t\t\t\t\t<ngt-sphere-geometry *args=\"[radius(), 12, 12]\" />\n\t\t\t\t\t<ngt-mesh-basic-material\n\t\t\t\t\t\ttransparent\n\t\t\t\t\t\t[depthTest]=\"pivotControls.depthTest()\"\n\t\t\t\t\t\t[color]=\"color()\"\n\t\t\t\t\t\t[opacity]=\"pivotControls.opacity()\"\n\t\t\t\t\t\tpolygonOffset\n\t\t\t\t\t\t[polygonOffsetFactor]=\"-10\"\n\t\t\t\t\t/>\n\t\t\t\t</ngt-mesh>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsHTML, NgtArgs],\n})\nexport class NgtsScalingSphere {\n\tdirection = input.required<THREE.Vector3>();\n\taxis = input.required<0 | 1 | 2>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tprivate innerGroupRef = viewChild.required<ElementRef<THREE.Group>>('innerGroup');\n\tannotationRef = viewChild<string, ElementRef<HTMLDivElement>>('annotation', { read: ElementRef });\n\tmeshRef = viewChild.required<ElementRef<THREE.Mesh>>('mesh');\n\n\tprotected pivotControls = inject(NgtsPivotControls);\n\tprivate store = injectStore();\n\n\tprivate hovered = signal(false);\n\tprivate scale0 = 1;\n\tprivate scaleCurrent = 1;\n\tprivate clickInfo: {\n\t\tclickPoint: THREE.Vector3;\n\t\tdir: THREE.Vector3;\n\t\tmPLG: THREE.Matrix4;\n\t\tmPLGInv: THREE.Matrix4;\n\t\toffsetMultiplier: number;\n\t} | null = null;\n\n\tprotected position = computed(() => (this.pivotControls.fixed() ? 1.2 : 1.2 * this.pivotControls.scale()));\n\tprotected radius = computed(() =>\n\t\tthis.pivotControls.fixed()\n\t\t\t? (this.pivotControls.lineWidth() / this.pivotControls.scale()) * 1.8\n\t\t\t: this.pivotControls.scale() / 22.5,\n\t);\n\tmatrixL = computed(() => {\n\t\tconst quaternion = new THREE.Quaternion().setFromUnitVectors(upV, this.direction().clone().normalize());\n\t\treturn new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n\t});\n\tcolor = computed(() =>\n\t\tthis.hovered() ? this.pivotControls.hoveredColor() : this.pivotControls.axisColors()[this.axis()],\n\t);\n\n\tconstructor() {\n\t\textend({ Group, Mesh, SphereGeometry, MeshBasicMaterial });\n\n\t\t// TODO: (chau) remove this when event binding syntax no longer trigger cdr\n\t\tobjectEvents(this.innerGroupRef, {\n\t\t\tpointerdown: this.onPointerDown.bind(this),\n\t\t\tpointermove: this.onPointerMove.bind(this),\n\t\t\tpointerup: this.onPointerUp.bind(this),\n\t\t\tpointerout: this.onPointerOut.bind(this),\n\t\t});\n\t}\n\n\tonPointerDown(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls, fixed, scale, direction, axis, size, group] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.pivotControls.fixed(),\n\t\t\tthis.pivotControls.scale(),\n\t\t\tthis.direction(),\n\t\t\tthis.axis(),\n\t\t\tthis.store.size(),\n\t\t\tthis.groupRef().nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.innerText = `${scale.toFixed(2)}`;\n\t\t\tannotation.style.display = 'block';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tconst rotation = new THREE.Matrix4().extractRotation(group.matrixWorld);\n\t\tconst clickPoint = event.point.clone();\n\t\tconst origin = new THREE.Vector3().setFromMatrixPosition(group.matrixWorld);\n\t\tconst dir = direction.clone().applyMatrix4(rotation).normalize();\n\t\tconst mPLG = group.matrixWorld.clone();\n\t\tconst mPLGInv = mPLG.clone().invert();\n\t\tconst offsetMultiplier = fixed\n\t\t\t? 1 / calculateScaleFactor(group.getWorldPosition(vec1), scale, event.camera, size)\n\t\t\t: 1;\n\t\tthis.clickInfo = { clickPoint, dir, mPLG, mPLGInv, offsetMultiplier };\n\t\tthis.pivotControls.onDragStart({ component: 'Sphere', axis, origin, directions: [dir] });\n\n\t\tif (controls) controls.enabled = false;\n\n\t\t// @ts-expect-error - setPointerCapture is not in the type definition\n\t\tevent.target.setPointerCapture(event.pointerId);\n\t}\n\n\tonPointerMove(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tif (!this.hovered()) this.hovered.set(true);\n\n\t\tif (this.clickInfo) {\n\t\t\tconst { clickPoint, dir, mPLG, mPLGInv, offsetMultiplier } = this.clickInfo;\n\t\t\tconst [scaleLimits, axis, position, annotation, fixed, scale, mesh] = [\n\t\t\t\tthis.pivotControls.scaleLimits(),\n\t\t\t\tthis.axis(),\n\t\t\t\tthis.position(),\n\t\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\t\tthis.pivotControls.fixed(),\n\t\t\t\tthis.pivotControls.scale(),\n\t\t\t\tthis.meshRef().nativeElement,\n\t\t\t];\n\n\t\t\tconst [min, max] = scaleLimits?.[axis] || [1e-5, undefined]; // always limit the minimal value, since setting it very low might break the transform\n\t\t\tconst offsetW = calculateOffset(clickPoint, dir, event.ray.origin, event.ray.direction);\n\t\t\tconst offsetL = offsetW * offsetMultiplier;\n\t\t\tconst offsetH = fixed ? offsetL : offsetL / scale;\n\t\t\tlet upscale = Math.pow(2, offsetH * 0.2);\n\n\t\t\tif (event.shiftKey) {\n\t\t\t\tupscale = Math.round(upscale * 10) / 10;\n\t\t\t}\n\n\t\t\tupscale = Math.max(upscale, min / this.scale0);\n\n\t\t\tif (max !== undefined) {\n\t\t\t\tupscale = Math.min(upscale, max / this.scale0);\n\t\t\t}\n\n\t\t\tthis.scaleCurrent = this.scale0 * upscale;\n\t\t\tmesh.position.set(0, position + offsetL, 0);\n\n\t\t\tif (annotation) {\n\t\t\t\tannotation.innerText = `${this.scaleCurrent.toFixed(2)}`;\n\t\t\t}\n\n\t\t\tscaleV.set(1, 1, 1);\n\t\t\tscaleV.setComponent(axis, upscale);\n\t\t\tscaleMatrix.makeScale(scaleV.x, scaleV.y, scaleV.z).premultiply(mPLG).multiply(mPLGInv);\n\t\t\tthis.pivotControls.onDrag(scaleMatrix);\n\t\t}\n\t}\n\n\tonPointerUp(event: NgtThreeEvent<PointerEvent>) {\n\t\tconst [annotation, controls, position, mesh] = [\n\t\t\tthis.annotationRef()?.nativeElement,\n\t\t\tthis.store.controls() as unknown as { enabled: boolean },\n\t\t\tthis.position(),\n\t\t\tthis.meshRef().nativeElement,\n\t\t];\n\n\t\tif (annotation) {\n\t\t\tannotation.style.display = 'none';\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tthis.scale0 = this.scaleCurrent;\n\t\tthis.clickInfo = null;\n\t\tmesh.position.set(0, position, 0);\n\t\tthis.pivotControls.onDragEnd();\n\n\t\tif (controls) controls.enabled = true;\n\n\t\t// @ts-expect-error - releasePointerCapture is not in the type definition\n\t\tevent.target.releasePointerCapture(event.pointerId);\n\t}\n\n\tonPointerOut(event: NgtThreeEvent<PointerEvent>) {\n\t\tevent.stopPropagation();\n\t\tthis.hovered.set(false);\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\toutput,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend, getInstanceState, injectStore, is, NgtAnyRecord, omit, pick } from 'angular-three';\nimport { calculateScaleFactor } from 'angular-three-soba/misc';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { NgtsAxisArrow } from './axis-arrow';\nimport { NgtsAxisRotator } from './axis-rotator';\nimport { NgtsPlaneSlider } from './plane-slider';\nimport { NgtsScalingSphere } from './scaling-sphere';\n\n/**\n * Parameters passed when a drag operation starts on the pivot controls.\n */\nexport interface OnDragStartParameters {\n\t/**\n\t * The type of component being dragged.\n\t */\n\tcomponent: 'Arrow' | 'Slider' | 'Rotator' | 'Sphere';\n\t/**\n\t * The axis index (0 = X, 1 = Y, 2 = Z).\n\t */\n\taxis: 0 | 1 | 2;\n\t/**\n\t * The world-space origin of the drag operation.\n\t */\n\torigin: THREE.Vector3;\n\t/**\n\t * Direction vectors relevant to the drag operation.\n\t */\n\tdirections: THREE.Vector3[];\n}\n\n/**\n * Parameters passed during a drag operation on the pivot controls.\n */\nexport interface OnDragParameters {\n\t/**\n\t * The current local transformation matrix.\n\t */\n\tl: THREE.Matrix4;\n\t/**\n\t * The delta (change) in local transformation.\n\t */\n\tdeltaL: THREE.Matrix4;\n\t/**\n\t * The current world transformation matrix.\n\t */\n\tw: THREE.Matrix4;\n\t/**\n\t * The delta (change) in world transformation.\n\t */\n\tdeltaW: THREE.Matrix4;\n}\n\nconst mL0 = new THREE.Matrix4();\nconst mW0 = new THREE.Matrix4();\nconst mP = new THREE.Matrix4();\nconst mPInv = new THREE.Matrix4();\nconst mW = new THREE.Matrix4();\nconst mL = new THREE.Matrix4();\nconst mL0Inv = new THREE.Matrix4();\nconst mdL = new THREE.Matrix4();\nconst mG = new THREE.Matrix4();\n\nconst bb = new THREE.Box3();\nconst bbObj = new THREE.Box3();\nconst vCenter = new THREE.Vector3();\nconst vSize = new THREE.Vector3();\nconst vAnchorOffset = new THREE.Vector3();\nconst vPosition = new THREE.Vector3();\nconst vScale = new THREE.Vector3();\n\nconst xDir = new THREE.Vector3(1, 0, 0);\nconst yDir = new THREE.Vector3(0, 1, 0);\nconst zDir = new THREE.Vector3(0, 0, 1);\n\n/**\n * Configuration options for the NgtsPivotControls component.\n *\n * These options control the behavior, appearance, and constraints of the\n * interactive pivot gizmo used for manipulating 3D objects.\n */\nexport interface NgtsPivotControlsOptions {\n\t/**\n\t * Enables/disables the control.\n\t * @default true\n\t */\n\tenabled: boolean;\n\t/**\n\t * Scale of the gizmo.\n\t * @default 1\n\t */\n\tscale: number;\n\t/**\n\t * Width of the gizmo lines (THREE.Line2 prop).\n\t * @default 4\n\t */\n\tlineWidth: number;\n\t/**\n\t * If true, the gizmo remains constant in screen size. Scale is then in pixels.\n\t * @default false\n\t */\n\tfixed: boolean;\n\t/**\n\t * Position offset of the pivot point. Does not shift content, only the gizmo position.\n\t * @default [0, 0, 0]\n\t */\n\toffset: [number, number, number];\n\t/**\n\t * Starting rotation of the gizmo in radians [x, y, z].\n\t * @default [0, 0, 0]\n\t */\n\trotation: [number, number, number];\n\n\t/**\n\t * Starting transformation matrix. If provided, the group uses this matrix.\n\t */\n\tmatrix?: THREE.Matrix4;\n\t/**\n\t * Bounding box anchor point. Each axis can be -1 (min), 0 (center), or +1 (max).\n\t */\n\tanchor?: [number, number, number];\n\t/**\n\t * If true, automatically applies the local transform on drag.\n\t * @default true\n\t */\n\tautoTransform: boolean;\n\t/**\n\t * Which axes are active and can be manipulated [x, y, z].\n\t * @default [true, true, true]\n\t */\n\tactiveAxes: [boolean, boolean, boolean];\n\n\t/**\n\t * Disables all translation arrows.\n\t * @default false\n\t */\n\tdisableAxes: boolean;\n\t/**\n\t * Disables all plane sliders.\n\t * @default false\n\t */\n\tdisableSliders: boolean;\n\t/**\n\t * Disables all rotation handles.\n\t * @default false\n\t */\n\tdisableRotations: boolean;\n\t/**\n\t * Disables all scaling spheres.\n\t * @default false\n\t */\n\tdisableScaling: boolean;\n\n\t/**\n\t * Translation limits for each axis as [min, max] pairs. Undefined means no limit.\n\t */\n\ttranslationLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\t/**\n\t * Rotation limits for each axis as [min, max] pairs in radians. Undefined means no limit.\n\t */\n\trotationLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\t/**\n\t * Scale limits for each axis as [min, max] pairs. Undefined means no limit.\n\t */\n\tscaleLimits?: [[number, number] | undefined, [number, number] | undefined, [number, number] | undefined];\n\n\t/**\n\t * Colors for the X, Y, and Z axes.\n\t * @default ['#ff2060', '#20df80', '#2080ff']\n\t */\n\taxisColors: [string | number, string | number, string | number];\n\t/**\n\t * Color when a gizmo element is hovered.\n\t * @default '#ffff40'\n\t */\n\thoveredColor: string | number;\n\t/**\n\t * Whether to show HTML value annotations during drag.\n\t * @default false\n\t */\n\tannotations: boolean;\n\t/**\n\t * CSS class name applied to the HTML annotations.\n\t */\n\tannotationsClass?: string;\n\t/**\n\t * Whether the gizmo should be occluded by scene geometry.\n\t * @default true\n\t */\n\tdepthTest: boolean;\n\t/**\n\t * Render order for the gizmo.\n\t * @default 500\n\t */\n\trenderOrder: number;\n\t/**\n\t * Opacity of the gizmo elements.\n\t * @default 1\n\t */\n\topacity?: number;\n\t/**\n\t * Whether the gizmo is visible.\n\t * @default true\n\t */\n\tvisible: boolean;\n\t/**\n\t * Custom user data to attach to gizmo meshes.\n\t */\n\tuserData?: NgtAnyRecord;\n}\n\nconst defaultOptions: NgtsPivotControlsOptions = {\n\tenabled: true,\n\tautoTransform: true,\n\tdisableAxes: false,\n\tdisableSliders: false,\n\tdisableRotations: false,\n\tdisableScaling: false,\n\tactiveAxes: [true, true, true],\n\toffset: [0, 0, 0],\n\trotation: [0, 0, 0],\n\tscale: 1,\n\tlineWidth: 4,\n\tfixed: false,\n\tdepthTest: true,\n\taxisColors: ['#ff2060', '#20df80', '#2080ff'],\n\thoveredColor: '#ffff40',\n\tannotations: false,\n\topacity: 1,\n\tvisible: true,\n\trenderOrder: 500,\n};\n\n/**\n * A component that provides an interactive pivot-style gizmo for manipulating 3D objects.\n *\n * NgtsPivotControls creates a multi-axis gizmo with arrows for translation, plane sliders\n * for 2D movement, rotators for rotation, and spheres for scaling. The gizmo can be\n * customized to enable/disable specific transformation types and constrained with limits.\n *\n * @example\n * ```html\n * <ngts-pivot-controls [options]=\"{ scale: 0.5 }\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-pivot-controls>\n * ```\n *\n * @example\n * ```html\n * <ngts-pivot-controls\n * [options]=\"{\n * disableRotations: true,\n * disableScaling: true,\n * translationLimits: [[-1, 1], undefined, undefined]\n * }\"\n * (dragged)=\"onDrag($event)\"\n * (dragStarted)=\"onDragStart($event)\"\n * (dragEnded)=\"onDragEnd()\"\n * >\n * <ngt-mesh />\n * </ngts-pivot-controls>\n * ```\n */\n@Component({\n\tselector: 'ngts-pivot-controls',\n\ttemplate: `\n\t\t<ngt-group #parent>\n\t\t\t<ngt-group #group [matrix]=\"matrix()\" [matrixAutoUpdate]=\"false\" [parameters]=\"parameters()\">\n\t\t\t\t<ngt-group #gizmo [visible]=\"visible()\" [position]=\"offset()\" [rotation]=\"rotation()\">\n\t\t\t\t\t@if (enabled()) {\n\t\t\t\t\t\t@let _disableAxes = disableAxes();\n\t\t\t\t\t\t@let _disableSliders = disableSliders();\n\t\t\t\t\t\t@let _disableRotations = disableRotations();\n\t\t\t\t\t\t@let _disableScaling = disableScaling();\n\t\t\t\t\t\t@let _activeAxes = activeAxes();\n\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[0]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"0\" [direction]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"1\" [direction]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableAxes && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-axis-arrow [axis]=\"2\" [direction]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[0] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"2\" [dir1]=\"xDir\" [dir2]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[0] && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"1\" [dir1]=\"zDir\" [dir2]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableSliders && _activeAxes[2] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-plane-slider [axis]=\"0\" [dir1]=\"yDir\" [dir2]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[0] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"2\" [dir1]=\"xDir\" [dir2]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[0] && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"1\" [dir1]=\"zDir\" [dir2]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableRotations && _activeAxes[2] && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-axis-rotator [axis]=\"0\" [dir1]=\"yDir\" [dir2]=\"zDir\" />\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[0]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"0\" [direction]=\"xDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[1]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"1\" [direction]=\"yDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@if (!_disableScaling && _activeAxes[2]) {\n\t\t\t\t\t\t\t<ngts-scaling-sphere [axis]=\"2\" [direction]=\"zDir\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t</ngt-group>\n\t\t\t\t<ngt-group #children>\n\t\t\t\t\t<ng-content />\n\t\t\t\t</ngt-group>\n\t\t\t</ngt-group>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsAxisArrow, NgtsPlaneSlider, NgtsAxisRotator, NgtsScalingSphere],\n})\nexport class NgtsPivotControls {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'matrix',\n\t\t'autoTransform',\n\t\t'anchor',\n\t\t'disableAxes',\n\t\t'disableSliders',\n\t\t'disableRotations',\n\t\t'disableScaling',\n\t\t'activeAxes',\n\t\t'offset',\n\t\t'rotation',\n\t\t'scale',\n\t\t'lineWidth',\n\t\t'fixed',\n\t\t'translationLimits',\n\t\t'rotationLimits',\n\t\t'scaleLimits',\n\t\t'depthTest',\n\t\t'axisColors',\n\t\t'hoveredColor',\n\t\t'annotations',\n\t\t'annotationsClass',\n\t\t'opacity',\n\t\t'visible',\n\t\t'userData',\n\t\t'renderOrder',\n\t]);\n\n\tdragStarted = output<OnDragStartParameters>();\n\tdragEnded = output<void>();\n\tdragged = output<OnDragParameters>();\n\n\tprivate autoTransform = pick(this.options, 'autoTransform');\n\tprotected matrix = pick(this.options, 'matrix');\n\tprotected offset = pick(this.options, 'offset');\n\tprotected rotation = pick(this.options, 'rotation');\n\tprotected visible = pick(this.options, 'visible');\n\tprotected enabled = pick(this.options, 'enabled');\n\tprotected disableAxes = pick(this.options, 'disableAxes');\n\tprotected disableSliders = pick(this.options, 'disableSliders');\n\tprotected disableRotations = pick(this.options, 'disableRotations');\n\tprotected disableScaling = pick(this.options, 'disableScaling');\n\tprotected activeAxes = pick(this.options, 'activeAxes');\n\n\tannotations = pick(this.options, 'annotations');\n\tannotationsClass = pick(this.options, 'annotationsClass');\n\ttranslationLimits = pick(this.options, 'translationLimits');\n\trotationLimits = pick(this.options, 'rotationLimits');\n\tscaleLimits = pick(this.options, 'scaleLimits');\n\tfixed = pick(this.options, 'fixed');\n\thoveredColor = pick(this.options, 'hoveredColor');\n\taxisColors = pick(this.options, 'axisColors');\n\tlineWidth = pick(this.options, 'lineWidth');\n\tscale = pick(this.options, 'scale');\n\tuserData = pick(this.options, 'userData');\n\topacity = pick(this.options, 'opacity');\n\tdepthTest = pick(this.options, 'depthTest');\n\trenderOrder = pick(this.options, 'renderOrder');\n\n\tprotected xDir = xDir;\n\tprotected yDir = yDir;\n\tprotected zDir = zDir;\n\n\tparentRef = viewChild.required<ElementRef<THREE.Group>>('parent');\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\tgizmoRef = viewChild.required<ElementRef<THREE.Group>>('gizmo');\n\tchildrenRef = viewChild.required<ElementRef<THREE.Group>>('children');\n\n\tprivate store = injectStore();\n\n\ttranslation: [number, number, number] = [0, 0, 0];\n\n\tprivate anchor = pick(this.options, 'anchor');\n\tprivate cameraScale = new THREE.Vector3(1, 1, 1);\n\tprivate gizmoScale = new THREE.Vector3(1, 1, 1);\n\n\tconstructor() {\n\t\textend({ Group });\n\n\t\teffect(() => {\n\t\t\tconst anchor = this.anchor();\n\t\t\tif (!anchor) return;\n\n\t\t\tconst childrenContainer = this.childrenRef().nativeElement;\n\t\t\tconst instanceState = getInstanceState(childrenContainer);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst [gizmo, offset, invalidate] = [\n\t\t\t\tthis.gizmoRef().nativeElement,\n\t\t\t\tthis.offset(),\n\t\t\t\tthis.store.invalidate(),\n\t\t\t\tthis.options(),\n\t\t\t\t[instanceState.objects(), instanceState.nonObjects()],\n\t\t\t];\n\t\t\tchildrenContainer.updateWorldMatrix(true, true);\n\n\t\t\tmPInv.copy(childrenContainer.matrixWorld).invert();\n\t\t\tbb.makeEmpty();\n\n\t\t\tchildrenContainer.traverse((obj) => {\n\t\t\t\tif (!(obj as THREE.Mesh).geometry) return;\n\t\t\t\tif (!(obj as THREE.Mesh).geometry.boundingBox) (obj as THREE.Mesh).geometry.computeBoundingBox();\n\t\t\t\tmL.copy(obj.matrixWorld).premultiply(mPInv);\n\t\t\t\tconst boundingBox = (obj as THREE.Mesh).geometry.boundingBox;\n\t\t\t\tif (boundingBox) {\n\t\t\t\t\tbbObj.copy(boundingBox);\n\t\t\t\t\tbbObj.applyMatrix4(mL);\n\t\t\t\t\tbb.union(bbObj);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvCenter.copy(bb.max).add(bb.min).multiplyScalar(0.5);\n\t\t\tvSize.copy(bb.max).sub(bb.min).multiplyScalar(0.5);\n\t\t\tvAnchorOffset\n\t\t\t\t.copy(vSize)\n\t\t\t\t.multiply(new THREE.Vector3(...anchor))\n\t\t\t\t.add(vCenter);\n\t\t\tvPosition.set(...offset).add(vAnchorOffset);\n\t\t\tgizmo.position.copy(vPosition);\n\t\t\tinvalidate();\n\t\t});\n\n\t\tconst vec = new THREE.Vector3();\n\t\tbeforeRender(({ camera, size, invalidate }) => {\n\t\t\tconst [{ fixed, scale, matrix }, gizmo, group] = [\n\t\t\t\tthis.options(),\n\t\t\t\tthis.gizmoRef().nativeElement,\n\t\t\t\tthis.groupRef().nativeElement,\n\t\t\t];\n\n\t\t\tif (fixed) {\n\t\t\t\tconst sf = calculateScaleFactor(gizmo.getWorldPosition(vec), scale, camera, size);\n\t\t\t\tthis.cameraScale.setScalar(sf);\n\t\t\t}\n\n\t\t\tif (is.three<THREE.Matrix4>(matrix, 'isMatrix4')) {\n\t\t\t\tgroup.matrix = matrix;\n\t\t\t}\n\n\t\t\t// Update gizmo scale in accordance with matrix changes\n\t\t\t// Without this, there might be noticeable turbulence if scaling happens fast enough\n\t\t\tgizmo.updateWorldMatrix(true, true);\n\n\t\t\tmG.makeRotationFromEuler(gizmo.rotation).setPosition(gizmo.position).premultiply(group.matrixWorld);\n\t\t\tthis.gizmoScale.setFromMatrixScale(mG);\n\n\t\t\tvScale.copy(this.cameraScale).divide(this.gizmoScale);\n\n\t\t\tif (\n\t\t\t\tMath.abs(gizmo.scale.x - vScale.x) > 1e-4 ||\n\t\t\t\tMath.abs(gizmo.scale.y - vScale.y) > 1e-4 ||\n\t\t\t\tMath.abs(gizmo.scale.z - vScale.z) > 1e-4\n\t\t\t) {\n\t\t\t\tgizmo.scale.copy(vScale);\n\t\t\t\tinvalidate();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Called when a drag operation starts. Captures the initial transform state.\n\t *\n\t * @param parameters - Information about the drag operation\n\t */\n\tonDragStart(parameters: OnDragStartParameters) {\n\t\tconst group = this.groupRef().nativeElement;\n\t\tmL0.copy(group.matrix);\n\t\tmW0.copy(group.matrixWorld);\n\t\tthis.dragStarted.emit(parameters);\n\t\tthis.store.snapshot.invalidate();\n\t}\n\n\t/**\n\t * Called during a drag operation. Updates the transform and emits the dragged event.\n\t *\n\t * @param mdW - The world-space delta transformation matrix\n\t */\n\tonDrag(mdW: THREE.Matrix4) {\n\t\tconst [parent, group, autoTransform] = [\n\t\t\tthis.parentRef().nativeElement,\n\t\t\tthis.groupRef().nativeElement,\n\t\t\tthis.autoTransform(),\n\t\t];\n\n\t\tmP.copy(parent.matrixWorld);\n\t\tmPInv.copy(mP).invert();\n\t\t// After applying the delta\n\t\tmW.copy(mW0).premultiply(mdW);\n\t\tmL.copy(mW).premultiply(mPInv);\n\t\tmL0Inv.copy(mL0).invert();\n\t\tmdL.copy(mL).multiply(mL0Inv);\n\n\t\tif (autoTransform) {\n\t\t\tgroup.matrix.copy(mL);\n\t\t}\n\n\t\tthis.dragged.emit({ l: mL, deltaL: mdL, w: mW, deltaW: mdW });\n\t\tthis.store.snapshot.invalidate();\n\t}\n\n\t/**\n\t * Called when a drag operation ends. Emits the dragEnded event.\n\t */\n\tonDragEnd() {\n\t\tthis.dragEnded.emit();\n\t\tthis.store.snapshot.invalidate();\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n\toutput,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetInstanceState,\n\tinjectStore,\n\tNgtArgs,\n\tNgtThreeElement,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n\tresolveRef,\n} from 'angular-three';\nimport * as THREE from 'three';\nimport { Group } from 'three';\nimport { TransformControls } from 'three-stdlib';\n\n/**\n * Internal interface for controls with an enabled property.\n */\ninterface ControlsProto {\n\tenabled: boolean;\n}\n\n/**\n * Type representing the TransformControls Three.js element.\n */\nexport type NgtsTransformControlsObject = NgtThreeElement<typeof TransformControls>;\n\n/**\n * Configuration options for the NgtsTransformControls component.\n *\n * These options control the behavior and appearance of the transform gizmo\n * used for manipulating 3D objects in the scene.\n */\nexport type NgtsTransformControlsOptions = Partial<NgtsTransformControlsObject> &\n\tPartial<NgtThreeElements['ngt-group']> & {\n\t\t/**\n\t\t * Whether the controls are enabled.\n\t\t * @default true\n\t\t */\n\t\tenabled?: boolean;\n\t\t/**\n\t\t * Restricts transformation to a specific axis ('X', 'Y', 'Z', 'XY', 'YZ', 'XZ', 'XYZ').\n\t\t */\n\t\taxis?: string | null;\n\t\t/**\n\t\t * The DOM element to attach controls to.\n\t\t */\n\t\tdomElement?: HTMLElement;\n\t\t/**\n\t\t * The transformation mode.\n\t\t * @default 'translate'\n\t\t */\n\t\tmode?: 'translate' | 'rotate' | 'scale';\n\t\t/**\n\t\t * Snap increment for translation in units.\n\t\t */\n\t\ttranslationSnap?: number | null;\n\t\t/**\n\t\t * Snap increment for rotation in radians.\n\t\t */\n\t\trotationSnap?: number | null;\n\t\t/**\n\t\t * Snap increment for scaling.\n\t\t */\n\t\tscaleSnap?: number | null;\n\t\t/**\n\t\t * The coordinate space for transformations.\n\t\t * @default 'world'\n\t\t */\n\t\tspace?: 'world' | 'local';\n\t\t/**\n\t\t * The size of the gizmo.\n\t\t * @default 1\n\t\t */\n\t\tsize?: number;\n\t\t/**\n\t\t * Whether to show the X axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowX?: boolean;\n\t\t/**\n\t\t * Whether to show the Y axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowY?: boolean;\n\t\t/**\n\t\t * Whether to show the Z axis handle.\n\t\t * @default true\n\t\t */\n\t\tshowZ?: boolean;\n\t\t/**\n\t\t * The camera to use for the controls.\n\t\t */\n\t\tcamera?: THREE.Camera;\n\t\t/**\n\t\t * Whether to make these the default controls in the store.\n\t\t * @default false\n\t\t */\n\t\tmakeDefault?: boolean;\n\t};\n\n/**\n * A component that provides interactive transform controls for manipulating 3D objects.\n *\n * NgtsTransformControls wraps Three.js TransformControls to provide an interactive\n * gizmo for translating, rotating, and scaling objects in the scene. It can be\n * attached to a specific object or wrap content as a group.\n *\n * @example\n * ```html\n * <ngts-transform-controls [options]=\"{ mode: 'translate' }\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngts-transform-controls>\n * ```\n *\n * @example\n * ```html\n * <ngts-transform-controls\n * [object]=\"meshRef\"\n * [options]=\"{ mode: 'rotate', showX: false }\"\n * (change)=\"onTransform($event)\"\n * (objectChange)=\"onObjectChange($event)\"\n * />\n * ```\n */\n@Component({\n\tselector: 'ngts-transform-controls',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[controls()]\" [parameters]=\"controlsOptions()\" />\n\n\t\t<ngt-group #group [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsTransformControls {\n\tobject = input<THREE.Object3D | ElementRef<THREE.Object3D> | undefined | null>(null);\n\toptions = input({} as Partial<NgtsTransformControlsOptions>);\n\tprotected parameters = omit(this.options, [\n\t\t'enabled',\n\t\t'axis',\n\t\t'mode',\n\t\t'translationSnap',\n\t\t'rotationSnap',\n\t\t'scaleSnap',\n\t\t'space',\n\t\t'size',\n\t\t'showX',\n\t\t'showY',\n\t\t'showZ',\n\t\t'domElement',\n\t\t'makeDefault',\n\t\t'camera',\n\t]);\n\n\tprotected controlsOptions = pick(this.options, [\n\t\t'enabled',\n\t\t'axis',\n\t\t'mode',\n\t\t'translationSnap',\n\t\t'rotationSnap',\n\t\t'scaleSnap',\n\t\t'space',\n\t\t'size',\n\t\t'showX',\n\t\t'showY',\n\t\t'showZ',\n\t]);\n\n\tprivate camera = pick(this.options, 'camera');\n\tprivate domElement = pick(this.options, 'domElement');\n\tprivate makeDefault = pick(this.options, 'makeDefault');\n\n\tchange = output<THREE.Event>();\n\tmouseDown = output<THREE.Event>();\n\tmouseUp = output<THREE.Event>();\n\tobjectChange = output<THREE.Event>();\n\n\tgroupRef = viewChild.required<ElementRef<THREE.Group>>('group');\n\n\tprivate store = injectStore();\n\n\tcontrols = computed(() => {\n\t\tlet camera = this.camera();\n\t\tif (!camera) {\n\t\t\tcamera = this.store.camera();\n\t\t}\n\n\t\tlet domElement = this.domElement();\n\t\tif (!domElement) {\n\t\t\tdomElement = this.store.events().connected || this.store.gl.domElement();\n\t\t}\n\n\t\treturn new TransformControls(camera, domElement);\n\t});\n\n\tconstructor() {\n\t\textend({ Group });\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.updateDefaultControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.attachControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.disableDefaultControlsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.setupControlsEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\t}\n\n\tprivate attachControlsEffect() {\n\t\tconst group = this.groupRef().nativeElement;\n\t\tif (!group) return;\n\n\t\tconst instanceState = getInstanceState(group);\n\t\tif (!instanceState) return;\n\n\t\tconst [object, controls] = [resolveRef(this.object()), this.controls(), instanceState.objects()];\n\t\tif (object) {\n\t\t\tcontrols.attach(object);\n\t\t} else {\n\t\t\tcontrols.attach(group);\n\t\t}\n\n\t\treturn () => controls.detach();\n\t}\n\n\tprivate disableDefaultControlsEffect() {\n\t\tconst defaultControls = this.store.controls() as unknown as ControlsProto;\n\t\tif (!defaultControls) return;\n\n\t\tconst controls = this.controls();\n\t\tconst callback = (event: any) => {\n\t\t\tdefaultControls.enabled = !event.value;\n\t\t};\n\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('dragging-changed', callback);\n\t\treturn () => {\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('dragging-changed', callback);\n\t\t};\n\t}\n\n\tprivate setupControlsEventsEffect() {\n\t\tconst [controls, invalidate] = [this.controls(), this.store.invalidate()];\n\t\tconst onChange = (event: THREE.Event) => {\n\t\t\tinvalidate();\n\t\t\tif (!this.change['destroyed']) {\n\t\t\t\tthis.change.emit(event);\n\t\t\t}\n\t\t};\n\t\tconst onMouseDown = this.mouseDown.emit.bind(this.mouseDown);\n\t\tconst onMouseUp = this.mouseUp.emit.bind(this.mouseUp);\n\t\tconst onObjectChange = this.objectChange.emit.bind(this.objectChange);\n\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('change', onChange);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('mouseDown', onMouseDown);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('mouseUp', onMouseUp);\n\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\tcontrols.addEventListener('objectChange', onObjectChange);\n\n\t\treturn () => {\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('change', onChange);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('mouseDown', onMouseDown);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('mouseUp', onMouseUp);\n\t\t\t// @ts-expect-error - three-stdlib types are not up-to-date\n\t\t\tcontrols.removeEventListener('objectChange', onObjectChange);\n\t\t};\n\t}\n\n\tprivate updateDefaultControlsEffect() {\n\t\tconst [controls, makeDefault] = [this.controls(), this.makeDefault()];\n\t\tif (!makeDefault) return;\n\n\t\tconst oldControls = this.store.snapshot.controls;\n\t\tthis.store.update({ controls });\n\t\treturn () => this.store.update(() => ({ controls: oldControls }));\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions","vec1","vec2","calculateOffset","upV","offsetMatrix","i1","ray","intersection","i1_1"],"mappings":"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"}