ngx-vflow 0.14.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +5 -7
  2. package/esm2022/lib/vflow/components/handle/handle.component.mjs +16 -14
  3. package/esm2022/lib/vflow/components/node/node.component.mjs +8 -3
  4. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +8 -5
  5. package/esm2022/lib/vflow/directives/drag-handle.directive.mjs +27 -0
  6. package/esm2022/lib/vflow/directives/map-context.directive.mjs +24 -17
  7. package/esm2022/lib/vflow/models/node.model.mjs +2 -1
  8. package/esm2022/lib/vflow/models/toolbar.model.mjs +36 -0
  9. package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +66 -0
  10. package/esm2022/lib/vflow/services/draggable.service.mjs +13 -15
  11. package/esm2022/lib/vflow/services/overlays.service.mjs +34 -0
  12. package/esm2022/lib/vflow/testing-utils/provide-custom-node-mocks.mjs +67 -0
  13. package/esm2022/lib/vflow/vflow.module.mjs +17 -5
  14. package/esm2022/public-api.mjs +5 -1
  15. package/fesm2022/ngx-vflow.mjs +286 -60
  16. package/fesm2022/ngx-vflow.mjs.map +1 -1
  17. package/lib/vflow/components/handle/handle.component.d.ts +3 -3
  18. package/lib/vflow/components/node/node.component.d.ts +2 -0
  19. package/lib/vflow/directives/drag-handle.directive.d.ts +8 -0
  20. package/lib/vflow/directives/map-context.directive.d.ts +3 -2
  21. package/lib/vflow/models/node.model.d.ts +1 -0
  22. package/lib/vflow/models/toolbar.model.d.ts +19 -0
  23. package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +22 -0
  24. package/lib/vflow/services/draggable.service.d.ts +0 -5
  25. package/lib/vflow/services/overlays.service.d.ts +11 -0
  26. package/lib/vflow/testing-utils/provide-custom-node-mocks.d.ts +2 -0
  27. package/lib/vflow/vflow.module.d.ts +14 -12
  28. package/package.json +1 -1
  29. package/public-api.d.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/utils/nodes.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/connection.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/hash.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-entities.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/viewport.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-settings.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/viewport.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-defined.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/reference.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-os.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/keyboard.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/selection.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/map-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/round.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/draggable.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/template.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/add-nodes-to-edges.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/adjust-direction.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/component-event-bus.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/custom-node-base/custom-node-base.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-node/custom-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/node.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/node.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge-label.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/point-on-line-by-ratio.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/straigh-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/bezier-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/reference-keeper.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/changes-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/transform-background.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/microtask.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/resizable.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/run-in-injection-context.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-accessor.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/handle-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/id.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/flow-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/selectable.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/minimap.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.module.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Box } from \"../interfaces/box\";\nimport { Rect } from \"../interfaces/rect\";\nimport { NodeModel } from \"../models/node.model\";\n\nexport function getNodesBounds(nodes: NodeModel[]): Rect {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 }\n }\n\n let box: Box = { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity }\n\n nodes.forEach(node => {\n const nodeBox = nodeToBox(node)\n box = getBoundsOfBoxes(box, nodeBox)\n })\n\n return boxToRect(box)\n}\n\nfunction nodeToBox(node: NodeModel): Box {\n return {\n x: node.point().x,\n y: node.point().y,\n x2: node.point().x + node.size().width,\n y2: node.point().y + node.size().height,\n }\n}\n\nfunction boxToRect({ x, y, x2, y2 }: Box): Rect {\n return {\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n }\n}\n\nfunction getBoundsOfBoxes(box1: Box, box2: Box): Box {\n return {\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n }\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from \"../interfaces/connection-settings.interface\";\nimport { Connection } from \"../interfaces/connection.interface\";\nimport { Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { ConnectionMode } from \"../types/connection-mode.type\";\n\nexport class ConnectionModel {\n public curve: Curve\n public type: EdgeType\n public validator: ConnectionValidatorFn\n public mode: ConnectionMode\n\n constructor(public settings: ConnectionSettings) {\n this.curve = settings.curve ?? 'bezier'\n this.type = settings.type ?? 'default'\n this.mode = settings.mode ?? 'strict'\n\n const validatorsToRun = this.getValidators(settings)\n this.validator = (connection) => validatorsToRun.every((v) => v(connection))\n }\n\n private getValidators(settings: ConnectionSettings) {\n const validators = []\n\n validators.push(notSelfValidator)\n\n if (this.mode === 'loose') {\n validators.push(hasSourceAndTargetHandleValidator)\n }\n\n if (settings.validator) {\n validators.push(settings.validator)\n }\n\n return validators;\n }\n}\n\n/**\n * Internal validator that not allows self connections\n */\nconst notSelfValidator = (connection: Connection) => {\n return connection.source !== connection.target\n}\n\nconst hasSourceAndTargetHandleValidator = (connection: Connection) => {\n return connection.sourceHandle !== undefined && connection.targetHandle !== undefined\n}\n","export function hashCode(str: string): number {\n return str.split('').reduce((a, b) => {\n a = ((a << 5) - a) + b.charCodeAt(0)\n\n return a & a\n }, 0)\n}\n","import { Injectable, Signal, WritableSignal, computed, effect, signal, untracked } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { EdgeModel } from '../models/edge.model';\nimport { ConnectionModel } from '../models/connection.model';\nimport { Marker } from '../interfaces/marker.interface';\nimport { hashCode } from '../utils/hash';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { MinimapModel } from '../models/minimap.model';\n\n@Injectable()\nexport class FlowEntitiesService {\n public readonly nodes = signal<NodeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly edges = signal<EdgeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly validEdges = computed(() => {\n const nodes = this.nodes()\n\n return this.edges().filter(e => nodes.includes(e.source()!) && nodes.includes(e.target()!))\n })\n\n public readonly connection = signal<ConnectionModel>(new ConnectionModel({}))\n\n public readonly markers = computed(() => {\n const markersMap = new Map<number, Marker>()\n\n this.validEdges().forEach(e => {\n if (e.edge.markers?.start) {\n const hash = hashCode(JSON.stringify(e.edge.markers.start))\n markersMap.set(hash, e.edge.markers.start)\n }\n\n if (e.edge.markers?.end) {\n const hash = hashCode(JSON.stringify(e.edge.markers.end))\n markersMap.set(hash, e.edge.markers.end)\n }\n })\n\n const connectionMarker = this.connection().settings.marker\n if (connectionMarker) {\n const hash = hashCode(JSON.stringify(connectionMarker))\n markersMap.set(hash, connectionMarker)\n }\n\n return markersMap\n })\n\n public entities: Signal<FlowEntity[]> = computed(() => [\n ...this.nodes(),\n ...this.edges()\n ])\n\n public minimap: WritableSignal<MinimapModel | null> = signal(null)\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ node }) => node.id === id) as NodeModel<T> | undefined\n }\n\n public getDetachedEdges() {\n return this.edges().filter(e => e.detached())\n }\n}\n","import { Rect } from \"../interfaces/rect\";\nimport { ViewportState } from \"../interfaces/viewport.interface\";\n\nexport function getViewportForBounds(\n bounds: Rect,\n width: number,\n height: number,\n minZoom: number,\n maxZoom: number,\n padding: number\n): ViewportState {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n\n return { x, y, zoom: clampedZoom };\n\n}\n\nexport function clamp(value: number, min = 0, max = 1): number {\n return Math.min(Math.max(value, min), max)\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { HandlePositions } from '../interfaces/handle-positions.interface';\nimport { Background } from '../types/background.type';\n\n@Injectable()\nexport class FlowSettingsService {\n public entitiesSelectable = signal(true)\n\n /**\n * Global setting with handle positions. Nodes derive this value\n *\n * @deprecated\n */\n public handlePositions: WritableSignal<HandlePositions> = signal({ source: 'right', target: 'left' })\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400])\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowWidth = signal(0)\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowHeight = signal(0)\n\n public minZoom = signal(0.5)\n\n public maxZoom = signal(3)\n\n public background = signal<Background>({ type: 'solid', color: '#fff' })\n}\n","import { Injectable, Signal, WritableSignal, inject, signal } from '@angular/core';\nimport { Point } from '../interfaces/point.interface';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\nimport { getNodesBounds } from '../utils/nodes';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { getViewportForBounds } from '../utils/viewport';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { FitViewOptions } from '../interfaces/fit-view-options.interface';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport class ViewportService {\n private entitiesService = inject(FlowEntitiesService)\n private flowSettingsService = inject(FlowSettingsService)\n\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState { return { zoom: 1, x: 0, y: 0 } }\n\n /**\n * Internal signal that accepts value from user by lib api\n * When this signal changes, lib sets new view state and update readableViewport signal\n */\n public readonly writableViewport: WritableSignal<WritableViewport> = signal({\n changeType: 'initial',\n state: ViewportService.getDefaultViewport(),\n duration: 0\n })\n\n /**\n * Public signal with viewport state. User can directly read from this signal. It's updated by:\n * - user events on flow\n * - writableViewport signal\n */\n public readonly readableViewport: WritableSignal<ViewportState> = signal(ViewportService.getDefaultViewport())\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n\n public fitView(options: FitViewOptions = { padding: .1, duration: 0, nodes: [] }) {\n const nodes = this.getBoundsNodes(options.nodes ?? [])\n\n const state = getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n this.flowSettingsService.minZoom(),\n this.flowSettingsService.maxZoom(),\n options.padding ?? .1\n )\n\n const duration = options.duration ?? 0\n\n this.writableViewport.set({ changeType: 'absolute', state, duration })\n }\n\n private getBoundsNodes(nodeIds: string[]) {\n return !nodeIds?.length\n // If nodes option not passed or the list is empty, then get fit the whole view\n ? this.entitiesService.nodes()\n // Otherwise fit to specific nodes\n : nodeIds\n .map(nodeId => this.entitiesService.nodes().find(({ node }) => node.id === nodeId))\n .filter((node): node is NodeModel => !!node)\n }\n}\n","export function isDefined<T>(data: T | undefined): data is T {\n return data !== undefined\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'svg[rootSvgRef]'\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n}\n","export function getOS() {\n const userAgent = window.navigator.userAgent.toLowerCase()\n const macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i\n const windowsPlatforms = /(win32|win64|windows|wince)/i\n const iosPlatforms = /(iphone|ipad|ipod)/i\n\n let os = null\n\n if (macosPlatforms.test(userAgent)) {\n os = \"macos\" as const;\n } else if (iosPlatforms.test(userAgent)) {\n os = \"ios\" as const;\n } else if (windowsPlatforms.test(userAgent)) {\n os = \"windows\" as const;\n } else if (/android/.test(userAgent)) {\n os = \"android\" as const;\n } else if (!os && /linux/.test(userAgent)) {\n os = \"linux\" as const;\n }\n\n return os\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { KeyboardAction, KeyboardShortcuts } from '../types/keyboard-action.type';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge, switchMap, tap } from 'rxjs';\nimport { getOS } from '../utils/get-os';\n\n@Injectable()\nexport class KeyboardService {\n private actions: WritableSignal<KeyboardShortcuts> = signal({\n multiSelection: [\n getOS() === 'macos' ? 'MetaLeft' : 'ControlLeft',\n getOS() === 'macos' ? 'MetaRight' : 'ControlRight',\n ]\n });\n\n private actionsActive: Record<KeyboardAction, boolean> = {\n multiSelection: false\n };\n\n constructor() {\n toObservable(this.actions).pipe(\n switchMap(() =>\n merge(\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n tap(event => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = true;\n }\n }\n })\n ),\n\n fromEvent<KeyboardEvent>(document, 'keyup').pipe(\n tap(event => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = false;\n }\n }\n })\n )\n )\n ),\n takeUntilDestroyed()\n ).subscribe();\n }\n\n public setShortcuts(newActions: KeyboardShortcuts) {\n this.actions.update((actions) => ({ ...actions, ...newActions }));\n }\n\n public isActiveAction(action: KeyboardAction) {\n return this.actionsActive[action]\n }\n}\n","import { Injectable, effect, inject, signal, untracked } from '@angular/core';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Subject, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardService } from './keyboard.service';\n\nexport interface ViewportForSelection {\n start: ViewportState\n end: ViewportState\n /**\n * Target may not exist if viewport change made programmatically\n */\n target?: Element\n}\n\n@Injectable()\nexport class SelectionService {\n private static delta = 6\n\n private flowEntitiesService = inject(FlowEntitiesService)\n private keyboardService = inject(KeyboardService);\n\n protected viewport$ = new Subject<ViewportForSelection>()\n\n protected resetSelection = this.viewport$.pipe(\n tap(({ start, end, target }) => {\n if (start && end && target) {\n const delta = SelectionService.delta\n\n const diffX = Math.abs(end.x - start.x)\n const diffY = Math.abs(end.y - start.y)\n\n // click (not drag)\n const isClick = diffX < delta && diffY < delta\n // do not reset if event chain contains selectable elems\n const isNotSelectable = !target.closest('.selectable')\n\n if (isClick && isNotSelectable) {\n this.select(null)\n }\n }\n }),\n takeUntilDestroyed()\n ).subscribe()\n\n\n public setViewport(viewport: ViewportForSelection) {\n this.viewport$.next(viewport)\n }\n\n public select(entity: FlowEntity | null) {\n // ? May be not a responsibility of this method\n // if entity already selected - do nothing\n if (entity?.selected()) {\n return\n }\n\n if (!this.keyboardService.isActiveAction('multiSelection')) {\n // undo select for previously selected nodes\n this.flowEntitiesService.entities().forEach(n => n.selected.set(false))\n }\n\n if (entity) {\n // select passed entity\n entity.selected.set(true)\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, effect, inject, untracked } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, ZoomTransform, zoom, zoomIdentity } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { SelectionService, ViewportForSelection } from '../services/selection.service';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({ selector: 'g[mapContext]' })\nexport class MapContextDirective implements OnInit {\n protected rootSvg = inject(RootSvgReferenceDirective).element\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n protected selectionService = inject(SelectionService)\n protected viewportService = inject(ViewportService)\n protected flowSettingsService = inject(FlowSettingsService);\n\n protected rootSvgSelection = select(this.rootSvg)\n protected zoomableSelection = select(this.host)\n\n protected viewportForSelection: Partial<ViewportForSelection> = {}\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n protected manualViewportChangeEffect = effect(() => {\n const viewport = this.viewportService.writableViewport()\n const state = viewport.state\n\n if (viewport.changeType === 'initial') {\n return\n }\n\n // If only zoom provided\n if (isDefined(state.zoom) && (!isDefined(state.x) && !isDefined(state.y))) {\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(this.zoomBehavior.scaleTo, state.zoom)\n\n return\n }\n\n // If only pan provided\n if ((isDefined(state.x) && isDefined(state.y)) && !isDefined(state.zoom)) {\n // remain same zoom value\n const zoom = untracked(this.viewportService.readableViewport).zoom\n\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(\n this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(zoom)\n )\n\n return\n }\n\n // If whole viewort state provided\n if (isDefined(state.x) && isDefined(state.y) && isDefined(state.zoom)) {\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(\n this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(state.zoom),\n )\n\n return\n }\n }, { allowSignalWrites: true })\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.flowSettingsService.minZoom(), this.flowSettingsService.maxZoom()])\n .on('start', (event: ZoomEvent) => this.onD3zoomStart(event))\n .on('zoom', (event: ZoomEvent) => this.handleZoom(event))\n .on('end', (event: ZoomEvent) => this.onD3zoomEnd(event))\n\n this.rootSvgSelection\n .call(this.zoomBehavior)\n .on('dblclick.zoom', null)\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set(mapTransformToViewportState(transform))\n\n this.zoomableSelection.attr('transform', transform.toString())\n }\n\n private onD3zoomStart({ transform }: ZoomEvent) {\n this.viewportForSelection = {\n start: mapTransformToViewportState(transform)\n }\n }\n\n private onD3zoomEnd({ transform, sourceEvent }: ZoomEvent) {\n this.viewportForSelection = {\n ...this.viewportForSelection,\n end: mapTransformToViewportState(transform),\n target: evTarget(sourceEvent)\n }\n\n this.selectionService.setViewport(\n this.viewportForSelection as ViewportForSelection\n )\n }\n}\n\nconst mapTransformToViewportState = (transform: ZoomTransform): ViewportState =>\n ({ zoom: transform.k, x: transform.x, y: transform.y })\n\nconst evTarget = (anyEvent: any): Element | undefined => {\n if (anyEvent instanceof Event && anyEvent.target instanceof Element) {\n return anyEvent.target\n }\n\n return undefined;\n}\n\ndeclare module 'd3-selection' {\n interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {\n transition(): Selection<GElement, Datum, PElement, PDatum>\n duration(duration: number): Selection<GElement, Datum, PElement, PDatum>\n }\n}\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>\n","export const round = (num: number) => Math.round(num * 100) / 100\n","import { Injectable, effect, inject } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3DragEvent, drag } from 'd3-drag';\nimport { NodeModel } from '../models/node.model';\nimport { round } from '../utils/round';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Point } from '../interfaces/point.interface';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>\n\n@Injectable()\nexport class DraggableService {\n private entitiesService = inject(FlowEntitiesService);\n\n /**\n * Enable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public enable(element: Element, model: NodeModel) {\n const d3Element = select(element)\n\n d3Element.call(this.getDragBehavior(model))\n }\n\n /**\n * Disable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public disable(element: Element) {\n const d3Element = select(element)\n\n d3Element.call(this.getIgnoreDragBehavior())\n }\n\n /**\n * TODO: not shure if this work, need to check\n *\n * @param element\n */\n public destroy(element: Element) {\n select(element).on('.drag', null)\n }\n\n /**\n * Node drag behavior. Updated node's coordinate according to dragging\n *\n * @param model\n * @returns\n */\n private getDragBehavior(model: NodeModel) {\n let dragNodes: NodeModel[] = []\n let initialPositions: Point[] = []\n\n return drag()\n .on('start', (event: DragEvent) => {\n dragNodes = this.getDragNodes(model)\n\n initialPositions = dragNodes.map(node => ({\n x: node.point().x - event.x,\n y: node.point().y - event.y\n }))\n })\n\n .on('drag', (event: DragEvent) => {\n dragNodes.forEach((model, index) => {\n let point = {\n x: round(event.x + initialPositions[index].x),\n y: round(event.y + initialPositions[index].y)\n }\n\n moveNode(model, point)\n })\n })\n }\n\n /**\n * Specify ignoring drag behavior. It's responsible for not moving the map when user tries to drag node\n * with disabled drag behavior\n */\n private getIgnoreDragBehavior() {\n return drag()\n .on('drag', (event: DragEvent) => {\n (event.sourceEvent as Event).stopPropagation()\n })\n }\n\n private getDragNodes(model: NodeModel) {\n return model.selected()\n ? this.entitiesService\n .nodes()\n // selected draggable nodes (with current node)\n .filter(node => node.selected() && node.draggable())\n // we only can move current node if it's not selected\n : [model]\n }\n}\n\nfunction moveNode(model: NodeModel, point: Point) {\n const parent = model.parent()\n // keep node in bounds of parent\n if (parent) {\n point.x = Math.min(parent.size().width - model.size().width, point.x)\n point.x = Math.max(0, point.x)\n\n point.y = Math.min(parent.size().height - model.size().height, point.y)\n point.y = Math.max(0, point.y)\n }\n\n model.setPoint(point, true)\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EdgeContext } from '../interfaces/template-context.interface';\n\n@Directive({ selector: 'ng-template[edge]' })\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[connection]' })\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[edgeLabelHtml]' })\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[nodeHtml]' })\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[groupNode]' })\nexport class GroupNodeTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[handle]' })\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n","import { EdgeModel } from \"../models/edge.model\"\nimport { NodeModel } from \"../models/node.model\"\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]) {\n const nodesById = nodes.reduce((acc, n) => {\n acc[n.node.id] = n\n\n return acc\n }, {} as { [nodeId: string]: NodeModel })\n\n edges.forEach(e => {\n e.source.set(nodesById[e.edge.source])\n e.target.set(nodesById[e.edge.target])\n })\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { ConnectionInternal } from '../interfaces/connection.internal.interface';\n\nexport interface FlowStatusIdle {\n state: 'idle',\n payload: null\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start',\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'>\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation',\n payload: ConnectionInternal & {\n valid: boolean\n }\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end',\n payload: ConnectionInternal\n}\n\nexport type FlowStatus =\n FlowStatusIdle |\n FlowStatusConnectionStart |\n FlowStatusConnectionValidation |\n FlowStatusConnectionEnd\n\n@Injectable()\nexport class FlowStatusService {\n public readonly status = signal<FlowStatus>({ state: 'idle', payload: null })\n\n public setIdleStatus() {\n this.status.set({ state: 'idle', payload: null })\n }\n\n public setConnectionStartStatus(source: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { source, sourceHandle } })\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n ) {\n this.status.set({ state: 'connection-validation', payload: { source, target, sourceHandle, targetHandle, valid } })\n }\n\n public setConnectionEndStatus(source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel) {\n this.status.set({ state: 'connection-end', payload: { source, target, sourceHandle, targetHandle } })\n }\n}\n\n/**\n * Batch status changes together to call them one after another\n *\n * @param changes list of set[FlowStatus.state]Status() calls\n */\nexport function batchStatusChanges(...changes: Function[]) {\n if (changes.length) {\n const [firstChange, ...restChanges] = changes\n // first change is sync\n firstChange()\n // without timer, subscribed effects/comuted signals only get latest value\n restChanges.forEach(change => setTimeout(() => change()))\n }\n}\n","import { ConnectionInternal } from \"../interfaces/connection.internal.interface\";\n\n/**\n * This function contains a hack-y behavior.\n * If the handles are of the same type (source-source or target-target),\n * it returns nodes where source === target and\n * handles where sourceHandle === targetHandle\n *\n * This leads to that notSelfValidator returns false for these cases,\n * exactly what we need for strict connection type\n */\nexport function adjustDirection(connection: ConnectionInternal): ConnectionInternal {\n const result = {} as ConnectionInternal\n\n if (connection.sourceHandle.rawHandle.type === 'source') {\n result.source = connection.source\n result.sourceHandle = connection.sourceHandle\n } else {\n result.source = connection.target\n result.sourceHandle = connection.targetHandle\n }\n\n if (connection.targetHandle.rawHandle.type === 'target') {\n result.target = connection.target\n result.targetHandle = connection.targetHandle\n } else {\n result.target = connection.source\n result.targetHandle = connection.sourceHandle\n }\n\n return result\n}\n","import { Directive, EventEmitter, Output, computed, effect, inject } from '@angular/core';\nimport { Connection } from '../interfaces/connection.interface';\nimport { FlowStatusService, batchStatusChanges } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { HandleModel } from '../models/handle.model';\nimport { adjustDirection } from '../utils/adjust-direction';\n\n@Directive({\n selector: '[connectionController]',\n standalone: true\n})\nexport class ConnectionControllerDirective {\n /**\n * This event fires when user tries to create new Edge.\n *\n * `Connection` is an entity that contains data about source and target nodes.\n *\n * Also it's important to note, that this event only fires when connection is valid by validator function in `ConnectionSettings`,\n * by default without passing the validator every connection concidered valid.\n */\n @Output()\n public onConnect = new EventEmitter<Connection>()\n\n private statusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n\n protected connectEffect = effect(() => {\n const status = this.statusService.status()\n\n if (status.state === 'connection-end') {\n let source = status.payload.source\n let target = status.payload.target\n let sourceHandle = status.payload.sourceHandle\n let targetHandle = status.payload.targetHandle\n\n if (this.isStrictMode()) {\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: status.payload.target,\n targetHandle: status.payload.targetHandle\n })\n\n source = adjusted.source\n target = adjusted.target\n sourceHandle = adjusted.sourceHandle\n targetHandle = adjusted.targetHandle\n }\n\n const sourceId = source.node.id\n const targetId = target.node.id\n\n const sourceHandleId = sourceHandle.rawHandle.id\n const targetHandleId = targetHandle.rawHandle.id\n\n const connectionModel = this.flowEntitiesService.connection()\n const connection = {\n source: sourceId, target: targetId,\n sourceHandle: sourceHandleId, targetHandle: targetHandleId\n }\n\n if (connectionModel.validator(connection)) {\n this.onConnect.emit(connection)\n }\n }\n }, { allowSignalWrites: true })\n\n protected isStrictMode = computed(() =>\n this.flowEntitiesService.connection().mode === 'strict'\n )\n\n public startConnection(handle: HandleModel) {\n this.statusService.setConnectionStartStatus(handle.parentNode, handle)\n }\n\n public validateConnection(handle: HandleModel) {\n const status = this.statusService.status()\n\n if (status.state === 'connection-start') {\n let source = status.payload.source\n let target = handle.parentNode\n let sourceHandle = status.payload.sourceHandle\n let targetHandle = handle\n\n if (this.isStrictMode()) {\n // swap direction (if needed) according to actual source and target of strict mode\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: handle.parentNode,\n targetHandle: handle\n })\n\n source = adjusted.source\n target = adjusted.target\n sourceHandle = adjusted.sourceHandle\n targetHandle = adjusted.targetHandle\n }\n\n const valid = this.flowEntitiesService.connection().validator({\n source: source.node.id,\n target: target.node.id,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id\n })\n\n // TODO: check how react flow handles highlight of handle\n // if direction changes\n handle.state.set(valid ? 'valid' : 'invalid')\n\n // status is about how we draw connection, so we don't need\n // swapped diretion here\n this.statusService.setConnectionValidationStatus(\n valid,\n status.payload.source, handle.parentNode,\n status.payload.sourceHandle, handle\n )\n }\n }\n\n public resetValidateConnection(targetHandle: HandleModel) {\n targetHandle.state.set('idle')\n\n // drop back to start status\n const status = this.statusService.status()\n if (status.state === 'connection-validation') {\n this.statusService.setConnectionStartStatus(\n status.payload.source,\n status.payload.sourceHandle\n )\n }\n }\n\n public endConnection(handle: HandleModel) {\n const status = this.statusService.status()\n\n if (status.state === 'connection-validation') {\n const source = status.payload.source\n const sourceHandle = status.payload.sourceHandle\n const target = status.payload.target\n const targetHandle = status.payload.targetHandle\n\n batchStatusChanges(\n // call to create connection\n () => this.statusService.setConnectionEndStatus(source!, target!, sourceHandle!, targetHandle!),\n // when connection created, we need go back to idle status\n () => this.statusService.setIdleStatus()\n )\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AnyComponentNodeEvent } from '../interfaces/component-node-event.interface';\n\n@Injectable()\nexport class ComponentEventBusService {\n private _event$ = new Subject<AnyComponentNodeEvent>()\n\n public event$ = this._event$.asObservable()\n\n public pushEvent(event: AnyComponentNodeEvent) {\n this._event$.next(event)\n }\n}\n","import { DestroyRef, Directive, EventEmitter, Input, OnInit, inject, signal } from \"@angular/core\"\nimport { merge, of, tap } from \"rxjs\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { ComponentEventBusService } from \"../../services/component-event-bus.service\";\nimport { ComponentDynamicNode, ComponentNode } from \"../../interfaces/node.interface\";\n\n@Directive()\nexport abstract class CustomNodeBaseComponent<T = unknown> implements OnInit {\n private eventBus = inject(ComponentEventBusService, { optional: true })\n\n protected destroyRef = inject(DestroyRef)\n\n /**\n * Reference to node bound to this component\n */\n protected node!: ComponentNode | ComponentDynamicNode\n\n @Input()\n public set _selected(value: boolean) {\n this.selected.set(value)\n }\n\n /**\n * Signal with selected state of node\n */\n public selected = signal(false)\n\n public data = signal<T | undefined>(undefined)\n\n public ngOnInit(): void {\n if (this.eventBus) {\n this.trackEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe()\n }\n }\n\n private trackEvents() {\n const props = Object.getOwnPropertyNames(this)\n\n const emitters = new Map<EventEmitter<unknown>, string>()\n for (const prop of props) {\n const field = (this as Record<string, unknown>)[prop]\n\n if (field instanceof EventEmitter) {\n emitters.set(field, prop)\n }\n }\n\n return merge(\n ...Array.from(emitters.keys()).map(emitter =>\n emitter.pipe(\n tap((event) => {\n this.eventBus!.pushEvent({\n nodeId: this.node.id,\n eventName: emitters.get(emitter)!,\n eventPayload: event\n })\n }))\n )\n )\n };\n}\n\n","import { Directive, Input, OnInit } from \"@angular/core\"\nimport { ComponentNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from \"../../components/custom-node-base/custom-node-base.component\";\n\n@Directive()\nexport abstract class CustomNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n @Input()\n public override node!: ComponentNode<T>\n\n public override ngOnInit(): void {\n if (this.node.data) {\n this.data.set(this.node.data)\n }\n\n super.ngOnInit()\n }\n}\n\n","import { Directive, Input, OnInit } from \"@angular/core\"\nimport { ComponentDynamicNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from \"../../components/custom-node-base/custom-node-base.component\";\n\n@Directive()\nexport abstract class CustomDynamicNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n @Input()\n public override node!: ComponentDynamicNode<T>\n\n public override ngOnInit(): void {\n if (this.node.data) {\n this.data = this.node.data\n }\n\n super.ngOnInit()\n }\n}\n\n","import { Type, WritableSignal } from \"@angular/core\"\nimport { Point } from \"./point.interface\"\nimport { CustomNodeComponent } from \"../public-components/custom-node/custom-node.component\"\nimport { CustomDynamicNodeComponent } from \"../public-components/custom-dynamic-node/custom-dynamic-node.component\"\n\nexport type Node<T = unknown> =\n DefaultNode |\n HtmlTemplateNode<T> |\n ComponentNode<T> |\n DefaultGroupNode |\n TemplateGroupNode<T>\n\nexport type DynamicNode<T = unknown> =\n DefaultDynamicNode |\n HtmlTemplateDynamicNode<T> |\n ComponentDynamicNode<T> |\n DefaultDynamicGroupNode |\n TemplateDynamicGroupNode<T>\n\nexport interface SharedNode {\n id: string\n point: Point\n draggable?: boolean\n parentId?: string | null\n}\n\nexport interface SharedDynamicNode {\n id: string;\n point: WritableSignal<Point>\n draggable?: WritableSignal<boolean>\n parentId?: WritableSignal<string | null>\n}\n\nexport interface DefaultNode extends SharedNode {\n type: 'default'\n text?: string\n width?: number\n height?: number\n}\n\nexport interface DefaultDynamicNode extends SharedDynamicNode {\n type: 'default'\n text?: WritableSignal<string>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport interface HtmlTemplateNode<T = unknown> extends SharedNode {\n type: 'html-template'\n data?: T\n width?: number\n height?: number\n}\n\nexport interface HtmlTemplateDynamicNode<T = unknown> extends SharedDynamicNode {\n type: 'html-template'\n data?: WritableSignal<T>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport interface DefaultGroupNode extends SharedNode {\n type: 'default-group'\n width: number\n height: number\n color?: string\n resizable?: boolean\n}\n\nexport interface DefaultDynamicGroupNode extends SharedDynamicNode {\n type: 'default-group'\n width: WritableSignal<number>\n height: WritableSignal<number>\n color?: WritableSignal<string>\n resizable?: WritableSignal<boolean>\n}\n\nexport interface TemplateGroupNode<T> extends SharedNode {\n type: 'template-group'\n width: number\n height: number\n data?: T\n}\n\nexport interface TemplateDynamicGroupNode<T> extends SharedDynamicNode {\n type: 'template-group'\n width: WritableSignal<number>\n height: WritableSignal<number>\n data?: WritableSignal<T>\n}\n\nexport interface ComponentNode<T = unknown> extends SharedNode {\n type: Type<CustomNodeComponent<T>>\n data?: T\n width?: number\n height?: number\n}\n\nexport interface ComponentDynamicNode<T = unknown> extends SharedDynamicNode {\n type: Type<CustomDynamicNodeComponent<T>>\n data?: WritableSignal<T>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport function isStaticNode<T>(node: Node | DynamicNode): node is Node<T> {\n return typeof node.point !== 'function'\n}\n\nexport function isDynamicNode<T>(node: Node | DynamicNode): node is DynamicNode<T> {\n return typeof node.point === 'function'\n}\n\nexport function isComponentStaticNode<T>(node: Node): node is ComponentNode<T> {\n return CustomNodeComponent.isPrototypeOf(node.type)\n}\n\nexport function isComponentDynamicNode<T>(node: DynamicNode): node is ComponentDynamicNode<T> {\n return CustomDynamicNodeComponent.isPrototypeOf(node.type)\n}\n\nexport function isTemplateStaticNode<T>(node: Node): node is HtmlTemplateNode<T> {\n return node.type === 'html-template'\n}\n\nexport function isTemplateDynamicNode<T>(node: DynamicNode): node is HtmlTemplateDynamicNode<T> {\n return node.type === 'html-template'\n}\n\nexport function isDefaultStaticNode(node: Node): node is DefaultNode {\n return node.type === 'default'\n}\n\nexport function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode {\n return node.type === 'default'\n}\n\nexport function isDefaultStaticGroupNode(node: Node): node is DefaultGroupNode {\n return node.type === 'default-group'\n}\n\nexport function isDefaultDynamicGroupNode(node: DynamicNode): node is DefaultDynamicGroupNode {\n return node.type === 'default-group'\n}\n\nexport function isTemplateStaticGroupNode<T>(node: Node): node is TemplateGroupNode<T> {\n return node.type === 'template-group'\n}\n\nexport function isTemplateDynamicGroupNode<T>(node: DynamicNode): node is TemplateDynamicGroupNode<T> {\n return node.type === 'template-group'\n}\n","import { Signal, TemplateRef, computed, effect, inject, signal } from '@angular/core'\nimport { DynamicNode, Node, isDynamicNode } from '../interfaces/node.interface'\nimport { isDefined } from '../utils/is-defined'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { HandleModel } from './handle.model'\nimport { FlowEntity } from '../interfaces/flow-entity.interface'\nimport { FlowSettingsService } from '../services/flow-settings.service'\nimport { animationFrameScheduler, merge, observeOn, Subject, } from 'rxjs'\nimport { Point } from '../interfaces/point.interface'\nimport { CustomNodeComponent } from '../public-components/custom-node/custom-node.component'\nimport { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component'\nimport { FlowEntitiesService } from '../services/flow-entities.service'\n\n// TODO bad naming around points\nexport class NodeModel<T = unknown> implements FlowEntity {\n private static defaultWidth = 100\n private static defaultHeight = 50\n private static defaultColor = '#1b262c'\n\n private flowSettingsService = inject(FlowSettingsService)\n private entitiesService = inject(FlowEntitiesService);\n\n private internalPoint = this.createInternalPointSignal()\n\n private throttledPoint$ = toObservable(this.internalPoint).pipe(\n observeOn(animationFrameScheduler)\n )\n\n private notThrottledPoint$ = new Subject<Point>()\n\n public point = toSignal(\n merge(this.throttledPoint$, this.notThrottledPoint$),\n {\n initialValue: this.internalPoint()\n }\n )\n\n public point$ = this.throttledPoint$;\n\n public size = signal({ width: 0, height: 0 })\n public size$ = toObservable(this.size)\n\n public width = computed(() => this.size().width)\n public height = computed(() => this.size().height)\n\n public renderOrder = signal(0)\n\n public selected = signal(false)\n public selected$ = toObservable(this.selected)\n\n public globalPoint = computed(() => {\n let parent = this.parent()\n let x = this.point().x\n let y = this.point().y\n\n while (parent !== null) {\n x += parent.point().x\n y += parent.point().y\n\n parent = parent.parent()\n }\n\n return { x, y }\n })\n\n public pointTransform = computed(() =>\n `translate(${this.globalPoint().x}, ${this.globalPoint().y})`\n )\n\n // Now source and handle positions derived from parent flow\n public sourcePosition = computed(() => this.flowSettingsService.handlePositions().source)\n public targetPosition = computed(() => this.flowSettingsService.handlePositions().target)\n\n public handles = signal<HandleModel[]>([])\n\n public handles$ = toObservable(this.handles)\n\n public draggable = signal(true)\n\n // disabled for configuration for now\n public readonly magnetRadius = 20\n\n // TODO: not sure if we need to statically store it\n public isComponentType =\n CustomNodeComponent.isPrototypeOf(this.node.type) ||\n CustomDynamicNodeComponent.isPrototypeOf(this.node.type)\n\n // Default node specific thing\n public text = this.createTextSignal()\n\n // Component node specific thing\n public componentTypeInputs = computed(() => {\n return {\n node: this.node,\n _selected: this.selected()\n }\n })\n\n public parent = computed(() =>\n this.entitiesService.nodes().find(n => n.node.id === this.parentId()) ?? null\n )\n\n public children = computed(() =>\n this.entitiesService.nodes().filter(n => n.parentId() === this.node.id)\n )\n\n public color = signal(NodeModel.defaultColor)\n\n public resizable = signal(false)\n public resizing = signal(false)\n public resizerTemplate = signal<TemplateRef<unknown> | null>(null)\n\n private parentId = signal<string | null>(null)\n\n constructor(\n public node: Node<T> | DynamicNode<T>\n ) {\n if (isDefined(node.draggable)) {\n if (isDynamicNode(node)) {\n this.draggable = node.draggable\n } else {\n this.draggable.set(node.draggable)\n }\n }\n\n if (isDefined(node.parentId)) {\n if (isDynamicNode(node)) {\n this.parentId = node.parentId\n } else {\n this.parentId.set(node.parentId)\n }\n }\n\n if (node.type === 'default-group' && node.color) {\n if (isDynamicNode(node)) {\n this.color = node.color\n } else {\n this.color.set(node.color)\n }\n }\n\n if (node.type === 'default-group' && node.resizable) {\n if (isDynamicNode(node)) {\n this.resizable = node.resizable\n } else {\n this.resizable.set(node.resizable)\n }\n }\n }\n\n public setPoint(point: Point, throttle: boolean) {\n if (throttle) {\n this.internalPoint.set(point);\n } else {\n this.notThrottledPoint$.next(point)\n }\n }\n\n /**\n * TODO find the way to implement this better\n */\n public linkDefaultNodeSizeWithModelSize() {\n const node = this.node\n\n switch (node.type) {\n case 'default':\n case 'default-group':\n case 'template-group': {\n if (isDynamicNode(node)) {\n effect(() => {\n this.size.set({\n width: node.width?.() ?? NodeModel.defaultWidth,\n height: node.height?.() ?? NodeModel.defaultHeight,\n })\n }, { allowSignalWrites: true })\n } else {\n this.size.set({\n width: node.width ?? NodeModel.defaultWidth,\n height: node.height ?? NodeModel.defaultHeight\n })\n }\n }\n }\n\n if (node.type === 'html-template' || this.isComponentType) {\n if (isDynamicNode(node)) {\n effect(() => {\n if (node.width && node.height) {\n this.size.set({\n width: node.width(),\n height: node.height(),\n })\n }\n }, { allowSignalWrites: true })\n } else {\n if (node.width && node.height) {\n this.size.set({ width: node.width, height: node.height })\n }\n }\n }\n }\n\n private createTextSignal(): Signal<string> {\n const node = this.node\n\n if (node.type === 'default') {\n if (isDynamicNode(node)) {\n return node.text ?? signal('')\n } else {\n return signal(node.text ?? '')\n }\n }\n\n return signal('')\n }\n\n private createInternalPointSignal() {\n return isDynamicNode(this.node)\n ? this.node.point\n : signal({ x: this.node.point.x, y: this.node.point.y })\n }\n}\n","import { signal } from \"@angular/core\"\nimport { EdgeLabel } from \"../interfaces/edge-label.interface\"\n\nexport class EdgeLabelModel {\n public size = signal({ width: 0, height: 0 })\n\n constructor(public edgeLabel: EdgeLabel) { }\n}\n","import { Point } from \"../interfaces/point.interface\";\n\n/**\n * Get point on line\n *\n * https://math.stackexchange.com/questions/563566/how-do-i-find-the-middle1-2-1-3-1-4-etc-of-a-line\n */\nexport function getPointOnLineByRatio(start: Point, end: Point, ratio: number): Point {\n return {\n x: (1 - ratio) * start.x + ratio * end.x,\n y: (1 - ratio) * start.y + ratio * end.y,\n };\n}\n","import { PathData } from \"../../interfaces/path-data.interface\";\nimport { Point } from \"../../interfaces/point.interface\";\nimport { UsingPoints } from \"../../types/using-points.type\";\nimport { getPointOnLineByRatio } from \"../point-on-line-by-ratio\";\n\nexport function straightPath(\n source: Point,\n target: Point,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const [start, center, end] = usingPoints\n const nullPoint = { x: 0, y: 0 }\n\n return {\n path: `M ${source.x},${source.y}L ${target.x},${target.y}`,\n points: {\n start: start ? getPointOnLineByRatio(source, target, .15) : nullPoint,\n center: center ? getPointOnLineByRatio(source, target, .50) : nullPoint,\n end: end ? getPointOnLineByRatio(source, target, .85) : nullPoint,\n }\n }\n}\n","import { PathData } from '../../interfaces/path-data.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { UsingPoints } from '../../types/using-points.type';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath(\n source: Point,\n target: Point,\n sourcePosition: Position,\n targetPosition: Position,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const distanceVector = { x: source.x - target.x, y: source.y - target.y };\n\n const sourceControl = calcControlPoint(source, sourcePosition, distanceVector);\n const targetControl = calcControlPoint(target, targetPosition, distanceVector);\n\n const path =\n `M${source.x},${source.y} C${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${target.x},${target.y}`\n\n return getPathData(\n path,\n source,\n target,\n sourceControl,\n targetControl,\n usingPoints\n );\n}\n\n/**\n * Calculate control point based on provided point\n *\n * @param point relative this point control point is gonna be computed (the source or the target)\n * @param pointPosition position of {point} on block\n * @param distanceVector transmits the distance between the source and the target as x and y coordinates\n */\n\nfunction calcControlPoint(\n point: Point,\n pointPosition: Position,\n distanceVector: Point\n) {\n const factorPoint = { x: 0, y: 0 };\n\n switch (pointPosition) {\n case 'top':\n factorPoint.y = 1;\n break;\n case 'bottom':\n factorPoint.y = -1;\n break;\n case 'right':\n factorPoint.x = 1;\n break;\n case 'left':\n factorPoint.x = -1;\n break;\n }\n\n // TODO: explain name\n const fullDistanceVector = {\n x: distanceVector.x * Math.abs(factorPoint.x),\n y: distanceVector.y * Math.abs(factorPoint.y),\n };\n\n // TODO: probably need to make this configurable\n const curvature = 0.25;\n // thanks colleagues from react/svelte world\n // https://github.com/xyflow/xyflow/blob/f0117939bae934447fa7f232081f937169ee23b5/packages/system/src/utils/edges/bezier-edge.ts#L56\n const controlOffset =\n curvature * 25 * Math.sqrt(Math.abs(fullDistanceVector.x + fullDistanceVector.y));\n\n return {\n x: point.x + factorPoint.x * controlOffset,\n y: point.y - factorPoint.y * controlOffset,\n };\n}\n\nfunction getPathData(\n path: string,\n source: Point,\n target: Point,\n sourceControl: Point,\n targetControl: Point,\n usingPoints: UsingPoints\n): PathData {\n const [start, center, end] = usingPoints;\n\n const nullPoint = { x: 0, y: 0 };\n\n return {\n path,\n points: {\n start: start\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.1)\n : nullPoint,\n center: center\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.5)\n : nullPoint,\n end: end\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.9)\n : nullPoint,\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n sourceControl: Point,\n targetControl: Point,\n ratio: number\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(\n sourcePoint,\n sourceControl,\n ratio\n );\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(\n sourceControl,\n targetControl,\n ratio\n );\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(\n targetControl,\n targetPoint,\n ratio\n );\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio\n );\n}\n","import { WritableSignal, computed, signal } from \"@angular/core\";\nimport { EdgeLabelPosition } from \"../interfaces/edge-label.interface\";\nimport { Edge, Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { EdgeLabelModel } from \"./edge-label.model\";\nimport { NodeModel } from \"./node.model\";\nimport { straightPath } from \"../math/edge-path/straigh-path\";\nimport { bezierPath } from \"../math/edge-path/bezier-path\";\nimport { UsingPoints } from \"../types/using-points.type\";\nimport { HandleModel } from \"./handle.model\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\nimport { FlowEntity } from \"../interfaces/flow-entity.interface\";\n\nexport class EdgeModel implements FlowEntity {\n public source = signal<NodeModel | undefined>(undefined)\n public target = signal<NodeModel | undefined>(undefined)\n public curve: Curve\n public type: EdgeType\n\n public selected = signal(false);\n public selected$ = toObservable(this.selected);\n\n public detached = computed(() => {\n const source = this.source()\n const target = this.target()\n\n if (!source || !target) {\n return true\n }\n\n let existsSourceHandle = false\n let existsTargetHandle = false\n\n if (this.edge.sourceHandle) {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n return !existsSourceHandle || !existsTargetHandle\n })\n\n public detached$ = toObservable(this.detached)\n\n public path = computed(() => {\n let source: HandleModel | undefined\n if (this.edge.sourceHandle) {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n let target: HandleModel | undefined\n if (this.edge.targetHandle) {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n // TODO: don't like this\n if (!source || !target) {\n return {\n path: '',\n points: {\n start: { x: 0, y: 0 },\n center: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n }\n }\n }\n\n switch (this.curve) {\n case 'straight':\n return straightPath(source.pointAbsolute(), target.pointAbsolute(), this.usingPoints)\n case 'bezier':\n return bezierPath(\n source.pointAbsolute(), target.pointAbsolute(),\n source.rawHandle.position,\n target.rawHandle.position,\n this.usingPoints\n )\n }\n })\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {}\n\n private usingPoints: UsingPoints\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default'\n this.curve = edge.curve ?? 'bezier'\n\n if (edge.edgeLabels?.start) this.edgeLabels.start = new EdgeLabelModel(edge.edgeLabels.start)\n if (edge.edgeLabels?.center) this.edgeLabels.center = new EdgeLabelModel(edge.edgeLabels.center)\n if (edge.edgeLabels?.end) this.edgeLabels.end = new EdgeLabelModel(edge.edgeLabels.end)\n\n this.usingPoints = [!!this.edgeLabels.start, !!this.edgeLabels.center, !!this.edgeLabels.end]\n }\n}\n","import { NodeModel } from \"../models/node.model\";\nimport { DynamicNode, Node } from '../interfaces/node.interface';\nimport { EdgeModel } from \"../models/edge.model\";\nimport { Edge } from \"../interfaces/edge.interface\";\n\nexport class ReferenceKeeper {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[] | DynamicNode[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node | DynamicNode, NodeModel> = new Map()\n oldNodeModels.forEach(model => oldNodesMap.set(model.node, model))\n\n return newNodes.map(newNode => {\n if (oldNodesMap.has(newNode)) return oldNodesMap.get(newNode)!\n else return new NodeModel(newNode)\n })\n }\n\n /**\n * Create new models for new edge references and keep old models for old edge references\n */\n public static edges(newEdges: Edge[], oldEdgeModels: EdgeModel[]) {\n const oldEdgesMap: Map<Edge, EdgeModel> = new Map()\n oldEdgeModels.forEach(model => oldEdgesMap.set(model.edge, model))\n\n return newEdges.map(newEdge => {\n if (oldEdgesMap.has(newEdge)) return oldEdgesMap.get(newEdge)!\n else return new EdgeModel(newEdge)\n })\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable, } from '@angular/core/rxjs-interop';\nimport { Observable, asyncScheduler, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap } from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n// this delay fixes the cases when change triggered\n// but the flow not yet fylly re-rendered\nconst DELAY_FOR_SCHEDULER = 25\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n // Check for nodes list change and watch for specific node from this list change its position\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.point$.pipe(\n // skip initial position from signal\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n map((changedNode) => {\n return this.entitiesService.nodes()\n .filter(node => node === changedNode || node.selected())\n .map(node => ({ type: 'position', id: node.node.id, point: node.point() }))\n })\n ) satisfies Observable<NodeChange[]>\n\n protected nodeSizeChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.size$.pipe(\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n map(changedNode => [\n { type: 'size', id: changedNode.node.id, size: changedNode.size() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n newList.filter(node => !oldList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'add', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n oldList.filter(node => !newList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'remove', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeSelectedChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => node),\n )\n )\n )\n ),\n map((changedNode) => [\n { type: 'select', id: changedNode.node.id, selected: changedNode.selected() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeSizeChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$,\n this.nodeSelectedChange$\n ).pipe(\n // this fixes a bug when on fire node event change,\n // you can't get valid list of detached edges\n observeOn(asyncScheduler, DELAY_FOR_SCHEDULER),\n )\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Observable, asyncScheduler, combineLatest, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap, zip } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\nconst haveSameContents = <T>(a: T[], b: T[]) =>\n a.length === b.length &&\n [...new Set([...a, ...b])].every(\n v => a.filter(e => e === v).length === b.filter(e => e === v).length\n );\n\n@Injectable()\nexport class EdgeChangesService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected edgeDetachedChange$ = merge(\n toObservable(\n computed(() => {\n const nodes = this.entitiesService.nodes()\n const edges = untracked(this.entitiesService.edges)\n\n return edges.filter(({ source, target }) =>\n !nodes.includes(source()!) || !nodes.includes(target()!)\n )\n })\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(\n ...edges.map(e => e.detached$.pipe(map(() => e)))\n )\n }),\n map((edges) => edges.filter(e => e.detached())),\n // TODO check why there are 2 emits\n skip(2),\n )\n ).pipe(\n // here we check if 2 approaches to detect detached edges emits same\n // and same values (this may happen on node delete)\n distinctUntilChanged(haveSameContents),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter(edge => !oldList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'add', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter(edge => !newList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeSelectChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n switchMap((edges) =>\n merge(\n ...edges.map(edge =>\n edge.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => edge),\n )\n )\n )\n ),\n map((changedEdge) => [\n { type: 'select', id: changedEdge.edge.id, selected: changedEdge.selected() }\n ])\n ) satisfies Observable<EdgeChange[]>\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$,\n this.edgeSelectChange$\n )\n .pipe(\n // this fixes the case when user gets 'deteched' changes\n // and tries to delete these edges inside stream\n // angular may ignore this change because [edges] input changed\n // right after [nodes] input change\n observeOn(asyncScheduler),\n )\n}\n","import { Directive, Output, inject } from '@angular/core';\nimport { NodeAddChange, NodeChange, NodePositionChange, NodeRemoveChange, NodeSelectedChange, NodeSizeChange } from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { Observable, filter, map } from 'rxjs';\nimport { EdgeAddChange, EdgeChange, EdgeDetachedChange, EdgeRemoveChange, EdgeSelectChange } from '../types/edge-change.type';\n\n@Directive({\n selector: '[changesController]',\n standalone: true\n})\nexport class ChangesControllerDirective {\n protected nodesChangeService = inject(NodesChangeService)\n protected edgesChangeService = inject(EdgeChangesService)\n\n /**\n * Watch nodes change\n */\n @Output()\n public onNodesChange = this.nodesChangeService.changes$\n\n @Output('onNodesChange.position')\n public onNodesChangePosition = this.nodeChangesOfType('position')\n\n @Output('onNodesChange.position.single')\n public onNodesChangePositionSignle = this.singleChange(\n this.nodeChangesOfType('position')\n )\n\n @Output('onNodesChange.position.many')\n public onNodesChangePositionMany = this.manyChanges(\n this.nodeChangesOfType('position')\n )\n\n @Output('onNodesChange.size')\n public onNodesChangeSize = this.nodeChangesOfType('size')\n\n @Output('onNodesChange.size.single')\n public onNodesChangeSizeSingle = this.singleChange(\n this.nodeChangesOfType('size')\n )\n\n @Output('onNodesChange.size.many')\n public onNodesChangeSizeMany = this.manyChanges(\n this.nodeChangesOfType('size')\n )\n\n @Output('onNodesChange.add')\n public onNodesChangeAdd = this.nodeChangesOfType('add')\n\n @Output('onNodesChange.add.single')\n public onNodesChangeAddSingle = this.singleChange(\n this.nodeChangesOfType('add')\n )\n\n @Output('onNodesChange.add.many')\n public onNodesChangeAddMany = this.manyChanges(\n this.nodeChangesOfType('add')\n )\n\n @Output('onNodesChange.remove')\n public onNodesChangeRemove = this.nodeChangesOfType('remove')\n\n @Output('onNodesChange.remove.single')\n public onNodesChangeRemoveSingle = this.singleChange(\n this.nodeChangesOfType('remove')\n )\n\n @Output('onNodesChange.remove.many')\n public onNodesChangeRemoveMany = this.manyChanges(\n this.nodeChangesOfType('remove')\n )\n\n @Output('onNodesChange.select')\n public onNodesChangeSelect = this.nodeChangesOfType('select')\n\n @Output('onNodesChange.select.single')\n public onNodesChangeSelectSingle = this.singleChange(\n this.nodeChangesOfType('select')\n )\n\n @Output('onNodesChange.select.many')\n public onNodesChangeSelectMany = this.manyChanges(\n this.nodeChangesOfType('select')\n )\n\n /**\n * Watch edges change\n */\n @Output()\n public onEdgesChange = this.edgesChangeService.changes$\n\n @Output('onEdgesChange.detached')\n public onNodesChangeDetached = this.edgeChangesOfType('detached')\n\n @Output('onEdgesChange.detached.single')\n public onNodesChangeDetachedSingle = this.singleChange(\n this.edgeChangesOfType('detached')\n )\n\n @Output('onEdgesChange.detached.many')\n public onNodesChangeDetachedMany = this.manyChanges(\n this.edgeChangesOfType('detached')\n )\n\n @Output('onEdgesChange.add')\n public onEdgesChangeAdd = this.edgeChangesOfType('add')\n\n @Output('onEdgesChange.add.single')\n public onEdgeChangeAddSingle = this.singleChange(\n this.edgeChangesOfType('add')\n )\n\n @Output('onEdgesChange.add.many')\n public onEdgeChangeAddMany = this.manyChanges(\n this.edgeChangesOfType('add')\n )\n\n @Output('onEdgesChange.remove')\n public onEdgeChangeRemove = this.edgeChangesOfType('remove')\n\n @Output('onEdgesChange.remove.single')\n public onEdgeChangeRemoveSingle = this.singleChange(\n this.edgeChangesOfType('remove')\n )\n\n @Output('onEdgesChange.remove.many')\n public onEdgeChangeRemoveMany = this.manyChanges(\n this.edgeChangesOfType('remove')\n )\n\n @Output('onEdgesChange.select')\n public onEdgeChangeSelect = this.edgeChangesOfType('select')\n\n @Output('onEdgesChange.select.single')\n public onEdgeChangeSelectSingle = this.singleChange(\n this.edgeChangesOfType('select')\n )\n\n @Output('onEdgesChange.select.many')\n public onEdgeChangeSelectMany = this.manyChanges(\n this.edgeChangesOfType('select')\n )\n\n private nodeChangesOfType<T extends NodeChange['type']>(type: T) {\n return this.nodesChangeService.changes$.pipe(\n map(changes => changes.filter((c): c is NodeChangeMap[T] => c.type === type)),\n filter(changes => !!changes.length)\n )\n }\n\n private edgeChangesOfType<T extends EdgeChange['type']>(type: T) {\n return this.edgesChangeService.changes$.pipe(\n map(changes => changes.filter((c): c is EdgeChangeMap[T] => c.type === type)),\n filter(changes => !!changes.length)\n )\n }\n\n private singleChange<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter(changes => changes.length === 1),\n map(([first]) => first)\n )\n }\n\n private manyChanges<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter(changes => changes.length > 1),\n )\n }\n}\n\n// TODO: do not write this types manually\ntype NodeChangeMap = {\n position: NodePositionChange,\n size: NodeSizeChange,\n add: NodeAddChange,\n remove: NodeRemoveChange,\n select: NodeSelectedChange\n}\n\ntype EdgeChangeMap = {\n detached: EdgeDetachedChange,\n add: EdgeAddChange,\n remove: EdgeRemoveChange,\n select: EdgeSelectChange\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport class NodeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService)\n\n public readonly nodes = computed(() => {\n return this.flowEntitiesService.nodes()\n .sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder())\n })\n\n private maxOrder = computed(() => {\n return Math.max(\n ...this.flowEntitiesService.nodes().map((n) => n.renderOrder())\n )\n })\n\n public pullNode(node: NodeModel) {\n // TODO do not pull when the node is already on top\n // pull node\n node.renderOrder.set(this.maxOrder() + 1)\n // pull children\n this.flowEntitiesService\n .nodes()\n .filter(n => n.parent() === node)\n .forEach(n => this.pullNode(n))\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { Observable, Subject, animationFrameScheduler, fromEvent, map, merge, observeOn, share, skip, tap } from 'rxjs';\nimport { Point } from '../interfaces/point.interface';\n\nexport interface PointerEvent {\n x: number\n y: number\n movementX: number\n movementY: number\n target: Element | null\n originalEvent: MouseEvent | TouchEvent\n}\n\n@Directive({ selector: 'svg[rootPointer]' })\nexport class RootPointerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n\n private initialTouch$ = new Subject<TouchEvent>()\n\n private prevTouchEvent: TouchEvent | null = null\n\n // TODO: do not emit if mouse not down\n public mouseMovement$ = fromEvent<MouseEvent>(this.host, 'mousemove').pipe(\n map(event => ({\n x: event.clientX,\n y: event.clientY,\n movementX: event.movementX,\n movementY: event.movementY,\n target: event.target as Element | null,\n originalEvent: event\n })),\n observeOn(animationFrameScheduler),\n share()\n ) satisfies Observable<Point>;\n\n public touchMovement$ = merge(\n this.initialTouch$,\n fromEvent<TouchEvent>(this.host, 'touchmove')\n ).pipe(\n tap((event) => event.preventDefault()),\n map((originalEvent) => {\n const x = originalEvent.touches[0]?.clientX ?? 0\n const y = originalEvent.touches[0]?.clientY ?? 0\n const movementX = this.prevTouchEvent\n ? originalEvent.touches[0].pageX - this.prevTouchEvent.touches[0].pageX\n : 0\n const movementY = this.prevTouchEvent\n ? originalEvent.touches[0].pageY - this.prevTouchEvent.touches[0].pageY\n : 0\n\n const target = document.elementFromPoint(x, y)\n\n return { x, y, movementX, movementY, target, originalEvent }\n }),\n tap((event) => this.prevTouchEvent = event.originalEvent),\n observeOn(animationFrameScheduler),\n share()\n ) satisfies Observable<Point>;\n\n public pointerMovement$: Observable<PointerEvent> = merge(\n this.mouseMovement$,\n this.touchMovement$\n )\n\n public touchEnd$ = fromEvent<TouchEvent>(this.host, 'touchend').pipe(\n map((originalEvent) => {\n const x = originalEvent.changedTouches[0]?.clientX ?? 0\n const y = originalEvent.changedTouches[0]?.clientY ?? 0\n const target = document.elementFromPoint(x, y)\n\n return { x, y, target, originalEvent }\n }),\n tap(() => this.prevTouchEvent = null),\n share()\n ) satisfies Observable<Point>\n\n public mouseUp$ = fromEvent<MouseEvent>(this.host, 'mouseup').pipe(\n map((originalEvent) => {\n const x = originalEvent.clientX\n const y = originalEvent.clientY\n const target = originalEvent.target\n\n return { x, y, target, originalEvent }\n }),\n share()\n ) satisfies Observable<Point>\n\n public documentPointerEnd$ = merge(\n fromEvent(document, 'mouseup'),\n fromEvent(document, 'touchend')\n ).pipe(\n share()\n )\n\n\n /**\n * We should know when user started a touch in order to not\n * show old touch position when connection creation is started\n */\n public setInitialTouch(event: TouchEvent) {\n this.initialTouch$.next(event)\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\nimport { RootPointerDirective } from './root-pointer.directive';\n\n@Directive({ selector: 'g[spacePointContext]' })\nexport class SpacePointContextDirective {\n private pointerMovementDirective = inject(RootPointerDirective)\n private rootSvg = inject(RootSvgReferenceDirective).element\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.pointerMovement()\n\n if (!movement) {\n return { x: 0, y: 0 }\n }\n\n return this.documentPointToFlowPoint({\n x: movement.x,\n y: movement.y\n })\n })\n\n public pointerMovement = toSignal(\n this.pointerMovementDirective.pointerMovement$,\n )\n\n public documentPointToFlowPoint(documentPoint: Point) {\n const point = this.rootSvg.createSVGPoint()\n point.x = documentPoint.x\n point.y = documentPoint.y\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse())\n }\n}\n","import { Background } from \"../types/background.type\";\n\nexport function transformBackground(background: Background | string): Background {\n return typeof background === 'string'\n ? { type: 'solid', color: background }\n : background\n}\n","export function Microtask(target: any, key: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => void>) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n queueMicrotask(() => {\n originalMethod?.apply(this, args)\n })\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n","import { Injectable, Signal, TemplateRef, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\nexport interface NodeHandle {\n position: Position\n type: HandleType\n id?: string\n parentReference?: Element\n template?: TemplateRef<any>\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null)\n\n @Microtask // TODO fixes rendering of handle for group node\n public createHandle(newHandle: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(handles => [...handles, newHandle])\n }\n }\n\n public destroyHandle(handleToDestoy: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(\n handles => handles.filter(handle => handle !== handleToDestoy)\n )\n }\n }\n}\n","import { NgZone } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport function resizable(elems: Element[], zone: NgZone) {\n return new Observable<ResizeObserverEntry[]>((subscriber) => {\n let ro = new ResizeObserver((entries) => {\n zone.run(() => subscriber.next(entries))\n });\n\n elems.forEach(e => ro.observe(e))\n\n return () => ro.disconnect()\n });\n}\n","import { Directive, Injector, inject, runInInjectionContext } from \"@angular/core\";\n\nexport function InjectionContext(target: any, key: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n if (implementsWithInjector(this)) {\n return runInInjectionContext(this.injector, () => originalMethod.apply(this, args))\n } else {\n throw new Error('Class that contains decorated method must extends WithInjectorDirective class')\n }\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n\nexport interface WithInjector {\n injector: Injector\n}\n\nconst implementsWithInjector = (instance: {}): instance is WithInjector => {\n return 'injector' in instance && 'get' in (instance.injector as Injector);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * Service to fix cyclic dependency between node and resizable component\n */\n@Injectable()\nexport class NodeAccessorService {\n public model = signal<NodeModel | null>(null)\n\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'default-node',\n templateUrl: './default-node.component.html',\n styleUrls: [`./default-node.component.scss`],\n host: {\n '[class.selected]': 'selected'\n }\n})\nexport class DefaultNodeComponent {\n @Input()\n public selected = false\n}\n","<ng-content />\n","import { computed, signal } from \"@angular/core\";\nimport { NodeHandle } from \"../services/handle.service\";\nimport { NodeModel } from \"./node.model\";\nimport { Subject, map } from \"rxjs\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\nexport class HandleModel {\n public readonly strokeWidth = 2\n\n /**\n * Pre-computed size for default handle, changed dynamically\n * for custom handles\n */\n public size = signal({\n width: 10 + (2 * this.strokeWidth),\n height: 10 + (2 * this.strokeWidth)\n })\n\n public offset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return {\n x: 0,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'right': return {\n x: this.parentNode.size().width,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'top': return {\n x: this.parentPosition().x + (this.parentSize().width / 2),\n y: 0\n }\n case 'bottom': return {\n x: this.parentPosition().x + this.parentSize().width / 2,\n y: this.parentNode.size().height\n }\n }\n })\n\n public sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return { x: -(this.size().width / 2), y: 0 }\n case 'right': return { x: this.size().width / 2, y: 0 }\n case 'top': return { x: 0, y: -(this.size().height / 2) }\n case 'bottom': return { x: 0, y: this.size().height / 2 }\n }\n })\n\n public pointAbsolute = computed(() => {\n return {\n x: this.parentNode.globalPoint().x + this.offset().x + this.sizeOffset().x,\n y: this.parentNode.globalPoint().y + this.offset().y + this.sizeOffset().y,\n }\n })\n\n public state = signal<HandleState>('idle')\n\n private updateParentSizeAndPosition$ = new Subject<void>()\n\n public parentSize = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => this.getParentSize())\n ),\n {\n initialValue: { width: 0, height: 0 }\n }\n )\n\n public parentPosition = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => ({\n x: this.parentReference instanceof HTMLElement\n ? this.parentReference.offsetLeft\n : 0, // for now just 0 for group nodes\n y: this.parentReference instanceof HTMLElement\n ? this.parentReference.offsetTop\n : 0 // for now just 0 for group nodes\n }))\n ),\n {\n initialValue: { x: 0, y: 0 }\n }\n )\n\n public parentReference = this.rawHandle.parentReference!\n\n public template = this.rawHandle.template\n\n public templateContext = {\n $implicit: {\n point: this.offset,\n state: this.state,\n node: this.parentNode.node\n }\n }\n\n constructor(\n public rawHandle: NodeHandle,\n public parentNode: NodeModel\n ) { }\n\n public updateParent() {\n this.updateParentSizeAndPosition$.next()\n }\n\n private getParentSize(): { width: number, height: number } {\n if (this.parentReference instanceof HTMLElement) {\n return {\n width: this.parentReference.offsetWidth,\n height: this.parentReference.offsetHeight\n }\n } else if (this.parentReference instanceof SVGGraphicsElement) {\n return this.parentReference.getBBox()\n }\n\n return { width: 0, height: 0 }\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Injector, Input, OnDestroy, OnInit, TemplateRef, inject, runInInjectionContext, signal } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { InjectionContext, WithInjector } from '../../decorators/run-in-injection-context.decorator';\n\n@Component({\n selector: 'handle',\n templateUrl: './handle.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HandleComponent implements OnInit, OnDestroy, WithInjector {\n public injector = inject(Injector);\n private handleService = inject(HandleService)\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement\n\n /**\n * At what side of node this component should be placed\n */\n @Input({ required: true })\n public position!: Position\n\n /**\n * Source or target\n */\n @Input({ required: true })\n public type!: 'source' | 'target'\n\n /**\n * Should be used if node has more than one source/target\n */\n @Input()\n public id?: string\n\n @Input()\n public template?: TemplateRef<any>\n\n public model!: HandleModel\n\n @InjectionContext\n public ngOnInit() {\n this.model = new HandleModel(\n {\n position: this.position,\n type: this.type,\n id: this.id,\n parentReference: this.element.parentElement!,\n template: this.template\n },\n this.handleService.node()!\n )\n\n this.handleService.createHandle(this.model)\n\n requestAnimationFrame(() => this.model.updateParent())\n }\n\n public ngOnDestroy(): void {\n this.handleService.destroyHandle(this.model)\n }\n}\n\n","","import { Directive, ElementRef, EventEmitter, HostListener, Output, effect, inject } from '@angular/core';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RootPointerDirective } from './root-pointer.directive';\n\n@Directive({ selector: '[pointerStart], [pointerEnd], [pointerOver], [pointerOut]' })\nexport class PointerDirective {\n protected hostElement = inject<ElementRef<Element>>(ElementRef).nativeElement\n protected pointerMovementDirective = inject(RootPointerDirective)\n\n @Output()\n protected pointerOver = new EventEmitter<Event>()\n\n @Output()\n protected pointerOut = new EventEmitter<Event>()\n\n @Output()\n protected pointerStart = new EventEmitter<Event>()\n\n @Output()\n protected pointerEnd = new EventEmitter<Event>()\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n protected onPointerStart(event: Event) {\n this.pointerStart.emit(event)\n\n if (event instanceof TouchEvent) {\n this.pointerMovementDirective.setInitialTouch(event);\n }\n }\n\n @HostListener('mouseup', ['$event'])\n protected onPointerEnd(event: Event) {\n this.pointerEnd.emit(event)\n }\n\n @HostListener('mouseover', ['$event'])\n protected onMouseOver(event: Event) {\n this.pointerOver.emit(event)\n }\n\n @HostListener('mouseout', ['$event'])\n protected onMouseOut(event: Event) {\n this.pointerOut.emit(event)\n }\n\n private wasPointerOver = false;\n\n // TODO check if i could avoid global touch end\n protected touchEnd = this.pointerMovementDirective.touchEnd$\n .pipe(\n filter(({ target }) => target === this.hostElement),\n tap(({ originalEvent }) => this.pointerEnd.emit(originalEvent)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected touchOverOut = this.pointerMovementDirective.touchMovement$\n .pipe(\n tap(({ target, originalEvent }) => {\n this.handleTouchOverAndOut(target, originalEvent)\n }),\n takeUntilDestroyed()\n )\n .subscribe()\n\n // TODO: dirty imperative implementation\n private handleTouchOverAndOut(target: Element | null, event: TouchEvent) {\n if (target === this.hostElement) {\n this.pointerOver.emit(event)\n this.wasPointerOver = true;\n } else {\n // should not emit before pointerOver\n if (this.wasPointerOver) {\n this.pointerOut.emit(event)\n }\n\n this.wasPointerOver = false;\n }\n }\n}\n","import { AfterViewInit, Component, computed, ElementRef, inject, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ViewportService } from '../../services/viewport.service';\nimport { round } from '../../utils/round';\nimport { Microtask } from '../../decorators/microtask.decorator';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { NodeModel } from '../../models/node.model';\nimport { Rect } from '../../interfaces/rect';\nimport { PointerEvent } from '../../directives/root-pointer.directive';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\n\ntype Side = 'top' | 'right' | 'bottom' | 'left' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\n@Component({\n selector: '[resizable]',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss']\n})\nexport class ResizableComponent implements OnInit, AfterViewInit {\n private nodeAccessor = inject(NodeAccessorService)\n private rootPointer = inject(RootPointerDirective)\n private viewportService = inject(ViewportService)\n private spacePointContext = inject(SpacePointContextDirective)\n private hostRef = inject<ElementRef<Element>>(ElementRef)\n\n @Input()\n public set resizable(value: boolean | '') {\n if (typeof value === 'boolean') {\n this.model.resizable.set(value)\n } else {\n this.model.resizable.set(true)\n }\n }\n\n @Input()\n public resizerColor = '#2e414c'\n\n @Input()\n public gap = 1.5;\n\n @ViewChild('resizer', { static: true })\n private resizer!: TemplateRef<unknown>\n\n protected get model() {\n return this.nodeAccessor.model()!\n }\n\n protected lineGap = 3\n protected handleSize = 6\n\n private resizeSide: Side | null = null\n\n private zoom = computed(() => this.viewportService.readableViewport().zoom ?? 0)\n\n private minWidth = 0\n private minHeight = 0\n\n // TODO: allow reszie beside the flow\n protected resizeOnGlobalMouseMove = this.rootPointer.pointerMovement$\n .pipe(\n filter(() => this.resizeSide !== null),\n filter((event) => event.movementX !== 0 || event.movementY !== 0),\n tap((event) => this.resize(event)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected endResizeOnGlobalMouseUp = this.rootPointer.documentPointerEnd$\n .pipe(\n tap(() => this.endResize()),\n takeUntilDestroyed()\n )\n .subscribe()\n\n public ngOnInit(): void {\n this.model.resizerTemplate.set(this.resizer)\n }\n\n @Microtask\n public ngAfterViewInit() {\n this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0\n this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0\n }\n\n protected startResize(side: Side, event: Event) {\n event.stopPropagation()\n this.resizeSide = side\n this.model.resizing.set(true)\n }\n\n protected resize(event: PointerEvent) {\n if (!this.resizeSide) return;\n if (this.isResizeConstrained(event)) return;\n\n const offset = calcOffset(event.movementX, event.movementY, this.zoom())\n const { x, y, width, height } = constrainRect(\n applyResize(this.resizeSide, this.model, offset),\n this.model,\n this.resizeSide,\n this.minWidth,\n this.minHeight\n )\n\n this.model.setPoint({ x, y }, false)\n this.model.size.set({ width, height })\n }\n\n protected endResize() {\n this.resizeSide = null\n this.model.resizing.set(false)\n }\n\n private isResizeConstrained({ x, y, movementX, movementY }: PointerEvent): boolean {\n const flowPoint = this.spacePointContext.documentPointToFlowPoint({ x, y })\n\n if (this.resizeSide?.includes('right')) {\n if (movementX > 0 && flowPoint.x < (this.model.point().x + this.model.size().width)) {\n return true\n }\n\n if (movementX < 0 && flowPoint.x > this.model.point().x + this.model.size().width) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('left')) {\n if (movementX < 0 && flowPoint.x > this.model.point().x) {\n return true\n }\n\n if (movementX > 0 && flowPoint.x < this.model.point().x) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('bottom')) {\n if (movementY > 0 && flowPoint.y < (this.model.point().y + this.model.size().height)) {\n return true\n }\n\n if (movementY < 0 && flowPoint.y > this.model.point().y + this.model.size().height) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('top')) {\n if (movementY < 0 && flowPoint.y > this.model.point().y) {\n return true\n }\n\n if (movementY > 0 && flowPoint.y < this.model.point().y) {\n return true\n }\n }\n\n return false\n }\n}\n\nfunction calcOffset(movementX: number, movementY: number, zoom: number) {\n return {\n offsetX: round(movementX / zoom),\n offsetY: round(movementY / zoom)\n };\n}\n\nfunction applyResize(\n side: Side,\n model: NodeModel,\n offset: { offsetX: number, offsetY: number }\n): Rect {\n const { offsetX, offsetY } = offset\n const { x, y } = model.point()\n const { width, height } = model.size()\n\n // Handle each case of resizing (top, bottom, left, right, corners)\n switch (side) {\n case 'left':\n return { x: x + offsetX, y, width: width - offsetX, height }\n case 'right':\n return { x, y, width: width + offsetX, height }\n case 'top':\n return { x, y: y + offsetY, width, height: height - offsetY }\n case 'bottom':\n return { x, y, width, height: height + offsetY }\n case 'top-left':\n return { x: x + offsetX, y: y + offsetY, width: width - offsetX, height: height - offsetY }\n case 'top-right':\n return { x, y: y + offsetY, width: width + offsetX, height: height - offsetY }\n case 'bottom-left':\n return { x: x + offsetX, y, width: width - offsetX, height: height + offsetY }\n case 'bottom-right':\n return { x, y, width: width + offsetX, height: height + offsetY }\n }\n}\n\nfunction constrainRect(\n rect: Rect,\n model: NodeModel,\n side: Side,\n minWidth: number,\n minHeight: number\n) {\n let { x, y, width, height } = rect\n\n // 1. Prevent negative dimensions\n width = Math.max(width, 0)\n height = Math.max(height, 0)\n\n // 2. Apply minimum size constraints\n width = Math.max(minWidth, width)\n height = Math.max(minHeight, height)\n\n // Apply left/top constraints based on minimum size\n x = Math.min(x, model.point().x + model.size().width - minWidth)\n y = Math.min(y, model.point().y + model.size().height - minHeight)\n\n const parent = model.parent()\n // 3. Apply maximum size constraints based on parent size (if exists)\n if (parent) {\n x = Math.max(x, 0); // Left boundary of the parent\n y = Math.max(y, 0); // Top boundary of the parent\n\n if (x === 0) {\n width = model.point().x + model.size().width\n }\n\n if (y === 0) {\n height = model.point().y + model.size().height\n }\n\n width = Math.min(width, parent.size().width - model.point().x)\n height = Math.min(height, parent.size().height - model.point().y)\n }\n\n const bounds = getNodesBounds(model.children())\n // 4. Apply child node constraints (if children exist)\n if (bounds) {\n if (side.includes('left')) {\n x = Math.min(x, (model.point().x + model.size().width) - (bounds.x + bounds.width))\n width = Math.max(width, bounds.x + bounds.width)\n }\n\n if (side.includes('right')) {\n width = Math.max(width, bounds.x + bounds.width)\n }\n\n if (side.includes('bottom')) {\n height = Math.max(height, bounds.y + bounds.height)\n }\n\n if (side.includes('top')) {\n y = Math.min(y, (model.point().y + model.size().height) - (bounds.y + bounds.height))\n height = Math.max(height, bounds.y + bounds.height)\n }\n }\n\n return {\n x,\n y,\n width,\n height\n };\n}\n","<ng-template #resizer>\n <svg:g>\n <!-- top line -->\n <svg:line\n class=\"top\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"-gap\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"-gap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('top', $event)\"\n />\n <!-- Left line -->\n <svg:line\n class=\"left\"\n [attr.x1]=\"-gap\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"-gap\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('left', $event)\"\n />\n <!-- Bottom line -->\n <svg:line\n class=\"bottom\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"model.size().height + gap\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"model.size().height + gap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('bottom', $event)\"\n />\n <!-- Right line -->\n <svg:line\n class=\"right\"\n [attr.x1]=\"model.size().width + gap\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"model.size().width + gap\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('right', $event)\"\n />\n\n <!-- Top Left -->\n <svg:rect\n class=\"top-left\"\n [attr.x]=\"-(handleSize / 2) - gap\"\n [attr.y]=\"-(handleSize / 2) - gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('top-left', $event)\"\n />\n\n <!-- Top right -->\n <svg:rect\n class=\"top-right\"\n [attr.x]=\"model.size().width - (handleSize / 2) + gap\"\n [attr.y]=\"-(handleSize / 2) - gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('top-right', $event)\"\n />\n\n <!-- Bottom left -->\n <svg:rect\n class=\"bottom-left\"\n [attr.x]=\"-(handleSize / 2) - gap\"\n [attr.y]=\"model.size().height - (handleSize / 2) + gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('bottom-left', $event)\"\n />\n\n <!-- Bottom right -->\n <svg:rect\n class=\"bottom-right\"\n [attr.x]=\"model.size().width - (handleSize / 2) + gap\"\n [attr.y]=\"model.size().height - (handleSize / 2) + gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('bottom-right', $event)\"\n />\n </svg:g>\n</ng-template>\n\n<ng-content />\n","import { AfterViewInit, Directive, ElementRef, Input, inject } from '@angular/core';\nimport { HandleModel } from '../models/handle.model';\n\n@Directive({ selector: '[handleSizeController]' })\nexport class HandleSizeControllerDirective implements AfterViewInit {\n @Input({ required: true, alias: 'handleSizeController' })\n public handleModel!: HandleModel\n\n private handleWrapper = inject(ElementRef) as ElementRef<SVGGElement>\n\n public ngAfterViewInit(): void {\n const element = this.handleWrapper.nativeElement\n const rect = element.getBBox()\n\n const stroke = getChildStrokeWidth(element)\n this.handleModel.size.set({\n width: rect.width + stroke,\n height: rect.height + stroke\n })\n }\n}\n\nfunction getChildStrokeWidth(element: SVGGElement) {\n const child = element.firstElementChild\n\n if (child) {\n const stroke = getComputedStyle(child).strokeWidth\n const strokeAsNumber = Number(stroke.replace('px', ''))\n\n if (isNaN(strokeAsNumber)) {\n return 0\n }\n\n return strokeAsNumber\n }\n\n return 0\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Injector, Input, NgZone, OnDestroy, OnInit, TemplateRef, ViewChild, computed, effect, inject } from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { resizable } from '../../utils/resizable';\nimport { filter, first, map, startWith, switchMap, tap } from 'rxjs';\nimport { InjectionContext, WithInjector } from '../../decorators/run-in-injection-context.decorator';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\n@Component({\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService, NodeAccessorService]\n})\nexport class NodeComponent implements OnInit, AfterViewInit, OnDestroy, WithInjector {\n public injector = inject(Injector)\n private handleService = inject(HandleService)\n private draggableService = inject(DraggableService)\n private flowStatusService = inject(FlowStatusService)\n private nodeRenderingService = inject(NodeRenderingService)\n private flowSettingsService = inject(FlowSettingsService)\n private selectionService = inject(SelectionService)\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef)\n private connectionController = inject(ConnectionControllerDirective)\n private nodeAccessor = inject(NodeAccessorService);\n private zone = inject(NgZone)\n\n @Input()\n public nodeModel!: NodeModel\n\n @Input()\n public nodeTemplate?: TemplateRef<any>\n\n @Input()\n public groupNodeTemplate?: TemplateRef<any>\n\n @ViewChild('nodeContent')\n public nodeContentRef!: ElementRef<SVGGraphicsElement>\n\n @ViewChild('htmlWrapper')\n public htmlWrapperRef!: ElementRef<HTMLDivElement>\n\n protected showMagnet = computed(() =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation'\n )\n\n protected styleWidth = computed(() => `${this.nodeModel.size().width}px`)\n protected styleHeight = computed(() => `${this.nodeModel.size().height}px`)\n\n @InjectionContext\n public ngOnInit() {\n this.nodeAccessor.model.set(this.nodeModel);\n\n this.handleService.node.set(this.nodeModel);\n\n effect(() => {\n if (this.nodeModel.draggable()) {\n this.draggableService.enable(this.hostRef.nativeElement, this.nodeModel)\n } else {\n this.draggableService.disable(this.hostRef.nativeElement)\n }\n })\n\n this.nodeModel.handles$\n .pipe(\n switchMap((handles) =>\n resizable(handles.map(h => h.parentReference!), this.zone)\n .pipe(map(() => handles))\n ),\n tap((handles) => {\n // TODO (performance) inspect how to avoid calls of this when flow initially rendered\n handles.forEach(h => h.updateParent())\n }),\n takeUntilDestroyed()\n )\n .subscribe()\n }\n\n @InjectionContext\n public ngAfterViewInit(): void {\n this.nodeModel.linkDefaultNodeSizeWithModelSize()\n\n if (this.nodeModel.node.type === 'html-template' || this.nodeModel.isComponentType) {\n resizable([this.htmlWrapperRef.nativeElement], this.zone)\n .pipe(\n startWith(null),\n tap(() => this.nodeModel.handles().forEach(h => h.updateParent())),\n filter(() => !this.nodeModel.resizing()),\n tap(() => {\n const width = this.htmlWrapperRef.nativeElement.clientWidth\n const height = this.htmlWrapperRef.nativeElement.clientHeight\n\n this.nodeModel.size.set({ width, height })\n }),\n takeUntilDestroyed()\n ).subscribe()\n }\n }\n\n public ngOnDestroy(): void {\n this.draggableService.destroy(this.hostRef.nativeElement)\n }\n\n protected startConnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation()\n\n this.connectionController.startConnection(handle)\n }\n\n protected validateConnection(handle: HandleModel) {\n this.connectionController.validateConnection(handle)\n }\n\n protected resetValidateConnection(targetHandle: HandleModel) {\n this.connectionController.resetValidateConnection(targetHandle)\n }\n\n protected endConnection(handle: HandleModel) {\n this.connectionController.endConnection(handle)\n }\n\n protected pullNode() {\n this.nodeRenderingService.pullNode(this.nodeModel)\n }\n\n protected selectNode() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.nodeModel)\n }\n }\n}\n","<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, TemplateRef, ViewChild, computed, signal } from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Point } from '../../interfaces/point.interface';\nimport { Microtask } from '../../decorators/microtask.decorator';\n\n@Component({\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [`\n .edge-label-wrapper {\n width: max-content;\n\n /*\n this is a fix for bug in chrome, for some reason if the div fully matches the size\n of foreignObject there are occurs some visual artifacts around this div\n */\n margin-top: 1px;\n margin-left: 1px;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n // TODO: too many inputs\n @Input()\n public model!: EdgeLabelModel\n\n @Input()\n public edgeModel!: EdgeModel\n\n @Input()\n public set point(point: Point) { this.pointSignal.set(point) }\n\n @Input()\n public htmlTemplate?: TemplateRef<any>\n\n @ViewChild('edgeLabelWrapper')\n public edgeLabelWrapperRef!: ElementRef<HTMLDivElement>\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.pointSignal()\n\n const { width, height } = this.model.size()\n\n return {\n x: point.x - (width / 2),\n y: point.y - (height / 2)\n }\n })\n\n private pointSignal = signal({ x: 0, y: 0 })\n\n @Microtask\n public ngAfterViewInit(): void {\n // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.\n // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\n const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2\n\n const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n\n this.model.size.set({ width, height })\n\n }\n\n protected getLabelContext() {\n return {\n $implicit: {\n edge: this.edgeModel.edge,\n label: this.model.edgeLabel\n }\n }\n }\n}\n","<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n","import { ChangeDetectionStrategy, Component, Injector, Input, OnInit, Signal, TemplateRef, computed, inject } from '@angular/core';\nimport { EdgeModel } from '../../models/edge.model';\nimport { hashCode } from '../../utils/hash';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\n\n@Component({\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n styleUrls: ['./edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'selectable'\n }\n})\nexport class EdgeComponent implements OnInit {\n protected injector = inject(Injector)\n private selectionService = inject(SelectionService)\n private flowSettingsService = inject(FlowSettingsService)\n\n @Input()\n public model!: EdgeModel\n\n @Input()\n public edgeTemplate?: TemplateRef<EdgeContext>\n\n @Input()\n public edgeLabelHtmlTemplate?: TemplateRef<any>\n\n protected markerStartUrl = computed(() => {\n const marker = this.model.edge.markers?.start\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected markerEndUrl = computed(() => {\n const marker = this.model.edge.markers?.end\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected edgeContext!: EdgeContext\n\n public ngOnInit(): void {\n this.edgeContext = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.model.edge,\n path: computed(() => this.model.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl,\n selected: this.model.selected.asReadonly()\n }\n }\n }\n\n public onEdgeMouseDown() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model)\n }\n }\n}\n","<svg:path\n *ngIf=\"model.type === 'default'\"\n (mousedown)=\"onEdgeMouseDown()\"\n [attr.d]=\"model.path().path\"\n [attr.marker-start]=\"markerStartUrl()\"\n [attr.marker-end]=\"markerEndUrl()\"\n class=\"edge\"\n [class.edge_selected]=\"model.selected()\"\n/>\n\n<ng-container *ngIf=\"model.type === 'template' && edgeTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"edgeTemplate\"\n [ngTemplateOutletContext]=\"edgeContext\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.start as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.start\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.center as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.center\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.end as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.end\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, computed, inject } from '@angular/core';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { straightPath } from '../../math/edge-path/straigh-path';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { bezierPath } from '../../math/edge-path/bezier-path';\nimport { hashCode } from '../../utils/hash';\nimport { Position } from '../../types/position.type';\n\n@Component({\n selector: 'g[connection]',\n template: `\n <ng-container *ngIf=\"model.type === 'default'\">\n <svg:path\n *ngIf=\"path() as path\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\"\n fill=\"none\"\n stroke-width=\"2\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"model.type === 'template' && template\">\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConnectionComponent {\n @Input({ required: true })\n public model!: ConnectionModel\n\n @Input()\n public template?: TemplateRef<any>\n\n private flowStatusService = inject(FlowStatusService)\n private spacePointContext = inject(SpacePointContextDirective)\n\n protected path = computed(() => {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetPoint = this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n if (status.state === 'connection-validation') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetHandle = status.payload.targetHandle\n // ignore magnet if validation failed\n const targetPoint = status.payload.valid\n ? targetHandle.pointAbsolute()\n : this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = status.payload.valid\n ? targetHandle.rawHandle.position\n : getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n return null\n })\n\n protected markerUrl = computed(() => {\n const marker = this.model.settings.marker\n\n if (marker) {\n return `url(#${hashCode(JSON.stringify(marker))})`\n }\n\n return ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected getContext() {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl\n }\n }\n }\n}\n\nfunction getOppositePostion(position: Position): Position {\n switch (position) {\n case 'top':\n return 'bottom'\n case 'bottom':\n return 'top'\n case 'left':\n return 'right'\n case 'right':\n return 'left'\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\n\n@Component({\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefsComponent {\n @Input({ required: true })\n public markers: Map<number, Marker> = new Map()\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n}\n","<svg:marker\n *ngFor=\"let marker of markers | keyvalue\"\n [attr.id]=\"marker.key\"\n [attr.markerWidth]=\"marker.value.width ?? 16.5\"\n [attr.markerHeight]=\"marker.value.height ?? 16.5\"\n [attr.orient]=\"marker.value.orient ?? 'auto-start-reverse'\"\n viewBox=\"-10 -10 20 20\"\n [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\"\n refX=\"0\"\n refY=\"0\"\n>\n <polyline\n *ngIf=\"marker.value.type === 'arrow-closed' || !marker.value.type\"\n class=\"marker__arrow_closed\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n />\n\n <polyline\n *ngIf=\"marker.value.type === 'arrow'\"\n class=\"marker__arrow_default\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n points=\"-5,-4 0,0 -5,4\"\n />\n</svg:marker>\n","export function id() {\n const randomLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n\n return randomLetter + Date.now();\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { id } from '../../utils/id';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\n\nconst defaultBg = '#fff'\nconst defaultGap = 20\nconst defaultDotSize = 2\nconst defaultDotColor = 'rgb(177, 177, 183)'\n\n@Component({\n selector: 'g[background]',\n templateUrl: './background.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BackgroundComponent {\n private viewportService = inject(ViewportService)\n private rootSvg = inject(RootSvgReferenceDirective).element\n private settingsService = inject(FlowSettingsService);\n\n protected backgroundSignal = this.settingsService.background\n\n protected scaledGap = computed(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n const zoom = this.viewportService.readableViewport().zoom\n\n return zoom * (background.gap ?? defaultGap)\n }\n\n return 0\n })\n\n protected x = computed(() => this.viewportService.readableViewport().x % this.scaledGap())\n\n protected y = computed(() => this.viewportService.readableViewport().y % this.scaledGap())\n\n protected patternColor = computed(() => this.backgroundSignal().color ?? defaultDotColor)\n\n protected patternSize = computed(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n return (this.viewportService.readableViewport().zoom * (background.size ?? defaultDotSize)) / 2\n }\n\n return 0\n })\n\n // Without ID there will be pattern collision for several flows on the page\n // Later pattern ID may be exposed to API\n protected patternId = id();\n protected patternUrl = `url(#${this.patternId})`\n\n constructor() {\n effect(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n this.rootSvg.style.backgroundColor = background.backgroundColor ?? defaultBg\n }\n\n if (background.type === 'solid') {\n this.rootSvg.style.backgroundColor = background.color\n }\n })\n }\n}\n","<ng-container *ngIf=\"backgroundSignal().type === 'dots'\">\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n</ng-container>\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n\n// TODO: too general purpose nane\n@Directive({ selector: 'svg[rootSvgContext]' })\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService)\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n protected resetConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n this.flowStatusService.setIdleStatus()\n }\n }\n}\n","import { Directive, ElementRef, NgZone, Signal, WritableSignal, computed, effect, inject, signal } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { tap } from 'rxjs';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: 'svg[flowSizeController]',\n host: {\n '[attr.width]': 'flowWidth()',\n '[attr.height]': 'flowHeight()'\n }\n})\nexport class FlowSizeControllerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef)\n private flowSettingsService = inject(FlowSettingsService)\n\n public flowWidth: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view()\n\n return view === 'auto' ? '100%' : view[0]\n })\n\n public flowHeight: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view()\n\n return view === 'auto' ? '100%' : view[1]\n })\n\n constructor() {\n resizable([this.host.nativeElement], inject(NgZone)).pipe(\n tap(([entry]) => {\n this.flowSettingsService.computedFlowWidth.set(entry.contentRect.width)\n this.flowSettingsService.computedFlowHeight.set(entry.contentRect.height)\n }),\n takeUntilDestroyed()\n ).subscribe()\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Injector, Input, OnChanges, OnInit, Output, Signal, SimpleChanges, ViewChild, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport { DynamicNode, Node } from '../../interfaces/node.interface';\nimport { MapContextDirective } from '../../directives/map-context.directive';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { ViewportService } from '../../services/viewport.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';\nimport { HandlePositions } from '../../interfaces/handle-positions.interface';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { skip } from 'rxjs';\nimport { Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceKeeper } from '../../utils/reference-keeper';\nimport { NodesChangeService } from '../../services/node-changes.service';\nimport { EdgeChangesService } from '../../services/edge-changes.service';\nimport { NodeChange } from '../../types/node-change.type';\nimport { ChangesControllerDirective } from '../../directives/changes-controller.directive';\nimport { EdgeChange } from '../../types/edge-change.type';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { Background } from '../../types/background.type';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { FitViewOptions } from '../../interfaces/fit-view-options.interface';\nimport { Optimization } from '../../interfaces/optimization.interface';\nimport { KeyboardShortcuts } from '../../types/keyboard-action.type';\nimport { KeyboardService } from '../../services/keyboard.service';\nimport { transformBackground } from '../../utils/transform-background';\n\nconst connectionControllerHostDirective = {\n directive: ConnectionControllerDirective,\n outputs: ['onConnect']\n}\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: [\n 'onNodesChange',\n 'onNodesChange.position',\n 'onNodesChange.position.single',\n 'onNodesChange.position.many',\n 'onNodesChange.size',\n 'onNodesChange.size.single',\n 'onNodesChange.size.many',\n 'onNodesChange.add',\n 'onNodesChange.add.single',\n 'onNodesChange.add.many',\n 'onNodesChange.remove',\n 'onNodesChange.remove.single',\n 'onNodesChange.remove.many',\n 'onNodesChange.select',\n 'onNodesChange.select.single',\n 'onNodesChange.select.many',\n 'onEdgesChange',\n 'onEdgesChange.detached',\n 'onEdgesChange.detached.single',\n 'onEdgesChange.detached.many',\n 'onEdgesChange.add',\n 'onEdgesChange.add.single',\n 'onEdgesChange.add.many',\n 'onEdgesChange.remove',\n 'onEdgesChange.remove.single',\n 'onEdgesChange.remove.many',\n 'onEdgesChange.select',\n 'onEdgesChange.select.single',\n 'onEdgesChange.select.many',\n ]\n}\n\n@Component({\n selector: 'vflow',\n templateUrl: './vflow.component.html',\n styleUrls: ['./vflow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n DraggableService,\n ViewportService,\n FlowStatusService,\n FlowEntitiesService,\n NodesChangeService,\n EdgeChangesService,\n NodeRenderingService,\n SelectionService,\n FlowSettingsService,\n ComponentEventBusService,\n KeyboardService\n ],\n hostDirectives: [\n connectionControllerHostDirective,\n changesControllerHostDirective\n ]\n})\nexport class VflowComponent implements OnInit {\n // #region DI\n private viewportService = inject(ViewportService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private nodesChangeService = inject(NodesChangeService)\n private edgesChangeService = inject(EdgeChangesService)\n private nodeRenderingService = inject(NodeRenderingService)\n private flowSettingsService = inject(FlowSettingsService)\n private componentEventBusService = inject(ComponentEventBusService)\n private keyboardService = inject(KeyboardService)\n private injector = inject(Injector)\n // #endregion\n\n // #region SETTINGS\n\n /**\n * Size for flow view\n *\n * accepts\n * - absolute size in format [width, height] or\n * - 'auto' to compute size based on parent element size\n */\n @Input()\n public set view(view: [number, number] | 'auto') {\n this.flowSettingsService.view.set(view)\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public set minZoom(value: number) {\n this.flowSettingsService.minZoom.set(value)\n }\n\n /**\n * Maximum zoom value\n */\n @Input()\n public set maxZoom(value: number) {\n this.flowSettingsService.maxZoom.set(value)\n }\n\n /**\n * Object that controls flow direction.\n *\n * For example, if you want to archieve right to left direction\n * then you need to pass these positions { source: 'left', target: 'right' }\n *\n * @deprecated\n */\n @Input()\n public set handlePositions(handlePositions: HandlePositions) {\n this.flowSettingsService.handlePositions.set(handlePositions)\n }\n\n /**\n * Background for flow\n */\n @Input()\n public set background(value: Background | string) {\n this.flowSettingsService.background.set(transformBackground(value))\n }\n\n @Input()\n public optimization: Optimization = {\n computeLayersOnInit: true\n }\n\n /**\n * Global rule if you can or can't select entities\n */\n @Input()\n public set entitiesSelectable(value: boolean) {\n this.flowSettingsService.entitiesSelectable.set(value)\n }\n\n @Input()\n public set keyboardShortcuts(value: KeyboardShortcuts) {\n this.keyboardService.setShortcuts(value)\n }\n\n /**\n * Settings for connection (it renders when user tries to create edge between nodes)\n *\n * You need to pass `ConnectionSettings` in this input.\n */\n @Input({ transform: (settings: ConnectionSettings) => new ConnectionModel(settings) })\n public set connection(connection: ConnectionModel) { this.flowEntitiesService.connection.set(connection) }\n\n public get connection() { return this.flowEntitiesService.connection() }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[] | DynamicNode[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(newModels, this.flowEntitiesService.edges())\n\n this.flowEntitiesService.nodes.set(newModels)\n }\n\n protected nodeModels = computed(() => this.nodeRenderingService.nodes())\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.nodeModels(), newModels)\n\n this.flowEntitiesService.edges.set(newModels)\n }\n\n protected edgeModels = computed(() => this.flowEntitiesService.validEdges())\n // #endregion\n\n // #region OUTPUTS\n /**\n * Event that accumulates all custom node events\n *\n * @experimental\n */\n @Output()\n public onComponentNodeEvent = this.componentEventBusService.event$ as any // TODO: research how to remove as any\n // #endregion\n\n // #region TEMPLATES\n @ContentChild(NodeHtmlTemplateDirective)\n protected nodeTemplateDirective?: NodeHtmlTemplateDirective\n\n @ContentChild(GroupNodeTemplateDirective)\n protected groupNodeTemplateDirective?: GroupNodeTemplateDirective\n\n @ContentChild(EdgeTemplateDirective)\n protected edgeTemplateDirective?: EdgeTemplateDirective\n\n @ContentChild(EdgeLabelHtmlTemplateDirective)\n protected edgeLabelHtmlDirective?: EdgeLabelHtmlTemplateDirective\n\n @ContentChild(ConnectionTemplateDirective)\n protected connectionTemplateDirective?: ConnectionTemplateDirective\n // #endregion\n\n // #region DIRECTIVES\n @ViewChild(MapContextDirective)\n protected mapContext!: MapContextDirective\n\n @ViewChild(SpacePointContextDirective)\n protected spacePointContext!: SpacePointContextDirective\n // #endregion\n\n // #region SIGNAL_API\n /**\n * Signal for reading viewport change\n */\n public readonly viewport = this.viewportService.readableViewport.asReadonly()\n\n /**\n * Signal for reading nodes change\n */\n public readonly nodesChange =\n toSignal(this.nodesChangeService.changes$, { initialValue: [] as NodeChange[] })\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange =\n toSignal(this.edgesChangeService.changes$, { initialValue: [] as EdgeChange[] })\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport)\n .pipe(skip(1)) // skip default value that set by signal\n\n /**\n * Observable with nodes change\n */\n public readonly nodesChange$ = this.nodesChangeService.changes$\n\n /**\n * Observable with edges change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$\n // #endregion\n\n protected markers = this.flowEntitiesService.markers\n\n protected minimap = this.flowEntitiesService.minimap\n\n public ngOnInit(): void {\n this.setInitialNodesOrder()\n }\n\n // #region METHODS_API\n /**\n * Change viewport to specified state\n *\n * @param viewport viewport state\n */\n public viewportTo(viewport: ViewportState): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: viewport, duration: 0 })\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: { zoom }, duration: 0 })\n }\n\n /**\n * Move to specified coordinate\n *\n * @param point point where to move\n */\n public panTo(point: Point): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: point, duration: 0 })\n }\n\n public fitView(options?: FitViewOptions) {\n this.viewportService.fitView(options)\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.node\n }\n\n /**\n * Sync method to get detached edges\n */\n public getDetachedEdges(): Edge[] {\n return this.flowEntitiesService.getDetachedEdges().map(e => e.edge)\n }\n\n /**\n * Convert point received from document to point on the flow\n */\n public documentPointToFlowPoint(point: Point): Point {\n return this.spacePointContext.documentPointToFlowPoint(point)\n }\n // #endregion\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge\n }\n\n private setInitialNodesOrder() {\n if (this.optimization.computeLayersOnInit) {\n\n this.nodeModels().forEach(model => {\n switch (model.node.type) {\n case 'default-group':\n case 'template-group': {\n this.nodeRenderingService.pullNode(model)\n }\n }\n })\n }\n }\n}\n\n","<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g background />\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n <!-- Minimap -->\n <ng-container *ngIf=\"minimap() as minimap\">\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n </ng-container>\n</svg:svg>\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { SelectionService } from '../services/selection.service';\nimport { EdgeComponent } from '../components/edge/edge.component';\n\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { NodeComponent } from '../components/node/node.component';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({ selector: '[selectable]' })\nexport class SelectableDirective {\n private flowSettingsService = inject(FlowSettingsService)\n private selectionService = inject(SelectionService)\n private parentEdge = inject(EdgeComponent, { optional: true })\n private parentNode = inject(NodeComponent, { optional: true })\n\n @HostListener('mousedown')\n @HostListener('touchstart')\n protected onMousedown() {\n const entity = this.entity()\n if (entity && this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(entity)\n }\n }\n\n private entity(): FlowEntity | null {\n if (this.parentNode) {\n return this.parentNode.nodeModel\n } else if (this.parentEdge) {\n return this.parentEdge.model\n }\n\n return null\n }\n}\n","import { signal, TemplateRef } from \"@angular/core\";\n\nexport class MinimapModel {\n public template = signal<TemplateRef<unknown> | null>(null)\n}\n","import { Component, computed, inject, Injector, Input, OnInit, signal, TemplateRef, ViewChild } from '@angular/core';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { MinimapModel } from '../../models/minimap.model';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { getViewportForBounds } from '../../utils/viewport';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { ViewportService } from '../../services/viewport.service';\n\nexport type MiniMapPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\n@Component({\n selector: 'mini-map',\n templateUrl: './minimap.component.html',\n styleUrls: [`./minimap.component.scss`]\n})\nexport class MiniMapComponent implements OnInit {\n protected entitiesService = inject(FlowEntitiesService)\n protected flowSettingsService = inject(FlowSettingsService)\n protected viewportService = inject(ViewportService)\n protected injector = inject(Injector)\n\n /**\n * The corner of the flow where to render a mini-map\n */\n @Input()\n public set position(value: MiniMapPosition) {\n this.minimapPosition.set(value)\n }\n\n /**\n * The color outside the viewport (invisible area)\n */\n @Input()\n public maskColor = `rgba(215, 215, 215, 0.6)`\n\n /**\n * The minimap stroke color\n */\n @Input()\n public strokeColor = `rgb(200, 200, 200)`\n\n /**\n * Make a minimap bigger on hover\n */\n @Input()\n public set scaleOnHover(value: boolean) {\n this.scaleOnHoverSignal.set(value)\n }\n\n @ViewChild('minimap', { static: true })\n private minimap!: TemplateRef<unknown>\n\n private readonly minimapOffset = 10\n\n private readonly minimapScale = computed(() => {\n if (this.scaleOnHoverSignal()) {\n return this.hovered() ? 0.4 : 0.2\n }\n\n return 0.2\n })\n\n protected viewportColor = computed(() => this.flowSettingsService.background().color ?? '#fff')\n\n protected hovered = signal(false)\n\n protected minimapPoint = computed(() => {\n switch (this.minimapPosition()) {\n case 'top-left':\n return { x: this.minimapOffset, y: this.minimapOffset }\n case 'top-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.minimapOffset\n }\n case 'bottom-left':\n return {\n x: this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset\n }\n case 'bottom-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset\n }\n }\n })\n\n protected minimapWidth = computed(() =>\n this.flowSettingsService.computedFlowWidth() * this.minimapScale()\n )\n protected minimapHeight = computed(() =>\n this.flowSettingsService.computedFlowHeight() * this.minimapScale()\n )\n\n protected viewportTransform = computed(() => {\n const viewport = this.viewportService.readableViewport();\n let scale = 1 / viewport.zoom\n\n let x = -(viewport.x * this.minimapScale()) * scale\n x /= this.minimapScale()\n\n let y = -(viewport.y * this.minimapScale()) * scale\n y /= this.minimapScale()\n\n scale /= this.minimapScale()\n\n return `translate(${x}, ${y}) scale(${scale})`;\n });\n\n\n protected boundsViewport = computed(() => {\n const nodes = this.entitiesService.nodes()\n\n return getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n -Infinity,\n 1.5,\n 0\n )\n\n })\n\n protected minimapTransform = computed(() => {\n const vport = this.boundsViewport()\n\n const x = vport.x * this.minimapScale()\n const y = vport.y * this.minimapScale()\n const scale = vport.zoom * this.minimapScale()\n\n return `translate(${x} ${y}) scale(${scale})`\n })\n\n private minimapPosition = signal<MiniMapPosition>('bottom-right')\n\n private scaleOnHoverSignal = signal(false)\n\n public ngOnInit(): void {\n const model = new MinimapModel()\n model.template.set(this.minimap)\n\n this.entitiesService.minimap.set(model)\n }\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node\n }\n}\n","<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n","import { KeyValuePipe, NgComponentOutlet, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VflowComponent } from './components/vflow/vflow.component';\nimport { NodeComponent } from './components/node/node.component';\nimport { MapContextDirective } from './directives/map-context.directive';\nimport { EdgeComponent } from './components/edge/edge.component';\nimport { EdgeLabelComponent } from './components/edge-label/edge-label.component';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from './directives/template.directive';\nimport { ConnectionComponent } from './components/connection/connection.component';\nimport { SpacePointContextDirective } from './directives/space-point-context.directive';\nimport { RootSvgReferenceDirective } from './directives/reference.directive';\nimport { RootSvgContextDirective } from './directives/root-svg-context.directive';\nimport { DefsComponent } from './components/defs/defs.component';\nimport { HandleComponent } from './components/handle/handle.component';\nimport { HandleSizeControllerDirective } from './directives/handle-size-controller.directive';\nimport { SelectableDirective } from './directives/selectable.directive';\nimport { PointerDirective } from './directives/pointer.directive';\nimport { RootPointerDirective } from './directives/root-pointer.directive';\nimport { BackgroundComponent } from './components/background/background.component';\nimport { FlowSizeControllerDirective } from './directives/flow-size-controller.directive';\nimport { ResizableComponent } from './public-components/resizable/resizable.component';\nimport { MiniMapComponent } from './public-components/minimap/minimap.component';\nimport { DefaultNodeComponent } from './components/default-node/default-node.component';\n\nconst components = [\n VflowComponent,\n NodeComponent,\n DefaultNodeComponent,\n EdgeComponent,\n EdgeLabelComponent,\n ConnectionComponent,\n HandleComponent,\n DefsComponent,\n BackgroundComponent,\n ResizableComponent,\n MiniMapComponent\n]\n\nconst directives = [\n SpacePointContextDirective,\n MapContextDirective,\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n HandleSizeControllerDirective,\n SelectableDirective,\n PointerDirective,\n RootPointerDirective,\n FlowSizeControllerDirective,\n]\n\nconst templateDirectives = [\n NodeHtmlTemplateDirective,\n GroupNodeTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective\n]\n\n@NgModule({\n imports: [NgIf, NgFor, NgTemplateOutlet, NgComponentOutlet, KeyValuePipe],\n exports: [\n VflowComponent,\n HandleComponent,\n ResizableComponent,\n SelectableDirective,\n MiniMapComponent,\n ...templateDirectives\n ],\n declarations: [...components, ...directives, ...templateDirectives],\n})\nexport class VflowModule { }\n","// Modules\nexport * from './lib/vflow/vflow.module';\n\n// Interfaces\nexport * from './lib/vflow/interfaces/node.interface';\nexport * from './lib/vflow/interfaces/point.interface';\nexport * from './lib/vflow/interfaces/edge.interface';\nexport * from './lib/vflow/interfaces/edge-label.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection-settings.interface';\nexport * from './lib/vflow/interfaces/handle-positions.interface';\nexport * from './lib/vflow/interfaces/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\nexport * from './lib/vflow/interfaces/component-node-event.interface';\nexport * from './lib/vflow/interfaces/fit-view-options.interface';\nexport * from './lib/vflow/interfaces/optimization.interface';\n\n// Types\nexport * from './lib/vflow/types/node-change.type';\nexport * from './lib/vflow/types/edge-change.type';\nexport * from './lib/vflow/types/position.type';\nexport * from './lib/vflow/types/background.type';\nexport * from './lib/vflow/types/connection-mode.type';\nexport * from './lib/vflow/types/keyboard-action.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/components/handle/handle.component';\nexport * from './lib/vflow/public-components/custom-node/custom-node.component';\nexport * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component';\nexport * from './lib/vflow/public-components/resizable/resizable.component';\nexport * from './lib/vflow/public-components/minimap/minimap.component'\n\n// Directives\nexport * from './lib/vflow/directives/template.directive';\nexport * from './lib/vflow/directives/connection-controller.directive';\nexport * from './lib/vflow/directives/changes-controller.directive';\nexport * from './lib/vflow/directives/selectable.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PointerDirective","i2.DefaultNodeComponent","i3.HandleComponent","i4.ResizableComponent","i5.HandleSizeControllerDirective","i6.PointerDirective","i2.EdgeLabelComponent","i3","i4.NodeComponent","i5.EdgeComponent","i6.ConnectionComponent","i7.DefsComponent","i8.BackgroundComponent","i9.SpacePointContextDirective","i10.MapContextDirective","i11.RootSvgReferenceDirective","i12.RootSvgContextDirective","i13.RootPointerDirective","i14.FlowSizeControllerDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/utils/nodes.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/connection.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/hash.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-entities.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/viewport.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-settings.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/viewport.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-defined.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/reference.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-os.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/keyboard.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/selection.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/map-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/round.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/draggable.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/template.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/add-nodes-to-edges.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/adjust-direction.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/component-event-bus.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/custom-node-base/custom-node-base.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-node/custom-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/node.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/node.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge-label.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/point-on-line-by-ratio.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/straigh-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/bezier-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/reference-keeper.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/changes-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/transform-background.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/microtask.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/overlays.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/resizable.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/run-in-injection-context.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-accessor.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/handle-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/id.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/flow-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/selectable.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/minimap.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/toolbar.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/node-toolbar/node-toolbar.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/drag-handle.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.module.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/testing-utils/provide-custom-node-mocks.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Box } from \"../interfaces/box\";\nimport { Rect } from \"../interfaces/rect\";\nimport { NodeModel } from \"../models/node.model\";\n\nexport function getNodesBounds(nodes: NodeModel[]): Rect {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 }\n }\n\n let box: Box = { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity }\n\n nodes.forEach(node => {\n const nodeBox = nodeToBox(node)\n box = getBoundsOfBoxes(box, nodeBox)\n })\n\n return boxToRect(box)\n}\n\nfunction nodeToBox(node: NodeModel): Box {\n return {\n x: node.point().x,\n y: node.point().y,\n x2: node.point().x + node.size().width,\n y2: node.point().y + node.size().height,\n }\n}\n\nfunction boxToRect({ x, y, x2, y2 }: Box): Rect {\n return {\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n }\n}\n\nfunction getBoundsOfBoxes(box1: Box, box2: Box): Box {\n return {\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n }\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from \"../interfaces/connection-settings.interface\";\nimport { Connection } from \"../interfaces/connection.interface\";\nimport { Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { ConnectionMode } from \"../types/connection-mode.type\";\n\nexport class ConnectionModel {\n public curve: Curve\n public type: EdgeType\n public validator: ConnectionValidatorFn\n public mode: ConnectionMode\n\n constructor(public settings: ConnectionSettings) {\n this.curve = settings.curve ?? 'bezier'\n this.type = settings.type ?? 'default'\n this.mode = settings.mode ?? 'strict'\n\n const validatorsToRun = this.getValidators(settings)\n this.validator = (connection) => validatorsToRun.every((v) => v(connection))\n }\n\n private getValidators(settings: ConnectionSettings) {\n const validators = []\n\n validators.push(notSelfValidator)\n\n if (this.mode === 'loose') {\n validators.push(hasSourceAndTargetHandleValidator)\n }\n\n if (settings.validator) {\n validators.push(settings.validator)\n }\n\n return validators;\n }\n}\n\n/**\n * Internal validator that not allows self connections\n */\nconst notSelfValidator = (connection: Connection) => {\n return connection.source !== connection.target\n}\n\nconst hasSourceAndTargetHandleValidator = (connection: Connection) => {\n return connection.sourceHandle !== undefined && connection.targetHandle !== undefined\n}\n","export function hashCode(str: string): number {\n return str.split('').reduce((a, b) => {\n a = ((a << 5) - a) + b.charCodeAt(0)\n\n return a & a\n }, 0)\n}\n","import { Injectable, Signal, WritableSignal, computed, effect, signal, untracked } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { EdgeModel } from '../models/edge.model';\nimport { ConnectionModel } from '../models/connection.model';\nimport { Marker } from '../interfaces/marker.interface';\nimport { hashCode } from '../utils/hash';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { MinimapModel } from '../models/minimap.model';\n\n@Injectable()\nexport class FlowEntitiesService {\n public readonly nodes = signal<NodeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly edges = signal<EdgeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly validEdges = computed(() => {\n const nodes = this.nodes()\n\n return this.edges().filter(e => nodes.includes(e.source()!) && nodes.includes(e.target()!))\n })\n\n public readonly connection = signal<ConnectionModel>(new ConnectionModel({}))\n\n public readonly markers = computed(() => {\n const markersMap = new Map<number, Marker>()\n\n this.validEdges().forEach(e => {\n if (e.edge.markers?.start) {\n const hash = hashCode(JSON.stringify(e.edge.markers.start))\n markersMap.set(hash, e.edge.markers.start)\n }\n\n if (e.edge.markers?.end) {\n const hash = hashCode(JSON.stringify(e.edge.markers.end))\n markersMap.set(hash, e.edge.markers.end)\n }\n })\n\n const connectionMarker = this.connection().settings.marker\n if (connectionMarker) {\n const hash = hashCode(JSON.stringify(connectionMarker))\n markersMap.set(hash, connectionMarker)\n }\n\n return markersMap\n })\n\n public entities: Signal<FlowEntity[]> = computed(() => [\n ...this.nodes(),\n ...this.edges()\n ])\n\n public minimap: WritableSignal<MinimapModel | null> = signal(null)\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ node }) => node.id === id) as NodeModel<T> | undefined\n }\n\n public getDetachedEdges() {\n return this.edges().filter(e => e.detached())\n }\n}\n","import { Rect } from \"../interfaces/rect\";\nimport { ViewportState } from \"../interfaces/viewport.interface\";\n\nexport function getViewportForBounds(\n bounds: Rect,\n width: number,\n height: number,\n minZoom: number,\n maxZoom: number,\n padding: number\n): ViewportState {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n\n return { x, y, zoom: clampedZoom };\n\n}\n\nexport function clamp(value: number, min = 0, max = 1): number {\n return Math.min(Math.max(value, min), max)\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { HandlePositions } from '../interfaces/handle-positions.interface';\nimport { Background } from '../types/background.type';\n\n@Injectable()\nexport class FlowSettingsService {\n public entitiesSelectable = signal(true)\n\n /**\n * Global setting with handle positions. Nodes derive this value\n *\n * @deprecated\n */\n public handlePositions: WritableSignal<HandlePositions> = signal({ source: 'right', target: 'left' })\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400])\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowWidth = signal(0)\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowHeight = signal(0)\n\n public minZoom = signal(0.5)\n\n public maxZoom = signal(3)\n\n public background = signal<Background>({ type: 'solid', color: '#fff' })\n}\n","import { Injectable, Signal, WritableSignal, inject, signal } from '@angular/core';\nimport { Point } from '../interfaces/point.interface';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\nimport { getNodesBounds } from '../utils/nodes';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { getViewportForBounds } from '../utils/viewport';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { FitViewOptions } from '../interfaces/fit-view-options.interface';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport class ViewportService {\n private entitiesService = inject(FlowEntitiesService)\n private flowSettingsService = inject(FlowSettingsService)\n\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState { return { zoom: 1, x: 0, y: 0 } }\n\n /**\n * Internal signal that accepts value from user by lib api\n * When this signal changes, lib sets new view state and update readableViewport signal\n */\n public readonly writableViewport: WritableSignal<WritableViewport> = signal({\n changeType: 'initial',\n state: ViewportService.getDefaultViewport(),\n duration: 0\n })\n\n /**\n * Public signal with viewport state. User can directly read from this signal. It's updated by:\n * - user events on flow\n * - writableViewport signal\n */\n public readonly readableViewport: WritableSignal<ViewportState> = signal(ViewportService.getDefaultViewport())\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n\n public fitView(options: FitViewOptions = { padding: .1, duration: 0, nodes: [] }) {\n const nodes = this.getBoundsNodes(options.nodes ?? [])\n\n const state = getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n this.flowSettingsService.minZoom(),\n this.flowSettingsService.maxZoom(),\n options.padding ?? .1\n )\n\n const duration = options.duration ?? 0\n\n this.writableViewport.set({ changeType: 'absolute', state, duration })\n }\n\n private getBoundsNodes(nodeIds: string[]) {\n return !nodeIds?.length\n // If nodes option not passed or the list is empty, then get fit the whole view\n ? this.entitiesService.nodes()\n // Otherwise fit to specific nodes\n : nodeIds\n .map(nodeId => this.entitiesService.nodes().find(({ node }) => node.id === nodeId))\n .filter((node): node is NodeModel => !!node)\n }\n}\n","export function isDefined<T>(data: T | undefined): data is T {\n return data !== undefined\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'svg[rootSvgRef]'\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n}\n","export function getOS() {\n const userAgent = window.navigator.userAgent.toLowerCase()\n const macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i\n const windowsPlatforms = /(win32|win64|windows|wince)/i\n const iosPlatforms = /(iphone|ipad|ipod)/i\n\n let os = null\n\n if (macosPlatforms.test(userAgent)) {\n os = \"macos\" as const;\n } else if (iosPlatforms.test(userAgent)) {\n os = \"ios\" as const;\n } else if (windowsPlatforms.test(userAgent)) {\n os = \"windows\" as const;\n } else if (/android/.test(userAgent)) {\n os = \"android\" as const;\n } else if (!os && /linux/.test(userAgent)) {\n os = \"linux\" as const;\n }\n\n return os\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { KeyboardAction, KeyboardShortcuts } from '../types/keyboard-action.type';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge, switchMap, tap } from 'rxjs';\nimport { getOS } from '../utils/get-os';\n\n@Injectable()\nexport class KeyboardService {\n private actions: WritableSignal<KeyboardShortcuts> = signal({\n multiSelection: [\n getOS() === 'macos' ? 'MetaLeft' : 'ControlLeft',\n getOS() === 'macos' ? 'MetaRight' : 'ControlRight',\n ]\n });\n\n private actionsActive: Record<KeyboardAction, boolean> = {\n multiSelection: false\n };\n\n constructor() {\n toObservable(this.actions).pipe(\n switchMap(() =>\n merge(\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n tap(event => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = true;\n }\n }\n })\n ),\n\n fromEvent<KeyboardEvent>(document, 'keyup').pipe(\n tap(event => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = false;\n }\n }\n })\n )\n )\n ),\n takeUntilDestroyed()\n ).subscribe();\n }\n\n public setShortcuts(newActions: KeyboardShortcuts) {\n this.actions.update((actions) => ({ ...actions, ...newActions }));\n }\n\n public isActiveAction(action: KeyboardAction) {\n return this.actionsActive[action]\n }\n}\n","import { Injectable, effect, inject, signal, untracked } from '@angular/core';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Subject, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardService } from './keyboard.service';\n\nexport interface ViewportForSelection {\n start: ViewportState\n end: ViewportState\n /**\n * Target may not exist if viewport change made programmatically\n */\n target?: Element\n}\n\n@Injectable()\nexport class SelectionService {\n private static delta = 6\n\n private flowEntitiesService = inject(FlowEntitiesService)\n private keyboardService = inject(KeyboardService);\n\n protected viewport$ = new Subject<ViewportForSelection>()\n\n protected resetSelection = this.viewport$.pipe(\n tap(({ start, end, target }) => {\n if (start && end && target) {\n const delta = SelectionService.delta\n\n const diffX = Math.abs(end.x - start.x)\n const diffY = Math.abs(end.y - start.y)\n\n // click (not drag)\n const isClick = diffX < delta && diffY < delta\n // do not reset if event chain contains selectable elems\n const isNotSelectable = !target.closest('.selectable')\n\n if (isClick && isNotSelectable) {\n this.select(null)\n }\n }\n }),\n takeUntilDestroyed()\n ).subscribe()\n\n\n public setViewport(viewport: ViewportForSelection) {\n this.viewport$.next(viewport)\n }\n\n public select(entity: FlowEntity | null) {\n // ? May be not a responsibility of this method\n // if entity already selected - do nothing\n if (entity?.selected()) {\n return\n }\n\n if (!this.keyboardService.isActiveAction('multiSelection')) {\n // undo select for previously selected nodes\n this.flowEntitiesService.entities().forEach(n => n.selected.set(false))\n }\n\n if (entity) {\n // select passed entity\n entity.selected.set(true)\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, effect, inject, untracked } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, ZoomTransform, zoom, zoomIdentity } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { SelectionService, ViewportForSelection } from '../services/selection.service';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({ selector: 'g[mapContext]' })\nexport class MapContextDirective implements OnInit {\n protected rootSvg = inject(RootSvgReferenceDirective).element\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n protected selectionService = inject(SelectionService)\n protected viewportService = inject(ViewportService)\n protected flowSettingsService = inject(FlowSettingsService);\n\n protected rootSvgSelection = select(this.rootSvg)\n protected zoomableSelection = select(this.host)\n\n protected viewportForSelection: Partial<ViewportForSelection> = {}\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n protected manualViewportChangeEffect = effect(() => {\n const viewport = this.viewportService.writableViewport()\n const state = viewport.state\n\n if (viewport.changeType === 'initial') {\n return\n }\n\n // If only zoom provided\n if (isDefined(state.zoom) && (!isDefined(state.x) && !isDefined(state.y))) {\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(this.zoomBehavior.scaleTo, state.zoom)\n\n return\n }\n\n // If only pan provided\n if ((isDefined(state.x) && isDefined(state.y)) && !isDefined(state.zoom)) {\n // remain same zoom value\n const zoom = untracked(this.viewportService.readableViewport).zoom\n\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(\n this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(zoom)\n )\n\n return\n }\n\n // If whole viewort state provided\n if (isDefined(state.x) && isDefined(state.y) && isDefined(state.zoom)) {\n this.rootSvgSelection\n .transition().duration(viewport.duration)\n .call(\n this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(state.zoom),\n )\n\n return\n }\n }, { allowSignalWrites: true })\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.flowSettingsService.minZoom(), this.flowSettingsService.maxZoom()])\n .filter(this.filterCondition)\n .on('start', this.handleZoomStart)\n .on('zoom', this.handleZoom)\n .on('end', this.handleZoomEnd)\n\n this.rootSvgSelection\n .call(this.zoomBehavior)\n .on('dblclick.zoom', null)\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set(mapTransformToViewportState(transform))\n\n this.zoomableSelection.attr('transform', transform.toString())\n }\n\n private handleZoomStart = ({ transform }: ZoomEvent) => {\n this.viewportForSelection = {\n start: mapTransformToViewportState(transform)\n }\n }\n\n private handleZoomEnd = ({ transform, sourceEvent }: ZoomEvent) => {\n this.viewportForSelection = {\n ...this.viewportForSelection,\n end: mapTransformToViewportState(transform),\n target: evTarget(sourceEvent)\n }\n\n this.selectionService.setViewport(\n this.viewportForSelection as ViewportForSelection\n )\n }\n\n private filterCondition = (event: Event) => {\n if (event.type === 'mousedown' || event.type === 'touchstart') {\n return (event.target as Element).closest('.vflow-node') === null\n }\n\n return true\n }\n}\n\nconst mapTransformToViewportState = (transform: ZoomTransform): ViewportState =>\n ({ zoom: transform.k, x: transform.x, y: transform.y })\n\nconst evTarget = (anyEvent: any): Element | undefined => {\n if (anyEvent instanceof Event && anyEvent.target instanceof Element) {\n return anyEvent.target\n }\n\n return undefined;\n}\n\ndeclare module 'd3-selection' {\n interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {\n transition(): Selection<GElement, Datum, PElement, PDatum>\n duration(duration: number): Selection<GElement, Datum, PElement, PDatum>\n }\n}\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>\n","export const round = (num: number) => Math.round(num * 100) / 100\n","import { Injectable, effect, inject } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3DragEvent, drag } from 'd3-drag';\nimport { NodeModel } from '../models/node.model';\nimport { round } from '../utils/round';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Point } from '../interfaces/point.interface';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>\n\n@Injectable()\nexport class DraggableService {\n private entitiesService = inject(FlowEntitiesService);\n\n /**\n * Enable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public enable(element: Element, model: NodeModel) {\n select(element)\n .call(this.getDragBehavior(model))\n }\n\n /**\n * Disable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public disable(element: Element) {\n select(element)\n .call(drag().on('drag', null))\n }\n\n /**\n * TODO: not shure if this work, need to check\n *\n * @param element\n */\n public destroy(element: Element) {\n select(element).on('.drag', null)\n }\n\n /**\n * Node drag behavior. Updated node's coordinate according to dragging\n *\n * @param model\n * @returns\n */\n private getDragBehavior(model: NodeModel) {\n let dragNodes: NodeModel[] = []\n let initialPositions: Point[] = []\n\n const filterCondition = (event: Event) => {\n // if there is at least one drag handle, we should check if we are dragging it\n if (model.dragHandlesCount()) {\n return !!(event.target as Element).closest('.vflow-drag-handle')\n }\n\n return true\n }\n\n return drag()\n .filter(filterCondition)\n .on('start', (event: DragEvent) => {\n dragNodes = this.getDragNodes(model)\n\n initialPositions = dragNodes.map(node => ({\n x: node.point().x - event.x,\n y: node.point().y - event.y\n }))\n })\n\n .on('drag', (event: DragEvent) => {\n dragNodes.forEach((model, index) => {\n let point = {\n x: round(event.x + initialPositions[index].x),\n y: round(event.y + initialPositions[index].y)\n }\n\n moveNode(model, point)\n })\n })\n }\n\n private getDragNodes(model: NodeModel) {\n return model.selected()\n ? this.entitiesService\n .nodes()\n // selected draggable nodes (with current node)\n .filter(node => node.selected() && node.draggable())\n // we only can move current node if it's not selected\n : [model]\n }\n\n\n}\n\nfunction moveNode(model: NodeModel, point: Point) {\n const parent = model.parent()\n // keep node in bounds of parent\n if (parent) {\n point.x = Math.min(parent.size().width - model.size().width, point.x)\n point.x = Math.max(0, point.x)\n\n point.y = Math.min(parent.size().height - model.size().height, point.y)\n point.y = Math.max(0, point.y)\n }\n\n model.setPoint(point, true)\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EdgeContext } from '../interfaces/template-context.interface';\n\n@Directive({ selector: 'ng-template[edge]' })\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[connection]' })\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[edgeLabelHtml]' })\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[nodeHtml]' })\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[groupNode]' })\nexport class GroupNodeTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[handle]' })\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n","import { EdgeModel } from \"../models/edge.model\"\nimport { NodeModel } from \"../models/node.model\"\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]) {\n const nodesById = nodes.reduce((acc, n) => {\n acc[n.node.id] = n\n\n return acc\n }, {} as { [nodeId: string]: NodeModel })\n\n edges.forEach(e => {\n e.source.set(nodesById[e.edge.source])\n e.target.set(nodesById[e.edge.target])\n })\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { ConnectionInternal } from '../interfaces/connection.internal.interface';\n\nexport interface FlowStatusIdle {\n state: 'idle',\n payload: null\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start',\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'>\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation',\n payload: ConnectionInternal & {\n valid: boolean\n }\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end',\n payload: ConnectionInternal\n}\n\nexport type FlowStatus =\n FlowStatusIdle |\n FlowStatusConnectionStart |\n FlowStatusConnectionValidation |\n FlowStatusConnectionEnd\n\n@Injectable()\nexport class FlowStatusService {\n public readonly status = signal<FlowStatus>({ state: 'idle', payload: null })\n\n public setIdleStatus() {\n this.status.set({ state: 'idle', payload: null })\n }\n\n public setConnectionStartStatus(source: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { source, sourceHandle } })\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n ) {\n this.status.set({ state: 'connection-validation', payload: { source, target, sourceHandle, targetHandle, valid } })\n }\n\n public setConnectionEndStatus(source: NodeModel, target: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel) {\n this.status.set({ state: 'connection-end', payload: { source, target, sourceHandle, targetHandle } })\n }\n}\n\n/**\n * Batch status changes together to call them one after another\n *\n * @param changes list of set[FlowStatus.state]Status() calls\n */\nexport function batchStatusChanges(...changes: Function[]) {\n if (changes.length) {\n const [firstChange, ...restChanges] = changes\n // first change is sync\n firstChange()\n // without timer, subscribed effects/comuted signals only get latest value\n restChanges.forEach(change => setTimeout(() => change()))\n }\n}\n","import { ConnectionInternal } from \"../interfaces/connection.internal.interface\";\n\n/**\n * This function contains a hack-y behavior.\n * If the handles are of the same type (source-source or target-target),\n * it returns nodes where source === target and\n * handles where sourceHandle === targetHandle\n *\n * This leads to that notSelfValidator returns false for these cases,\n * exactly what we need for strict connection type\n */\nexport function adjustDirection(connection: ConnectionInternal): ConnectionInternal {\n const result = {} as ConnectionInternal\n\n if (connection.sourceHandle.rawHandle.type === 'source') {\n result.source = connection.source\n result.sourceHandle = connection.sourceHandle\n } else {\n result.source = connection.target\n result.sourceHandle = connection.targetHandle\n }\n\n if (connection.targetHandle.rawHandle.type === 'target') {\n result.target = connection.target\n result.targetHandle = connection.targetHandle\n } else {\n result.target = connection.source\n result.targetHandle = connection.sourceHandle\n }\n\n return result\n}\n","import { Directive, EventEmitter, Output, computed, effect, inject } from '@angular/core';\nimport { Connection } from '../interfaces/connection.interface';\nimport { FlowStatusService, batchStatusChanges } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { HandleModel } from '../models/handle.model';\nimport { adjustDirection } from '../utils/adjust-direction';\n\n@Directive({\n selector: '[connectionController]',\n standalone: true\n})\nexport class ConnectionControllerDirective {\n /**\n * This event fires when user tries to create new Edge.\n *\n * `Connection` is an entity that contains data about source and target nodes.\n *\n * Also it's important to note, that this event only fires when connection is valid by validator function in `ConnectionSettings`,\n * by default without passing the validator every connection concidered valid.\n */\n @Output()\n public onConnect = new EventEmitter<Connection>()\n\n private statusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n\n protected connectEffect = effect(() => {\n const status = this.statusService.status()\n\n if (status.state === 'connection-end') {\n let source = status.payload.source\n let target = status.payload.target\n let sourceHandle = status.payload.sourceHandle\n let targetHandle = status.payload.targetHandle\n\n if (this.isStrictMode()) {\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: status.payload.target,\n targetHandle: status.payload.targetHandle\n })\n\n source = adjusted.source\n target = adjusted.target\n sourceHandle = adjusted.sourceHandle\n targetHandle = adjusted.targetHandle\n }\n\n const sourceId = source.node.id\n const targetId = target.node.id\n\n const sourceHandleId = sourceHandle.rawHandle.id\n const targetHandleId = targetHandle.rawHandle.id\n\n const connectionModel = this.flowEntitiesService.connection()\n const connection = {\n source: sourceId, target: targetId,\n sourceHandle: sourceHandleId, targetHandle: targetHandleId\n }\n\n if (connectionModel.validator(connection)) {\n this.onConnect.emit(connection)\n }\n }\n }, { allowSignalWrites: true })\n\n protected isStrictMode = computed(() =>\n this.flowEntitiesService.connection().mode === 'strict'\n )\n\n public startConnection(handle: HandleModel) {\n this.statusService.setConnectionStartStatus(handle.parentNode, handle)\n }\n\n public validateConnection(handle: HandleModel) {\n const status = this.statusService.status()\n\n if (status.state === 'connection-start') {\n let source = status.payload.source\n let target = handle.parentNode\n let sourceHandle = status.payload.sourceHandle\n let targetHandle = handle\n\n if (this.isStrictMode()) {\n // swap direction (if needed) according to actual source and target of strict mode\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: handle.parentNode,\n targetHandle: handle\n })\n\n source = adjusted.source\n target = adjusted.target\n sourceHandle = adjusted.sourceHandle\n targetHandle = adjusted.targetHandle\n }\n\n const valid = this.flowEntitiesService.connection().validator({\n source: source.node.id,\n target: target.node.id,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id\n })\n\n // TODO: check how react flow handles highlight of handle\n // if direction changes\n handle.state.set(valid ? 'valid' : 'invalid')\n\n // status is about how we draw connection, so we don't need\n // swapped diretion here\n this.statusService.setConnectionValidationStatus(\n valid,\n status.payload.source, handle.parentNode,\n status.payload.sourceHandle, handle\n )\n }\n }\n\n public resetValidateConnection(targetHandle: HandleModel) {\n targetHandle.state.set('idle')\n\n // drop back to start status\n const status = this.statusService.status()\n if (status.state === 'connection-validation') {\n this.statusService.setConnectionStartStatus(\n status.payload.source,\n status.payload.sourceHandle\n )\n }\n }\n\n public endConnection(handle: HandleModel) {\n const status = this.statusService.status()\n\n if (status.state === 'connection-validation') {\n const source = status.payload.source\n const sourceHandle = status.payload.sourceHandle\n const target = status.payload.target\n const targetHandle = status.payload.targetHandle\n\n batchStatusChanges(\n // call to create connection\n () => this.statusService.setConnectionEndStatus(source!, target!, sourceHandle!, targetHandle!),\n // when connection created, we need go back to idle status\n () => this.statusService.setIdleStatus()\n )\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AnyComponentNodeEvent } from '../interfaces/component-node-event.interface';\n\n@Injectable()\nexport class ComponentEventBusService {\n private _event$ = new Subject<AnyComponentNodeEvent>()\n\n public event$ = this._event$.asObservable()\n\n public pushEvent(event: AnyComponentNodeEvent) {\n this._event$.next(event)\n }\n}\n","import { DestroyRef, Directive, EventEmitter, Input, OnInit, inject, signal } from \"@angular/core\"\nimport { merge, of, tap } from \"rxjs\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { ComponentEventBusService } from \"../../services/component-event-bus.service\";\nimport { ComponentDynamicNode, ComponentNode } from \"../../interfaces/node.interface\";\n\n@Directive()\nexport abstract class CustomNodeBaseComponent<T = unknown> implements OnInit {\n private eventBus = inject(ComponentEventBusService)\n\n protected destroyRef = inject(DestroyRef)\n\n /**\n * Reference to node bound to this component\n */\n protected node!: ComponentNode | ComponentDynamicNode\n\n @Input()\n public set _selected(value: boolean) {\n this.selected.set(value)\n }\n\n /**\n * Signal with selected state of node\n */\n public selected = signal(false)\n\n public data = signal<T | undefined>(undefined)\n\n public ngOnInit(): void {\n this.trackEvents()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe()\n }\n\n private trackEvents() {\n const props = Object.getOwnPropertyNames(this)\n\n const emitters = new Map<EventEmitter<unknown>, string>()\n for (const prop of props) {\n const field = (this as Record<string, unknown>)[prop]\n\n if (field instanceof EventEmitter) {\n emitters.set(field, prop)\n }\n }\n\n return merge(\n ...Array.from(emitters.keys()).map(emitter =>\n emitter.pipe(\n tap((event) => {\n this.eventBus.pushEvent({\n nodeId: this.node.id,\n eventName: emitters.get(emitter)!,\n eventPayload: event\n })\n }))\n )\n )\n };\n}\n\n","import { Directive, Input, OnInit } from \"@angular/core\"\nimport { ComponentNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from \"../../components/custom-node-base/custom-node-base.component\";\n\n@Directive()\nexport abstract class CustomNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n @Input()\n public override node!: ComponentNode<T>\n\n public override ngOnInit(): void {\n if (this.node.data) {\n this.data.set(this.node.data)\n }\n\n super.ngOnInit()\n }\n}\n\n","import { Directive, Input, OnInit } from \"@angular/core\"\nimport { ComponentDynamicNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from \"../../components/custom-node-base/custom-node-base.component\";\n\n@Directive()\nexport abstract class CustomDynamicNodeComponent<T = unknown> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n @Input()\n public override node!: ComponentDynamicNode<T>\n\n public override ngOnInit(): void {\n if (this.node.data) {\n this.data = this.node.data\n }\n\n super.ngOnInit()\n }\n}\n\n","import { Type, WritableSignal } from \"@angular/core\"\nimport { Point } from \"./point.interface\"\nimport { CustomNodeComponent } from \"../public-components/custom-node/custom-node.component\"\nimport { CustomDynamicNodeComponent } from \"../public-components/custom-dynamic-node/custom-dynamic-node.component\"\n\nexport type Node<T = unknown> =\n DefaultNode |\n HtmlTemplateNode<T> |\n ComponentNode<T> |\n DefaultGroupNode |\n TemplateGroupNode<T>\n\nexport type DynamicNode<T = unknown> =\n DefaultDynamicNode |\n HtmlTemplateDynamicNode<T> |\n ComponentDynamicNode<T> |\n DefaultDynamicGroupNode |\n TemplateDynamicGroupNode<T>\n\nexport interface SharedNode {\n id: string\n point: Point\n draggable?: boolean\n parentId?: string | null\n}\n\nexport interface SharedDynamicNode {\n id: string;\n point: WritableSignal<Point>\n draggable?: WritableSignal<boolean>\n parentId?: WritableSignal<string | null>\n}\n\nexport interface DefaultNode extends SharedNode {\n type: 'default'\n text?: string\n width?: number\n height?: number\n}\n\nexport interface DefaultDynamicNode extends SharedDynamicNode {\n type: 'default'\n text?: WritableSignal<string>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport interface HtmlTemplateNode<T = unknown> extends SharedNode {\n type: 'html-template'\n data?: T\n width?: number\n height?: number\n}\n\nexport interface HtmlTemplateDynamicNode<T = unknown> extends SharedDynamicNode {\n type: 'html-template'\n data?: WritableSignal<T>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport interface DefaultGroupNode extends SharedNode {\n type: 'default-group'\n width: number\n height: number\n color?: string\n resizable?: boolean\n}\n\nexport interface DefaultDynamicGroupNode extends SharedDynamicNode {\n type: 'default-group'\n width: WritableSignal<number>\n height: WritableSignal<number>\n color?: WritableSignal<string>\n resizable?: WritableSignal<boolean>\n}\n\nexport interface TemplateGroupNode<T> extends SharedNode {\n type: 'template-group'\n width: number\n height: number\n data?: T\n}\n\nexport interface TemplateDynamicGroupNode<T> extends SharedDynamicNode {\n type: 'template-group'\n width: WritableSignal<number>\n height: WritableSignal<number>\n data?: WritableSignal<T>\n}\n\nexport interface ComponentNode<T = unknown> extends SharedNode {\n type: Type<CustomNodeComponent<T>>\n data?: T\n width?: number\n height?: number\n}\n\nexport interface ComponentDynamicNode<T = unknown> extends SharedDynamicNode {\n type: Type<CustomDynamicNodeComponent<T>>\n data?: WritableSignal<T>\n width?: WritableSignal<number>\n height?: WritableSignal<number>\n}\n\nexport function isStaticNode<T>(node: Node | DynamicNode): node is Node<T> {\n return typeof node.point !== 'function'\n}\n\nexport function isDynamicNode<T>(node: Node | DynamicNode): node is DynamicNode<T> {\n return typeof node.point === 'function'\n}\n\nexport function isComponentStaticNode<T>(node: Node): node is ComponentNode<T> {\n return CustomNodeComponent.isPrototypeOf(node.type)\n}\n\nexport function isComponentDynamicNode<T>(node: DynamicNode): node is ComponentDynamicNode<T> {\n return CustomDynamicNodeComponent.isPrototypeOf(node.type)\n}\n\nexport function isTemplateStaticNode<T>(node: Node): node is HtmlTemplateNode<T> {\n return node.type === 'html-template'\n}\n\nexport function isTemplateDynamicNode<T>(node: DynamicNode): node is HtmlTemplateDynamicNode<T> {\n return node.type === 'html-template'\n}\n\nexport function isDefaultStaticNode(node: Node): node is DefaultNode {\n return node.type === 'default'\n}\n\nexport function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode {\n return node.type === 'default'\n}\n\nexport function isDefaultStaticGroupNode(node: Node): node is DefaultGroupNode {\n return node.type === 'default-group'\n}\n\nexport function isDefaultDynamicGroupNode(node: DynamicNode): node is DefaultDynamicGroupNode {\n return node.type === 'default-group'\n}\n\nexport function isTemplateStaticGroupNode<T>(node: Node): node is TemplateGroupNode<T> {\n return node.type === 'template-group'\n}\n\nexport function isTemplateDynamicGroupNode<T>(node: DynamicNode): node is TemplateDynamicGroupNode<T> {\n return node.type === 'template-group'\n}\n","import { Signal, TemplateRef, computed, effect, inject, signal } from '@angular/core'\nimport { DynamicNode, Node, isDynamicNode } from '../interfaces/node.interface'\nimport { isDefined } from '../utils/is-defined'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { HandleModel } from './handle.model'\nimport { FlowEntity } from '../interfaces/flow-entity.interface'\nimport { FlowSettingsService } from '../services/flow-settings.service'\nimport { animationFrameScheduler, merge, observeOn, Subject, } from 'rxjs'\nimport { Point } from '../interfaces/point.interface'\nimport { CustomNodeComponent } from '../public-components/custom-node/custom-node.component'\nimport { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component'\nimport { FlowEntitiesService } from '../services/flow-entities.service'\n\n// TODO bad naming around points\nexport class NodeModel<T = unknown> implements FlowEntity {\n private static defaultWidth = 100\n private static defaultHeight = 50\n private static defaultColor = '#1b262c'\n\n private flowSettingsService = inject(FlowSettingsService)\n private entitiesService = inject(FlowEntitiesService);\n\n private internalPoint = this.createInternalPointSignal()\n\n private throttledPoint$ = toObservable(this.internalPoint).pipe(\n observeOn(animationFrameScheduler)\n )\n\n private notThrottledPoint$ = new Subject<Point>()\n\n public point = toSignal(\n merge(this.throttledPoint$, this.notThrottledPoint$),\n {\n initialValue: this.internalPoint()\n }\n )\n\n public point$ = this.throttledPoint$;\n\n public size = signal({ width: 0, height: 0 })\n public size$ = toObservable(this.size)\n\n public width = computed(() => this.size().width)\n public height = computed(() => this.size().height)\n\n public renderOrder = signal(0)\n\n public selected = signal(false)\n public selected$ = toObservable(this.selected)\n\n public globalPoint = computed(() => {\n let parent = this.parent()\n let x = this.point().x\n let y = this.point().y\n\n while (parent !== null) {\n x += parent.point().x\n y += parent.point().y\n\n parent = parent.parent()\n }\n\n return { x, y }\n })\n\n public pointTransform = computed(() =>\n `translate(${this.globalPoint().x}, ${this.globalPoint().y})`\n )\n\n // Now source and handle positions derived from parent flow\n public sourcePosition = computed(() => this.flowSettingsService.handlePositions().source)\n public targetPosition = computed(() => this.flowSettingsService.handlePositions().target)\n\n public handles = signal<HandleModel[]>([])\n\n public handles$ = toObservable(this.handles)\n\n public draggable = signal(true)\n\n public dragHandlesCount = signal(0)\n\n // disabled for configuration for now\n public readonly magnetRadius = 20\n\n // TODO: not sure if we need to statically store it\n public isComponentType =\n CustomNodeComponent.isPrototypeOf(this.node.type) ||\n CustomDynamicNodeComponent.isPrototypeOf(this.node.type)\n\n // Default node specific thing\n public text = this.createTextSignal()\n\n // Component node specific thing\n public componentTypeInputs = computed(() => {\n return {\n node: this.node,\n _selected: this.selected()\n }\n })\n\n public parent = computed(() =>\n this.entitiesService.nodes().find(n => n.node.id === this.parentId()) ?? null\n )\n\n public children = computed(() =>\n this.entitiesService.nodes().filter(n => n.parentId() === this.node.id)\n )\n\n public color = signal(NodeModel.defaultColor)\n\n public resizable = signal(false)\n public resizing = signal(false)\n public resizerTemplate = signal<TemplateRef<unknown> | null>(null)\n\n private parentId = signal<string | null>(null)\n\n constructor(\n public node: Node<T> | DynamicNode<T>\n ) {\n if (isDefined(node.draggable)) {\n if (isDynamicNode(node)) {\n this.draggable = node.draggable\n } else {\n this.draggable.set(node.draggable)\n }\n }\n\n if (isDefined(node.parentId)) {\n if (isDynamicNode(node)) {\n this.parentId = node.parentId\n } else {\n this.parentId.set(node.parentId)\n }\n }\n\n if (node.type === 'default-group' && node.color) {\n if (isDynamicNode(node)) {\n this.color = node.color\n } else {\n this.color.set(node.color)\n }\n }\n\n if (node.type === 'default-group' && node.resizable) {\n if (isDynamicNode(node)) {\n this.resizable = node.resizable\n } else {\n this.resizable.set(node.resizable)\n }\n }\n }\n\n public setPoint(point: Point, throttle: boolean) {\n if (throttle) {\n this.internalPoint.set(point);\n } else {\n this.notThrottledPoint$.next(point)\n }\n }\n\n /**\n * TODO find the way to implement this better\n */\n public linkDefaultNodeSizeWithModelSize() {\n const node = this.node\n\n switch (node.type) {\n case 'default':\n case 'default-group':\n case 'template-group': {\n if (isDynamicNode(node)) {\n effect(() => {\n this.size.set({\n width: node.width?.() ?? NodeModel.defaultWidth,\n height: node.height?.() ?? NodeModel.defaultHeight,\n })\n }, { allowSignalWrites: true })\n } else {\n this.size.set({\n width: node.width ?? NodeModel.defaultWidth,\n height: node.height ?? NodeModel.defaultHeight\n })\n }\n }\n }\n\n if (node.type === 'html-template' || this.isComponentType) {\n if (isDynamicNode(node)) {\n effect(() => {\n if (node.width && node.height) {\n this.size.set({\n width: node.width(),\n height: node.height(),\n })\n }\n }, { allowSignalWrites: true })\n } else {\n if (node.width && node.height) {\n this.size.set({ width: node.width, height: node.height })\n }\n }\n }\n }\n\n private createTextSignal(): Signal<string> {\n const node = this.node\n\n if (node.type === 'default') {\n if (isDynamicNode(node)) {\n return node.text ?? signal('')\n } else {\n return signal(node.text ?? '')\n }\n }\n\n return signal('')\n }\n\n private createInternalPointSignal() {\n return isDynamicNode(this.node)\n ? this.node.point\n : signal({ x: this.node.point.x, y: this.node.point.y })\n }\n}\n","import { signal } from \"@angular/core\"\nimport { EdgeLabel } from \"../interfaces/edge-label.interface\"\n\nexport class EdgeLabelModel {\n public size = signal({ width: 0, height: 0 })\n\n constructor(public edgeLabel: EdgeLabel) { }\n}\n","import { Point } from \"../interfaces/point.interface\";\n\n/**\n * Get point on line\n *\n * https://math.stackexchange.com/questions/563566/how-do-i-find-the-middle1-2-1-3-1-4-etc-of-a-line\n */\nexport function getPointOnLineByRatio(start: Point, end: Point, ratio: number): Point {\n return {\n x: (1 - ratio) * start.x + ratio * end.x,\n y: (1 - ratio) * start.y + ratio * end.y,\n };\n}\n","import { PathData } from \"../../interfaces/path-data.interface\";\nimport { Point } from \"../../interfaces/point.interface\";\nimport { UsingPoints } from \"../../types/using-points.type\";\nimport { getPointOnLineByRatio } from \"../point-on-line-by-ratio\";\n\nexport function straightPath(\n source: Point,\n target: Point,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const [start, center, end] = usingPoints\n const nullPoint = { x: 0, y: 0 }\n\n return {\n path: `M ${source.x},${source.y}L ${target.x},${target.y}`,\n points: {\n start: start ? getPointOnLineByRatio(source, target, .15) : nullPoint,\n center: center ? getPointOnLineByRatio(source, target, .50) : nullPoint,\n end: end ? getPointOnLineByRatio(source, target, .85) : nullPoint,\n }\n }\n}\n","import { PathData } from '../../interfaces/path-data.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { UsingPoints } from '../../types/using-points.type';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath(\n source: Point,\n target: Point,\n sourcePosition: Position,\n targetPosition: Position,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const distanceVector = { x: source.x - target.x, y: source.y - target.y };\n\n const sourceControl = calcControlPoint(source, sourcePosition, distanceVector);\n const targetControl = calcControlPoint(target, targetPosition, distanceVector);\n\n const path =\n `M${source.x},${source.y} C${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${target.x},${target.y}`\n\n return getPathData(\n path,\n source,\n target,\n sourceControl,\n targetControl,\n usingPoints\n );\n}\n\n/**\n * Calculate control point based on provided point\n *\n * @param point relative this point control point is gonna be computed (the source or the target)\n * @param pointPosition position of {point} on block\n * @param distanceVector transmits the distance between the source and the target as x and y coordinates\n */\n\nfunction calcControlPoint(\n point: Point,\n pointPosition: Position,\n distanceVector: Point\n) {\n const factorPoint = { x: 0, y: 0 };\n\n switch (pointPosition) {\n case 'top':\n factorPoint.y = 1;\n break;\n case 'bottom':\n factorPoint.y = -1;\n break;\n case 'right':\n factorPoint.x = 1;\n break;\n case 'left':\n factorPoint.x = -1;\n break;\n }\n\n // TODO: explain name\n const fullDistanceVector = {\n x: distanceVector.x * Math.abs(factorPoint.x),\n y: distanceVector.y * Math.abs(factorPoint.y),\n };\n\n // TODO: probably need to make this configurable\n const curvature = 0.25;\n // thanks colleagues from react/svelte world\n // https://github.com/xyflow/xyflow/blob/f0117939bae934447fa7f232081f937169ee23b5/packages/system/src/utils/edges/bezier-edge.ts#L56\n const controlOffset =\n curvature * 25 * Math.sqrt(Math.abs(fullDistanceVector.x + fullDistanceVector.y));\n\n return {\n x: point.x + factorPoint.x * controlOffset,\n y: point.y - factorPoint.y * controlOffset,\n };\n}\n\nfunction getPathData(\n path: string,\n source: Point,\n target: Point,\n sourceControl: Point,\n targetControl: Point,\n usingPoints: UsingPoints\n): PathData {\n const [start, center, end] = usingPoints;\n\n const nullPoint = { x: 0, y: 0 };\n\n return {\n path,\n points: {\n start: start\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.1)\n : nullPoint,\n center: center\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.5)\n : nullPoint,\n end: end\n ? getPointOnBezier(source, target, sourceControl, targetControl, 0.9)\n : nullPoint,\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n sourceControl: Point,\n targetControl: Point,\n ratio: number\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(\n sourcePoint,\n sourceControl,\n ratio\n );\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(\n sourceControl,\n targetControl,\n ratio\n );\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(\n targetControl,\n targetPoint,\n ratio\n );\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio\n );\n}\n","import { WritableSignal, computed, signal } from \"@angular/core\";\nimport { EdgeLabelPosition } from \"../interfaces/edge-label.interface\";\nimport { Edge, Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { EdgeLabelModel } from \"./edge-label.model\";\nimport { NodeModel } from \"./node.model\";\nimport { straightPath } from \"../math/edge-path/straigh-path\";\nimport { bezierPath } from \"../math/edge-path/bezier-path\";\nimport { UsingPoints } from \"../types/using-points.type\";\nimport { HandleModel } from \"./handle.model\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\nimport { FlowEntity } from \"../interfaces/flow-entity.interface\";\n\nexport class EdgeModel implements FlowEntity {\n public source = signal<NodeModel | undefined>(undefined)\n public target = signal<NodeModel | undefined>(undefined)\n public curve: Curve\n public type: EdgeType\n\n public selected = signal(false);\n public selected$ = toObservable(this.selected);\n\n public detached = computed(() => {\n const source = this.source()\n const target = this.target()\n\n if (!source || !target) {\n return true\n }\n\n let existsSourceHandle = false\n let existsTargetHandle = false\n\n if (this.edge.sourceHandle) {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n return !existsSourceHandle || !existsTargetHandle\n })\n\n public detached$ = toObservable(this.detached)\n\n public path = computed(() => {\n let source: HandleModel | undefined\n if (this.edge.sourceHandle) {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n let target: HandleModel | undefined\n if (this.edge.targetHandle) {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n // TODO: don't like this\n if (!source || !target) {\n return {\n path: '',\n points: {\n start: { x: 0, y: 0 },\n center: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n }\n }\n }\n\n switch (this.curve) {\n case 'straight':\n return straightPath(source.pointAbsolute(), target.pointAbsolute(), this.usingPoints)\n case 'bezier':\n return bezierPath(\n source.pointAbsolute(), target.pointAbsolute(),\n source.rawHandle.position,\n target.rawHandle.position,\n this.usingPoints\n )\n }\n })\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {}\n\n private usingPoints: UsingPoints\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default'\n this.curve = edge.curve ?? 'bezier'\n\n if (edge.edgeLabels?.start) this.edgeLabels.start = new EdgeLabelModel(edge.edgeLabels.start)\n if (edge.edgeLabels?.center) this.edgeLabels.center = new EdgeLabelModel(edge.edgeLabels.center)\n if (edge.edgeLabels?.end) this.edgeLabels.end = new EdgeLabelModel(edge.edgeLabels.end)\n\n this.usingPoints = [!!this.edgeLabels.start, !!this.edgeLabels.center, !!this.edgeLabels.end]\n }\n}\n","import { NodeModel } from \"../models/node.model\";\nimport { DynamicNode, Node } from '../interfaces/node.interface';\nimport { EdgeModel } from \"../models/edge.model\";\nimport { Edge } from \"../interfaces/edge.interface\";\n\nexport class ReferenceKeeper {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[] | DynamicNode[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node | DynamicNode, NodeModel> = new Map()\n oldNodeModels.forEach(model => oldNodesMap.set(model.node, model))\n\n return newNodes.map(newNode => {\n if (oldNodesMap.has(newNode)) return oldNodesMap.get(newNode)!\n else return new NodeModel(newNode)\n })\n }\n\n /**\n * Create new models for new edge references and keep old models for old edge references\n */\n public static edges(newEdges: Edge[], oldEdgeModels: EdgeModel[]) {\n const oldEdgesMap: Map<Edge, EdgeModel> = new Map()\n oldEdgeModels.forEach(model => oldEdgesMap.set(model.edge, model))\n\n return newEdges.map(newEdge => {\n if (oldEdgesMap.has(newEdge)) return oldEdgesMap.get(newEdge)!\n else return new EdgeModel(newEdge)\n })\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable, } from '@angular/core/rxjs-interop';\nimport { Observable, asyncScheduler, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap } from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n// this delay fixes the cases when change triggered\n// but the flow not yet fylly re-rendered\nconst DELAY_FOR_SCHEDULER = 25\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n // Check for nodes list change and watch for specific node from this list change its position\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.point$.pipe(\n // skip initial position from signal\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n map((changedNode) => {\n return this.entitiesService.nodes()\n .filter(node => node === changedNode || node.selected())\n .map(node => ({ type: 'position', id: node.node.id, point: node.point() }))\n })\n ) satisfies Observable<NodeChange[]>\n\n protected nodeSizeChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.size$.pipe(\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n map(changedNode => [\n { type: 'size', id: changedNode.node.id, size: changedNode.size() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n newList.filter(node => !oldList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'add', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n oldList.filter(node => !newList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'remove', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeSelectedChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => node),\n )\n )\n )\n ),\n map((changedNode) => [\n { type: 'select', id: changedNode.node.id, selected: changedNode.selected() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeSizeChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$,\n this.nodeSelectedChange$\n ).pipe(\n // this fixes a bug when on fire node event change,\n // you can't get valid list of detached edges\n observeOn(asyncScheduler, DELAY_FOR_SCHEDULER),\n )\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Observable, asyncScheduler, combineLatest, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap, zip } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\nconst haveSameContents = <T>(a: T[], b: T[]) =>\n a.length === b.length &&\n [...new Set([...a, ...b])].every(\n v => a.filter(e => e === v).length === b.filter(e => e === v).length\n );\n\n@Injectable()\nexport class EdgeChangesService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected edgeDetachedChange$ = merge(\n toObservable(\n computed(() => {\n const nodes = this.entitiesService.nodes()\n const edges = untracked(this.entitiesService.edges)\n\n return edges.filter(({ source, target }) =>\n !nodes.includes(source()!) || !nodes.includes(target()!)\n )\n })\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(\n ...edges.map(e => e.detached$.pipe(map(() => e)))\n )\n }),\n map((edges) => edges.filter(e => e.detached())),\n // TODO check why there are 2 emits\n skip(2),\n )\n ).pipe(\n // here we check if 2 approaches to detect detached edges emits same\n // and same values (this may happen on node delete)\n distinctUntilChanged(haveSameContents),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter(edge => !oldList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'add', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter(edge => !newList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeSelectChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n switchMap((edges) =>\n merge(\n ...edges.map(edge =>\n edge.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => edge),\n )\n )\n )\n ),\n map((changedEdge) => [\n { type: 'select', id: changedEdge.edge.id, selected: changedEdge.selected() }\n ])\n ) satisfies Observable<EdgeChange[]>\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$,\n this.edgeSelectChange$\n )\n .pipe(\n // this fixes the case when user gets 'deteched' changes\n // and tries to delete these edges inside stream\n // angular may ignore this change because [edges] input changed\n // right after [nodes] input change\n observeOn(asyncScheduler),\n )\n}\n","import { Directive, Output, inject } from '@angular/core';\nimport { NodeAddChange, NodeChange, NodePositionChange, NodeRemoveChange, NodeSelectedChange, NodeSizeChange } from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { Observable, filter, map } from 'rxjs';\nimport { EdgeAddChange, EdgeChange, EdgeDetachedChange, EdgeRemoveChange, EdgeSelectChange } from '../types/edge-change.type';\n\n@Directive({\n selector: '[changesController]',\n standalone: true\n})\nexport class ChangesControllerDirective {\n protected nodesChangeService = inject(NodesChangeService)\n protected edgesChangeService = inject(EdgeChangesService)\n\n /**\n * Watch nodes change\n */\n @Output()\n public onNodesChange = this.nodesChangeService.changes$\n\n @Output('onNodesChange.position')\n public onNodesChangePosition = this.nodeChangesOfType('position')\n\n @Output('onNodesChange.position.single')\n public onNodesChangePositionSignle = this.singleChange(\n this.nodeChangesOfType('position')\n )\n\n @Output('onNodesChange.position.many')\n public onNodesChangePositionMany = this.manyChanges(\n this.nodeChangesOfType('position')\n )\n\n @Output('onNodesChange.size')\n public onNodesChangeSize = this.nodeChangesOfType('size')\n\n @Output('onNodesChange.size.single')\n public onNodesChangeSizeSingle = this.singleChange(\n this.nodeChangesOfType('size')\n )\n\n @Output('onNodesChange.size.many')\n public onNodesChangeSizeMany = this.manyChanges(\n this.nodeChangesOfType('size')\n )\n\n @Output('onNodesChange.add')\n public onNodesChangeAdd = this.nodeChangesOfType('add')\n\n @Output('onNodesChange.add.single')\n public onNodesChangeAddSingle = this.singleChange(\n this.nodeChangesOfType('add')\n )\n\n @Output('onNodesChange.add.many')\n public onNodesChangeAddMany = this.manyChanges(\n this.nodeChangesOfType('add')\n )\n\n @Output('onNodesChange.remove')\n public onNodesChangeRemove = this.nodeChangesOfType('remove')\n\n @Output('onNodesChange.remove.single')\n public onNodesChangeRemoveSingle = this.singleChange(\n this.nodeChangesOfType('remove')\n )\n\n @Output('onNodesChange.remove.many')\n public onNodesChangeRemoveMany = this.manyChanges(\n this.nodeChangesOfType('remove')\n )\n\n @Output('onNodesChange.select')\n public onNodesChangeSelect = this.nodeChangesOfType('select')\n\n @Output('onNodesChange.select.single')\n public onNodesChangeSelectSingle = this.singleChange(\n this.nodeChangesOfType('select')\n )\n\n @Output('onNodesChange.select.many')\n public onNodesChangeSelectMany = this.manyChanges(\n this.nodeChangesOfType('select')\n )\n\n /**\n * Watch edges change\n */\n @Output()\n public onEdgesChange = this.edgesChangeService.changes$\n\n @Output('onEdgesChange.detached')\n public onNodesChangeDetached = this.edgeChangesOfType('detached')\n\n @Output('onEdgesChange.detached.single')\n public onNodesChangeDetachedSingle = this.singleChange(\n this.edgeChangesOfType('detached')\n )\n\n @Output('onEdgesChange.detached.many')\n public onNodesChangeDetachedMany = this.manyChanges(\n this.edgeChangesOfType('detached')\n )\n\n @Output('onEdgesChange.add')\n public onEdgesChangeAdd = this.edgeChangesOfType('add')\n\n @Output('onEdgesChange.add.single')\n public onEdgeChangeAddSingle = this.singleChange(\n this.edgeChangesOfType('add')\n )\n\n @Output('onEdgesChange.add.many')\n public onEdgeChangeAddMany = this.manyChanges(\n this.edgeChangesOfType('add')\n )\n\n @Output('onEdgesChange.remove')\n public onEdgeChangeRemove = this.edgeChangesOfType('remove')\n\n @Output('onEdgesChange.remove.single')\n public onEdgeChangeRemoveSingle = this.singleChange(\n this.edgeChangesOfType('remove')\n )\n\n @Output('onEdgesChange.remove.many')\n public onEdgeChangeRemoveMany = this.manyChanges(\n this.edgeChangesOfType('remove')\n )\n\n @Output('onEdgesChange.select')\n public onEdgeChangeSelect = this.edgeChangesOfType('select')\n\n @Output('onEdgesChange.select.single')\n public onEdgeChangeSelectSingle = this.singleChange(\n this.edgeChangesOfType('select')\n )\n\n @Output('onEdgesChange.select.many')\n public onEdgeChangeSelectMany = this.manyChanges(\n this.edgeChangesOfType('select')\n )\n\n private nodeChangesOfType<T extends NodeChange['type']>(type: T) {\n return this.nodesChangeService.changes$.pipe(\n map(changes => changes.filter((c): c is NodeChangeMap[T] => c.type === type)),\n filter(changes => !!changes.length)\n )\n }\n\n private edgeChangesOfType<T extends EdgeChange['type']>(type: T) {\n return this.edgesChangeService.changes$.pipe(\n map(changes => changes.filter((c): c is EdgeChangeMap[T] => c.type === type)),\n filter(changes => !!changes.length)\n )\n }\n\n private singleChange<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter(changes => changes.length === 1),\n map(([first]) => first)\n )\n }\n\n private manyChanges<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter(changes => changes.length > 1),\n )\n }\n}\n\n// TODO: do not write this types manually\ntype NodeChangeMap = {\n position: NodePositionChange,\n size: NodeSizeChange,\n add: NodeAddChange,\n remove: NodeRemoveChange,\n select: NodeSelectedChange\n}\n\ntype EdgeChangeMap = {\n detached: EdgeDetachedChange,\n add: EdgeAddChange,\n remove: EdgeRemoveChange,\n select: EdgeSelectChange\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport class NodeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService)\n\n public readonly nodes = computed(() => {\n return this.flowEntitiesService.nodes()\n .sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder())\n })\n\n private maxOrder = computed(() => {\n return Math.max(\n ...this.flowEntitiesService.nodes().map((n) => n.renderOrder())\n )\n })\n\n public pullNode(node: NodeModel) {\n // TODO do not pull when the node is already on top\n // pull node\n node.renderOrder.set(this.maxOrder() + 1)\n // pull children\n this.flowEntitiesService\n .nodes()\n .filter(n => n.parent() === node)\n .forEach(n => this.pullNode(n))\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { Observable, Subject, animationFrameScheduler, fromEvent, map, merge, observeOn, share, skip, tap } from 'rxjs';\nimport { Point } from '../interfaces/point.interface';\n\nexport interface PointerEvent {\n x: number\n y: number\n movementX: number\n movementY: number\n target: Element | null\n originalEvent: MouseEvent | TouchEvent\n}\n\n@Directive({ selector: 'svg[rootPointer]' })\nexport class RootPointerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n\n private initialTouch$ = new Subject<TouchEvent>()\n\n private prevTouchEvent: TouchEvent | null = null\n\n // TODO: do not emit if mouse not down\n public mouseMovement$ = fromEvent<MouseEvent>(this.host, 'mousemove').pipe(\n map(event => ({\n x: event.clientX,\n y: event.clientY,\n movementX: event.movementX,\n movementY: event.movementY,\n target: event.target as Element | null,\n originalEvent: event\n })),\n observeOn(animationFrameScheduler),\n share()\n ) satisfies Observable<Point>;\n\n public touchMovement$ = merge(\n this.initialTouch$,\n fromEvent<TouchEvent>(this.host, 'touchmove')\n ).pipe(\n tap((event) => event.preventDefault()),\n map((originalEvent) => {\n const x = originalEvent.touches[0]?.clientX ?? 0\n const y = originalEvent.touches[0]?.clientY ?? 0\n const movementX = this.prevTouchEvent\n ? originalEvent.touches[0].pageX - this.prevTouchEvent.touches[0].pageX\n : 0\n const movementY = this.prevTouchEvent\n ? originalEvent.touches[0].pageY - this.prevTouchEvent.touches[0].pageY\n : 0\n\n const target = document.elementFromPoint(x, y)\n\n return { x, y, movementX, movementY, target, originalEvent }\n }),\n tap((event) => this.prevTouchEvent = event.originalEvent),\n observeOn(animationFrameScheduler),\n share()\n ) satisfies Observable<Point>;\n\n public pointerMovement$: Observable<PointerEvent> = merge(\n this.mouseMovement$,\n this.touchMovement$\n )\n\n public touchEnd$ = fromEvent<TouchEvent>(this.host, 'touchend').pipe(\n map((originalEvent) => {\n const x = originalEvent.changedTouches[0]?.clientX ?? 0\n const y = originalEvent.changedTouches[0]?.clientY ?? 0\n const target = document.elementFromPoint(x, y)\n\n return { x, y, target, originalEvent }\n }),\n tap(() => this.prevTouchEvent = null),\n share()\n ) satisfies Observable<Point>\n\n public mouseUp$ = fromEvent<MouseEvent>(this.host, 'mouseup').pipe(\n map((originalEvent) => {\n const x = originalEvent.clientX\n const y = originalEvent.clientY\n const target = originalEvent.target\n\n return { x, y, target, originalEvent }\n }),\n share()\n ) satisfies Observable<Point>\n\n public documentPointerEnd$ = merge(\n fromEvent(document, 'mouseup'),\n fromEvent(document, 'touchend')\n ).pipe(\n share()\n )\n\n\n /**\n * We should know when user started a touch in order to not\n * show old touch position when connection creation is started\n */\n public setInitialTouch(event: TouchEvent) {\n this.initialTouch$.next(event)\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\nimport { RootPointerDirective } from './root-pointer.directive';\n\n@Directive({ selector: 'g[spacePointContext]' })\nexport class SpacePointContextDirective {\n private pointerMovementDirective = inject(RootPointerDirective)\n private rootSvg = inject(RootSvgReferenceDirective).element\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.pointerMovement()\n\n if (!movement) {\n return { x: 0, y: 0 }\n }\n\n return this.documentPointToFlowPoint({\n x: movement.x,\n y: movement.y\n })\n })\n\n public pointerMovement = toSignal(\n this.pointerMovementDirective.pointerMovement$,\n )\n\n public documentPointToFlowPoint(documentPoint: Point) {\n const point = this.rootSvg.createSVGPoint()\n point.x = documentPoint.x\n point.y = documentPoint.y\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse())\n }\n}\n","import { Background } from \"../types/background.type\";\n\nexport function transformBackground(background: Background | string): Background {\n return typeof background === 'string'\n ? { type: 'solid', color: background }\n : background\n}\n","export function Microtask(target: any, key: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => void>) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n queueMicrotask(() => {\n originalMethod?.apply(this, args)\n })\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { ToolbarModel } from '../models/toolbar.model';\nimport { NodeModel } from '../models/node.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\n@Injectable()\nexport class OverlaysService {\n private toolbars = signal<ToolbarModel[]>([]);\n\n public nodeToolbars = computed(() => {\n const map = new Map<NodeModel, ToolbarModel>()\n\n this.toolbars().forEach((toolbar) => {\n map.set(toolbar.node, toolbar)\n })\n\n return map\n })\n\n @Microtask\n public addToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => [...toolbars, toolbar]);\n }\n\n @Microtask\n public removeToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => toolbars.filter(t => t !== toolbar));\n }\n}\n","import { Injectable, Signal, TemplateRef, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\nexport interface NodeHandle {\n position: Position\n type: HandleType\n id?: string\n parentReference?: Element\n template?: TemplateRef<any>\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null)\n\n @Microtask // TODO fixes rendering of handle for group node\n public createHandle(newHandle: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(handles => [...handles, newHandle])\n }\n }\n\n public destroyHandle(handleToDestoy: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(\n handles => handles.filter(handle => handle !== handleToDestoy)\n )\n }\n }\n}\n","import { NgZone } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport function resizable(elems: Element[], zone: NgZone) {\n return new Observable<ResizeObserverEntry[]>((subscriber) => {\n let ro = new ResizeObserver((entries) => {\n zone.run(() => subscriber.next(entries))\n });\n\n elems.forEach(e => ro.observe(e))\n\n return () => ro.disconnect()\n });\n}\n","import { Directive, Injector, inject, runInInjectionContext } from \"@angular/core\";\n\nexport function InjectionContext(target: any, key: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n if (implementsWithInjector(this)) {\n return runInInjectionContext(this.injector, () => originalMethod.apply(this, args))\n } else {\n throw new Error('Class that contains decorated method must extends WithInjectorDirective class')\n }\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n\nexport interface WithInjector {\n injector: Injector\n}\n\nconst implementsWithInjector = (instance: {}): instance is WithInjector => {\n return 'injector' in instance && 'get' in (instance.injector as Injector);\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * Service to fix cyclic dependency between node and resizable component\n */\n@Injectable()\nexport class NodeAccessorService {\n public model = signal<NodeModel | null>(null)\n\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'default-node',\n templateUrl: './default-node.component.html',\n styleUrls: [`./default-node.component.scss`],\n host: {\n '[class.selected]': 'selected'\n }\n})\nexport class DefaultNodeComponent {\n @Input()\n public selected = false\n}\n","<ng-content />\n","import { computed, signal } from \"@angular/core\";\nimport { NodeHandle } from \"../services/handle.service\";\nimport { NodeModel } from \"./node.model\";\nimport { Subject, map } from \"rxjs\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\nexport class HandleModel {\n public readonly strokeWidth = 2\n\n /**\n * Pre-computed size for default handle, changed dynamically\n * for custom handles\n */\n public size = signal({\n width: 10 + (2 * this.strokeWidth),\n height: 10 + (2 * this.strokeWidth)\n })\n\n public offset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return {\n x: 0,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'right': return {\n x: this.parentNode.size().width,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'top': return {\n x: this.parentPosition().x + (this.parentSize().width / 2),\n y: 0\n }\n case 'bottom': return {\n x: this.parentPosition().x + this.parentSize().width / 2,\n y: this.parentNode.size().height\n }\n }\n })\n\n public sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return { x: -(this.size().width / 2), y: 0 }\n case 'right': return { x: this.size().width / 2, y: 0 }\n case 'top': return { x: 0, y: -(this.size().height / 2) }\n case 'bottom': return { x: 0, y: this.size().height / 2 }\n }\n })\n\n public pointAbsolute = computed(() => {\n return {\n x: this.parentNode.globalPoint().x + this.offset().x + this.sizeOffset().x,\n y: this.parentNode.globalPoint().y + this.offset().y + this.sizeOffset().y,\n }\n })\n\n public state = signal<HandleState>('idle')\n\n private updateParentSizeAndPosition$ = new Subject<void>()\n\n public parentSize = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => this.getParentSize())\n ),\n {\n initialValue: { width: 0, height: 0 }\n }\n )\n\n public parentPosition = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => ({\n x: this.parentReference instanceof HTMLElement\n ? this.parentReference.offsetLeft\n : 0, // for now just 0 for group nodes\n y: this.parentReference instanceof HTMLElement\n ? this.parentReference.offsetTop\n : 0 // for now just 0 for group nodes\n }))\n ),\n {\n initialValue: { x: 0, y: 0 }\n }\n )\n\n public parentReference = this.rawHandle.parentReference!\n\n public template = this.rawHandle.template\n\n public templateContext = {\n $implicit: {\n point: this.offset,\n state: this.state,\n node: this.parentNode.node\n }\n }\n\n constructor(\n public rawHandle: NodeHandle,\n public parentNode: NodeModel\n ) { }\n\n public updateParent() {\n this.updateParentSizeAndPosition$.next()\n }\n\n private getParentSize(): { width: number, height: number } {\n if (this.parentReference instanceof HTMLElement) {\n return {\n width: this.parentReference.offsetWidth,\n height: this.parentReference.offsetHeight\n }\n } else if (this.parentReference instanceof SVGGraphicsElement) {\n return this.parentReference.getBBox()\n }\n\n return { width: 0, height: 0 }\n }\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injector, Input, OnDestroy, OnInit, TemplateRef, inject, runInInjectionContext, signal } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { InjectionContext, WithInjector } from '../../decorators/run-in-injection-context.decorator';\n\n@Component({\n selector: 'handle',\n templateUrl: './handle.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HandleComponent implements OnInit, WithInjector {\n public injector = inject(Injector);\n private handleService = inject(HandleService)\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement\n private destroyRef = inject(DestroyRef)\n\n /**\n * At what side of node this component should be placed\n */\n @Input({ required: true })\n public position!: Position\n\n /**\n * Source or target\n */\n @Input({ required: true })\n public type!: 'source' | 'target'\n\n /**\n * Should be used if node has more than one source/target\n */\n @Input()\n public id?: string\n\n @Input()\n public template?: TemplateRef<any>\n\n public model!: HandleModel\n\n @InjectionContext\n public ngOnInit() {\n const node = this.handleService.node()\n\n if (node) {\n this.model = new HandleModel(\n {\n position: this.position,\n type: this.type,\n id: this.id,\n parentReference: this.element.parentElement!,\n template: this.template\n },\n node\n )\n\n this.handleService.createHandle(this.model)\n\n requestAnimationFrame(() => this.model.updateParent())\n\n this.destroyRef.onDestroy(() => this.handleService.destroyHandle(this.model))\n }\n }\n}\n\n","","import { Directive, ElementRef, EventEmitter, HostListener, Output, effect, inject } from '@angular/core';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RootPointerDirective } from './root-pointer.directive';\n\n@Directive({ selector: '[pointerStart], [pointerEnd], [pointerOver], [pointerOut]' })\nexport class PointerDirective {\n protected hostElement = inject<ElementRef<Element>>(ElementRef).nativeElement\n protected pointerMovementDirective = inject(RootPointerDirective)\n\n @Output()\n protected pointerOver = new EventEmitter<Event>()\n\n @Output()\n protected pointerOut = new EventEmitter<Event>()\n\n @Output()\n protected pointerStart = new EventEmitter<Event>()\n\n @Output()\n protected pointerEnd = new EventEmitter<Event>()\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n protected onPointerStart(event: Event) {\n this.pointerStart.emit(event)\n\n if (event instanceof TouchEvent) {\n this.pointerMovementDirective.setInitialTouch(event);\n }\n }\n\n @HostListener('mouseup', ['$event'])\n protected onPointerEnd(event: Event) {\n this.pointerEnd.emit(event)\n }\n\n @HostListener('mouseover', ['$event'])\n protected onMouseOver(event: Event) {\n this.pointerOver.emit(event)\n }\n\n @HostListener('mouseout', ['$event'])\n protected onMouseOut(event: Event) {\n this.pointerOut.emit(event)\n }\n\n private wasPointerOver = false;\n\n // TODO check if i could avoid global touch end\n protected touchEnd = this.pointerMovementDirective.touchEnd$\n .pipe(\n filter(({ target }) => target === this.hostElement),\n tap(({ originalEvent }) => this.pointerEnd.emit(originalEvent)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected touchOverOut = this.pointerMovementDirective.touchMovement$\n .pipe(\n tap(({ target, originalEvent }) => {\n this.handleTouchOverAndOut(target, originalEvent)\n }),\n takeUntilDestroyed()\n )\n .subscribe()\n\n // TODO: dirty imperative implementation\n private handleTouchOverAndOut(target: Element | null, event: TouchEvent) {\n if (target === this.hostElement) {\n this.pointerOver.emit(event)\n this.wasPointerOver = true;\n } else {\n // should not emit before pointerOver\n if (this.wasPointerOver) {\n this.pointerOut.emit(event)\n }\n\n this.wasPointerOver = false;\n }\n }\n}\n","import { AfterViewInit, Component, computed, ElementRef, inject, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ViewportService } from '../../services/viewport.service';\nimport { round } from '../../utils/round';\nimport { Microtask } from '../../decorators/microtask.decorator';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { NodeModel } from '../../models/node.model';\nimport { Rect } from '../../interfaces/rect';\nimport { PointerEvent } from '../../directives/root-pointer.directive';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\n\ntype Side = 'top' | 'right' | 'bottom' | 'left' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\n@Component({\n selector: '[resizable]',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss']\n})\nexport class ResizableComponent implements OnInit, AfterViewInit {\n private nodeAccessor = inject(NodeAccessorService)\n private rootPointer = inject(RootPointerDirective)\n private viewportService = inject(ViewportService)\n private spacePointContext = inject(SpacePointContextDirective)\n private hostRef = inject<ElementRef<Element>>(ElementRef)\n\n @Input()\n public set resizable(value: boolean | '') {\n if (typeof value === 'boolean') {\n this.model.resizable.set(value)\n } else {\n this.model.resizable.set(true)\n }\n }\n\n @Input()\n public resizerColor = '#2e414c'\n\n @Input()\n public gap = 1.5;\n\n @ViewChild('resizer', { static: true })\n private resizer!: TemplateRef<unknown>\n\n protected get model() {\n return this.nodeAccessor.model()!\n }\n\n protected lineGap = 3\n protected handleSize = 6\n\n private resizeSide: Side | null = null\n\n private zoom = computed(() => this.viewportService.readableViewport().zoom ?? 0)\n\n private minWidth = 0\n private minHeight = 0\n\n // TODO: allow reszie beside the flow\n protected resizeOnGlobalMouseMove = this.rootPointer.pointerMovement$\n .pipe(\n filter(() => this.resizeSide !== null),\n filter((event) => event.movementX !== 0 || event.movementY !== 0),\n tap((event) => this.resize(event)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected endResizeOnGlobalMouseUp = this.rootPointer.documentPointerEnd$\n .pipe(\n tap(() => this.endResize()),\n takeUntilDestroyed()\n )\n .subscribe()\n\n public ngOnInit(): void {\n this.model.resizerTemplate.set(this.resizer)\n }\n\n @Microtask\n public ngAfterViewInit() {\n this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0\n this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0\n }\n\n protected startResize(side: Side, event: Event) {\n event.stopPropagation()\n this.resizeSide = side\n this.model.resizing.set(true)\n }\n\n protected resize(event: PointerEvent) {\n if (!this.resizeSide) return;\n if (this.isResizeConstrained(event)) return;\n\n const offset = calcOffset(event.movementX, event.movementY, this.zoom())\n const { x, y, width, height } = constrainRect(\n applyResize(this.resizeSide, this.model, offset),\n this.model,\n this.resizeSide,\n this.minWidth,\n this.minHeight\n )\n\n this.model.setPoint({ x, y }, false)\n this.model.size.set({ width, height })\n }\n\n protected endResize() {\n this.resizeSide = null\n this.model.resizing.set(false)\n }\n\n private isResizeConstrained({ x, y, movementX, movementY }: PointerEvent): boolean {\n const flowPoint = this.spacePointContext.documentPointToFlowPoint({ x, y })\n\n if (this.resizeSide?.includes('right')) {\n if (movementX > 0 && flowPoint.x < (this.model.point().x + this.model.size().width)) {\n return true\n }\n\n if (movementX < 0 && flowPoint.x > this.model.point().x + this.model.size().width) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('left')) {\n if (movementX < 0 && flowPoint.x > this.model.point().x) {\n return true\n }\n\n if (movementX > 0 && flowPoint.x < this.model.point().x) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('bottom')) {\n if (movementY > 0 && flowPoint.y < (this.model.point().y + this.model.size().height)) {\n return true\n }\n\n if (movementY < 0 && flowPoint.y > this.model.point().y + this.model.size().height) {\n return true\n }\n }\n\n if (this.resizeSide?.includes('top')) {\n if (movementY < 0 && flowPoint.y > this.model.point().y) {\n return true\n }\n\n if (movementY > 0 && flowPoint.y < this.model.point().y) {\n return true\n }\n }\n\n return false\n }\n}\n\nfunction calcOffset(movementX: number, movementY: number, zoom: number) {\n return {\n offsetX: round(movementX / zoom),\n offsetY: round(movementY / zoom)\n };\n}\n\nfunction applyResize(\n side: Side,\n model: NodeModel,\n offset: { offsetX: number, offsetY: number }\n): Rect {\n const { offsetX, offsetY } = offset\n const { x, y } = model.point()\n const { width, height } = model.size()\n\n // Handle each case of resizing (top, bottom, left, right, corners)\n switch (side) {\n case 'left':\n return { x: x + offsetX, y, width: width - offsetX, height }\n case 'right':\n return { x, y, width: width + offsetX, height }\n case 'top':\n return { x, y: y + offsetY, width, height: height - offsetY }\n case 'bottom':\n return { x, y, width, height: height + offsetY }\n case 'top-left':\n return { x: x + offsetX, y: y + offsetY, width: width - offsetX, height: height - offsetY }\n case 'top-right':\n return { x, y: y + offsetY, width: width + offsetX, height: height - offsetY }\n case 'bottom-left':\n return { x: x + offsetX, y, width: width - offsetX, height: height + offsetY }\n case 'bottom-right':\n return { x, y, width: width + offsetX, height: height + offsetY }\n }\n}\n\nfunction constrainRect(\n rect: Rect,\n model: NodeModel,\n side: Side,\n minWidth: number,\n minHeight: number\n) {\n let { x, y, width, height } = rect\n\n // 1. Prevent negative dimensions\n width = Math.max(width, 0)\n height = Math.max(height, 0)\n\n // 2. Apply minimum size constraints\n width = Math.max(minWidth, width)\n height = Math.max(minHeight, height)\n\n // Apply left/top constraints based on minimum size\n x = Math.min(x, model.point().x + model.size().width - minWidth)\n y = Math.min(y, model.point().y + model.size().height - minHeight)\n\n const parent = model.parent()\n // 3. Apply maximum size constraints based on parent size (if exists)\n if (parent) {\n x = Math.max(x, 0); // Left boundary of the parent\n y = Math.max(y, 0); // Top boundary of the parent\n\n if (x === 0) {\n width = model.point().x + model.size().width\n }\n\n if (y === 0) {\n height = model.point().y + model.size().height\n }\n\n width = Math.min(width, parent.size().width - model.point().x)\n height = Math.min(height, parent.size().height - model.point().y)\n }\n\n const bounds = getNodesBounds(model.children())\n // 4. Apply child node constraints (if children exist)\n if (bounds) {\n if (side.includes('left')) {\n x = Math.min(x, (model.point().x + model.size().width) - (bounds.x + bounds.width))\n width = Math.max(width, bounds.x + bounds.width)\n }\n\n if (side.includes('right')) {\n width = Math.max(width, bounds.x + bounds.width)\n }\n\n if (side.includes('bottom')) {\n height = Math.max(height, bounds.y + bounds.height)\n }\n\n if (side.includes('top')) {\n y = Math.min(y, (model.point().y + model.size().height) - (bounds.y + bounds.height))\n height = Math.max(height, bounds.y + bounds.height)\n }\n }\n\n return {\n x,\n y,\n width,\n height\n };\n}\n","<ng-template #resizer>\n <svg:g>\n <!-- top line -->\n <svg:line\n class=\"top\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"-gap\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"-gap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('top', $event)\"\n />\n <!-- Left line -->\n <svg:line\n class=\"left\"\n [attr.x1]=\"-gap\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"-gap\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('left', $event)\"\n />\n <!-- Bottom line -->\n <svg:line\n class=\"bottom\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"model.size().height + gap\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"model.size().height + gap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('bottom', $event)\"\n />\n <!-- Right line -->\n <svg:line\n class=\"right\"\n [attr.x1]=\"model.size().width + gap\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"model.size().width + gap\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor\"\n stroke-width=\"2\"\n (pointerStart)=\"startResize('right', $event)\"\n />\n\n <!-- Top Left -->\n <svg:rect\n class=\"top-left\"\n [attr.x]=\"-(handleSize / 2) - gap\"\n [attr.y]=\"-(handleSize / 2) - gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('top-left', $event)\"\n />\n\n <!-- Top right -->\n <svg:rect\n class=\"top-right\"\n [attr.x]=\"model.size().width - (handleSize / 2) + gap\"\n [attr.y]=\"-(handleSize / 2) - gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('top-right', $event)\"\n />\n\n <!-- Bottom left -->\n <svg:rect\n class=\"bottom-left\"\n [attr.x]=\"-(handleSize / 2) - gap\"\n [attr.y]=\"model.size().height - (handleSize / 2) + gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('bottom-left', $event)\"\n />\n\n <!-- Bottom right -->\n <svg:rect\n class=\"bottom-right\"\n [attr.x]=\"model.size().width - (handleSize / 2) + gap\"\n [attr.y]=\"model.size().height - (handleSize / 2) + gap\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor\"\n (pointerStart)=\"startResize('bottom-right', $event)\"\n />\n </svg:g>\n</ng-template>\n\n<ng-content />\n","import { AfterViewInit, Directive, ElementRef, Input, inject } from '@angular/core';\nimport { HandleModel } from '../models/handle.model';\n\n@Directive({ selector: '[handleSizeController]' })\nexport class HandleSizeControllerDirective implements AfterViewInit {\n @Input({ required: true, alias: 'handleSizeController' })\n public handleModel!: HandleModel\n\n private handleWrapper = inject(ElementRef) as ElementRef<SVGGElement>\n\n public ngAfterViewInit(): void {\n const element = this.handleWrapper.nativeElement\n const rect = element.getBBox()\n\n const stroke = getChildStrokeWidth(element)\n this.handleModel.size.set({\n width: rect.width + stroke,\n height: rect.height + stroke\n })\n }\n}\n\nfunction getChildStrokeWidth(element: SVGGElement) {\n const child = element.firstElementChild\n\n if (child) {\n const stroke = getComputedStyle(child).strokeWidth\n const strokeAsNumber = Number(stroke.replace('px', ''))\n\n if (isNaN(strokeAsNumber)) {\n return 0\n }\n\n return strokeAsNumber\n }\n\n return 0\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Injector, Input, NgZone, OnDestroy, OnInit, TemplateRef, ViewChild, computed, effect, inject } from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { resizable } from '../../utils/resizable';\nimport { filter, first, map, startWith, switchMap, tap } from 'rxjs';\nimport { InjectionContext, WithInjector } from '../../decorators/run-in-injection-context.decorator';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { OverlaysService } from '../../services/overlays.service';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\n@Component({\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService, NodeAccessorService],\n host: {\n 'class': 'vflow-node',\n }\n})\nexport class NodeComponent implements OnInit, AfterViewInit, OnDestroy, WithInjector {\n public injector = inject(Injector)\n private handleService = inject(HandleService)\n private draggableService = inject(DraggableService)\n private flowStatusService = inject(FlowStatusService)\n private nodeRenderingService = inject(NodeRenderingService)\n private flowSettingsService = inject(FlowSettingsService)\n private selectionService = inject(SelectionService)\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef)\n private connectionController = inject(ConnectionControllerDirective)\n private nodeAccessor = inject(NodeAccessorService)\n private overlaysService = inject(OverlaysService)\n private zone = inject(NgZone)\n\n @Input()\n public nodeModel!: NodeModel\n\n @Input()\n public nodeTemplate?: TemplateRef<any>\n\n @Input()\n public groupNodeTemplate?: TemplateRef<any>\n\n @ViewChild('nodeContent')\n public nodeContentRef!: ElementRef<SVGGraphicsElement>\n\n @ViewChild('htmlWrapper')\n public htmlWrapperRef!: ElementRef<HTMLDivElement>\n\n protected showMagnet = computed(() =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation'\n )\n\n protected styleWidth = computed(() => `${this.nodeModel.size().width}px`)\n protected styleHeight = computed(() => `${this.nodeModel.size().height}px`)\n\n protected toolbar = computed(() => this.overlaysService.nodeToolbars().get(this.nodeModel))\n\n @InjectionContext\n public ngOnInit() {\n this.nodeAccessor.model.set(this.nodeModel);\n\n this.handleService.node.set(this.nodeModel);\n\n effect(() => {\n if (this.nodeModel.draggable()) {\n this.draggableService.enable(this.hostRef.nativeElement, this.nodeModel)\n } else {\n this.draggableService.disable(this.hostRef.nativeElement)\n }\n })\n\n this.nodeModel.handles$\n .pipe(\n switchMap((handles) =>\n resizable(handles.map(h => h.parentReference!), this.zone)\n .pipe(map(() => handles))\n ),\n tap((handles) => {\n // TODO (performance) inspect how to avoid calls of this when flow initially rendered\n handles.forEach(h => h.updateParent())\n }),\n takeUntilDestroyed()\n )\n .subscribe()\n }\n\n @InjectionContext\n public ngAfterViewInit(): void {\n this.nodeModel.linkDefaultNodeSizeWithModelSize()\n\n if (this.nodeModel.node.type === 'html-template' || this.nodeModel.isComponentType) {\n resizable([this.htmlWrapperRef.nativeElement], this.zone)\n .pipe(\n startWith(null),\n tap(() => this.nodeModel.handles().forEach(h => h.updateParent())),\n filter(() => !this.nodeModel.resizing()),\n tap(() => {\n const width = this.htmlWrapperRef.nativeElement.clientWidth\n const height = this.htmlWrapperRef.nativeElement.clientHeight\n\n this.nodeModel.size.set({ width, height })\n }),\n takeUntilDestroyed()\n ).subscribe()\n }\n }\n\n public ngOnDestroy(): void {\n this.draggableService.destroy(this.hostRef.nativeElement)\n }\n\n protected startConnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation()\n\n this.connectionController.startConnection(handle)\n }\n\n protected validateConnection(handle: HandleModel) {\n this.connectionController.validateConnection(handle)\n }\n\n protected resetValidateConnection(targetHandle: HandleModel) {\n this.connectionController.resetValidateConnection(targetHandle)\n }\n\n protected endConnection(handle: HandleModel) {\n this.connectionController.endConnection(handle)\n }\n\n protected pullNode() {\n this.nodeRenderingService.pullNode(this.nodeModel)\n }\n\n protected selectNode() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.nodeModel)\n }\n }\n}\n","<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n\n<!-- Toolbar -->\n<svg:foreignObject\n *ngIf=\"toolbar() as toolbar\"\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\"\n>\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n</svg:foreignObject>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, TemplateRef, ViewChild, computed, signal } from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Point } from '../../interfaces/point.interface';\nimport { Microtask } from '../../decorators/microtask.decorator';\n\n@Component({\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [`\n .edge-label-wrapper {\n width: max-content;\n\n /*\n this is a fix for bug in chrome, for some reason if the div fully matches the size\n of foreignObject there are occurs some visual artifacts around this div\n */\n margin-top: 1px;\n margin-left: 1px;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n // TODO: too many inputs\n @Input()\n public model!: EdgeLabelModel\n\n @Input()\n public edgeModel!: EdgeModel\n\n @Input()\n public set point(point: Point) { this.pointSignal.set(point) }\n\n @Input()\n public htmlTemplate?: TemplateRef<any>\n\n @ViewChild('edgeLabelWrapper')\n public edgeLabelWrapperRef!: ElementRef<HTMLDivElement>\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.pointSignal()\n\n const { width, height } = this.model.size()\n\n return {\n x: point.x - (width / 2),\n y: point.y - (height / 2)\n }\n })\n\n private pointSignal = signal({ x: 0, y: 0 })\n\n @Microtask\n public ngAfterViewInit(): void {\n // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.\n // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\n const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2\n\n const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n\n this.model.size.set({ width, height })\n\n }\n\n protected getLabelContext() {\n return {\n $implicit: {\n edge: this.edgeModel.edge,\n label: this.model.edgeLabel\n }\n }\n }\n}\n","<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n","import { ChangeDetectionStrategy, Component, Injector, Input, OnInit, Signal, TemplateRef, computed, inject } from '@angular/core';\nimport { EdgeModel } from '../../models/edge.model';\nimport { hashCode } from '../../utils/hash';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\n\n@Component({\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n styleUrls: ['./edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'selectable'\n }\n})\nexport class EdgeComponent implements OnInit {\n protected injector = inject(Injector)\n private selectionService = inject(SelectionService)\n private flowSettingsService = inject(FlowSettingsService)\n\n @Input()\n public model!: EdgeModel\n\n @Input()\n public edgeTemplate?: TemplateRef<EdgeContext>\n\n @Input()\n public edgeLabelHtmlTemplate?: TemplateRef<any>\n\n protected markerStartUrl = computed(() => {\n const marker = this.model.edge.markers?.start\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected markerEndUrl = computed(() => {\n const marker = this.model.edge.markers?.end\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected edgeContext!: EdgeContext\n\n public ngOnInit(): void {\n this.edgeContext = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.model.edge,\n path: computed(() => this.model.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl,\n selected: this.model.selected.asReadonly()\n }\n }\n }\n\n public onEdgeMouseDown() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model)\n }\n }\n}\n","<svg:path\n *ngIf=\"model.type === 'default'\"\n (mousedown)=\"onEdgeMouseDown()\"\n [attr.d]=\"model.path().path\"\n [attr.marker-start]=\"markerStartUrl()\"\n [attr.marker-end]=\"markerEndUrl()\"\n class=\"edge\"\n [class.edge_selected]=\"model.selected()\"\n/>\n\n<ng-container *ngIf=\"model.type === 'template' && edgeTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"edgeTemplate\"\n [ngTemplateOutletContext]=\"edgeContext\"\n [ngTemplateOutletInjector]=\"injector\"\n ></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.start as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.start\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.center as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.center\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.end as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.end\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, computed, inject } from '@angular/core';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { straightPath } from '../../math/edge-path/straigh-path';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { bezierPath } from '../../math/edge-path/bezier-path';\nimport { hashCode } from '../../utils/hash';\nimport { Position } from '../../types/position.type';\n\n@Component({\n selector: 'g[connection]',\n template: `\n <ng-container *ngIf=\"model.type === 'default'\">\n <svg:path\n *ngIf=\"path() as path\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\"\n fill=\"none\"\n stroke-width=\"2\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"model.type === 'template' && template\">\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConnectionComponent {\n @Input({ required: true })\n public model!: ConnectionModel\n\n @Input()\n public template?: TemplateRef<any>\n\n private flowStatusService = inject(FlowStatusService)\n private spacePointContext = inject(SpacePointContextDirective)\n\n protected path = computed(() => {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetPoint = this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n if (status.state === 'connection-validation') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetHandle = status.payload.targetHandle\n // ignore magnet if validation failed\n const targetPoint = status.payload.valid\n ? targetHandle.pointAbsolute()\n : this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = status.payload.valid\n ? targetHandle.rawHandle.position\n : getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n return null\n })\n\n protected markerUrl = computed(() => {\n const marker = this.model.settings.marker\n\n if (marker) {\n return `url(#${hashCode(JSON.stringify(marker))})`\n }\n\n return ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected getContext() {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl\n }\n }\n }\n}\n\nfunction getOppositePostion(position: Position): Position {\n switch (position) {\n case 'top':\n return 'bottom'\n case 'bottom':\n return 'top'\n case 'left':\n return 'right'\n case 'right':\n return 'left'\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\n\n@Component({\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefsComponent {\n @Input({ required: true })\n public markers: Map<number, Marker> = new Map()\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n}\n","<svg:marker\n *ngFor=\"let marker of markers | keyvalue\"\n [attr.id]=\"marker.key\"\n [attr.markerWidth]=\"marker.value.width ?? 16.5\"\n [attr.markerHeight]=\"marker.value.height ?? 16.5\"\n [attr.orient]=\"marker.value.orient ?? 'auto-start-reverse'\"\n viewBox=\"-10 -10 20 20\"\n [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\"\n refX=\"0\"\n refY=\"0\"\n>\n <polyline\n *ngIf=\"marker.value.type === 'arrow-closed' || !marker.value.type\"\n class=\"marker__arrow_closed\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n />\n\n <polyline\n *ngIf=\"marker.value.type === 'arrow'\"\n class=\"marker__arrow_default\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n points=\"-5,-4 0,0 -5,4\"\n />\n</svg:marker>\n","export function id() {\n const randomLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n\n return randomLetter + Date.now();\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { id } from '../../utils/id';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\n\nconst defaultBg = '#fff'\nconst defaultGap = 20\nconst defaultDotSize = 2\nconst defaultDotColor = 'rgb(177, 177, 183)'\n\n@Component({\n selector: 'g[background]',\n templateUrl: './background.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BackgroundComponent {\n private viewportService = inject(ViewportService)\n private rootSvg = inject(RootSvgReferenceDirective).element\n private settingsService = inject(FlowSettingsService);\n\n protected backgroundSignal = this.settingsService.background\n\n protected scaledGap = computed(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n const zoom = this.viewportService.readableViewport().zoom\n\n return zoom * (background.gap ?? defaultGap)\n }\n\n return 0\n })\n\n protected x = computed(() => this.viewportService.readableViewport().x % this.scaledGap())\n\n protected y = computed(() => this.viewportService.readableViewport().y % this.scaledGap())\n\n protected patternColor = computed(() => this.backgroundSignal().color ?? defaultDotColor)\n\n protected patternSize = computed(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n return (this.viewportService.readableViewport().zoom * (background.size ?? defaultDotSize)) / 2\n }\n\n return 0\n })\n\n // Without ID there will be pattern collision for several flows on the page\n // Later pattern ID may be exposed to API\n protected patternId = id();\n protected patternUrl = `url(#${this.patternId})`\n\n constructor() {\n effect(() => {\n const background = this.backgroundSignal()\n\n if (background.type === 'dots') {\n this.rootSvg.style.backgroundColor = background.backgroundColor ?? defaultBg\n }\n\n if (background.type === 'solid') {\n this.rootSvg.style.backgroundColor = background.color\n }\n })\n }\n}\n","<ng-container *ngIf=\"backgroundSignal().type === 'dots'\">\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n</ng-container>\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n\n// TODO: too general purpose nane\n@Directive({ selector: 'svg[rootSvgContext]' })\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService)\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n protected resetConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n this.flowStatusService.setIdleStatus()\n }\n }\n}\n","import { Directive, ElementRef, NgZone, Signal, WritableSignal, computed, effect, inject, signal } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { tap } from 'rxjs';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: 'svg[flowSizeController]',\n host: {\n '[attr.width]': 'flowWidth()',\n '[attr.height]': 'flowHeight()'\n }\n})\nexport class FlowSizeControllerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef)\n private flowSettingsService = inject(FlowSettingsService)\n\n public flowWidth: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view()\n\n return view === 'auto' ? '100%' : view[0]\n })\n\n public flowHeight: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view()\n\n return view === 'auto' ? '100%' : view[1]\n })\n\n constructor() {\n resizable([this.host.nativeElement], inject(NgZone)).pipe(\n tap(([entry]) => {\n this.flowSettingsService.computedFlowWidth.set(entry.contentRect.width)\n this.flowSettingsService.computedFlowHeight.set(entry.contentRect.height)\n }),\n takeUntilDestroyed()\n ).subscribe()\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Injector, Input, OnChanges, OnInit, Output, Signal, SimpleChanges, ViewChild, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport { DynamicNode, Node } from '../../interfaces/node.interface';\nimport { MapContextDirective } from '../../directives/map-context.directive';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { ViewportService } from '../../services/viewport.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';\nimport { HandlePositions } from '../../interfaces/handle-positions.interface';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { skip } from 'rxjs';\nimport { Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceKeeper } from '../../utils/reference-keeper';\nimport { NodesChangeService } from '../../services/node-changes.service';\nimport { EdgeChangesService } from '../../services/edge-changes.service';\nimport { NodeChange } from '../../types/node-change.type';\nimport { ChangesControllerDirective } from '../../directives/changes-controller.directive';\nimport { EdgeChange } from '../../types/edge-change.type';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { Background } from '../../types/background.type';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { FitViewOptions } from '../../interfaces/fit-view-options.interface';\nimport { Optimization } from '../../interfaces/optimization.interface';\nimport { KeyboardShortcuts } from '../../types/keyboard-action.type';\nimport { KeyboardService } from '../../services/keyboard.service';\nimport { transformBackground } from '../../utils/transform-background';\nimport { OverlaysService } from '../../services/overlays.service';\n\nconst connectionControllerHostDirective = {\n directive: ConnectionControllerDirective,\n outputs: ['onConnect']\n}\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: [\n 'onNodesChange',\n 'onNodesChange.position',\n 'onNodesChange.position.single',\n 'onNodesChange.position.many',\n 'onNodesChange.size',\n 'onNodesChange.size.single',\n 'onNodesChange.size.many',\n 'onNodesChange.add',\n 'onNodesChange.add.single',\n 'onNodesChange.add.many',\n 'onNodesChange.remove',\n 'onNodesChange.remove.single',\n 'onNodesChange.remove.many',\n 'onNodesChange.select',\n 'onNodesChange.select.single',\n 'onNodesChange.select.many',\n 'onEdgesChange',\n 'onEdgesChange.detached',\n 'onEdgesChange.detached.single',\n 'onEdgesChange.detached.many',\n 'onEdgesChange.add',\n 'onEdgesChange.add.single',\n 'onEdgesChange.add.many',\n 'onEdgesChange.remove',\n 'onEdgesChange.remove.single',\n 'onEdgesChange.remove.many',\n 'onEdgesChange.select',\n 'onEdgesChange.select.single',\n 'onEdgesChange.select.many',\n ]\n}\n\n@Component({\n selector: 'vflow',\n templateUrl: './vflow.component.html',\n styleUrls: ['./vflow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n DraggableService,\n ViewportService,\n FlowStatusService,\n FlowEntitiesService,\n NodesChangeService,\n EdgeChangesService,\n NodeRenderingService,\n SelectionService,\n FlowSettingsService,\n ComponentEventBusService,\n KeyboardService,\n OverlaysService\n ],\n hostDirectives: [\n connectionControllerHostDirective,\n changesControllerHostDirective\n ]\n})\nexport class VflowComponent implements OnInit {\n // #region DI\n private viewportService = inject(ViewportService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private nodesChangeService = inject(NodesChangeService)\n private edgesChangeService = inject(EdgeChangesService)\n private nodeRenderingService = inject(NodeRenderingService)\n private flowSettingsService = inject(FlowSettingsService)\n private componentEventBusService = inject(ComponentEventBusService)\n private keyboardService = inject(KeyboardService)\n private injector = inject(Injector)\n // #endregion\n\n // #region SETTINGS\n\n /**\n * Size for flow view\n *\n * accepts\n * - absolute size in format [width, height] or\n * - 'auto' to compute size based on parent element size\n */\n @Input()\n public set view(view: [number, number] | 'auto') {\n this.flowSettingsService.view.set(view)\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public set minZoom(value: number) {\n this.flowSettingsService.minZoom.set(value)\n }\n\n /**\n * Maximum zoom value\n */\n @Input()\n public set maxZoom(value: number) {\n this.flowSettingsService.maxZoom.set(value)\n }\n\n /**\n * Object that controls flow direction.\n *\n * For example, if you want to archieve right to left direction\n * then you need to pass these positions { source: 'left', target: 'right' }\n *\n * @deprecated\n */\n @Input()\n public set handlePositions(handlePositions: HandlePositions) {\n this.flowSettingsService.handlePositions.set(handlePositions)\n }\n\n /**\n * Background for flow\n */\n @Input()\n public set background(value: Background | string) {\n this.flowSettingsService.background.set(transformBackground(value))\n }\n\n @Input()\n public optimization: Optimization = {\n computeLayersOnInit: true\n }\n\n /**\n * Global rule if you can or can't select entities\n */\n @Input()\n public set entitiesSelectable(value: boolean) {\n this.flowSettingsService.entitiesSelectable.set(value)\n }\n\n @Input()\n public set keyboardShortcuts(value: KeyboardShortcuts) {\n this.keyboardService.setShortcuts(value)\n }\n\n /**\n * Settings for connection (it renders when user tries to create edge between nodes)\n *\n * You need to pass `ConnectionSettings` in this input.\n */\n @Input({ transform: (settings: ConnectionSettings) => new ConnectionModel(settings) })\n public set connection(connection: ConnectionModel) { this.flowEntitiesService.connection.set(connection) }\n\n public get connection() { return this.flowEntitiesService.connection() }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[] | DynamicNode[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(newModels, this.flowEntitiesService.edges())\n\n this.flowEntitiesService.nodes.set(newModels)\n }\n\n protected nodeModels = computed(() => this.nodeRenderingService.nodes())\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.nodeModels(), newModels)\n\n this.flowEntitiesService.edges.set(newModels)\n }\n\n protected edgeModels = computed(() => this.flowEntitiesService.validEdges())\n // #endregion\n\n // #region OUTPUTS\n /**\n * Event that accumulates all custom node events\n *\n * @experimental\n */\n @Output()\n public onComponentNodeEvent = this.componentEventBusService.event$ as any // TODO: research how to remove as any\n // #endregion\n\n // #region TEMPLATES\n @ContentChild(NodeHtmlTemplateDirective)\n protected nodeTemplateDirective?: NodeHtmlTemplateDirective\n\n @ContentChild(GroupNodeTemplateDirective)\n protected groupNodeTemplateDirective?: GroupNodeTemplateDirective\n\n @ContentChild(EdgeTemplateDirective)\n protected edgeTemplateDirective?: EdgeTemplateDirective\n\n @ContentChild(EdgeLabelHtmlTemplateDirective)\n protected edgeLabelHtmlDirective?: EdgeLabelHtmlTemplateDirective\n\n @ContentChild(ConnectionTemplateDirective)\n protected connectionTemplateDirective?: ConnectionTemplateDirective\n // #endregion\n\n // #region DIRECTIVES\n @ViewChild(MapContextDirective)\n protected mapContext!: MapContextDirective\n\n @ViewChild(SpacePointContextDirective)\n protected spacePointContext!: SpacePointContextDirective\n // #endregion\n\n // #region SIGNAL_API\n /**\n * Signal for reading viewport change\n */\n public readonly viewport = this.viewportService.readableViewport.asReadonly()\n\n /**\n * Signal for reading nodes change\n */\n public readonly nodesChange =\n toSignal(this.nodesChangeService.changes$, { initialValue: [] as NodeChange[] })\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange =\n toSignal(this.edgesChangeService.changes$, { initialValue: [] as EdgeChange[] })\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport)\n .pipe(skip(1)) // skip default value that set by signal\n\n /**\n * Observable with nodes change\n */\n public readonly nodesChange$ = this.nodesChangeService.changes$\n\n /**\n * Observable with edges change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$\n // #endregion\n\n protected markers = this.flowEntitiesService.markers\n\n protected minimap = this.flowEntitiesService.minimap\n\n public ngOnInit(): void {\n this.setInitialNodesOrder()\n }\n\n // #region METHODS_API\n /**\n * Change viewport to specified state\n *\n * @param viewport viewport state\n */\n public viewportTo(viewport: ViewportState): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: viewport, duration: 0 })\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: { zoom }, duration: 0 })\n }\n\n /**\n * Move to specified coordinate\n *\n * @param point point where to move\n */\n public panTo(point: Point): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: point, duration: 0 })\n }\n\n public fitView(options?: FitViewOptions) {\n this.viewportService.fitView(options)\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.node\n }\n\n /**\n * Sync method to get detached edges\n */\n public getDetachedEdges(): Edge[] {\n return this.flowEntitiesService.getDetachedEdges().map(e => e.edge)\n }\n\n /**\n * Convert point received from document to point on the flow\n */\n public documentPointToFlowPoint(point: Point): Point {\n return this.spacePointContext.documentPointToFlowPoint(point)\n }\n // #endregion\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge\n }\n\n private setInitialNodesOrder() {\n if (this.optimization.computeLayersOnInit) {\n\n this.nodeModels().forEach(model => {\n switch (model.node.type) {\n case 'default-group':\n case 'template-group': {\n this.nodeRenderingService.pullNode(model)\n }\n }\n })\n }\n }\n}\n\n","<svg:svg\n rootSvgRef\n rootSvgContext\n rootPointer\n flowSizeController\n class=\"root-svg\"\n #flow\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <g background />\n\n <svg:g\n mapContext\n spacePointContext\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels(); trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels(); trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n <!-- Minimap -->\n <ng-container *ngIf=\"minimap() as minimap\">\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n </ng-container>\n</svg:svg>\n\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { SelectionService } from '../services/selection.service';\nimport { EdgeComponent } from '../components/edge/edge.component';\n\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { NodeComponent } from '../components/node/node.component';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({ selector: '[selectable]' })\nexport class SelectableDirective {\n private flowSettingsService = inject(FlowSettingsService)\n private selectionService = inject(SelectionService)\n private parentEdge = inject(EdgeComponent, { optional: true })\n private parentNode = inject(NodeComponent, { optional: true })\n\n @HostListener('mousedown')\n @HostListener('touchstart')\n protected onMousedown() {\n const entity = this.entity()\n if (entity && this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(entity)\n }\n }\n\n private entity(): FlowEntity | null {\n if (this.parentNode) {\n return this.parentNode.nodeModel\n } else if (this.parentEdge) {\n return this.parentEdge.model\n }\n\n return null\n }\n}\n","import { signal, TemplateRef } from \"@angular/core\";\n\nexport class MinimapModel {\n public template = signal<TemplateRef<unknown> | null>(null)\n}\n","import { Component, computed, inject, Injector, Input, OnInit, signal, TemplateRef, ViewChild } from '@angular/core';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { MinimapModel } from '../../models/minimap.model';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { getViewportForBounds } from '../../utils/viewport';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { ViewportService } from '../../services/viewport.service';\n\nexport type MiniMapPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\n@Component({\n selector: 'mini-map',\n templateUrl: './minimap.component.html',\n styleUrls: [`./minimap.component.scss`]\n})\nexport class MiniMapComponent implements OnInit {\n protected entitiesService = inject(FlowEntitiesService)\n protected flowSettingsService = inject(FlowSettingsService)\n protected viewportService = inject(ViewportService)\n protected injector = inject(Injector)\n\n /**\n * The corner of the flow where to render a mini-map\n */\n @Input()\n public set position(value: MiniMapPosition) {\n this.minimapPosition.set(value)\n }\n\n /**\n * The color outside the viewport (invisible area)\n */\n @Input()\n public maskColor = `rgba(215, 215, 215, 0.6)`\n\n /**\n * The minimap stroke color\n */\n @Input()\n public strokeColor = `rgb(200, 200, 200)`\n\n /**\n * Make a minimap bigger on hover\n */\n @Input()\n public set scaleOnHover(value: boolean) {\n this.scaleOnHoverSignal.set(value)\n }\n\n @ViewChild('minimap', { static: true })\n private minimap!: TemplateRef<unknown>\n\n private readonly minimapOffset = 10\n\n private readonly minimapScale = computed(() => {\n if (this.scaleOnHoverSignal()) {\n return this.hovered() ? 0.4 : 0.2\n }\n\n return 0.2\n })\n\n protected viewportColor = computed(() => this.flowSettingsService.background().color ?? '#fff')\n\n protected hovered = signal(false)\n\n protected minimapPoint = computed(() => {\n switch (this.minimapPosition()) {\n case 'top-left':\n return { x: this.minimapOffset, y: this.minimapOffset }\n case 'top-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.minimapOffset\n }\n case 'bottom-left':\n return {\n x: this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset\n }\n case 'bottom-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset\n }\n }\n })\n\n protected minimapWidth = computed(() =>\n this.flowSettingsService.computedFlowWidth() * this.minimapScale()\n )\n protected minimapHeight = computed(() =>\n this.flowSettingsService.computedFlowHeight() * this.minimapScale()\n )\n\n protected viewportTransform = computed(() => {\n const viewport = this.viewportService.readableViewport();\n let scale = 1 / viewport.zoom\n\n let x = -(viewport.x * this.minimapScale()) * scale\n x /= this.minimapScale()\n\n let y = -(viewport.y * this.minimapScale()) * scale\n y /= this.minimapScale()\n\n scale /= this.minimapScale()\n\n return `translate(${x}, ${y}) scale(${scale})`;\n });\n\n\n protected boundsViewport = computed(() => {\n const nodes = this.entitiesService.nodes()\n\n return getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n -Infinity,\n 1.5,\n 0\n )\n\n })\n\n protected minimapTransform = computed(() => {\n const vport = this.boundsViewport()\n\n const x = vport.x * this.minimapScale()\n const y = vport.y * this.minimapScale()\n const scale = vport.zoom * this.minimapScale()\n\n return `translate(${x} ${y}) scale(${scale})`\n })\n\n private minimapPosition = signal<MiniMapPosition>('bottom-right')\n\n private scaleOnHoverSignal = signal(false)\n\n public ngOnInit(): void {\n const model = new MinimapModel()\n model.template.set(this.minimap)\n\n this.entitiesService.minimap.set(model)\n }\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node\n }\n}\n","<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n","import { computed, inject, signal, TemplateRef } from \"@angular/core\";\nimport { Position } from \"../types/position.type\";\nimport { NodeModel } from \"./node.model\";\nimport { ViewportService } from \"../services/viewport.service\";\n\nexport class ToolbarModel {\n public position = signal<Position>('top')\n public template = signal<TemplateRef<unknown> | null>(null)\n\n public offset = signal(10)\n\n public point = computed(() => {\n switch (this.position()) {\n case 'top':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: -this.size().height - this.offset()\n }\n case 'bottom':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: this.node.size().height + this.offset()\n }\n case 'left':\n return {\n x: -this.size().width - this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2\n }\n case 'right':\n return {\n x: this.node.size().width + this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2\n }\n }\n })\n\n public transform = computed(() => `translate(${this.point().x}, ${this.point().y})`)\n\n public size = signal({ width: 0, height: 0 })\n\n constructor(public node: NodeModel) { }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { ToolbarModel } from '../../models/toolbar.model';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\n\n@Component({\n selector: 'node-toolbar',\n template: `\n <ng-template #toolbar>\n <div class=\"wrapper\" nodeToolbarWrapper [model]=\"model\">\n <ng-content />\n </div>\n </ng-template>\n `,\n styles: [`\n .wrapper {\n width: max-content;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NodeToolbarComponent implements OnInit, OnDestroy {\n private overlaysService = inject(OverlaysService);\n private nodeService = inject(NodeAccessorService)\n\n @Input()\n public set position(value: Position) {\n this.model.position.set(value);\n }\n\n @ViewChild('toolbar', { static: true })\n public toolbarContentTemplate!: TemplateRef<unknown>;\n\n protected model = new ToolbarModel(this.nodeService.model()!)\n\n public ngOnInit(): void {\n this.model.template.set(this.toolbarContentTemplate)\n\n this.overlaysService.addToolbar(this.model)\n }\n\n public ngOnDestroy(): void {\n this.overlaysService.removeToolbar(this.model)\n }\n}\n\n@Directive({ selector: '[nodeToolbarWrapper]' })\nexport class NodeToolbarWrapperDirective implements OnInit {\n private element = inject<ElementRef<HTMLElement>>(ElementRef)\n\n @Input()\n public model!: ToolbarModel\n\n public ngOnInit(): void {\n this.model.size.set({\n width: this.element.nativeElement.clientWidth,\n height: this.element.nativeElement.clientHeight\n })\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { NodeAccessorService } from '../services/node-accessor.service';\n\n@Directive({\n selector: '[dragHandle]',\n host: {\n 'class': 'vflow-drag-handle'\n }\n})\nexport class DragHandleDirective {\n private nodeAccessor = inject(NodeAccessorService)\n\n private get model() {\n return this.nodeAccessor.model()!\n }\n\n constructor() {\n this.model.dragHandlesCount.update((count) => count + 1)\n\n inject(DestroyRef).onDestroy(() => {\n this.model.dragHandlesCount.update(count => count - 1)\n })\n }\n}\n","import { KeyValuePipe, NgComponentOutlet, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VflowComponent } from './components/vflow/vflow.component';\nimport { NodeComponent } from './components/node/node.component';\nimport { MapContextDirective } from './directives/map-context.directive';\nimport { EdgeComponent } from './components/edge/edge.component';\nimport { EdgeLabelComponent } from './components/edge-label/edge-label.component';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from './directives/template.directive';\nimport { ConnectionComponent } from './components/connection/connection.component';\nimport { SpacePointContextDirective } from './directives/space-point-context.directive';\nimport { RootSvgReferenceDirective } from './directives/reference.directive';\nimport { RootSvgContextDirective } from './directives/root-svg-context.directive';\nimport { DefsComponent } from './components/defs/defs.component';\nimport { HandleComponent } from './components/handle/handle.component';\nimport { HandleSizeControllerDirective } from './directives/handle-size-controller.directive';\nimport { SelectableDirective } from './directives/selectable.directive';\nimport { PointerDirective } from './directives/pointer.directive';\nimport { RootPointerDirective } from './directives/root-pointer.directive';\nimport { BackgroundComponent } from './components/background/background.component';\nimport { FlowSizeControllerDirective } from './directives/flow-size-controller.directive';\nimport { ResizableComponent } from './public-components/resizable/resizable.component';\nimport { MiniMapComponent } from './public-components/minimap/minimap.component';\nimport { DefaultNodeComponent } from './components/default-node/default-node.component';\nimport { NodeToolbarComponent, NodeToolbarWrapperDirective } from './public-components/node-toolbar/node-toolbar.component';\nimport { DragHandleDirective } from './directives/drag-handle.directive';\n\nconst components = [\n VflowComponent,\n NodeComponent,\n DefaultNodeComponent,\n EdgeComponent,\n EdgeLabelComponent,\n ConnectionComponent,\n HandleComponent,\n DefsComponent,\n BackgroundComponent,\n ResizableComponent,\n MiniMapComponent,\n NodeToolbarComponent\n]\n\nconst directives = [\n SpacePointContextDirective,\n MapContextDirective,\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n HandleSizeControllerDirective,\n SelectableDirective,\n DragHandleDirective,\n PointerDirective,\n RootPointerDirective,\n FlowSizeControllerDirective,\n NodeToolbarWrapperDirective\n]\n\nconst templateDirectives = [\n NodeHtmlTemplateDirective,\n GroupNodeTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective\n]\n\n@NgModule({\n imports: [NgIf, NgFor, NgTemplateOutlet, NgComponentOutlet, KeyValuePipe],\n exports: [\n VflowComponent,\n HandleComponent,\n ResizableComponent,\n SelectableDirective,\n MiniMapComponent,\n NodeToolbarComponent,\n DragHandleDirective,\n ...templateDirectives\n ],\n declarations: [...components, ...directives, ...templateDirectives],\n})\nexport class VflowModule { }\n","import { Provider, signal } from \"@angular/core\";\nimport { ComponentEventBusService } from \"../services/component-event-bus.service\";\nimport { HandleService } from \"../services/handle.service\";\nimport { NodeModel } from \"../models/node.model\";\nimport { FlowSettingsService } from \"../services/flow-settings.service\";\nimport { FlowEntitiesService } from \"../services/flow-entities.service\";\nimport { NodeAccessorService } from \"../services/node-accessor.service\";\nimport { RootPointerDirective } from \"../directives/root-pointer.directive\";\nimport { of } from \"rxjs\";\nimport { ViewportService } from \"../services/viewport.service\";\nimport { SpacePointContextDirective } from \"../directives/space-point-context.directive\";\nimport { Point } from \"../interfaces/point.interface\";\nimport { SelectionService } from \"../services/selection.service\";\n\nconst mockModel = () => new NodeModel({ id: 'mock', type: 'default', point: { x: 0, y: 0 } })\n\nexport function provideCustomNodeMocks(): Provider[] {\n return [\n {\n provide: ComponentEventBusService,\n useValue: {\n pushEvent: () => { }\n }\n },\n {\n provide: HandleService,\n useFactory: () => ({\n node: signal(mockModel()),\n createHandle: () => { },\n destroyHandle: () => { },\n })\n },\n {\n provide: RootPointerDirective,\n useValue: {\n pointerMovement$: of({\n x: 0,\n y: 0,\n movementX: 0,\n movementY: 0,\n target: null,\n originalEvent: null\n }),\n documentPointerEnd$: of(null)\n }\n },\n {\n provide: SpacePointContextDirective,\n useValue: {\n documentPointToFlowPoint: (point: Point) => point\n }\n },\n {\n provide: NodeAccessorService,\n useFactory: () => ({\n model: signal(mockModel())\n })\n },\n {\n provide: SelectionService,\n useValue: {\n select: () => { },\n }\n },\n FlowSettingsService,\n FlowEntitiesService,\n ViewportService\n ]\n}\n","// Modules\nexport * from './lib/vflow/vflow.module';\n\n// Interfaces\nexport * from './lib/vflow/interfaces/node.interface';\nexport * from './lib/vflow/interfaces/point.interface';\nexport * from './lib/vflow/interfaces/edge.interface';\nexport * from './lib/vflow/interfaces/edge-label.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection-settings.interface';\nexport * from './lib/vflow/interfaces/handle-positions.interface';\nexport * from './lib/vflow/interfaces/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\nexport * from './lib/vflow/interfaces/component-node-event.interface';\nexport * from './lib/vflow/interfaces/fit-view-options.interface';\nexport * from './lib/vflow/interfaces/optimization.interface';\n\n// Types\nexport * from './lib/vflow/types/node-change.type';\nexport * from './lib/vflow/types/edge-change.type';\nexport * from './lib/vflow/types/position.type';\nexport * from './lib/vflow/types/background.type';\nexport * from './lib/vflow/types/connection-mode.type';\nexport * from './lib/vflow/types/keyboard-action.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/components/handle/handle.component';\nexport * from './lib/vflow/public-components/custom-node/custom-node.component';\nexport * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component';\nexport * from './lib/vflow/public-components/resizable/resizable.component';\nexport * from './lib/vflow/public-components/minimap/minimap.component'\nexport * from './lib/vflow/public-components/node-toolbar/node-toolbar.component'\n\n// Directives\nexport * from './lib/vflow/directives/template.directive';\nexport * from './lib/vflow/directives/connection-controller.directive';\nexport * from './lib/vflow/directives/changes-controller.directive';\nexport * from './lib/vflow/directives/selectable.directive';\nexport * from './lib/vflow/directives/drag-handle.directive';\n\n// Testing\nexport * from './lib/vflow/testing-utils/provide-custom-node-mocks';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PointerDirective","i2.DefaultNodeComponent","i3.HandleComponent","i4.ResizableComponent","i5.HandleSizeControllerDirective","i6.PointerDirective","i2.EdgeLabelComponent","i3","i4.NodeComponent","i5.EdgeComponent","i6.ConnectionComponent","i7.DefsComponent","i8.BackgroundComponent","i9.SpacePointContextDirective","i10.MapContextDirective","i11.RootSvgReferenceDirective","i12.RootSvgContextDirective","i13.RootPointerDirective","i14.FlowSizeControllerDirective"],"mappings":";;;;;;;;;;;AAIM,SAAU,cAAc,CAAC,KAAkB,EAAA;AAC/C,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AAC3C,KAAA;IAED,IAAI,GAAG,GAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAA;AAEzE,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;AAC/B,QAAA,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACtC,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,IAAe,EAAA;IAChC,OAAO;AACL,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACjB,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACjB,QAAA,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK;AACtC,QAAA,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM;KACxC,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAO,EAAA;IACtC,OAAO;QACL,CAAC;QACD,CAAC;QACD,KAAK,EAAE,EAAE,GAAG,CAAC;QACb,MAAM,EAAE,EAAE,GAAG,CAAC;KACf,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAS,EAAE,IAAS,EAAA;IAC5C,OAAO;AACL,QAAA,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3B,QAAA,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3B,QAAA,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AAC9B,QAAA,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;KAC/B,CAAA;AACH;;MCvCa,eAAe,CAAA;AAM1B,IAAA,WAAA,CAAmB,QAA4B,EAAA;QAA5B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAoB;QAC7C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAA;QAErC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAC7E;AAEO,IAAA,aAAa,CAAC,QAA4B,EAAA;QAChD,MAAM,UAAU,GAAG,EAAE,CAAA;AAErB,QAAA,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAEjC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,UAAU,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;AACnD,SAAA;QAED,IAAI,QAAQ,CAAC,SAAS,EAAE;AACtB,YAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACpC,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;AACF,CAAA;AAED;;AAEG;AACH,MAAM,gBAAgB,GAAG,CAAC,UAAsB,KAAI;AAClD,IAAA,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,iCAAiC,GAAG,CAAC,UAAsB,KAAI;IACnE,OAAO,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,CAAA;AACvF,CAAC;;AC9CK,SAAU,QAAQ,CAAC,GAAW,EAAA;AAClC,IAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnC,QAAA,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAEpC,OAAO,CAAC,GAAG,CAAC,CAAA;KACb,EAAE,CAAC,CAAC,CAAA;AACP;;MCIa,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAc,EAAE,EAAE;;YAE9C,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AACzD,SAAA,CAAC,CAAA;AAEc,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAc,EAAE,EAAE;;YAE9C,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AACzD,SAAA,CAAC,CAAA;AAEc,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;AAE1B,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAG,CAAC,CAAC,CAAA;AAC7F,SAAC,CAAC,CAAA;QAEc,IAAU,CAAA,UAAA,GAAG,MAAM,CAAkB,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7D,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;YAE5C,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;AAC5B,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;AACzB,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3D,oBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC3C,iBAAA;AAED,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;AACvB,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;AACzD,oBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AACzC,iBAAA;AACH,aAAC,CAAC,CAAA;YAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAA;AAC1D,YAAA,IAAI,gBAAgB,EAAE;gBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAA;AACvD,gBAAA,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACvC,aAAA;AAED,YAAA,OAAO,UAAU,CAAA;AACnB,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,QAAQ,GAAyB,QAAQ,CAAC,MAAM;YACrD,GAAG,IAAI,CAAC,KAAK,EAAE;YACf,GAAG,IAAI,CAAC,KAAK,EAAE;AAChB,SAAA,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,OAAO,GAAwC,MAAM,CAAC,IAAI,CAAC,CAAA;AASnE,KAAA;AAPQ,IAAA,OAAO,CAAI,EAAU,EAAA;QAC1B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAA6B,CAAA;KACnF;IAEM,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;KAC9C;+GAxDU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACNK,SAAA,oBAAoB,CAClC,MAAY,EACZ,KAAa,EACb,MAAc,EACd,OAAe,EACf,OAAe,EACf,OAAe,EAAA;AAEf,IAAA,MAAM,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AACrD,IAAA,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC;IAEnD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAErC,CAAC;AAEK,SAAU,KAAK,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAA;AACnD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5C;;MCrBa,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;AAExC;;;;AAIG;AACI,QAAA,IAAA,CAAA,eAAe,GAAoC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAErG;;AAEG;QACI,IAAI,CAAA,IAAA,GAA8C,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAE3E;;AAEG;AACI,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAEpC;;AAEG;AACI,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAEnB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAa,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AACzE,KAAA;+GA9BY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCOE,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAC7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AASzD;;;AAGG;QACa,IAAgB,CAAA,gBAAA,GAAqC,MAAM,CAAC;AAC1E,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,KAAK,EAAE,eAAe,CAAC,kBAAkB,EAAE;AAC3C,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA,CAAC,CAAA;AAEF;;;;AAIG;QACa,IAAgB,CAAA,gBAAA,GAAkC,MAAM,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC,CAAA;AA8B/G,KAAA;AApDC;;;;AAIG;AACK,IAAA,OAAO,kBAAkB,GAAA,EAAoB,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA,EAAE;;AAqB9E,IAAA,OAAO,CAAC,OAAA,GAA0B,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAA;AAC9E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AAEtD,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAChC,cAAc,CAAC,KAAK,CAAC,EACrB,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,EAC5C,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAC7C,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAClC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAClC,OAAO,CAAC,OAAO,IAAI,EAAE,CACtB,CAAA;AAED,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAA;AAEtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;KACvE;AAEO,IAAA,cAAc,CAAC,OAAiB,EAAA;QACtC,OAAO,CAAC,OAAO,EAAE,MAAM;;AAErB,cAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;AAE9B,cAAE,OAAO;iBACN,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;iBAClF,MAAM,CAAC,CAAC,IAAI,KAAwB,CAAC,CAAC,IAAI,CAAC,CAAA;KACjD;+GAvDU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;ACVL,SAAU,SAAS,CAAI,IAAmB,EAAA;IAC9C,OAAO,IAAI,KAAK,SAAS,CAAA;AAC3B;;MCGa,yBAAyB,CAAA;AAHtC,IAAA,WAAA,GAAA;AAIkB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA4B,UAAU,CAAC,CAAC,aAAa,CAAA;AACtF,KAAA;+GAFY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAzB,yBAAyB,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;;;SCJe,KAAK,GAAA;IACnB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;IAC1D,MAAM,cAAc,GAAG,2CAA2C,CAAA;IAClE,MAAM,gBAAgB,GAAG,8BAA8B,CAAA;IACvD,MAAM,YAAY,GAAG,qBAAqB,CAAA;IAE1C,IAAI,EAAE,GAAG,IAAI,CAAA;AAEb,IAAA,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAClC,EAAE,GAAG,OAAgB,CAAC;AACvB,KAAA;AAAM,SAAA,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACvC,EAAE,GAAG,KAAc,CAAC;AACrB,KAAA;AAAM,SAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC3C,EAAE,GAAG,SAAkB,CAAC;AACzB,KAAA;AAAM,SAAA,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACpC,EAAE,GAAG,SAAkB,CAAC;AACzB,KAAA;SAAM,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACzC,EAAE,GAAG,OAAgB,CAAC;AACvB,KAAA;AAED,IAAA,OAAO,EAAE,CAAA;AACX;;MCda,eAAe,CAAA;AAY1B,IAAA,WAAA,GAAA;QAXQ,IAAO,CAAA,OAAA,GAAsC,MAAM,CAAC;AAC1D,YAAA,cAAc,EAAE;gBACd,KAAK,EAAE,KAAK,OAAO,GAAG,UAAU,GAAG,aAAa;gBAChD,KAAK,EAAE,KAAK,OAAO,GAAG,WAAW,GAAG,cAAc;AACnD,aAAA;AACF,SAAA,CAAC,CAAC;AAEK,QAAA,IAAA,CAAA,aAAa,GAAoC;AACvD,YAAA,cAAc,EAAE,KAAK;SACtB,CAAC;AAGA,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7B,SAAS,CAAC,MACR,KAAK,CACH,SAAS,CAAgB,QAAQ,EAAE,SAAS,CAAC,CAAC,IAAI,CAChD,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAwB,CAAC,IAAI,EAAE,CAAC;gBAEhE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAwB,CAAC,GAAG,IAAI,CAAC;AACrD,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CACH,EAED,SAAS,CAAgB,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAC9C,GAAG,CAAC,KAAK,IAAG;AACV,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAwB,CAAC,IAAI,EAAE,CAAC;gBAEhE,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAwB,CAAC,GAAG,KAAK,CAAC;AACtD,iBAAA;AACF,aAAA;SACF,CAAC,CACH,CACF,CACF,EACD,kBAAkB,EAAE,CACrB,CAAC,SAAS,EAAE,CAAC;KACf;AAEM,IAAA,YAAY,CAAC,UAA6B,EAAA;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;KACnE;AAEM,IAAA,cAAc,CAAC,MAAsB,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;KAClC;+GAnDU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;MCYE,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAExC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAwB,CAAA;AAE/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC5C,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAI;AAC7B,YAAA,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AAC1B,gBAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAA;AAEpC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AACvC,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;;gBAGvC,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,CAAA;;gBAE9C,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;gBAEtD,IAAI,OAAO,IAAI,eAAe,EAAE;AAC9B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAClB,iBAAA;AACF,aAAA;SACF,CAAC,EACF,kBAAkB,EAAE,CACrB,CAAC,SAAS,EAAE,CAAA;AAwBd,KAAA;aAlDgB,IAAK,CAAA,KAAA,GAAG,CAAH,CAAI,EAAA;AA6BjB,IAAA,WAAW,CAAC,QAA8B,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;KAC9B;AAEM,IAAA,MAAM,CAAC,MAAyB,EAAA;;;AAGrC,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE,EAAE;YACtB,OAAM;AACP,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;;YAE1D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AACxE,SAAA;AAED,QAAA,IAAI,MAAM,EAAE;;AAEV,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,SAAA;KACF;+GAlDU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;MCNE,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAA;AACnD,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa,CAAA;AAChE,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAElD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAErC,IAAoB,CAAA,oBAAA,GAAkC,EAAE,CAAA;;AAGxD,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,MAAK;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAA;AACxD,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;AAE5B,YAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;gBACrC,OAAM;AACP,aAAA;;YAGD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACzE,gBAAA,IAAI,CAAC,gBAAgB;AAClB,qBAAA,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAE9C,OAAM;AACP,aAAA;;YAGD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;;AAExE,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAA;AAElE,gBAAA,IAAI,CAAC,gBAAgB;AAClB,qBAAA,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxC,IAAI,CACH,IAAI,CAAC,YAAY,CAAC,SAAS,EAC3B,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CACrD,CAAA;gBAEH,OAAM;AACP,aAAA;;YAGD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrE,gBAAA,IAAI,CAAC,gBAAgB;AAClB,qBAAA,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;qBACxC,IAAI,CACH,IAAI,CAAC,YAAY,CAAC,SAAS,EAC3B,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAC3D,CAAA;gBAEH,OAAM;AACP,aAAA;AACH,SAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;AAiBvB,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,EAAE,SAAS,EAAa,KAAI;;AAEhD,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC,CAAA;AAEjF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;AAChE,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,EAAE,SAAS,EAAa,KAAI;YACrD,IAAI,CAAC,oBAAoB,GAAG;AAC1B,gBAAA,KAAK,EAAE,2BAA2B,CAAC,SAAS,CAAC;aAC9C,CAAA;AACH,SAAC,CAAA;QAEO,IAAa,CAAA,aAAA,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAa,KAAI;YAChE,IAAI,CAAC,oBAAoB,GAAG;gBAC1B,GAAG,IAAI,CAAC,oBAAoB;AAC5B,gBAAA,GAAG,EAAE,2BAA2B,CAAC,SAAS,CAAC;AAC3C,gBAAA,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC;aAC9B,CAAA;YAED,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAC/B,IAAI,CAAC,oBAA4C,CAClD,CAAA;AACH,SAAC,CAAA;AAEO,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,KAAY,KAAI;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC7D,OAAQ,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;AACjE,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AACF,KAAA;IA7CQ,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,EAA0B;AAC/C,aAAA,WAAW,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC;AACrF,aAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;AAC5B,aAAA,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AACjC,aAAA,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AAC3B,aAAA,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;AAEhC,QAAA,IAAI,CAAC,gBAAgB;AAClB,aAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvB,aAAA,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;KAC7B;+GAvEU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAA;;AA4GxC,MAAM,2BAA2B,GAAG,CAAC,SAAwB,MAC1D,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAA;AAEzD,MAAM,QAAQ,GAAG,CAAC,QAAa,KAAyB;IACtD,IAAI,QAAQ,YAAY,KAAK,IAAI,QAAQ,CAAC,MAAM,YAAY,OAAO,EAAE;QACnE,OAAO,QAAQ,CAAC,MAAM,CAAA;AACvB,KAAA;AAED,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC;;AC/HM,MAAM,KAAK,GAAG,CAAC,GAAW,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;;MCWpD,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAsFvD,KAAA;AApFC;;;;;AAKG;IACI,MAAM,CAAC,OAAgB,EAAE,KAAgB,EAAA;QAC9C,MAAM,CAAC,OAAO,CAAC;aACZ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;KACrC;AAED;;;;;AAKG;AACI,IAAA,OAAO,CAAC,OAAgB,EAAA;QAC7B,MAAM,CAAC,OAAO,CAAC;aACZ,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;KACjC;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAC,OAAgB,EAAA;QAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;KAClC;AAED;;;;;AAKG;AACK,IAAA,eAAe,CAAC,KAAgB,EAAA;QACtC,IAAI,SAAS,GAAgB,EAAE,CAAA;QAC/B,IAAI,gBAAgB,GAAY,EAAE,CAAA;AAElC,QAAA,MAAM,eAAe,GAAG,CAAC,KAAY,KAAI;;AAEvC,YAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE,EAAE;gBAC5B,OAAO,CAAC,CAAE,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;AACjE,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAA;AAED,QAAA,OAAO,IAAI,EAAE;aACV,MAAM,CAAC,eAAe,CAAC;AACvB,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAgB,KAAI;AAChC,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YAEpC,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK;gBACxC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC3B,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5B,aAAA,CAAC,CAAC,CAAA;AACL,SAAC,CAAC;AAED,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,KAAgB,KAAI;YAC/B,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACjC,gBAAA,IAAI,KAAK,GAAG;AACV,oBAAA,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,oBAAA,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC9C,CAAA;AAED,gBAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACxB,aAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;KACL;AAEO,IAAA,YAAY,CAAC,KAAgB,EAAA;QACnC,OAAO,KAAK,CAAC,QAAQ,EAAE;cACnB,IAAI,CAAC,eAAe;AACnB,iBAAA,KAAK,EAAE;;AAEP,iBAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;;AAEtD,cAAE,CAAC,KAAK,CAAC,CAAA;KACZ;+GApFU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;AA0FX,SAAS,QAAQ,CAAC,KAAgB,EAAE,KAAY,EAAA;AAC9C,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;;AAE7B,IAAA,IAAI,MAAM,EAAE;QACV,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AACrE,QAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QAE9B,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AACvE,QAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/B,KAAA;AAED,IAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AAC7B;;MC5Ga,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA2B,WAAW,CAAC,CAAA;AACnE,KAAA;+GAFY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAArB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAA;;MAM/B,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACzC,KAAA;+GAFY,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA3B,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,SAAS;mBAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAA;;MAMrC,8BAA8B,CAAA;AAD3C,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACzC,KAAA;+GAFY,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA9B,8BAA8B,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,SAAS;mBAAC,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAA;;MAMxC,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACzC,KAAA;+GAFY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAzB,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,SAAS;mBAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAA;;MAMnC,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACzC,KAAA;+GAFY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA1B,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAA;;MAMpC,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACzC,KAAA;+GAFY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;mBAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAA;;;ACzB9B,SAAA,eAAe,CAAC,KAAkB,EAAE,KAAkB,EAAA;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;QACxC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;AAElB,QAAA,OAAO,GAAG,CAAA;KACX,EAAE,EAAqC,CAAC,CAAA;AAEzC,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACtC,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACxC,KAAC,CAAC,CAAA;AACJ;;MCoBa,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAuB9E,KAAA;IArBQ,aAAa,GAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;KAClD;IAEM,wBAAwB,CAAC,MAAiB,EAAE,YAAyB,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;KAClF;IAEM,6BAA6B,CAClC,KAAc,EACd,MAAiB,EACjB,MAAiB,EACjB,YAAyB,EACzB,YAAyB,EAAA;QAEzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;KACpH;AAEM,IAAA,sBAAsB,CAAC,MAAiB,EAAE,MAAiB,EAAE,YAAyB,EAAE,YAAyB,EAAA;QACtH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;KACtG;+GAvBU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;AA2BX;;;;AAIG;AACa,SAAA,kBAAkB,CAAC,GAAG,OAAmB,EAAA;IACvD,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,MAAM,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,GAAG,OAAO,CAAA;;AAE7C,QAAA,WAAW,EAAE,CAAA;;AAEb,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAA;AAC1D,KAAA;AACH;;ACvEA;;;;;;;;AAQG;AACG,SAAU,eAAe,CAAC,UAA8B,EAAA;IAC5D,MAAM,MAAM,GAAG,EAAwB,CAAA;IAEvC,IAAI,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvD,QAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;AACjC,QAAA,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;AAC9C,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;AACjC,QAAA,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;AAC9C,KAAA;IAED,IAAI,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvD,QAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;AACjC,QAAA,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;AAC9C,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;AACjC,QAAA,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;AAC9C,KAAA;AAED,IAAA,OAAO,MAAM,CAAA;AACf;;MCnBa,6BAA6B,CAAA;AAJ1C,IAAA,WAAA,GAAA;AAKE;;;;;;;AAOG;AAEI,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAc,CAAA;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAE/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA;AAE1C,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,gBAAgB,EAAE;AACrC,gBAAA,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;AAClC,gBAAA,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;AAClC,gBAAA,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;AAC9C,gBAAA,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;AAE9C,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBACvB,MAAM,QAAQ,GAAG,eAAe,CAAC;AAC/B,wBAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;AAC7B,wBAAA,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;AACzC,wBAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;AAC7B,wBAAA,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;AAC1C,qBAAA,CAAC,CAAA;AAEF,oBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;AACxB,oBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;AACxB,oBAAA,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;AACpC,oBAAA,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;AACrC,iBAAA;AAED,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAC/B,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AAE/B,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,CAAA;AAChD,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,CAAA;gBAEhD,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAA;AAC7D,gBAAA,MAAM,UAAU,GAAG;AACjB,oBAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAClC,oBAAA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc;iBAC3D,CAAA;AAED,gBAAA,IAAI,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AAChC,iBAAA;AACF,aAAA;AACH,SAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;AAErB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,IAAI,KAAK,QAAQ,CACxD,CAAA;AAiFF,KAAA;AA/EQ,IAAA,eAAe,CAAC,MAAmB,EAAA;QACxC,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;KACvE;AAEM,IAAA,kBAAkB,CAAC,MAAmB,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA;AAE1C,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE;AACvC,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;AAClC,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAA;AAC9B,YAAA,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;YAC9C,IAAI,YAAY,GAAG,MAAM,CAAA;AAEzB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;;gBAEvB,MAAM,QAAQ,GAAG,eAAe,CAAC;AAC/B,oBAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;AAC7B,oBAAA,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;oBACzC,MAAM,EAAE,MAAM,CAAC,UAAU;AACzB,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA,CAAC,CAAA;AAEF,gBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;AACxB,gBAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;AACxB,gBAAA,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;AACpC,gBAAA,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;AACrC,aAAA;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;AAC5D,gBAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;AACtB,gBAAA,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;AACtB,gBAAA,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE;AACvC,gBAAA,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE;AACxC,aAAA,CAAC,CAAA;;;AAIF,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;;;YAI7C,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAC9C,KAAK,EACL,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EACxC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CACpC,CAAA;AACF,SAAA;KACF;AAEM,IAAA,uBAAuB,CAAC,YAAyB,EAAA;AACtD,QAAA,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;;QAG9B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA;AAC1C,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,uBAAuB,EAAE;AAC5C,YAAA,IAAI,CAAC,aAAa,CAAC,wBAAwB,CACzC,MAAM,CAAC,OAAO,CAAC,MAAM,EACrB,MAAM,CAAC,OAAO,CAAC,YAAY,CAC5B,CAAA;AACF,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,MAAmB,EAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAA;AAE1C,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,uBAAuB,EAAE;AAC5C,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;AACpC,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;AAChD,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;AACpC,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;YAEhD,kBAAkB;;AAEhB,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,MAAO,EAAE,MAAO,EAAE,YAAa,EAAE,YAAa,CAAC;;YAE/F,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CACzC,CAAA;AACF,SAAA;KACF;+GA1IU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;8BAWQ,SAAS,EAAA,CAAA;sBADf,MAAM;;;MChBI,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAyB,CAAA;AAE/C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;AAK5C,KAAA;AAHQ,IAAA,SAAS,CAAC,KAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACzB;+GAPU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA,EAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;MCGW,uBAAuB,CAAA;AAD7C,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAYzC;;AAEG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAExB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAgB,SAAS,CAAC,CAAA;AAiC/C,KAAA;IA3CC,IACW,SAAS,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KACzB;IASM,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,EAAE;AACf,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,EAAE,CAAA;KACf;IAEO,WAAW,GAAA;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;AAE9C,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAA;AACzD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,KAAK,GAAI,IAAgC,CAAC,IAAI,CAAC,CAAA;YAErD,IAAI,KAAK,YAAY,YAAY,EAAE;AACjC,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AAC1B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CACV,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,IACxC,OAAO,CAAC,IAAI,CACV,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtB,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE;AACjC,gBAAA,YAAY,EAAE,KAAK;AACpB,aAAA,CAAC,CAAA;AACJ,SAAC,CAAC,CAAC,CACN,CACF,CAAA;KACF;;+GApDmB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAD5C,SAAS;8BAYG,SAAS,EAAA,CAAA;sBADnB,KAAK;;;ACZF,MAAgB,mBAAiC,SAAQ,uBAA0B,CAAA;IAOvE,QAAQ,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,SAAA;QAED,KAAK,CAAC,QAAQ,EAAE,CAAA;KACjB;+GAbmB,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC,SAAS;8BAMQ,IAAI,EAAA,CAAA;sBADnB,KAAK;;;ACJF,MAAgB,0BAAwC,SAAQ,uBAA0B,CAAA;IAO9E,QAAQ,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAC3B,SAAA;QAED,KAAK,CAAC,QAAQ,EAAE,CAAA;KACjB;+GAbmB,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA1B,0BAA0B,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAD/C,SAAS;8BAMQ,IAAI,EAAA,CAAA;sBADnB,KAAK;;;ACgGF,SAAU,YAAY,CAAI,IAAwB,EAAA;AACtD,IAAA,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAA;AACzC,CAAC;AAEK,SAAU,aAAa,CAAI,IAAwB,EAAA;AACvD,IAAA,OAAO,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAA;AACzC,CAAC;AAEK,SAAU,qBAAqB,CAAI,IAAU,EAAA;IACjD,OAAO,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrD,CAAC;AAEK,SAAU,sBAAsB,CAAI,IAAiB,EAAA;IACzD,OAAO,0BAA0B,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5D,CAAC;AAEK,SAAU,oBAAoB,CAAI,IAAU,EAAA;AAChD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA;AACtC,CAAC;AAEK,SAAU,qBAAqB,CAAI,IAAiB,EAAA;AACxD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA;AACtC,CAAC;AAEK,SAAU,mBAAmB,CAAC,IAAU,EAAA;AAC5C,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;AAChC,CAAC;AAEK,SAAU,oBAAoB,CAAC,IAAiB,EAAA;AACpD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;AAChC,CAAC;AAEK,SAAU,wBAAwB,CAAC,IAAU,EAAA;AACjD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA;AACtC,CAAC;AAEK,SAAU,yBAAyB,CAAC,IAAiB,EAAA;AACzD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA;AACtC,CAAC;AAEK,SAAU,yBAAyB,CAAI,IAAU,EAAA;AACrD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAA;AACvC,CAAC;AAEK,SAAU,0BAA0B,CAAI,IAAiB,EAAA;AAC7D,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAA;AACvC;;AC1IA;MACa,SAAS,CAAA;aACL,IAAY,CAAA,YAAA,GAAG,GAAH,CAAM,EAAA;aAClB,IAAa,CAAA,aAAA,GAAG,EAAH,CAAK,EAAA;aAClB,IAAY,CAAA,YAAA,GAAG,SAAH,CAAY,EAAA;AAmGvC,IAAA,WAAA,CACS,IAA8B,EAAA;QAA9B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAA0B;AAlG/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAA;AAEhD,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAC7D,SAAS,CAAC,uBAAuB,CAAC,CACnC,CAAA;AAEO,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAS,CAAA;AAE1C,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CACrB,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,EACpD;AACE,YAAA,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,SAAA,CACF,CAAA;AAEM,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;AAE9B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;AACtC,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAE/B,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAA;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAEvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACtB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAEtB,OAAO,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AACrB,gBAAA,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AAErB,gBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;AACzB,aAAA;AAED,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AACjB,SAAC,CAAC,CAAA;QAEK,IAAc,CAAA,cAAA,GAAG,QAAQ,CAAC,MAC/B,CAAA,UAAA,EAAa,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAC9D,CAAA;;AAGM,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAA;AAClF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAA;AAElF,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAgB,EAAE,CAAC,CAAA;AAEnC,QAAA,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAErC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;AAExB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;;QAGnB,IAAY,CAAA,YAAA,GAAG,EAAE,CAAA;;QAG1B,IAAe,CAAA,eAAA,GACpB,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjD,0BAA0B,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;AAGnD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;;AAG9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;YACzC,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;aAC3B,CAAA;AACH,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACvB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAC9E,CAAA;AAEM,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACxE,CAAA;AAEM,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;AAEtC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAA;AAE1D,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;AAK5C,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC7B,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;AAChC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACnC,aAAA;AACF,SAAA;AAED,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;AAC9B,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACjC,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,KAAK,EAAE;AAC/C,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;AACxB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3B,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,SAAS,EAAE;AACnD,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;AAChC,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACnC,aAAA;AACF,SAAA;KACF;IAEM,QAAQ,CAAC,KAAY,EAAE,QAAiB,EAAA;AAC7C,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACpC,SAAA;KACF;AAED;;AAEG;IACI,gCAAgC,GAAA;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QAEtB,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,eAAe,CAAC;YACrB,KAAK,gBAAgB,EAAE;AACrB,gBAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;oBACvB,MAAM,CAAC,MAAK;AACV,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;4BACZ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,YAAY;4BAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,SAAS,CAAC,aAAa;AACnD,yBAAA,CAAC,CAAA;AACJ,qBAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;AAChC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACZ,wBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,YAAY;AAC3C,wBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,aAAa;AAC/C,qBAAA,CAAC,CAAA;AACH,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,eAAe,EAAE;AACzD,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,CAAC,MAAK;AACV,oBAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACZ,4BAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,4BAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,yBAAA,CAAC,CAAA;AACH,qBAAA;AACH,iBAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;AAChC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;AAC1D,iBAAA;AACF,aAAA;AACF,SAAA;KACF;IAEO,gBAAgB,GAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;AAEtB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;gBACvB,OAAO,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;AAC/B,aAAA;AAAM,iBAAA;gBACL,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;AAC/B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;KAClB;IAEO,yBAAyB,GAAA;AAC/B,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,cAAE,IAAI,CAAC,IAAI,CAAC,KAAK;cACf,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;KAC3D;;;MC3NU,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAmB,SAAoB,EAAA;QAApB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAFhC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;KAED;AAC7C;;ACLD;;;;AAIG;SACa,qBAAqB,CAAC,KAAY,EAAE,GAAU,EAAE,KAAa,EAAA;IAC3E,OAAO;AACL,QAAA,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;AACxC,QAAA,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;KACzC,CAAC;AACJ;;ACPgB,SAAA,YAAY,CAC1B,MAAa,EACb,MAAa,EACb,WAA2B,GAAA,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAA;IAEhD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAA;IACxC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;IAEhC,OAAO;AACL,QAAA,IAAI,EAAE,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAE,CAAA;AAC1D,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;AACrE,YAAA,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;AACvE,YAAA,GAAG,EAAE,GAAG,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;AAClE,SAAA;KACF,CAAA;AACH;;SCfgB,UAAU,CACxB,MAAa,EACb,MAAa,EACb,cAAwB,EACxB,cAAwB,EACxB,cAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAA;IAEhD,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;IAE1E,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAE/E,IAAA,MAAM,IAAI,GACR,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAK,EAAA,EAAA,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAA,CAAA,EAAI,aAAa,CAAC,CAAC,CAAI,CAAA,EAAA,aAAa,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,EAAE,CAAA;AAEjI,IAAA,OAAO,WAAW,CAChB,IAAI,EACJ,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,WAAW,CACZ,CAAC;AACJ,CAAC;AAED;;;;;;AAMG;AAEH,SAAS,gBAAgB,CACvB,KAAY,EACZ,aAAuB,EACvB,cAAqB,EAAA;IAErB,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAEnC,IAAA,QAAQ,aAAa;AACnB,QAAA,KAAK,KAAK;AACR,YAAA,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM;AACR,QAAA,KAAK,QAAQ;AACX,YAAA,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,MAAM;AACR,QAAA,KAAK,OAAO;AACV,YAAA,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM;AACR,QAAA,KAAK,MAAM;AACT,YAAA,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,MAAM;AACT,KAAA;;AAGD,IAAA,MAAM,kBAAkB,GAAG;AACzB,QAAA,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7C,QAAA,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;KAC9C,CAAC;;IAGF,MAAM,SAAS,GAAG,IAAI,CAAC;;;IAGvB,MAAM,aAAa,GACjB,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,aAAa;QAC1C,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,aAAa;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,MAAa,EACb,MAAa,EACb,aAAoB,EACpB,aAAoB,EACpB,WAAwB,EAAA;IAExB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;IAEzC,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEjC,OAAO;QACL,IAAI;AACJ,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,KAAK;AACV,kBAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC;AACrE,kBAAE,SAAS;AACb,YAAA,MAAM,EAAE,MAAM;AACZ,kBAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC;AACrE,kBAAE,SAAS;AACb,YAAA,GAAG,EAAE,GAAG;AACN,kBAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC;AACrE,kBAAE,SAAS;AACd,SAAA;KACF,CAAC;AACJ,CAAC;AAED;;AAEG;AACH,SAAS,gBAAgB,CACvB,WAAkB,EAClB,WAAkB,EAClB,aAAoB,EACpB,aAAoB,EACpB,KAAa,EAAA;IAEb,MAAM,wBAAwB,GAAU,qBAAqB,CAC3D,WAAW,EACX,aAAa,EACb,KAAK,CACN,CAAC;IACF,MAAM,wBAAwB,GAAU,qBAAqB,CAC3D,aAAa,EACb,aAAa,EACb,KAAK,CACN,CAAC;IACF,MAAM,yBAAyB,GAAU,qBAAqB,CAC5D,aAAa,EACb,WAAW,EACX,KAAK,CACN,CAAC;IAEF,OAAO,qBAAqB,CAC1B,qBAAqB,CAAC,wBAAwB,EAAE,wBAAwB,EAAE,KAAK,CAAC,EAChF,qBAAqB,CAAC,wBAAwB,EAAE,yBAAyB,EAAE,KAAK,CAAC,EACjF,KAAK,CACN,CAAC;AACJ;;MC/Ha,SAAS,CAAA;AAyFpB,IAAA,WAAA,CAAmB,IAAU,EAAA;QAAV,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;AAxFtB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAwB,SAAS,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAwB,SAAS,CAAC,CAAA;AAIjD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;AAE5B,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACtB,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;YAED,IAAI,kBAAkB,GAAG,KAAK,CAAA;YAC9B,IAAI,kBAAkB,GAAG,KAAK,CAAA;AAE9B,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpC,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClE,aAAA;AAAM,iBAAA;AACL,gBAAA,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpC,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;AACtD,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpC,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClE,aAAA;AAAM,iBAAA;AACL,gBAAA,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AACpC,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;AACtD,aAAA;AAED,YAAA,OAAO,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,CAAA;AACnD,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAEvC,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,IAAI,MAA+B,CAAA;AACnC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;AAC9B,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClE,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;AAC9B,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;AACtD,aAAA;AAED,YAAA,IAAI,MAA+B,CAAA;AACnC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;AAC9B,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClE,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;AAC9B,qBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;AACtD,aAAA;;AAGD,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;gBACtB,OAAO;AACL,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,MAAM,EAAE;wBACN,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACrB,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACtB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpB,qBAAA;iBACF,CAAA;AACF,aAAA;YAED,QAAQ,IAAI,CAAC,KAAK;AAChB,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;AACvF,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,UAAU,CACf,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,EAC9C,MAAM,CAAC,SAAS,CAAC,QAAQ,EACzB,MAAM,CAAC,SAAS,CAAC,QAAQ,EACzB,IAAI,CAAC,WAAW,CACjB,CAAA;AACJ,aAAA;AACH,SAAC,CAAC,CAAA;QAEK,IAAU,CAAA,UAAA,GAAyD,EAAE,CAAA;QAK1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAA;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAA;AAEnC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AAC7F,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;AAChG,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAEvF,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;KAC9F;AACF;;MC1GY,eAAe,CAAA;AAC1B;;AAEG;AACI,IAAA,OAAO,KAAK,CAAC,QAAgC,EAAE,aAA0B,EAAA;AAC9E,QAAA,MAAM,WAAW,GAAuC,IAAI,GAAG,EAAE,CAAA;AACjE,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AAElE,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAG;AAC5B,YAAA,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAAE,gBAAA,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;;AACzD,gBAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAA;AACpC,SAAC,CAAC,CAAA;KACH;AAED;;AAEG;AACI,IAAA,OAAO,KAAK,CAAC,QAAgB,EAAE,aAA0B,EAAA;AAC9D,QAAA,MAAM,WAAW,GAAyB,IAAI,GAAG,EAAE,CAAA;AACnD,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AAElE,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAG;AAC5B,YAAA,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAAE,gBAAA,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;;AACzD,gBAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAA;AACpC,SAAC,CAAC,CAAA;KACH;AACF;;ACzBD;AACA;AACA,MAAM,mBAAmB,GAAG,EAAE,CAAA;MAGjB,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAE7C,IAAoB,CAAA,oBAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;aACtE,IAAI;;QAEH,SAAS,CAAC,CAAC,KAAK,KACd,KAAK,CACH,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IACf,IAAI,CAAC,MAAM,CAAC,IAAI;;QAEd,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,CAChB,CACF,CACF,CACF,EACD,GAAG,CAAC,CAAC,WAAW,KAAI;AAClB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAChC,iBAAA,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvD,iBAAA,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;SAC9E,CAAC,CACgC,CAAA;QAE5B,IAAe,CAAA,eAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;aACjE,IAAI,CACH,SAAS,CAAC,CAAC,KAAK,KACd,KAAK,CACH,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IACf,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,CAChB,CACF,CACF,CACF,EACD,GAAG,CAAC,WAAW,IAAI;AACjB,YAAA,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE;AACpE,SAAA,CAAC,CACgC,CAAA;QAE5B,IAAc,CAAA,cAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAChE,aAAA,IAAI,CACH,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,KACrB,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChD,EACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACjC,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CACvD,CACiC,CAAA;QAE5B,IAAiB,CAAA,iBAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACnE,aAAA,IAAI,CACH,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,KACrB,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChD,EACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACjC,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAC1D,CACiC,CAAA;QAE5B,IAAmB,CAAA,mBAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;aACrE,IAAI,CACH,SAAS,CAAC,CAAC,KAAK,KACd,KAAK,CACH,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IACf,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,oBAAoB,EAAE,EACtB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,CAChB,CACF,CACF,CACF,EACD,GAAG,CAAC,CAAC,WAAW,KAAK;AACnB,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE;AAC9E,SAAA,CAAC,CACgC,CAAA;QAEtB,IAAQ,CAAA,QAAA,GAA6B,KAAK,CACxD,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,mBAAmB,CACzB,CAAC,IAAI;;;AAGJ,QAAA,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAC/C,CAAA;AACF,KAAA;+GA9FY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;ACJX,MAAM,gBAAgB,GAAG,CAAI,CAAM,EAAE,CAAM,KACzC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;IACrB,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAC9B,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CACrE,CAAC;MAGS,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAE7C,IAAmB,CAAA,mBAAA,GAAG,KAAK,CACnC,YAAY,CACV,QAAQ,CAAC,MAAK;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;YAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;AAEnD,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KACrC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAG,CAAC,CACzD,CAAA;AACH,SAAC,CAAC,CACH,EACD,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAC3C,SAAS,CAAC,CAAC,KAAK,KAAI;YAClB,OAAO,GAAG,CACR,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAClD,CAAA;SACF,CAAC,EACF,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAE/C,QAAA,IAAI,CAAC,CAAC,CAAC,CACR,CACF,CAAC,IAAI;;;QAGJ,oBAAoB,CAAC,gBAAgB,CAAC,EACtC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/B,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7D,CACiC,CAAA;QAE1B,IAAc,CAAA,cAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAChE,aAAA,IAAI,CACH,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,KAAI;AACzB,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;SACvD,CAAC,EACF,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/B,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CACxD,CACiC,CAAA;QAE5B,IAAiB,CAAA,iBAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACnE,aAAA,IAAI,CACH,QAAQ,EAAE,EACV,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,KAAI;AACzB,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;SACvD,CAAC,EACF,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAC/B,GAAG,CAAC,CAAC,KAAK,KACR,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAC3D,CACiC,CAAA;QAE5B,IAAiB,CAAA,iBAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;aACnE,IAAI,CACH,SAAS,CAAC,CAAC,KAAK,KACd,KAAK,CACH,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IACf,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,oBAAoB,EAAE,EACtB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,MAAM,IAAI,CAAC,CAChB,CACF,CACF,CACF,EACD,GAAG,CAAC,CAAC,WAAW,KAAK;AACnB,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE;AAC9E,SAAA,CAAC,CACgC,CAAA;AAEtB,QAAA,IAAA,CAAA,QAAQ,GAA6B,KAAK,CACxD,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,CACvB;aACE,IAAI;;;;;AAKH,QAAA,SAAS,CAAC,cAAc,CAAC,CAC1B,CAAA;AACJ,KAAA;+GAzFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;MCDE,0BAA0B,CAAA;AAJvC,IAAA,WAAA,GAAA;AAKY,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC/C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAEzD;;AAEG;AAEI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAA;AAGhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;AAG1D,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,CAAC,YAAY,CACpD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CACnC,CAAA;AAGM,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,WAAW,CACjD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CACnC,CAAA;AAGM,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAGlD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAChD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAC/B,CAAA;AAGM,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAC/B,CAAA;AAGM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;AAGhD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAC/C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CAAA;AAGM,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAC5C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CAAA;AAGM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAGtD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,YAAY,CAClD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAC/C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAGtD,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,YAAY,CAClD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAC/C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAED;;AAEG;AAEI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAA;AAGhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAA;AAG1D,QAAA,IAAA,CAAA,2BAA2B,GAAG,IAAI,CAAC,YAAY,CACpD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CACnC,CAAA;AAGM,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,WAAW,CACjD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CACnC,CAAA;AAGM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;AAGhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAC9C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CAAA;AAGM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAC3C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9B,CAAA;AAGM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAGrD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,CAAC,YAAY,CACjD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAC9C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAGrD,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,CAAC,YAAY,CACjD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AAGM,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAC9C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAA;AA4BF,KAAA;AA1BS,IAAA,iBAAiB,CAA+B,IAAO,EAAA;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAC1C,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAC7E,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CACpC,CAAA;KACF;AAEO,IAAA,iBAAiB,CAA+B,IAAO,EAAA;QAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAC1C,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAA4B,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAC7E,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CACpC,CAAA;KACF;AAEO,IAAA,YAAY,CAAI,QAAyB,EAAA;AAC/C,QAAA,OAAO,QAAQ,CAAC,IAAI,CAClB,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EACvC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CACxB,CAAA;KACF;AAEO,IAAA,WAAW,CAAI,QAAyB,EAAA;AAC9C,QAAA,OAAO,QAAQ,CAAC,IAAI,CAClB,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CACtC,CAAA;KACF;+GA9JU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,yBAAA,EAAA,6BAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,6BAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,6BAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,yBAAA,EAAA,6BAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;8BASQ,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAIA,qBAAqB,EAAA,CAAA;sBAD3B,MAAM;uBAAC,wBAAwB,CAAA;gBAIzB,2BAA2B,EAAA,CAAA;sBADjC,MAAM;uBAAC,+BAA+B,CAAA;gBAMhC,yBAAyB,EAAA,CAAA;sBAD/B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,iBAAiB,EAAA,CAAA;sBADvB,MAAM;uBAAC,oBAAoB,CAAA;gBAIrB,uBAAuB,EAAA,CAAA;sBAD7B,MAAM;uBAAC,2BAA2B,CAAA;gBAM5B,qBAAqB,EAAA,CAAA;sBAD3B,MAAM;uBAAC,yBAAyB,CAAA;gBAM1B,gBAAgB,EAAA,CAAA;sBADtB,MAAM;uBAAC,mBAAmB,CAAA;gBAIpB,sBAAsB,EAAA,CAAA;sBAD5B,MAAM;uBAAC,0BAA0B,CAAA;gBAM3B,oBAAoB,EAAA,CAAA;sBAD1B,MAAM;uBAAC,wBAAwB,CAAA;gBAMzB,mBAAmB,EAAA,CAAA;sBADzB,MAAM;uBAAC,sBAAsB,CAAA;gBAIvB,yBAAyB,EAAA,CAAA;sBAD/B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,uBAAuB,EAAA,CAAA;sBAD7B,MAAM;uBAAC,2BAA2B,CAAA;gBAM5B,mBAAmB,EAAA,CAAA;sBADzB,MAAM;uBAAC,sBAAsB,CAAA;gBAIvB,yBAAyB,EAAA,CAAA;sBAD/B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,uBAAuB,EAAA,CAAA;sBAD7B,MAAM;uBAAC,2BAA2B,CAAA;gBAS5B,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAIA,qBAAqB,EAAA,CAAA;sBAD3B,MAAM;uBAAC,wBAAwB,CAAA;gBAIzB,2BAA2B,EAAA,CAAA;sBADjC,MAAM;uBAAC,+BAA+B,CAAA;gBAMhC,yBAAyB,EAAA,CAAA;sBAD/B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,gBAAgB,EAAA,CAAA;sBADtB,MAAM;uBAAC,mBAAmB,CAAA;gBAIpB,qBAAqB,EAAA,CAAA;sBAD3B,MAAM;uBAAC,0BAA0B,CAAA;gBAM3B,mBAAmB,EAAA,CAAA;sBADzB,MAAM;uBAAC,wBAAwB,CAAA;gBAMzB,kBAAkB,EAAA,CAAA;sBADxB,MAAM;uBAAC,sBAAsB,CAAA;gBAIvB,wBAAwB,EAAA,CAAA;sBAD9B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,sBAAsB,EAAA,CAAA;sBAD5B,MAAM;uBAAC,2BAA2B,CAAA;gBAM5B,kBAAkB,EAAA,CAAA;sBADxB,MAAM;uBAAC,sBAAsB,CAAA;gBAIvB,wBAAwB,EAAA,CAAA;sBAD9B,MAAM;uBAAC,6BAA6B,CAAA;gBAM9B,sBAAsB,EAAA,CAAA;sBAD5B,MAAM;uBAAC,2BAA2B,CAAA;;;MCtIxB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AACpC,iBAAA,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;AACtE,SAAC,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YAC/B,OAAO,IAAI,CAAC,GAAG,CACb,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAChE,CAAA;AACH,SAAC,CAAC,CAAA;AAYH,KAAA;AAVQ,IAAA,QAAQ,CAAC,IAAe,EAAA;;;AAG7B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;;AAEzC,QAAA,IAAI,CAAC,mBAAmB;AACrB,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;AAChC,aAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;KAClC;+GAvBU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA,EAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;MCUE,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA4B,UAAU,CAAC,CAAC,aAAa,CAAA;AAElE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAc,CAAA;QAEzC,IAAc,CAAA,cAAA,GAAsB,IAAI,CAAA;;AAGzC,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CACxE,GAAG,CAAC,KAAK,KAAK;YACZ,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,CAAC,EAAE,KAAK,CAAC,OAAO;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAwB;AACtC,YAAA,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC,EACH,SAAS,CAAC,uBAAuB,CAAC,EAClC,KAAK,EAAE,CACoB,CAAC;AAEvB,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAC3B,IAAI,CAAC,aAAa,EAClB,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAC9C,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,EACtC,GAAG,CAAC,CAAC,aAAa,KAAI;AACpB,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAA;AAChD,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAA;AAChD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;AACnC,kBAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;kBACrE,CAAC,CAAA;AACL,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;AACnC,kBAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;kBACrE,CAAC,CAAA;YAEL,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE9C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;SAC7D,CAAC,EACF,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,EACzD,SAAS,CAAC,uBAAuB,CAAC,EAClC,KAAK,EAAE,CACoB,CAAC;QAEvB,IAAgB,CAAA,gBAAA,GAA6B,KAAK,CACvD,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,cAAc,CACpB,CAAA;AAEM,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,aAAa,KAAI;AACpB,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAA;AACvD,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAA;YACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAE9C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;AACxC,SAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EACrC,KAAK,EAAE,CACoB,CAAA;AAEtB,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,aAAa,KAAI;AACpB,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAA;AAC/B,YAAA,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAA;AAC/B,YAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAA;YAEnC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;AACxC,SAAC,CAAC,EACF,KAAK,EAAE,CACoB,CAAA;QAEtB,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAChC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,EAC9B,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAChC,CAAC,IAAI,CACJ,KAAK,EAAE,CACR,CAAA;AAUF,KAAA;AAPC;;;AAGG;AACI,IAAA,eAAe,CAAC,KAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC/B;+GAvFU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAApB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,SAAS;mBAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAA;;;MCN9B,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AACvD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAA;AACnD,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa,CAAA;AAExE;;AAEG;AACI,QAAA,IAAA,CAAA,oBAAoB,GAAkB,QAAQ,CAAC,MAAK;AACzD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAEvC,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AACtB,aAAA;YAED,OAAO,IAAI,CAAC,wBAAwB,CAAC;gBACnC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACb,CAAC,EAAE,QAAQ,CAAC,CAAC;AACd,aAAA,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;QAEK,IAAe,CAAA,eAAA,GAAG,QAAQ,CAC/B,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAC/C,CAAA;AASF,KAAA;AAPQ,IAAA,wBAAwB,CAAC,aAAoB,EAAA;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;AAC3C,QAAA,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;AACzB,QAAA,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;AAEzB,QAAA,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAG,CAAC,OAAO,EAAE,CAAC,CAAA;KAClE;+GA/BU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA1B,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAA;;;ACJzC,SAAU,mBAAmB,CAAC,UAA+B,EAAA;IACjE,OAAO,OAAO,UAAU,KAAK,QAAQ;UACjC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;UACpC,UAAU,CAAA;AAChB;;SCNgB,SAAS,CAAC,MAAW,EAAE,GAAW,EAAE,UAA6D,EAAA;AAC/G,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;AAExC,IAAA,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW,EAAA;QACzC,cAAc,CAAC,MAAK;AAClB,YAAA,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACnC,SAAC,CAAC,CAAA;AACJ,KAAC,CAAC;;AAGF,IAAA,OAAO,UAAU,CAAC;AACpB;;MCLa,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAiB,EAAE,CAAC,CAAC;AAEvC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAA;YAE9C,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBAClC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAChC,aAAC,CAAC,CAAA;AAEF,YAAA,OAAO,GAAG,CAAA;AACZ,SAAC,CAAC,CAAA;AAWH,KAAA;AARQ,IAAA,UAAU,CAAC,OAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;KAC5D;AAGM,IAAA,aAAa,CAAC,OAAqB,EAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;KACzE;+GArBU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;AAcnB,UAAA,CAAA;IADN,SAAS;AAGT,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA,CAAA;AAGM,UAAA,CAAA;IADN,SAAS;AAGT,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;4FArBU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;AAeF,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAU,MAKV,aAAa,EAAA,EAAA,EAAA,EAAA,CAAA;;MCTT,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEkB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;AAkBtD,KAAA;AAfQ,IAAA,YAAY,CAAC,SAAsB,EAAA;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;AACxB,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACxD,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,cAA2B,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;AACxB,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,cAAc,CAAC,CAC/D,CAAA;AACF,SAAA;KACF;+GAlBU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAb,aAAa,EAAA,CAAA,CAAA,EAAA;;AAIjB,UAAA,CAAA;AADN,IAAA,SAAS;AAMT,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA,CAAA;4FATU,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;8BAKF,YAAY,EAAA,EAAA,EAAA,EAAA,CAAA;;ACjBL,SAAA,SAAS,CAAC,KAAgB,EAAE,IAAY,EAAA;AACtD,IAAA,OAAO,IAAI,UAAU,CAAwB,CAAC,UAAU,KAAI;QAC1D,IAAI,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAEjC,QAAA,OAAO,MAAM,EAAE,CAAC,UAAU,EAAE,CAAA;AAC9B,KAAC,CAAC,CAAC;AACL;;SCXgB,gBAAgB,CAAC,MAAW,EAAE,GAAW,EAAE,UAA8B,EAAA;AACvF,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;AAExC,IAAA,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW,EAAA;AACzC,QAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AACpF,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;AACjG,SAAA;AACH,KAAC,CAAC;;AAGF,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAMD,MAAM,sBAAsB,GAAG,CAAC,QAAY,KAA8B;IACxE,OAAO,UAAU,IAAI,QAAQ,IAAI,KAAK,IAAK,QAAQ,CAAC,QAAqB,CAAC;AAC5E,CAAC;;ACpBD;;AAEG;MAEU,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAES,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;AAE9C,KAAA;+GAHY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCIE,oBAAoB,CAAA;AARjC,IAAA,WAAA,GAAA;QAUS,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAA;AACxB,KAAA;+GAHY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8ICVjC,kBACA,EAAA,MAAA,EAAA,CAAA,iLAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDSa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAGlB,IAAA,EAAA;AACJ,wBAAA,kBAAkB,EAAE,UAAU;AAC/B,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,iLAAA,CAAA,EAAA,CAAA;8BAIM,QAAQ,EAAA,CAAA;sBADd,KAAK;;;MEHK,WAAW,CAAA;IA0FtB,WACS,CAAA,SAAqB,EACrB,UAAqB,EAAA;QADrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAY;QACrB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAW;QA3Fd,IAAW,CAAA,WAAA,GAAG,CAAC,CAAA;AAE/B;;;AAGG;QACI,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC;YACnB,KAAK,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAClC,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AACpC,SAAA,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAC7B,KAAK,MAAM,EAAE,OAAO;AAClB,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC5D,CAAA;gBACD,KAAK,OAAO,EAAE,OAAO;oBACnB,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK;AAC/B,oBAAA,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC5D,CAAA;gBACD,KAAK,KAAK,EAAE,OAAO;AACjB,oBAAA,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1D,oBAAA,CAAC,EAAE,CAAC;iBACL,CAAA;gBACD,KAAK,QAAQ,EAAE,OAAO;AACpB,oBAAA,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,GAAG,CAAC;oBACxD,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM;iBACjC,CAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAC7B,KAAK,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;gBACzD,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;gBACvD,KAAK,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAA;gBACzD,KAAK,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAA;AAC1D,aAAA;AACH,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YACnC,OAAO;gBACL,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC1E,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;aAC3E,CAAA;AACH,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAc,MAAM,CAAC,CAAA;AAElC,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,OAAO,EAAQ,CAAA;QAEnD,IAAU,CAAA,UAAA,GAAG,QAAQ,CAC1B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CACpC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAChC,EACD;YACE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AACtC,SAAA,CACF,CAAA;AAEM,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC9B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CACpC,GAAG,CAAC,OAAO;AACT,YAAA,CAAC,EAAE,IAAI,CAAC,eAAe,YAAY,WAAW;AAC5C,kBAAE,IAAI,CAAC,eAAe,CAAC,UAAU;AACjC,kBAAE,CAAC;AACL,YAAA,CAAC,EAAE,IAAI,CAAC,eAAe,YAAY,WAAW;AAC5C,kBAAE,IAAI,CAAC,eAAe,CAAC,SAAS;kBAC9B,CAAC;SACN,CAAC,CAAC,CACJ,EACD;YACE,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC7B,SAAA,CACF,CAAA;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAgB,CAAA;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAA;AAElC,QAAA,IAAA,CAAA,eAAe,GAAG;AACvB,YAAA,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;AAC3B,aAAA;SACF,CAAA;KAKI;IAEE,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAA;KACzC;IAEO,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,eAAe,YAAY,WAAW,EAAE;YAC/C,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW;AACvC,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;aAC1C,CAAA;AACF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,eAAe,YAAY,kBAAkB,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAA;AACtC,SAAA;QAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;KAC/B;AACF;;MC5GY,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAMS,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa,CAAA;AACnE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAgDxC,KAAA;IAtBQ,QAAQ,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;AAEtC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAC1B;gBACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,aAAc;gBAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,EACD,IAAI,CACL,CAAA;YAED,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE3C,qBAAqB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;AAEtD,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AAC9E,SAAA;KACF;+GAnDU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,8HCX5B,EAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;ADyCS,UAAA,CAAA;IADN,gBAAgB;AAsBhB,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA,CAAA;4FAnDU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,QAAQ,EAAA,eAAA,EAED,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;8BAYxC,QAAQ,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAOlB,IAAI,EAAA,CAAA;sBADV,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAOlB,EAAE,EAAA,CAAA;sBADR,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAMC,QAAQ,EAAA,EAAA,EAAA,EAAA,CAAA;;MEnCJ,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAsB,UAAU,CAAC,CAAC,aAAa,CAAA;AACnE,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AAGvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAS,CAAA;AAGvC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAS,CAAA;AAGtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAS,CAAA;AAGxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAS,CAAA;QA2BxC,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;;AAGrB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS;AACzD,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,EACnD,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAC/D,kBAAkB,EAAE,CACrB;AACA,aAAA,SAAS,EAAE,CAAA;AAEJ,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,cAAc;aAClE,IAAI,CACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,KAAI;AAChC,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AACnD,SAAC,CAAC,EACF,kBAAkB,EAAE,CACrB;AACA,aAAA,SAAS,EAAE,CAAA;AAgBf,KAAA;AAzDW,IAAA,cAAc,CAAC,KAAY,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAE7B,IAAI,KAAK,YAAY,UAAU,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtD,SAAA;KACF;AAGS,IAAA,YAAY,CAAC,KAAY,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;AAGS,IAAA,WAAW,CAAC,KAAY,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC7B;AAGS,IAAA,UAAU,CAAC,KAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5B;;IAuBO,qBAAqB,CAAC,MAAsB,EAAE,KAAiB,EAAA;AACrE,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC5B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;AAAM,aAAA;;YAEL,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC5B,aAAA;AAED,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,SAAA;KACF;+GA1EU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAhB,gBAAgB,EAAA,QAAA,EAAA,2DAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,SAAS;mBAAC,EAAE,QAAQ,EAAE,2DAA2D,EAAE,CAAA;8BAMxE,WAAW,EAAA,CAAA;sBADpB,MAAM;gBAIG,UAAU,EAAA,CAAA;sBADnB,MAAM;gBAIG,YAAY,EAAA,CAAA;sBADrB,MAAM;gBAIG,UAAU,EAAA,CAAA;sBADnB,MAAM;gBAKG,cAAc,EAAA,CAAA;sBAFvB,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBACpC,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAU5B,YAAY,EAAA,CAAA;sBADrB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAMzB,WAAW,EAAA,CAAA;sBADpB,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAM3B,UAAU,EAAA,CAAA;sBADnB,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MCrBzB,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;AAMU,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AACtD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAsB,UAAU,CAAC,CAAA;QAYlD,IAAY,CAAA,YAAA,GAAG,SAAS,CAAA;QAGxB,IAAG,CAAA,GAAA,GAAG,GAAG,CAAC;QASP,IAAO,CAAA,OAAA,GAAG,CAAC,CAAA;QACX,IAAU,CAAA,UAAA,GAAG,CAAC,CAAA;QAEhB,IAAU,CAAA,UAAA,GAAgB,IAAI,CAAA;AAE9B,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;QAExE,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAA;QACZ,IAAS,CAAA,SAAA,GAAG,CAAC,CAAA;;AAGX,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB;aAClE,IAAI,CACH,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EACtC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,EACjE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAClC,kBAAkB,EAAE,CACrB;AACA,aAAA,SAAS,EAAE,CAAA;AAEJ,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB;AACtE,aAAA,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,kBAAkB,EAAE,CACrB;AACA,aAAA,SAAS,EAAE,CAAA;AAqFf,KAAA;IApIC,IACW,SAAS,CAAC,KAAmB,EAAA;AACtC,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AAChC,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC/B,SAAA;KACF;AAWD,IAAA,IAAc,KAAK,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAG,CAAA;KAClC;IA6BM,QAAQ,GAAA;QACb,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAC7C;IAGM,eAAe,GAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7F,IAAI,CAAC,SAAS,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;KAChG;IAES,WAAW,CAAC,IAAU,EAAE,KAAY,EAAA;QAC5C,KAAK,CAAC,eAAe,EAAE,CAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;KAC9B;AAES,IAAA,MAAM,CAAC,KAAmB,EAAA;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;AAC7B,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAAE,OAAO;AAE5C,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AACxE,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAC3C,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAChD,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,CACf,CAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;KACvC;IAES,SAAS,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAC/B;IAEO,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAgB,EAAA;AACtE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAE3E,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;YACtC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;AACnF,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;YAED,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;AACjF,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AAED,YAAA,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;AACpF,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;YAED,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAClF,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AAED,YAAA,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;AACvD,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAA;KACb;+GA1IU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,mPCrB/B,2yFA8FA,EAAA,MAAA,EAAA,CAAA,kNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,gBAAA,EAAA,QAAA,EAAA,2DAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;ADZS,UAAA,CAAA;IADN,SAAS;AAIT,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,CAAA;4FAhEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,2yFAAA,EAAA,MAAA,EAAA,CAAA,kNAAA,CAAA,EAAA,CAAA;8BAYZ,SAAS,EAAA,CAAA;sBADnB,KAAK;gBAUC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,GAAG,EAAA,CAAA;sBADT,KAAK;gBAIE,OAAO,EAAA,CAAA;sBADd,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAuC/B,eAAe,EAAA,EAAA,EAAA,EAAA,CAAA,CAAA;AAgFxB,SAAS,UAAU,CAAC,SAAiB,EAAE,SAAiB,EAAE,IAAY,EAAA;IACpE,OAAO;AACL,QAAA,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAChC,QAAA,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,IAAU,EACV,KAAgB,EAChB,MAA4C,EAAA;AAE5C,IAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IACnC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;IAC9B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;;AAGtC,IAAA,QAAQ,IAAI;AACV,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,CAAA;AAC9D,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,CAAA;AACjD,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AAC/D,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AAClD,QAAA,KAAK,UAAU;YACb,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AAC7F,QAAA,KAAK,WAAW;YACd,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AAChF,QAAA,KAAK,aAAa;YAChB,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AAChF,QAAA,KAAK,cAAc;AACjB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;AACpE,KAAA;AACH,CAAC;AAED,SAAS,aAAa,CACpB,IAAU,EACV,KAAgB,EAChB,IAAU,EACV,QAAgB,EAChB,SAAiB,EAAA;IAEjB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;;IAGlC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC1B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;;IAG5B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACjC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;;IAGpC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAA;IAChE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;AAElE,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;;AAE7B,IAAA,IAAI,MAAM,EAAE;QACV,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;AAC7C,SAAA;QAED,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA;AAC/C,SAAA;QAED,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AAClE,KAAA;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;;AAE/C,IAAA,IAAI,MAAM,EAAE;AACV,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACnF,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACjD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC1B,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACjD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC3B,YAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACpD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AACrF,YAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACpD,SAAA;AACF,KAAA;IAED,OAAO;QACL,CAAC;QACD,CAAC;QACD,KAAK;QACL,MAAM;KACP,CAAC;AACJ;;MEtQa,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;AAKU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,UAAU,CAA4B,CAAA;AAYtE,KAAA;IAVQ,eAAe,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAA;AAChD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;AAE9B,QAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM;AAC1B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;AAC7B,SAAA,CAAC,CAAA;KACH;+GAfU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA7B,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,sBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAA;8BAGxC,WAAW,EAAA,CAAA;sBADjB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAA;;AAiB1D,SAAS,mBAAmB,CAAC,OAAoB,EAAA;AAC/C,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAA;AAEvC,IAAA,IAAI,KAAK,EAAE;QACT,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAA;AAClD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;AAEvD,QAAA,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE;AACzB,YAAA,OAAO,CAAC,CAAA;AACT,SAAA;AAED,QAAA,OAAO,cAAc,CAAA;AACtB,KAAA;AAED,IAAA,OAAO,CAAC,CAAA;AACV;;MCRa,aAAa,CAAA;AAV1B,IAAA,WAAA,GAAA;AAWS,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AACnD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAyB,UAAU,CAAC,CAAA;AACpD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAA;AAC5D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAiBnB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,kBAAkB;YAC5D,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,uBAAuB,CAClE,CAAA;AAES,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA,EAAA,CAAI,CAAC,CAAA;AAC/D,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC,CAAA;QAEjE,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;AAoF5F,KAAA;IAjFQ,QAAQ,GAAA;QACb,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;AACzE,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1D,aAAA;AACH,SAAC,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS,CAAC,QAAQ;aACpB,IAAI,CACH,SAAS,CAAC,CAAC,OAAO,KAChB,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AACvD,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAC5B,EACD,GAAG,CAAC,CAAC,OAAO,KAAI;;AAEd,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAA;AACxC,SAAC,CAAC,EACF,kBAAkB,EAAE,CACrB;AACA,aAAA,SAAS,EAAE,CAAA;KACf;IAGM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,gCAAgC,EAAE,CAAA;AAEjD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;AAClF,YAAA,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;iBACtD,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,EAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EACxC,GAAG,CAAC,MAAK;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAA;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,CAAA;AAE7D,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;aAC3C,CAAC,EACF,kBAAkB,EAAE,CACrB,CAAC,SAAS,EAAE,CAAA;AAChB,SAAA;KACF;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;KAC1D;IAES,eAAe,CAAC,KAAY,EAAE,MAAmB,EAAA;;QAEzD,KAAK,CAAC,eAAe,EAAE,CAAA;AAEvB,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;KAClD;AAES,IAAA,kBAAkB,CAAC,MAAmB,EAAA;AAC9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;KACrD;AAES,IAAA,uBAAuB,CAAC,YAAyB,EAAA;AACzD,QAAA,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAA;KAChE;AAES,IAAA,aAAa,CAAC,MAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;KAChD;IAES,QAAQ,GAAA;QAChB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KACnD;IAES,UAAU,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAC7C,SAAA;KACF;+GAxHU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,oLALb,CAAC,aAAa,EAAE,mBAAmB,CAAC,yOCxBjD,o9IAoJA,EAAA,MAAA,EAAA,CAAA,iMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,2DAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;AD/ES,UAAA,CAAA;IADN,gBAAgB;AA2BhB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA,CAAA;AAGM,UAAA,CAAA;IADN,gBAAgB;AAmBhB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,CAAA;4FAvFU,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;+BACE,SAAS,EAAA,eAAA,EAGF,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,aAAa,EAAE,mBAAmB,CAAC,EACzC,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,YAAY;AACtB,qBAAA,EAAA,QAAA,EAAA,o9IAAA,EAAA,MAAA,EAAA,CAAA,iMAAA,CAAA,EAAA,CAAA;8BAiBM,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,iBAAiB,EAAA,CAAA;sBADvB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,SAAS;uBAAC,aAAa,CAAA;gBAIjB,cAAc,EAAA,CAAA;sBADpB,SAAS;uBAAC,aAAa,CAAA;AAcjB,aAAA,CAAA,EAAA,QAAQ,MA6BR,eAAe,EAAA,EAAA,EAAA,EAAA,CAAA;;ME3EX,kBAAkB,CAAA;AAjB/B,IAAA,WAAA,GAAA;AAkCE;;;;AAIG;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;AAEhC,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAE3C,OAAO;gBACL,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACxB,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;aAC1B,CAAA;AACH,SAAC,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AAuB7C,KAAA;AAhDC,IAAA,IACW,KAAK,CAAC,KAAY,EAAA,EAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,EAAE;IA2BvD,eAAe,GAAA;;;QAGpB,MAAM,mCAAmC,GAAG,CAAC,CAAA;QAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,WAAW,GAAG,mCAAmC,CAAA;QACtG,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,YAAY,GAAG,mCAAmC,CAAA;AAExG,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;KAEvC;IAES,eAAe,GAAA;QACvB,OAAO;AACL,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC5B,aAAA;SACF,CAAA;KACF;+GAvDU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,+QCvB/B,8aAaA,EAAA,MAAA,EAAA,CAAA,yEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,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,EAAA;;AD8CS,UAAA,CAAA;IADN,SAAS;AAWT,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,CAAA;4FA9CU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAjB9B,SAAS;+BACE,cAAc,EAAA,eAAA,EAcP,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,8aAAA,EAAA,MAAA,EAAA,CAAA,yEAAA,CAAA,EAAA,CAAA;8BAKxC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAIC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIK,KAAK,EAAA,CAAA;sBADf,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,mBAAmB,EAAA,CAAA;sBADzB,SAAS;uBAAC,kBAAkB,CAAA;gBAsBtB,eAAe,EAAA,EAAA,EAAA,EAAA,CAAA;;ME3CX,aAAa,CAAA;AAT1B,IAAA,WAAA,GAAA;AAUY,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAC3C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAW/C,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAA;AAE7C,YAAA,OAAO,MAAM,GAAG,CAAQ,KAAA,EAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA;AAClE,SAAC,CAAC,CAAA;AAEQ,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAA;AAE3C,YAAA,OAAO,MAAM,GAAG,CAAQ,KAAA,EAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA;AAClE,SAAC,CAAC,CAAA;AAsBH,KAAA;IAlBQ,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,SAAS,EAAE;;AAET,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACrB,gBAAA,IAAI,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;gBAC5C,WAAW,EAAE,IAAI,CAAC,cAAc;gBAChC,SAAS,EAAE,IAAI,CAAC,YAAY;gBAC5B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC3C,aAAA;SACF,CAAA;KACF;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACzC,SAAA;KACF;+GA7CU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,iMChB1B,0uCA4CA,EAAA,MAAA,EAAA,CAAA,iGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FD5Ba,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAGF,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,YAAY;AACtB,qBAAA,EAAA,QAAA,EAAA,0uCAAA,EAAA,MAAA,EAAA,CAAA,iGAAA,CAAA,EAAA,CAAA;8BAQM,KAAK,EAAA,CAAA;sBADX,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,qBAAqB,EAAA,CAAA;sBAD3B,KAAK;;;MEEK,mBAAmB,CAAA;AApBhC,IAAA,WAAA,GAAA;AA2BU,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAEpD,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAA;AAE9C,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE;AACvC,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;AAChD,gBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,EAAE,CAAA;AAChD,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAA;gBAEtD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAA;gBACjE,MAAM,cAAc,GAAG,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAE1E,gBAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK;AACtB,oBAAA,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAA;AACnE,oBAAA,KAAK,QAAQ,EAAE,OAAO,UAAU,CAC9B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,CAC/B,CAAC,IAAI,CAAA;AACP,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,MAAM,CAAC,KAAK,KAAK,uBAAuB,EAAE;AAC5C,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;AAChD,gBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,aAAa,EAAE,CAAA;AAChD,gBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAA;AAEtD,gBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAA;;AAEhD,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;AACtC,sBAAE,YAAY,CAAC,aAAa,EAAE;AAC9B,sBAAE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAA;AACjD,gBAAA,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK;AACzC,sBAAE,YAAY,CAAC,SAAS,CAAC,QAAQ;sBAC/B,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEvD,gBAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK;AACtB,oBAAA,KAAK,UAAU,EAAE,OAAO,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAA;AACnE,oBAAA,KAAK,QAAQ,EAAE,OAAO,UAAU,CAC9B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,CAC/B,CAAC,IAAI,CAAA;AACP,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;AACb,SAAC,CAAC,CAAA;AAEQ,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAA;AAEzC,YAAA,IAAI,MAAM,EAAE;gBACV,OAAO,CAAA,KAAA,EAAQ,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACnD,aAAA;AAED,YAAA,OAAO,EAAE,CAAA;AACX,SAAC,CAAC,CAAA;QAEiB,IAAY,CAAA,YAAA,GAAG,oBAAoB,CAAA;AAUvD,KAAA;IARW,UAAU,GAAA;QAClB,OAAO;AACL,YAAA,SAAS,EAAE;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,SAAS;AACvB,aAAA;SACF,CAAA;KACF;+GA3EU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAlBpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,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,EAAA;;4FAGU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA,CAAA;8BAGQ,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAIlB,QAAQ,EAAA,CAAA;sBADd,KAAK;;AA0ER,SAAS,kBAAkB,CAAC,QAAkB,EAAA;AAC5C,IAAA,QAAQ,QAAQ;AACd,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,QAAQ,CAAA;AACjB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,KAAK,CAAA;AACd,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,OAAO,CAAA;AAChB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,MAAM,CAAA;AAChB,KAAA;AACH;;MC7Ga,aAAa,CAAA;AAN1B,IAAA,WAAA,GAAA;AAQS,QAAA,IAAA,CAAA,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAA;QAE5B,IAAY,CAAA,YAAA,GAAG,oBAAoB,CAAA;AACvD,KAAA;+GALY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,sFCT1B,4+BA4BA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDnBa,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4+BAAA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA,CAAA;8BAIxC,OAAO,EAAA,CAAA;sBADb,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;;;SEVX,EAAE,GAAA;IAChB,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAE9E,IAAA,OAAO,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC;;ACEA,MAAM,SAAS,GAAG,MAAM,CAAA;AACxB,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,cAAc,GAAG,CAAC,CAAA;AACxB,MAAM,eAAe,GAAG,oBAAoB,CAAA;MAO/B,mBAAmB,CAAA;AAwC9B,IAAA,WAAA,GAAA;AAvCQ,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAA;AACnD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAA;AAElD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;AAE1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAA;gBAEzD,OAAO,IAAI,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,CAAA;AAC7C,aAAA;AAED,YAAA,OAAO,CAAC,CAAA;AACV,SAAC,CAAC,CAAA;QAEQ,IAAC,CAAA,CAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAEhF,IAAC,CAAA,CAAA,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;AAEhF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,IAAI,eAAe,CAAC,CAAA;AAE/E,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;AAE1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC9B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;AAChG,aAAA;AAED,YAAA,OAAO,CAAC,CAAA;AACV,SAAC,CAAC,CAAA;;;QAIQ,IAAS,CAAA,SAAA,GAAG,EAAE,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,UAAU,GAAG,CAAQ,KAAA,EAAA,IAAI,CAAC,SAAS,GAAG,CAAA;QAG9C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;AAE1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,eAAe,IAAI,SAAS,CAAA;AAC7E,aAAA;AAED,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAA;AACtD,aAAA;AACH,SAAC,CAAC,CAAA;KACH;+GApDU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,qDChBhC,ykBAyBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDTa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ykBAAA,EAAA,CAAA;;;AEVjD;MAEa,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAYtD,KAAA;;IAPW,eAAe,GAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAA;AAE9C,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAA;AACvC,SAAA;KACF;+GAZU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAvB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;mBAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAA;8BAOlC,eAAe,EAAA,CAAA;sBAFxB,YAAY;uBAAC,kBAAkB,CAAA;;sBAC/B,YAAY;uBAAC,mBAAmB,CAAA;;;MCEtB,2BAA2B,CAAA;AAgBtC,IAAA,WAAA,GAAA;AAfQ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAA4B,UAAU,CAAC,CAAA;AACpD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAElD,QAAA,IAAA,CAAA,SAAS,GAA4B,QAAQ,CAAC,MAAK;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;AAE5C,YAAA,OAAO,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3C,SAAC,CAAC,CAAA;AAEK,QAAA,IAAA,CAAA,UAAU,GAA4B,QAAQ,CAAC,MAAK;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAA;AAE5C,YAAA,OAAO,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3C,SAAC,CAAC,CAAA;QAGA,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACvE,YAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;SAC1E,CAAC,EACF,kBAAkB,EAAE,CACrB,CAAC,SAAS,EAAE,CAAA;KACd;+GAxBU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA3B,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACJ,wBAAA,cAAc,EAAE,aAAa;AAC7B,wBAAA,eAAe,EAAE,cAAc;AAChC,qBAAA;AACF,iBAAA,CAAA;;;AC2BD,MAAM,iCAAiC,GAAG;AACxC,IAAA,SAAS,EAAE,6BAA6B;IACxC,OAAO,EAAE,CAAC,WAAW,CAAC;CACvB,CAAA;AAED,MAAM,8BAA8B,GAAG;AACrC,IAAA,SAAS,EAAE,0BAA0B;AACrC,IAAA,OAAO,EAAE;QACP,eAAe;QACf,wBAAwB;QACxB,+BAA+B;QAC/B,6BAA6B;QAC7B,oBAAoB;QACpB,2BAA2B;QAC3B,yBAAyB;QACzB,mBAAmB;QACnB,0BAA0B;QAC1B,wBAAwB;QACxB,sBAAsB;QACtB,6BAA6B;QAC7B,2BAA2B;QAC3B,sBAAsB;QACtB,6BAA6B;QAC7B,2BAA2B;QAC3B,eAAe;QACf,wBAAwB;QACxB,+BAA+B;QAC/B,6BAA6B;QAC7B,mBAAmB;QACnB,0BAA0B;QAC1B,wBAAwB;QACxB,sBAAsB;QACtB,6BAA6B;QAC7B,2BAA2B;QAC3B,sBAAsB;QACtB,6BAA6B;QAC7B,2BAA2B;AAC5B,KAAA;CACF,CAAA;MA0BY,cAAc,CAAA;AAxB3B,IAAA,WAAA,GAAA;;AA0BU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC/C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAC/C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AACnD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAC3D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAuD5B,QAAA,IAAA,CAAA,YAAY,GAAiB;AAClC,YAAA,mBAAmB,EAAE,IAAI;SAC1B,CAAA;AA0CS,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAA;AAiB9D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAA;;;AAI5E;;;;AAIG;QAEI,IAAoB,CAAA,oBAAA,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAa,CAAA;;;AA6BzE;;AAEG;QACa,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAA;AAE7E;;AAEG;AACa,QAAA,IAAA,CAAA,WAAW,GACzB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAkB,EAAE,CAAC,CAAA;AAElF;;AAEG;AACa,QAAA,IAAA,CAAA,WAAW,GACzB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAkB,EAAE,CAAC,CAAA;;;AAIlF;;AAEG;QACa,IAAe,CAAA,eAAA,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;aAClF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAEhB;;AAEG;AACa,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAA;AAE/D;;AAEG;AACa,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAA;;AAGrD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAA;AAE1C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAA;AAmFrD,KAAA;;;AA/QC;;;;;;AAMG;IACH,IACW,IAAI,CAAC,IAA+B,EAAA;QAC7C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;KACxC;AAED;;AAEG;IACH,IACW,OAAO,CAAC,KAAa,EAAA;QAC9B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAC5C;AAED;;AAEG;IACH,IACW,OAAO,CAAC,KAAa,EAAA;QAC9B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAC5C;AAED;;;;;;;AAOG;IACH,IACW,eAAe,CAAC,eAAgC,EAAA;QACzD,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;KAC9D;AAED;;AAEG;IACH,IACW,UAAU,CAAC,KAA0B,EAAA;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;KACpE;AAOD;;AAEG;IACH,IACW,kBAAkB,CAAC,KAAc,EAAA;QAC1C,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KACvD;IAED,IACW,iBAAiB,CAAC,KAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;KACzC;AAED;;;;AAIG;AACH,IAAA,IACW,UAAU,CAAC,UAA2B,EAAI,EAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAE;IAE1G,IAAW,UAAU,GAAK,EAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAA,EAAE;;;AAIxE;;AAEG;IACH,IACW,KAAK,CAAC,QAAgC,EAAA;QAC/C,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EACnD,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CACxE,CAAA;;QAGD,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAA;QAE5D,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;KAC9C;AAID;;AAEG;IACH,IACW,KAAK,CAAC,QAAgB,EAAA;QAC/B,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EACnD,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,CACxE,CAAA;;QAGD,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,CAAA;QAE7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;KAC9C;IAiFM,QAAQ,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE,CAAA;KAC5B;;AAGD;;;;AAIG;AACI,IAAA,UAAU,CAAC,QAAuB,EAAA;QACvC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;KACpG;AAED;;;;AAIG;AACI,IAAA,MAAM,CAAC,IAAY,EAAA;QACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;KACpG;AAED;;;;AAIG;AACI,IAAA,KAAK,CAAC,KAAY,EAAA;QACvB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;KACjG;AAEM,IAAA,OAAO,CAAC,OAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KACtC;AAED;;;;AAIG;AACI,IAAA,OAAO,CAAc,EAAU,EAAA;QACpC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAI,EAAE,CAAC,EAAE,IAAI,CAAA;KACrD;AAED;;AAEG;IACI,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;KACpE;AAED;;AAEG;AACI,IAAA,wBAAwB,CAAC,KAAY,EAAA;QAC1C,OAAO,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAA;KAC9D;;AAGS,IAAA,UAAU,CAAC,GAAW,EAAE,EAAE,IAAI,EAAa,EAAA;AACnD,QAAA,OAAO,IAAI,CAAA;KACZ;AAES,IAAA,UAAU,CAAC,GAAW,EAAE,EAAE,IAAI,EAAa,EAAA;AACnD,QAAA,OAAO,IAAI,CAAA;KACZ;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE;YAEzC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;AAChC,gBAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI;AACrB,oBAAA,KAAK,eAAe,CAAC;oBACrB,KAAK,gBAAgB,EAAE;AACrB,wBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC1C,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAA;AACH,SAAA;KACF;+GA7RU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAd,cAAc,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAuFL,CAAC,QAA4B,KAAK,IAAI,eAAe,CAAC,QAAQ,CAAC,CA1GxE,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA;YACT,gBAAgB;YAChB,eAAe;YACf,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,kBAAkB;YAClB,oBAAoB;YACpB,gBAAgB;YAChB,mBAAmB;YACnB,wBAAwB;YACxB,eAAe;YACf,eAAe;AAChB,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkJa,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGzB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAG1B,qBAAqB,EAGrB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,8BAA8B,EAG9B,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,2BAA2B,EAK9B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,mBAAmB,EAGnB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,0BAA0B,+tDCvQvC,8pCAiDA,EAAA,MAAA,EAAA,CAAA,iIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDsDa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAxB1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,OAAO,EAGA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;wBACT,gBAAgB;wBAChB,eAAe;wBACf,iBAAiB;wBACjB,mBAAmB;wBACnB,kBAAkB;wBAClB,kBAAkB;wBAClB,oBAAoB;wBACpB,gBAAgB;wBAChB,mBAAmB;wBACnB,wBAAwB;wBACxB,eAAe;wBACf,eAAe;qBAChB,EACe,cAAA,EAAA;wBACd,iCAAiC;wBACjC,8BAA8B;AAC/B,qBAAA,EAAA,QAAA,EAAA,8pCAAA,EAAA,MAAA,EAAA,CAAA,iIAAA,CAAA,EAAA,CAAA;8BAyBU,IAAI,EAAA,CAAA;sBADd,KAAK;gBASK,OAAO,EAAA,CAAA;sBADjB,KAAK;gBASK,OAAO,EAAA,CAAA;sBADjB,KAAK;gBAcK,eAAe,EAAA,CAAA;sBADzB,KAAK;gBASK,UAAU,EAAA,CAAA;sBADpB,KAAK;gBAMC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBASK,kBAAkB,EAAA,CAAA;sBAD5B,KAAK;gBAMK,iBAAiB,EAAA,CAAA;sBAD3B,KAAK;gBAWK,UAAU,EAAA,CAAA;sBADpB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,SAAS,EAAE,CAAC,QAA4B,KAAK,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAA;gBAW1E,KAAK,EAAA,CAAA;sBADf,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAkBd,KAAK,EAAA,CAAA;sBADf,KAAK;gBAsBC,oBAAoB,EAAA,CAAA;sBAD1B,MAAM;gBAMG,qBAAqB,EAAA,CAAA;sBAD9B,YAAY;uBAAC,yBAAyB,CAAA;gBAI7B,0BAA0B,EAAA,CAAA;sBADnC,YAAY;uBAAC,0BAA0B,CAAA;gBAI9B,qBAAqB,EAAA,CAAA;sBAD9B,YAAY;uBAAC,qBAAqB,CAAA;gBAIzB,sBAAsB,EAAA,CAAA;sBAD/B,YAAY;uBAAC,8BAA8B,CAAA;gBAIlC,2BAA2B,EAAA,CAAA;sBADpC,YAAY;uBAAC,2BAA2B,CAAA;gBAM/B,UAAU,EAAA,CAAA;sBADnB,SAAS;uBAAC,mBAAmB,CAAA;gBAIpB,iBAAiB,EAAA,CAAA;sBAD1B,SAAS;uBAAC,0BAA0B,CAAA;;;ME9P1B,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC3C,IAAU,CAAA,UAAA,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,IAAU,CAAA,UAAA,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAoB/D,KAAA;IAhBW,WAAW,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC5B,IAAI,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAAE;AAC3D,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,SAAA;KACF;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAA;AACjC,SAAA;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;AAC7B,SAAA;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;+GAvBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAA;8BAS3B,WAAW,EAAA,CAAA;sBAFpB,YAAY;uBAAC,WAAW,CAAA;;sBACxB,YAAY;uBAAC,YAAY,CAAA;;;MCdf,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACS,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAA;KAC5D;AAAA;;MCYY,gBAAgB,CAAA;AAL7B,IAAA,WAAA,GAAA;AAMY,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAC7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAUrC;;AAEG;QAEI,IAAS,CAAA,SAAA,GAAG,0BAA0B,CAAA;AAE7C;;AAEG;QAEI,IAAW,CAAA,WAAA,GAAG,oBAAoB,CAAA;QAaxB,IAAa,CAAA,aAAA,GAAG,EAAE,CAAA;AAElB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC7B,gBAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,CAAA;AAClC,aAAA;AAED,YAAA,OAAO,GAAG,CAAA;AACZ,SAAC,CAAC,CAAA;AAEQ,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC,CAAA;AAErF,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAEvB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC5B,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAA;AACzD,gBAAA,KAAK,WAAW;oBACd,OAAO;AACL,wBAAA,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa;wBAC1F,CAAC,EAAE,IAAI,CAAC,aAAa;qBACtB,CAAA;AACH,gBAAA,KAAK,aAAa;oBAChB,OAAO;wBACL,CAAC,EAAE,IAAI,CAAC,aAAa;AACrB,wBAAA,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa;qBAC7F,CAAA;AACH,gBAAA,KAAK,cAAc;oBACjB,OAAO;AACL,wBAAA,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa;AAC1F,wBAAA,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa;qBAC7F,CAAA;AACJ,aAAA;AACH,SAAC,CAAC,CAAA;AAEQ,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CACnE,CAAA;AACS,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CACpE,CAAA;AAES,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;AACzD,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAA;AAE7B,YAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,KAAK,CAAA;AACnD,YAAA,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;AAExB,YAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,KAAK,CAAA;AACnD,YAAA,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;AAExB,YAAA,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;AAE5B,YAAA,OAAO,aAAa,CAAC,CAAA,EAAA,EAAK,CAAC,CAAW,QAAA,EAAA,KAAK,GAAG,CAAC;AACjD,SAAC,CAAC,CAAC;AAGO,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;AAE1C,YAAA,OAAO,oBAAoB,CACzB,cAAc,CAAC,KAAK,CAAC,EACrB,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,EAC5C,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,EAC7C,CAAC,QAAQ,EACT,GAAG,EACH,CAAC,CACF,CAAA;AAEH,SAAC,CAAC,CAAA;AAEQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YAEnC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACvC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;AAE9C,YAAA,OAAO,aAAa,CAAC,CAAA,CAAA,EAAI,CAAC,CAAW,QAAA,EAAA,KAAK,GAAG,CAAA;AAC/C,SAAC,CAAC,CAAA;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,cAAc,CAAC,CAAA;AAEzD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAY3C,KAAA;AAhIC;;AAEG;IACH,IACW,QAAQ,CAAC,KAAsB,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KAChC;AAcD;;AAEG;IACH,IACW,YAAY,CAAC,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KACnC;IA4FM,QAAQ,GAAA;AACb,QAAA,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAA;QAChC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEhC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KACxC;AAES,IAAA,UAAU,CAAC,GAAW,EAAE,EAAE,IAAI,EAAa,EAAA;AACnD,QAAA,OAAO,IAAI,CAAA;KACZ;+GArIU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,sRChB7B,4vEAqEA,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDrDa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,4vEAAA,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA,CAAA;8BAcT,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBASC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAOC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAOK,YAAY,EAAA,CAAA;sBADtB,KAAK;gBAME,OAAO,EAAA,CAAA;sBADd,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;ME7C3B,YAAY,CAAA;AAmCvB,IAAA,WAAA,CAAmB,IAAe,EAAA;QAAf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAW;AAlC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,KAAK,CAAC,CAAA;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAA;AAEpD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;AAEnB,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACrB,gBAAA,KAAK,KAAK;oBACR,OAAO;AACL,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC;AACrD,wBAAA,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;qBACvC,CAAA;AACH,gBAAA,KAAK,QAAQ;oBACX,OAAO;AACL,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC;AACrD,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;qBAC3C,CAAA;AACH,gBAAA,KAAK,MAAM;oBACT,OAAO;AACL,wBAAA,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACrC,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;qBACxD,CAAA;AACH,gBAAA,KAAK,OAAO;oBACV,OAAO;AACL,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACzC,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;qBACxD,CAAA;AACJ,aAAA;AACH,SAAC,CAAC,CAAA;QAEK,IAAS,CAAA,SAAA,GAAG,QAAQ,CAAC,MAAM,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAG,CAAA,CAAA,CAAC,CAAA;AAE7E,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;KAEN;AACxC;;MClBY,oBAAoB,CAAA;AAhBjC,IAAA,WAAA,GAAA;AAiBU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAUvC,IAAK,CAAA,KAAA,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAG,CAAC,CAAA;AAW9D,KAAA;IAnBC,IACW,QAAQ,CAAC,KAAe,EAAA;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAChC;IAOM,QAAQ,GAAA;QACb,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAEpD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC5C;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KAC/C;+GAtBU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAdrB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,OAkCU,2BAA2B,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FA1B3B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACd,QAAA,EAAA,CAAA;;;;;;GAMT,EAMgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,CAAA;8BAOpC,QAAQ,EAAA,CAAA;sBADlB,KAAK;gBAMC,sBAAsB,EAAA,CAAA;sBAD5B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;MAiB3B,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAA;AAW9D,KAAA;IANQ,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAClB,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW;AAC7C,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY;AAChD,SAAA,CAAC,CAAA;KACH;+GAXU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA3B,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,SAAS;mBAAC,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAA;8BAKtC,KAAK,EAAA,CAAA;sBADX,KAAK;;;MC3CK,mBAAmB,CAAA;AAG9B,IAAA,IAAY,KAAK,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAG,CAAA;KAClC;AAED,IAAA,WAAA,GAAA;AANQ,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAOhD,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,CAAA;AAExD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;AACxD,SAAC,CAAC,CAAA;KACH;+GAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC7B,qBAAA;AACF,iBAAA,CAAA;;;ACkBD,MAAM,UAAU,GAAG;IACjB,cAAc;IACd,aAAa;IACb,oBAAoB;IACpB,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;CACrB,CAAA;AAED,MAAM,UAAU,GAAG;IACjB,0BAA0B;IAC1B,mBAAmB;IACnB,yBAAyB;IACzB,uBAAuB;IACvB,6BAA6B;IAC7B,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,2BAA2B;IAC3B,2BAA2B;CAC5B,CAAA;AAED,MAAM,kBAAkB,GAAG;IACzB,yBAAyB;IACzB,0BAA0B;IAC1B,8BAA8B;IAC9B,qBAAqB;IACrB,2BAA2B;IAC3B,uBAAuB;CACxB,CAAA;MAgBY,WAAW,CAAA;+GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBAnDtB,cAAc;YACd,aAAa;YACb,oBAAoB;YACpB,aAAa;YACb,kBAAkB;YAClB,mBAAmB;YACnB,eAAe;YACf,aAAa;YACb,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;AAChB,YAAA,oBAAoB,EAIpB,0BAA0B;YAC1B,mBAAmB;YACnB,yBAAyB;YACzB,uBAAuB;YACvB,6BAA6B;YAC7B,mBAAmB;YACnB,mBAAmB;YACnB,gBAAgB;YAChB,oBAAoB;YACpB,2BAA2B;AAC3B,YAAA,2BAA2B,EAI3B,yBAAyB;YACzB,0BAA0B;YAC1B,8BAA8B;YAC9B,qBAAqB;YACrB,2BAA2B;YAC3B,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAIb,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAEtE,cAAc;YACd,eAAe;YACf,kBAAkB;YAClB,mBAAmB;YACnB,gBAAgB;YAChB,oBAAoB;AACpB,YAAA,mBAAmB,EAjBrB,yBAAyB;YACzB,0BAA0B;YAC1B,8BAA8B;YAC9B,qBAAqB;YACrB,2BAA2B;YAC3B,uBAAuB,CAAA,EAAA,CAAA,CAAA,EAAA;gHAiBZ,WAAW,EAAA,CAAA,CAAA,EAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAdvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,CAAC;AACzE,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,eAAe;wBACf,kBAAkB;wBAClB,mBAAmB;wBACnB,gBAAgB;wBAChB,oBAAoB;wBACpB,mBAAmB;AACnB,wBAAA,GAAG,kBAAkB;AACtB,qBAAA;oBACD,YAAY,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,kBAAkB,CAAC;AACpE,iBAAA,CAAA;;;AC/DD,MAAM,SAAS,GAAG,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;SAE7E,sBAAsB,GAAA;IACpC,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,wBAAwB;AACjC,YAAA,QAAQ,EAAE;AACR,gBAAA,SAAS,EAAE,MAAK,GAAI;AACrB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,UAAU,EAAE,OAAO;AACjB,gBAAA,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AACzB,gBAAA,YAAY,EAAE,MAAK,GAAI;AACvB,gBAAA,aAAa,EAAE,MAAK,GAAI;aACzB,CAAC;AACH,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,QAAQ,EAAE;gBACR,gBAAgB,EAAE,EAAE,CAAC;AACnB,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,aAAa,EAAE,IAAI;iBACpB,CAAC;AACF,gBAAA,mBAAmB,EAAE,EAAE,CAAC,IAAI,CAAC;AAC9B,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,0BAA0B;AACnC,YAAA,QAAQ,EAAE;AACR,gBAAA,wBAAwB,EAAE,CAAC,KAAY,KAAK,KAAK;AAClD,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,UAAU,EAAE,OAAO;AACjB,gBAAA,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;aAC3B,CAAC;AACH,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,QAAQ,EAAE;AACR,gBAAA,MAAM,EAAE,MAAK,GAAI;AAClB,aAAA;AACF,SAAA;QACD,mBAAmB;QACnB,mBAAmB;QACnB,eAAe;KAChB,CAAA;AACH;;ACpEA;;ACAA;;AAEG;;;;"}