{"version":3,"file":"ng3-flat-ui.mjs","sources":["../../../projects/ng3-flat-ui/src/lib/flat-ui-theme.ts","../../../projects/ng3-flat-ui/src/lib/avatar/avatar.component.ts","../../../projects/ng3-flat-ui/src/lib/avatar/avatar.component.html","../../../projects/ng3-flat-ui/src/lib/flat-ui-utils.ts","../../../projects/ng3-flat-ui/src/lib/base-button/base-button.component.ts","../../../projects/ng3-flat-ui/src/lib/base-button/base-button.component.html","../../../projects/ng3-flat-ui/src/lib/button/button.component.ts","../../../projects/ng3-flat-ui/src/lib/button/button.component.html","../../../projects/ng3-flat-ui/src/lib/BufferGeometryUtils.ts","../../../projects/ng3-flat-ui/src/lib/icon/icon.component.ts","../../../projects/ng3-flat-ui/src/lib/icon/icon.component.html","../../../projects/ng3-flat-ui/src/lib/label/label.component.ts","../../../projects/ng3-flat-ui/src/lib/label/label.component.html","../../../projects/ng3-flat-ui/src/lib/paginator/paginator.component.ts","../../../projects/ng3-flat-ui/src/lib/paginator/paginator.component.html","../../../projects/ng3-flat-ui/src/lib/list/list.component.ts","../../../projects/ng3-flat-ui/src/lib/list/list.component.html","../../../projects/ng3-flat-ui/src/lib/drag-and-drop.ts","../../../projects/ng3-flat-ui/src/lib/card/card.component.ts","../../../projects/ng3-flat-ui/src/lib/card/card.component.html","../../../projects/ng3-flat-ui/src/lib/material-icon/material-icon.component.ts","../../../projects/ng3-flat-ui/src/lib/material-icon/material-icon.component.html","../../../projects/ng3-flat-ui/src/lib/card-actions/card-actions.component.ts","../../../projects/ng3-flat-ui/src/lib/card-actions/card-actions.component.html","../../../projects/ng3-flat-ui/src/lib/card-action/card-action.component.ts","../../../projects/ng3-flat-ui/src/lib/color-picker/color-picker.component.ts","../../../projects/ng3-flat-ui/src/lib/color-picker/color-picker.component.html","../../../projects/ng3-flat-ui/src/lib/confirm/confirm.component.ts","../../../projects/ng3-flat-ui/src/lib/confirm/confirm.component.html","../../../projects/ng3-flat-ui/src/lib/layout.ts","../../../projects/ng3-flat-ui/src/lib/horizontal-layout.directive.ts","../../../projects/ng3-flat-ui/src/lib/vertical-layout.directive.ts","../../../projects/ng3-flat-ui/src/lib/data-grid/data-grid.component.ts","../../../projects/ng3-flat-ui/src/lib/data-grid/data-grid.component.html","../../../projects/ng3-flat-ui/src/lib/data-grid-column/data-grid-column.component.ts","../../../projects/ng3-flat-ui/src/lib/drag-panel/drag-panel.component.ts","../../../projects/ng3-flat-ui/src/lib/drag-panel/drag-panel.component.html","../../../projects/ng3-flat-ui/src/lib/divider/divider.component.ts","../../../projects/ng3-flat-ui/src/lib/divider/divider.component.html","../../../projects/ng3-flat-ui/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/ng3-flat-ui/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/ng3-flat-ui/src/lib/icon-button/icon-button.component.ts","../../../projects/ng3-flat-ui/src/lib/icon-button/icon-button.component.html","../../../projects/ng3-flat-ui/src/lib/basic-image/basic-image.component.ts","../../../projects/ng3-flat-ui/src/lib/basic-image/basic-image.component.html","../../../projects/ng3-flat-ui/src/lib/input-checkbox/input-checkbox.component.ts","../../../projects/ng3-flat-ui/src/lib/input-checkbox/input-checkbox.component.html","../../../projects/ng3-flat-ui/src/lib/input-color/input-color.component.ts","../../../projects/ng3-flat-ui/src/lib/input-color/input-color.component.html","../../../projects/ng3-flat-ui/src/lib/input-number/input-number.component.ts","../../../projects/ng3-flat-ui/src/lib/input-number/input-number.component.html","../../../projects/ng3-flat-ui/src/lib/input-slider/input-slider.component.ts","../../../projects/ng3-flat-ui/src/lib/input-slider/input-slider.component.html","../../../projects/ng3-flat-ui/src/lib/input-text/input-text.component.ts","../../../projects/ng3-flat-ui/src/lib/input-text/input-text.component.html","../../../projects/ng3-flat-ui/src/lib/input-textarea/input-textarea.component.ts","../../../projects/ng3-flat-ui/src/lib/input-textarea/input-textarea.component.html","../../../projects/ng3-flat-ui/src/lib/input-toggle/input-toggle.component.ts","../../../projects/ng3-flat-ui/src/lib/input-toggle/input-toggle.component.html","../../../projects/ng3-flat-ui/src/lib/keyboard/keyboard.component.ts","../../../projects/ng3-flat-ui/src/lib/keyboard/keyboard.component.html","../../../projects/ng3-flat-ui/src/lib/material-button/material-button.component.ts","../../../projects/ng3-flat-ui/src/lib/material-button/material-button.component.html","../../../projects/ng3-flat-ui/src/lib/menu/menu.component.ts","../../../projects/ng3-flat-ui/src/lib/menu/menu.component.html","../../../projects/ng3-flat-ui/src/lib/menu-mini/menu-mini.component.ts","../../../projects/ng3-flat-ui/src/lib/menu-mini/menu-mini.component.html","../../../projects/ng3-flat-ui/src/lib/menu-item/menu-item.component.ts","../../../projects/ng3-flat-ui/src/lib/numpad/numpad.component.ts","../../../projects/ng3-flat-ui/src/lib/numpad/numpad.component.html","../../../projects/ng3-flat-ui/src/lib/progress-bar/progress-bar.component.ts","../../../projects/ng3-flat-ui/src/lib/progress-bar/progress-bar.component.html","../../../projects/ng3-flat-ui/src/lib/flat-ui-input.service.ts","../../../projects/ng3-flat-ui/src/lib/prompt/prompt.component.ts","../../../projects/ng3-flat-ui/src/lib/prompt/prompt.component.html","../../../projects/ng3-flat-ui/src/lib/radio-group/radio-group.component.ts","../../../projects/ng3-flat-ui/src/lib/radio-group/radio-group.component.html","../../../projects/ng3-flat-ui/src/lib/radio-button/radio-button.component.ts","../../../projects/ng3-flat-ui/src/lib/radio-button/radio-button.component.html","../../../projects/ng3-flat-ui/src/lib/select/select.component.ts","../../../projects/ng3-flat-ui/src/lib/select/select.component.html","../../../projects/ng3-flat-ui/src/lib/tab-group/tab-group.component.ts","../../../projects/ng3-flat-ui/src/lib/tab-group/tab-group.component.html","../../../projects/ng3-flat-ui/src/lib/tab/tab.component.ts","../../../projects/ng3-flat-ui/src/lib/tab/tab.component.html","../../../projects/ng3-flat-ui/src/lib/interactive-objects.ts","../../../projects/ng3-flat-ui/src/lib/ng3-flat-ui.module.ts","../../../projects/ng3-flat-ui/src/public-api.ts","../../../projects/ng3-flat-ui/src/ng3-flat-ui.ts"],"sourcesContent":["import { LineBasicMaterial, Material, MeshBasicMaterial, Object3D } from \"three\";\r\n\r\nexport const THEME_CHANGE_EVENT = 'themechanged';\r\n\r\nexport interface FlatUITheme {\r\n  LabelColor: string,\r\n  ButtonColor: string,\r\n  NumberColor: string,\r\n  StringColor: string,\r\n  CheckColor: string,\r\n  SlideColor: string,\r\n  ToggleFalseColor: string,\r\n  ToggleTrueColor: string,\r\n  IconColor: string,\r\n  PanelColor: string,\r\n  PopupColor: string,\r\n  SelectColor: string,\r\n  ProgressColor: string,\r\n  DisabledColor: string,\r\n  OutlineColor: string,\r\n  ScaleColor: string,\r\n  ListSelectColor: string,\r\n}\r\n// just in case you want to add to the scene when saving to GLTF\r\n\r\nexport class FlatUIThemeObject extends Object3D implements FlatUITheme {\r\n  LabelColor = 'white';\r\n  ButtonColor = '#282828';\r\n  NumberColor = 'cornflowerblue';\r\n  StringColor = 'lime';\r\n  CheckColor = 'cornflowerblue';\r\n  SlideColor = 'yellow';\r\n  ToggleFalseColor = 'white';\r\n  ToggleTrueColor = 'cornflowerblue';\r\n  IconColor = 'white';\r\n  PanelColor = 'black';\r\n  PopupColor = '#333';\r\n  SelectColor = 'white';\r\n  ProgressColor = 'green';\r\n  DisabledColor = '#111';\r\n  OutlineColor = 'white';\r\n  ScaleColor = 'white';\r\n  ListSelectColor = 'white';\r\n\r\n  // notify any object using the theme that it changed\r\n  notify() {\r\n    this.updateMaterial();\r\n    this.dispatchEvent({ type: THEME_CHANGE_EVENT })\r\n  }\r\n\r\n  changeTheme(newtheme: FlatUITheme) {\r\n    this.LabelColor = newtheme.LabelColor\r\n    this.ButtonColor = newtheme.ButtonColor\r\n    this.NumberColor = newtheme.NumberColor\r\n    this.StringColor = newtheme.StringColor\r\n    this.CheckColor = newtheme.CheckColor\r\n    this.SlideColor = newtheme.SlideColor\r\n    this.ToggleFalseColor = newtheme.ToggleFalseColor\r\n    this.ToggleTrueColor = newtheme.ToggleTrueColor\r\n    this.IconColor = newtheme.IconColor\r\n    this.PanelColor = newtheme.PanelColor\r\n    this.PopupColor = newtheme.PopupColor\r\n    this.SelectColor = newtheme.SelectColor\r\n    this.ProgressColor = newtheme.ProgressColor\r\n    this.DisabledColor = newtheme.DisabledColor;\r\n    this.OutlineColor = newtheme.OutlineColor;\r\n    this.ScaleColor = newtheme.ScaleColor;\r\n    this.ListSelectColor = newtheme.ListSelectColor;\r\n\r\n    this.notify();\r\n  }\r\n\r\n  LabelMaterial!: Material;\r\n  ButtonMaterial!: Material;\r\n  ButtonLabelMaterial!: Material;\r\n  NumberMaterial!: Material;\r\n  StringMaterial!: Material;\r\n  CheckMaterial!: Material;\r\n  SliderMaterial!: Material;\r\n  ToggleFalseMaterial!: Material;\r\n  ToggleTrueMaterial!: Material;\r\n  IconMaterial!: Material;\r\n  PanelMaterial!: Material;\r\n  PopupMaterial!: Material;\r\n  SelectMaterial!: Material;\r\n  ProgressMaterial!: Material;\r\n  DisabledMaterial!: Material;\r\n  OutlineMaterial!: Material;\r\n  ScaleMaterial!: Material;\r\n  ListSelectMaterial!: Material;\r\n\r\n  // additional materials\r\n  TitleMaterial!: Material;\r\n\r\n  constructor() {\r\n    super();\r\n\r\n    this.ButtonMaterial = new MeshBasicMaterial({ color: this.ButtonColor });\r\n    this.IconMaterial = new MeshBasicMaterial({ color: this.IconColor });\r\n    this.DisabledMaterial = new MeshBasicMaterial({ color: this.DisabledColor });\r\n\r\n    this.LabelMaterial = new MeshBasicMaterial({ color: this.LabelColor });\r\n    this.NumberMaterial = new MeshBasicMaterial({ color: this.NumberColor });\r\n    this.StringMaterial = new MeshBasicMaterial({ color: this.StringColor });\r\n\r\n    this.ProgressMaterial = new MeshBasicMaterial({ color: this.ProgressColor });\r\n    this.SliderMaterial = new MeshBasicMaterial({ color: this.SlideColor });\r\n    this.CheckMaterial = new MeshBasicMaterial({ color: this.CheckColor });\r\n\r\n    this.CheckMaterial = new MeshBasicMaterial({ color: this.CheckColor });\r\n    this.ToggleFalseMaterial = new MeshBasicMaterial({ color: this.ToggleFalseColor });\r\n    this.ToggleTrueMaterial = new MeshBasicMaterial({ color: this.ToggleTrueColor });\r\n    this.SelectMaterial = new MeshBasicMaterial({ color: this.SelectColor });\r\n    this.ListSelectMaterial = new MeshBasicMaterial({ color: this.ListSelectColor });\r\n\r\n    this.PanelMaterial = new MeshBasicMaterial({ color: this.PanelColor });\r\n    this.TitleMaterial = new MeshBasicMaterial({ color: this.PanelColor, transparent: true, opacity: 0.3 });\r\n\r\n    this.PopupMaterial = new MeshBasicMaterial({ color: this.PopupColor });\r\n    this.ScaleMaterial = new MeshBasicMaterial({ color: this.ScaleColor });\r\n\r\n    this.OutlineMaterial = new LineBasicMaterial({ color: this.OutlineColor });\r\n\r\n\r\n  }\r\n\r\n  updateMaterial() {\r\n    (this.ButtonMaterial as MeshBasicMaterial).color.setStyle(this.ButtonColor);\r\n    (this.IconMaterial as MeshBasicMaterial).color.setStyle(this.IconColor);\r\n    (this.DisabledMaterial as MeshBasicMaterial).color.setStyle(this.DisabledColor);\r\n\r\n    (this.LabelMaterial as MeshBasicMaterial).color.setStyle(this.LabelColor);\r\n    (this.NumberMaterial as MeshBasicMaterial).color.setStyle(this.NumberColor);\r\n    (this.StringMaterial as MeshBasicMaterial).color.setStyle(this.StringColor);\r\n\r\n    (this.ProgressMaterial as MeshBasicMaterial).color.setStyle(this.ProgressColor);\r\n    (this.SliderMaterial as MeshBasicMaterial).color.setStyle(this.SlideColor);\r\n    (this.CheckMaterial as MeshBasicMaterial).color.setStyle(this.CheckColor);\r\n\r\n    (this.CheckMaterial as MeshBasicMaterial).color.setStyle(this.CheckColor);\r\n    (this.ToggleFalseMaterial as MeshBasicMaterial).color.setStyle(this.ToggleFalseColor);\r\n    (this.ToggleTrueMaterial as MeshBasicMaterial).color.setStyle(this.ToggleTrueColor);\r\n    (this.SelectMaterial as MeshBasicMaterial).color.setStyle(this.SelectColor);\r\n    (this.ListSelectMaterial as MeshBasicMaterial).color.setStyle(this.ListSelectColor);\r\n\r\n    (this.PanelMaterial as MeshBasicMaterial).color.setStyle(this.PanelColor);\r\n    (this.TitleMaterial as MeshBasicMaterial).color.setStyle(this.PanelColor);\r\n\r\n    (this.PopupMaterial as MeshBasicMaterial).color.setStyle(this.PopupColor);\r\n    (this.ScaleMaterial as MeshBasicMaterial).color.setStyle(this.ScaleColor);\r\n\r\n    (this.OutlineMaterial as LineBasicMaterial).color.setStyle(this.OutlineColor);\r\n  }\r\n\r\n}\r\n\r\nexport const GlobalFlatUITheme = new FlatUIThemeObject();\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\nimport { Mesh, Texture, TextureLoader } from \"three\";\r\nimport { NgtLoader, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgtCircleGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtMeshBasicMaterial } from \"@angular-three/core/materials\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\nimport { CommonModule, NgIf } from \"@angular/common\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-avatar',\r\n  exportAs: 'flatUIAvatar',\r\n  templateUrl: './avatar.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgtMesh,\r\n    NgtObjectPassThrough,\r\n    NgtSobaText,\r\n    NgtCircleGeometry,\r\n    NgtMeshBasicMaterial,\r\n  ]\r\n})\r\nexport class FlatUIAvatar extends NgtObjectProps<Mesh> {\r\n  @Input()\r\n  set url(newvalue: string) {\r\n    if (!newvalue) return;\r\n\r\n    const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n      this.maptexture = next;\r\n    },\r\n      () => { },\r\n      () => { s.unsubscribe(); }\r\n    );\r\n  }\r\n  @Input() radius = 0.07;\r\n  @Input() initials = '';\r\n  @Input() iconcolor: string = GlobalFlatUITheme.ButtonColor;\r\n\r\n  protected maptexture!: Texture;\r\n\r\n  constructor(private loader: NgtLoader) { super(); }\r\n}\r\n","<ngt-mesh [ngtObjectPassThrough]=\"this\">\r\n  <ngt-soba-text *ngIf=\"initials\" [text]=\"initials\" [fontSize]=\"radius\" [position]=\"[0, 0, 0.001]\"></ngt-soba-text>\r\n\r\n  <ngt-circle-geometry [args]=\"[radius, 32]\"></ngt-circle-geometry>\r\n\r\n  <ngt-mesh-basic-material [color]=\"iconcolor\" [map]=\"maptexture\"></ngt-mesh-basic-material>\r\n\r\n</ngt-mesh>\r\n","import { EventEmitter } from \"@angular/core\";\r\nimport { Object3D, Shape, Vector3 } from \"three\";\r\n\r\nexport const HEIGHT_CHANGED_EVENT = 'heightchanged';\r\nexport const WIDTH_CHANGED_EVENT = 'widthchanged';\r\nexport const LAYOUT_EVENT = 'layout';\r\n\r\n\r\nexport function roundedRect(ctx: Shape, x: number, y: number, width: number, height: number, radius: number) {\r\n  ctx.moveTo(x, y + radius);\r\n  ctx.lineTo(x, y + height - radius);\r\n  ctx.quadraticCurveTo(x, y + height, x + radius, y + height);\r\n  ctx.lineTo(x + width - radius, y + height);\r\n  ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);\r\n  ctx.lineTo(x + width, y + radius);\r\n  ctx.quadraticCurveTo(x + width, y, x + width - radius, y);\r\n  ctx.lineTo(x + radius, y);\r\n  ctx.quadraticCurveTo(x, y, x, y + radius);\r\n}\r\n\r\nexport interface UIInput {\r\n  text: string;\r\n  inputopen: boolean;\r\n  openinput: EventEmitter<Object3D>;\r\n  enter: EventEmitter<void>;\r\n}\r\n\r\nexport interface Paging {\r\n  firstindex: number; // index in list of first item on page\r\n  length: number; // total number of items in list\r\n  pagesize: number;  // number of items displayed on a page\r\n\r\n  movefirst(): void;\r\n  moveprevious(): void;\r\n  movenext(): void;\r\n  movelast(): void;\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-base-button',\r\n  exportAs: 'flatUIBaseButton',\r\n  templateUrl: './base-button.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtObjectPassThrough,\r\n    NgTemplateOutlet,\r\n  ]\r\n})\r\nexport class FlatUIBaseButton extends NgtObjectProps<Mesh>  {\r\n  @Input() text = '';\r\n\r\n  private _width = 0.5;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setButtonColor();\r\n  }\r\n\r\n\r\n  private _buttonmaterial!: Material\r\n  @Input()\r\n  get buttonmaterial(): Material {\r\n    if (this._buttonmaterial) return this._buttonmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set buttonmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._buttonmaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._disabledmaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._outlinematerial = newvalue;\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n  @Input() stoppropagation = true;\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  @Output() pressed = new EventEmitter<string>();\r\n  @Output() hover = new EventEmitter<boolean>();\r\n\r\n  @ContentChild('button') protected button?: TemplateRef<unknown>;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  private mesh!: Mesh; // button mesh\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createButtonGeometry();\r\n  }\r\n\r\n  createButtonGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setButtonColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.buttonmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry?.dispose();\r\n    this.outline?.dispose();\r\n  }\r\n\r\n  private line!: Line;\r\n  protected lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclick(); e.stop = true; })\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n\r\n    this.setButtonColor();\r\n\r\n    this.ready.next(mesh)\r\n  }\r\n\r\n  protected clicked(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclick();\r\n  }\r\n\r\n  private clicking = false;\r\n  private doclick() {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.mesh.scale.addScalar(-0.05);\r\n    this.line.scale.addScalar(-0.05);\r\n\r\n    this.clicking = true;\r\n\r\n    const timer = setTimeout(() => {\r\n      this.mesh.scale.addScalar(0.05);\r\n      this.line.scale.addScalar(0.05);\r\n\r\n      this.pressed.next(this.text);\r\n\r\n      clearTimeout(timer);\r\n      this.clicking = false;\r\n    }, 100);\r\n  }\r\n\r\n  protected doover(event: NgtEvent<MouseEvent>) {\r\n    this.over();\r\n    if (this.stoppropagation) event.stopPropagation();\r\n  }\r\n\r\n  protected doout(event: NgtEvent<MouseEvent>) {\r\n    this.out();\r\n    if (this.stoppropagation) event.stopPropagation();\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.clicking || this.isover || !this.enabled || !this.visible) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n    this.hover.next(true);\r\n  }\r\n  protected out() {\r\n    if (!this.enabled || !this.visible) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n    this.hover.next(false);\r\n  }\r\n}\r\n","<ngt-group [ngtObjectPassThrough]=\"this\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"clicked(mesh.instance.value, $event)\"\r\n            [geometry]=\"geometry\"\r\n            (pointerover)=\"doover($event)\" (pointerout)=\"doout($event)\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ng-container [ngTemplateOutlet]=\"button ? button : defaultButton\"\r\n                  [ngTemplateOutletContext]=\"{ parent: mesh.instance.value }\">\r\n    </ng-container>\r\n\r\n    <ng-template #defaultButton>\r\n      <!--empty-->\r\n    </ng-template>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Material, Mesh } from \"three\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgIf } from \"@angular/common\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-button',\r\n  exportAs: 'flatUIButton',\r\n  templateUrl: './button.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    FlatUIBaseButton,\r\n    NgtSobaText,\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n  ]\r\n})\r\nexport class FlatUIButton extends NgtObjectProps<Mesh> {\r\n  @Input() text = '';\r\n  @Input() width = 0.5;\r\n  @Input() height = 0.1;\r\n  @Input() enabled = true;\r\n  @Input() buttonmaterial: Material | undefined;\r\n  @Input() disabledmaterial: Material | undefined;\r\n  @Input() outlinematerial: Material | undefined;\r\n  @Input() selectable?: InteractiveObjects;\r\n  @Input() stoppropagation = true;\r\n\r\n  @Input() textjustify: number | 'left' | 'center' | 'right' = 'center';\r\n  @Input() fontsize = 0.07;\r\n\r\n  get displaytext(): string { return this.text.substring(0, this.width * 28) }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._labelmaterial = newvalue;\r\n  }\r\n\r\n  @Output() pressed = new EventEmitter<string>();\r\n  @Output() hover = new EventEmitter<boolean>();\r\n\r\n  @ContentChild(TemplateRef) protected templateRef?: TemplateRef<unknown>;\r\n\r\n}\r\n","<flat-ui-base-button #parent [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n                     [text]=\"text\" [enabled]=\"enabled\"\r\n                     [width]=\"width\" [height]=\"height\"\r\n                     [buttonmaterial]=\"buttonmaterial\"\r\n                     [disabledmaterial]=\"disabledmaterial\"\r\n                     [outlinematerial]=\"outlinematerial\"\r\n                     [selectable]=\"selectable\"\r\n                     [stoppropagation]=\"stoppropagation\"\r\n                     (hover)=\"hover.next($event)\"\r\n                     (pressed)=\"pressed.next($event)\" (ready)=\"ready.next($event)\">\r\n\r\n  <ng-template #button let-parent=\"parent\">\r\n    <ngt-soba-text [appendTo]=\"parent\" [text]=\"displaytext\" [material]=\"labelmaterial\" [fontSize]=\"fontsize\" [anchorX]=\"textjustify\" [position]=\"[0, 0, 0.001]\"></ngt-soba-text>\r\n  </ng-template>\r\n\r\n  <ng-container *ngIf=\"templateRef\"\r\n                [ngTemplateOutlet]=\"templateRef\"\r\n                [ngTemplateOutletContext]=\"{ parent: parent.instance.value }\">\r\n  </ng-container>\r\n</flat-ui-base-button>\r\n","import {\r\n  BufferAttribute,\r\n  BufferGeometry,\r\n} from 'three';\r\n\r\n//\r\n// copied from https://github.com/mrdoob/three.js/blob/master/examples/jsm/utils/BufferGeometryUtils.js v144\r\n//\r\n\r\nexport class BufferGeometryUtils {\r\n\r\n  /**\r\n   * @param  {Array<BufferGeometry>} geometries\r\n   * @param  {Boolean} useGroups\r\n   * @return {BufferGeometry}\r\n   */\r\n  static mergeBufferGeometries(geometries: Array<BufferGeometry>, useGroups = false) {\r\n\r\n    const isIndexed = geometries[0].index !== null;\r\n\r\n    const attributesUsed = new Set(Object.keys(geometries[0].attributes));\r\n    const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\r\n\r\n    const attributes: any = {};\r\n    const morphAttributes: any = {};\r\n\r\n    const morphTargetsRelative = geometries[0].morphTargetsRelative;\r\n\r\n    const mergedGeometry = new BufferGeometry();\r\n\r\n    let offset = 0;\r\n\r\n    for (let i = 0; i < geometries.length; ++i) {\r\n\r\n      const geometry = geometries[i];\r\n      let attributesCount = 0;\r\n\r\n      // ensure that all geometries are indexed, or none\r\n\r\n      if (isIndexed !== (geometry.index !== null)) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.');\r\n        return null;\r\n\r\n      }\r\n\r\n      // gather attributes, exit early if they're different\r\n\r\n      for (const name in geometry.attributes) {\r\n\r\n        if (!attributesUsed.has(name)) {\r\n\r\n          console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.');\r\n          return null;\r\n\r\n        }\r\n\r\n        if (attributes[name] === undefined) attributes[name] = [];\r\n\r\n        attributes[name].push(geometry.attributes[name]);\r\n\r\n        attributesCount++;\r\n\r\n      }\r\n\r\n      // ensure geometries have the same number of attributes\r\n\r\n      if (attributesCount !== attributesUsed.size) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.');\r\n        return null;\r\n\r\n      }\r\n\r\n      // gather morph attributes, exit early if they're different\r\n\r\n      if (morphTargetsRelative !== geometry.morphTargetsRelative) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.');\r\n        return null;\r\n\r\n      }\r\n\r\n      for (const name in geometry.morphAttributes) {\r\n\r\n        if (!morphAttributesUsed.has(name)) {\r\n\r\n          console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '.  .morphAttributes must be consistent throughout all geometries.');\r\n          return null;\r\n\r\n        }\r\n\r\n        if (morphAttributes[name] === undefined) morphAttributes[name] = [];\r\n\r\n        morphAttributes[name].push(geometry.morphAttributes[name]);\r\n\r\n      }\r\n\r\n      // gather .userData\r\n\r\n      mergedGeometry.userData['mergedUserData'] = mergedGeometry.userData['mergedUserData'] || [];\r\n      mergedGeometry.userData['mergedUserData'].push(geometry.userData);\r\n\r\n      if (useGroups) {\r\n\r\n        let count = 0;\r\n\r\n        if (isIndexed) {\r\n          if (geometry.index)\r\n            count = geometry.index.count;\r\n\r\n        } else if (geometry.attributes['position'] !== undefined) {\r\n\r\n          count = geometry.attributes['position'].count;\r\n\r\n        } else {\r\n\r\n          console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute');\r\n          return null;\r\n\r\n        }\r\n\r\n        mergedGeometry.addGroup(offset, count, i);\r\n\r\n        offset += count;\r\n\r\n      }\r\n\r\n    }\r\n\r\n    // merge indices\r\n\r\n    if (isIndexed) {\r\n\r\n      let indexOffset = 0;\r\n      const mergedIndex = [];\r\n\r\n      for (let i = 0; i < geometries.length; ++i) {\r\n\r\n        const index = geometries[i].index;\r\n        if (index) {\r\n\r\n          for (let j = 0; j < index.count; ++j) {\r\n\r\n            mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n          }\r\n        }\r\n\r\n        indexOffset += geometries[i].attributes['position'].count;\r\n\r\n      }\r\n\r\n      mergedGeometry.setIndex(mergedIndex);\r\n\r\n    }\r\n\r\n    // merge attributes\r\n\r\n    for (const name in attributes) {\r\n\r\n      const mergedAttribute = BufferGeometryUtils.mergeBufferAttributes(attributes[name]);\r\n\r\n      if (!mergedAttribute) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' attribute.');\r\n        return null;\r\n\r\n      }\r\n\r\n      mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n    }\r\n\r\n    // merge morph attributes\r\n\r\n    for (const name in morphAttributes) {\r\n\r\n      const numMorphTargets = morphAttributes[name][0].length;\r\n\r\n      if (numMorphTargets === 0) break;\r\n\r\n      mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n      mergedGeometry.morphAttributes[name] = [];\r\n\r\n      for (let i = 0; i < numMorphTargets; ++i) {\r\n\r\n        const morphAttributesToMerge = [];\r\n\r\n        for (let j = 0; j < morphAttributes[name].length; ++j) {\r\n\r\n          morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n        }\r\n\r\n        const mergedMorphAttribute = BufferGeometryUtils.mergeBufferAttributes(morphAttributesToMerge);\r\n\r\n        if (!mergedMorphAttribute) {\r\n\r\n          console.error('THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.');\r\n          return null;\r\n\r\n        }\r\n\r\n        mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return mergedGeometry;\r\n\r\n  }\r\n\r\n  /**\r\n   * @param {Array<BufferAttribute>} attributes\r\n   * @return {BufferAttribute}\r\n   */\r\n  static mergeBufferAttributes(attributes: any) {\r\n\r\n    let TypedArray;\r\n    let itemSize;\r\n    let normalized;\r\n    let arrayLength = 0;\r\n\r\n    for (let i = 0; i < attributes.length; ++i) {\r\n\r\n      const attribute = attributes[i];\r\n\r\n      if (attribute.isInterleavedBufferAttribute) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.');\r\n        return null;\r\n\r\n      }\r\n\r\n      if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n      if (TypedArray !== attribute.array.constructor) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.');\r\n        return null;\r\n\r\n      }\r\n\r\n      if (itemSize === undefined) itemSize = attribute.itemSize;\r\n      if (itemSize !== attribute.itemSize) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.');\r\n        return null;\r\n\r\n      }\r\n\r\n      if (normalized === undefined) normalized = attribute.normalized;\r\n      if (normalized !== attribute.normalized) {\r\n\r\n        console.error('THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.');\r\n        return null;\r\n\r\n      }\r\n\r\n      arrayLength += attribute.array.length;\r\n\r\n    }\r\n\r\n    const array = new TypedArray(arrayLength);\r\n    let offset = 0;\r\n\r\n    for (let i = 0; i < attributes.length; ++i) {\r\n\r\n      array.set(attributes[i].array, offset);\r\n\r\n      offset += attributes[i].array.length;\r\n\r\n    }\r\n\r\n    return new BufferAttribute(array, itemSize, normalized);\r\n\r\n  }\r\n\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Group, Material, Mesh, ShapeGeometry, Vector3 } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { SVGLoader, SVGResult } from \"three-stdlib\";\r\n\r\nimport { BufferGeometryUtils } from \"..//BufferGeometryUtils\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { LAYOUT_EVENT } from \"../flat-ui-utils\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-icon',\r\n  exportAs: 'flatUIIcon',\r\n  templateUrl: './icon.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtMesh,\r\n  ]\r\n})\r\nexport class FlatUIIcon extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  @Input() set url(newvalue: string | undefined) {\r\n    if (newvalue) {\r\n      this.load(newvalue);\r\n    }\r\n  }\r\n\r\n  @Input() set svg(text: string | undefined) {\r\n    if (text) {\r\n      this.zone.run(() => {\r\n        this.process(this.loader.parse(text));\r\n      })\r\n    }\r\n  }\r\n\r\n\r\n  @Input() width = 0.1;\r\n\r\n  private _iconmaterial!: Material\r\n  @Input()\r\n  get iconmaterial(): Material {\r\n    if (this._iconmaterial) return this._iconmaterial;\r\n    return GlobalFlatUITheme.IconMaterial;\r\n  }\r\n  set iconmaterial(newvalue: Material) {\r\n    this._iconmaterial = newvalue;\r\n  }\r\n\r\n\r\n  protected icongeometry!: BufferGeometry;\r\n\r\n  protected svgscale!: Vector3;\r\n\r\n  constructor(private cd: ChangeDetectorRef) { super() }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.width;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  protected mesh!: Mesh;\r\n\r\n  private group = new Group();\r\n  private loader = new SVGLoader();\r\n\r\n\r\n  private load(url: string): void {\r\n    this.loader.load(url, (data: SVGResult) => {\r\n      this.process(data);\r\n      this.cd.detectChanges(); // force change detection to render icon\r\n    });\r\n  }\r\n\r\n  private process(data: SVGResult) {\r\n    const paths = data.paths;\r\n\r\n    // cleanup last loaded group of mesh geometries\r\n    this.group.children.forEach(child => {\r\n      (child as Mesh).geometry.dispose();\r\n      this.group.remove(child);\r\n    });\r\n    this.group.children.length = 0;\r\n\r\n    const geometries: Array<BufferGeometry> = [];\r\n\r\n    for (let i = 0; i < paths.length; i++) {\r\n\r\n      const path = paths[i];\r\n\r\n\r\n      const shapes = SVGLoader.createShapes(path);\r\n\r\n      for (let j = 0; j < shapes.length; j++) {\r\n        const shape = shapes[j];\r\n        geometries.push(new ShapeGeometry(shape));\r\n\r\n      }\r\n    }\r\n\r\n    const geometry = BufferGeometryUtils.mergeBufferGeometries(geometries);\r\n    if (geometry) {\r\n      geometry.center();\r\n\r\n      const size = new Vector3();\r\n      geometry.boundingBox?.getSize(size);\r\n      size.z = 1;\r\n      this.svgscale = new Vector3(this.width * 0.8, -this.width * 0.8, 1).divide(size);\r\n\r\n      this.icongeometry = geometry;\r\n    }\r\n  }\r\n\r\n}\r\n","<ngt-mesh [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"svgscale\"\r\n           [geometry]=\"icongeometry\" [material]=\"iconmaterial\" (ready)=\"mesh = $event\">\r\n</ngt-mesh>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { Group, Material, Object3D } from \"three\";\r\nimport { NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\n\r\n// @ts-ignore\r\nimport { Text } from 'troika-three-text'\r\n\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\n\r\nexport type LabelAlignX = 'left' | 'center' | 'right';\r\nexport type LabelAlignY = 'top' | 'top-baseline' | 'middle' | 'bottom-baseline' | 'bottom';\r\n\r\n@Component({\r\n  selector: 'flat-ui-label',\r\n  exportAs: 'flatUILabel',\r\n  templateUrl: './label.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtObjectPassThrough,\r\n    NgtGroup,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUILabel extends NgtObjectProps<Group> implements AfterViewInit {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    if (newvalue == undefined) newvalue = '';\r\n    this._text = newvalue;\r\n  }\r\n\r\n  @Input() font = ''; // for example, https://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwK4vaqI.woff\r\n  @Input() fontsize = 0.07;\r\n\r\n  @Input() cliptowidth = false;\r\n\r\n  protected get x(): number {\r\n    if (this.alignx == 'left')\r\n      return -this.width / 2 + 0.01;\r\n    if (this.alignx == 'right')\r\n      return this.width / 2 - 0.01;\r\n    return 0;\r\n  }\r\n\r\n  @Input() alignx: LabelAlignX = 'left';\r\n  @Input() aligny: LabelAlignY = 'middle';\r\n\r\n  @Input() enabled = false; // doesn't do anything, just avoids error when switching from input-textarea or input-text\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._labelmaterial = newvalue;\r\n  }\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  @Output() textheight = new EventEmitter<number>();\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      const height = this.height\r\n      if (height) Math.max(this.height, this.fontsize);\r\n      e.width = this.width;\r\n      e.height = height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private mesh!: Object3D;\r\n\r\n  meshready(text: Text) {\r\n    if (this.cliptowidth)\r\n      text.clipRect = [0, -this.height / 2, this.width - 0.05, this.height / 2]\r\n    else\r\n      text.maxWidth = this.width;\r\n\r\n    text.addEventListener('synccomplete', () => {\r\n      const bounds = text.textRenderInfo.blockBounds;\r\n      this.textheight.next(bounds[3] - bounds[1]);\r\n    });\r\n\r\n    this.mesh = text;\r\n  }\r\n}\r\n","<!-- https://github.com/nartc/angular-three/blob/main/libs/soba/abstractions/src/lib/text/text.ts -->\r\n<!-- https://protectwise.github.io/troika/troika-three-text/ -->\r\n\r\n<ngt-group [ngtObjectPassThrough]=\"this\">\r\n  <ngt-soba-text [text]=\"text\"\r\n                 [material]=\"labelmaterial\"\r\n                 [fontSize]=\"fontsize\"\r\n                 [font]=\"font\"\r\n                 [anchorX]=\"alignx\"\r\n                 [anchorY]=\"aligny\"\r\n                 [position]=\"[x, 0, 0.001]\"\r\n                 (ready)=\"meshready($event)\">\r\n  </ngt-soba-text>\r\n</ngt-group>\r\n","import { NgtObjectProps, NgtTriple } from \"@angular-three/core\";\r\n\r\nimport { Group, Vector3 } from \"three\";\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { Paging } from \"../flat-ui-utils\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\nimport { NgFor } from \"@angular/common\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { NgIf } from \"@angular/common\";\r\n\r\nclass PageButtonData {\r\n  constructor(public position: NgtTriple, public text: string) { }\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-paginator',\r\n  exportAs: 'flatUIPaginator',\r\n  templateUrl: './paginator.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgtGroup,\r\n    NgtObjectPassThrough,\r\n    FlatUIButton,\r\n    FlatUILabel,\r\n  ]\r\n})\r\nexport class FlatUIPaginator extends NgtObjectProps<Group> {\r\n  @Input() paging!: Paging;\r\n\r\n  @Input() showlabel = true;\r\n\r\n  private _showfirstlast = true;\r\n  @Input()\r\n  get showfirstlast(): boolean { return this._showfirstlast }\r\n  set showfirstlast(newvalue: boolean) {\r\n    this._showfirstlast = newvalue;\r\n    this.buildbuttons();\r\n  }\r\n\r\n  private _buttonsize = 0.1;\r\n  @Input()\r\n  get buttonsize(): number { return this._buttonsize }\r\n  set buttonsize(newvalue: number) {\r\n    this._buttonsize = newvalue;\r\n    this.buildbuttons();\r\n  }\r\n\r\n  @Input() buttonspacing = 0.01;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() widthchange = new EventEmitter<number>();\r\n\r\n  protected buttons: Array<PageButtonData> = [];\r\n  protected get text(): string {\r\n    if (this.paging) {\r\n      let first = this.paging.firstindex;\r\n      const length = this.paging.length;\r\n      const count = Math.min(first + this.paging.pagesize, length);\r\n      if (length > 0) { first++ } // show 1 instead of 0\r\n      return `${first} - ${count} of ${length}`;\r\n    }\r\n    return ''\r\n  }\r\n  protected textposition = new Vector3()\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    this.buildbuttons();\r\n  }\r\n\r\n  private buildbuttons() {\r\n    this.buttons.length = 0;\r\n\r\n    const buttonwidth = this.buttonsize + this.buttonspacing;\r\n    const halfwidth = this.buttonsize / 2;\r\n\r\n    let x = halfwidth;\r\n\r\n    if (this.showfirstlast) {\r\n      this.buttons.push(new PageButtonData([x, 0, 0], '|<'));\r\n      x += buttonwidth;\r\n    }\r\n\r\n    this.buttons.push(new PageButtonData([x, 0, 0], '<'));\r\n    x += buttonwidth;\r\n\r\n    this.buttons.push(new PageButtonData([x, 0, 0], '>'));\r\n    x += buttonwidth;\r\n\r\n    if (this.showfirstlast) {\r\n      this.buttons.push(new PageButtonData([x, 0, 0], '>|'));\r\n      x += buttonwidth;\r\n    }\r\n\r\n    let width = buttonwidth * this.buttons.length - this.buttonspacing * 2;\r\n\r\n    if (this.showlabel) {\r\n      const labelwidth = 1;\r\n      this.textposition = new Vector3(width + labelwidth / 2 + 0.02);\r\n\r\n      width += labelwidth / 2 + 0.02;\r\n    }\r\n\r\n    this.widthchange.next(width)\r\n  }\r\n\r\n  protected clicked(keycode: string) {\r\n    if (!this.paging) return;\r\n\r\n    if (keycode == '|<')\r\n      this.paging.movefirst();\r\n    else if (keycode == '<') {\r\n      this.paging.moveprevious();\r\n    }\r\n    else if (keycode == '>') {\r\n      this.paging.movenext();\r\n    }\r\n    else if (keycode == '>|') {\r\n      this.paging.movelast();\r\n    }\r\n  }\r\n\r\n}\r\n","<ngt-group [ngtObjectPassThrough]=\"this\" [appendTo]=\"appendTo\" [userData]=\"{ skiplayout: true}\">\r\n\r\n  <flat-ui-button *ngFor=\"let item of buttons\" [selectable]=\"selectable\"\r\n                  [position]=\"item.position\" [width]=\"buttonsize\" [height]=\"buttonsize\" [text]=\"item.text\"\r\n                  (pressed)=\"clicked($event)\">\r\n\r\n  </flat-ui-button>\r\n\r\n  <flat-ui-label *ngIf=\"showlabel\" [text]=\"text\" [position]=\"textposition\"></flat-ui-label>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Group, Line, Material, Mesh, Shape, ShapeGeometry, Vector3 } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { LAYOUT_EVENT, Paging, roundedRect } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgIf, NgTemplateOutlet } from \"@angular/common\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\nimport { FlatUIPaginator } from \"../paginator/paginator.component\";\r\nimport { NgFor } from \"@angular/common\";\r\nimport { FlatUILabel } from \"../label/label.component\";\r\n\r\nexport interface ListItem {\r\n  text: string,\r\n  data?: any;\r\n}\r\n\r\nclass ListData {\r\n  constructor(public text: string, public data: any, public enabled: boolean, public selected: boolean, public position: Vector3, public selectposition: Vector3) { }\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-list',\r\n  exportAs: 'flatUIList',\r\n  templateUrl: './list.component.html',\r\n  standalone: true,\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtPlaneGeometry,\r\n    FlatUILabel,\r\n    FlatUIButton,\r\n    FlatUIPaginator\r\n  ]\r\n})\r\nexport class FlatUIList extends NgtObjectProps<Group> implements AfterViewInit, Paging {\r\n  private _list: Array<ListItem> = [];\r\n  @Input()\r\n  get list(): Array<ListItem> { return this._list }\r\n  set list(newvalue: Array<ListItem>) {\r\n    this._list = newvalue;\r\n    this.updateFlag = true;\r\n  }\r\n\r\n  private _selectedtext = '';\r\n  @Input()\r\n  get selectedtext(): string { return this._selectedtext }\r\n  set selectedtext(newvalue: string) {\r\n    this._selectedtext = newvalue;\r\n\r\n    const index = this.list.findIndex(x => x.text == newvalue);\r\n\r\n    this.selectedindex = index;  // if selected text is not found, this will clear highlighted item too\r\n\r\n    if (index != -1) {\r\n      // position on page boundary\r\n      this.firstdrawindex = Math.trunc(index / this.rowcount) * this.rowcount;\r\n      this.updateFlag = true;\r\n    }\r\n\r\n  }\r\n  @Input() selectedindex = -1;\r\n\r\n  @Input() emptytext = 'List is empty';\r\n\r\n  @Input() margin = 0.03;\r\n  @Input() rowsize = 0.1;\r\n  @Input() rowspacing = 0.01;\r\n  @Input() pagebuttonsize = 0.1;\r\n\r\n  @Input() showpaging = true;\r\n  @Input() showpagecounts = true;\r\n\r\n  @Input() enablehover = false;\r\n\r\n  @Input() width = 1;\r\n  @Input() height = 1;\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material) {\r\n    this._popupmaterial = newvalue;\r\n  }\r\n\r\n  private _listselectmaterial!: Material\r\n  @Input()\r\n  get listselectmaterial(): Material {\r\n    if (this._listselectmaterial) return this._listselectmaterial;\r\n    return GlobalFlatUITheme.ListSelectMaterial;\r\n  }\r\n  set listselectmaterial(newvalue: Material) {\r\n    this._listselectmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n\r\n  @Input() rowcount = 7;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  protected planewidth = 0.02\r\n  protected planeheight = this.rowsize\r\n\r\n  private _vertical = true;\r\n  @Input()\r\n  get vertical(): boolean { return this._vertical }\r\n  set vertical(newvalue: boolean) {\r\n    this._vertical = newvalue;\r\n    if (newvalue) {\r\n      this.planewidth = 0.02;\r\n      this.planeheight = this.rowsize;\r\n    }\r\n    else {\r\n      this.planewidth = this.rowsize;\r\n      this.planeheight = 0.02;\r\n    }\r\n  }\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  @Output() change = new EventEmitter<ListItem>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  @ContentChild('listItem')\r\n  protected listItem!: TemplateRef<any>;\r\n\r\n  protected data: Array<ListData> = [];\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n  protected group!: Group;\r\n\r\n  constructor(private cd: ChangeDetectorRef) { super(); }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createListGeometry();\r\n  }\r\n\r\n  createListGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    if (this.enablehover)\r\n      this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n  private _mesh!: Mesh;\r\n  get mesh(): Mesh { return this._mesh }\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    if (this.enablehover)\r\n      this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out() });\r\n    mesh.addEventListener('raymissed', (e: any) => { this.missed(); e.stop = true; });\r\n\r\n    this._mesh = mesh;\r\n  }\r\n\r\n  protected missed() {\r\n    this.close.next();\r\n  }\r\n\r\n  private firstdrawindex = 0;\r\n\r\n  ngAfterViewInit(): void {\r\n\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n\r\n    this.ready.next(this.group)\r\n  }\r\n\r\n  private updateFlag = true;\r\n  tick() {\r\n    if (this.updateFlag) {\r\n      this.updateFlag = false;\r\n      this.refresh();\r\n      this.cd.detectChanges();\r\n    }\r\n  }\r\n\r\n  protected emptyposition!: Vector3;\r\n\r\n  refresh() {\r\n    let drawindex = this.firstdrawindex;\r\n\r\n    // if the whole list is shorter than what can be displayed, start from the first item in the list\r\n    if (this.list.length <= this.rowcount) {\r\n      this.firstdrawindex = drawindex = 0;\r\n    }\r\n\r\n    this.data.length = 0;\r\n\r\n    for (let i = 0; i < this.rowcount; i++) {\r\n      let text = '';\r\n      let data = undefined;\r\n      let enabled = false;\r\n\r\n      const selected = (this.selectedindex == drawindex)\r\n\r\n      if (drawindex < this.list.length) {\r\n        const item = this.list[drawindex++];\r\n        text = item.text;\r\n        data = item.data;\r\n        enabled = true;\r\n      }\r\n\r\n      const position = new Vector3(0, 0, 0.001)\r\n      const selectposition = new Vector3(0, 0, 0.002)\r\n      if (this.vertical) {\r\n        position.y = this.height / 2 - this.rowsize / 2 - this.margin - i * (this.rowsize + this.rowspacing);\r\n        selectposition.x = -this.width / 2 + this.margin / 2\r\n      }\r\n      else {\r\n        position.x = -this.width / 2 + this.rowsize / 2 + this.margin + i * (this.rowsize + this.rowspacing);\r\n        selectposition.y = this.height / 2 - this.margin / 2\r\n      }\r\n\r\n      this.data.push(new ListData(text, data, enabled, selected, position, selectposition));\r\n\r\n      if (i == 0) this.emptyposition = position;\r\n    }\r\n  }\r\n\r\n  protected selected(index: number) {\r\n    if (!this.data[index].enabled) return;\r\n\r\n    this.data.forEach(item => item.selected = false)\r\n    this.data[index].selected = true;\r\n\r\n    this.change.next(this.list[this.firstdrawindex + index]);\r\n  }\r\n\r\n  get firstindex(): number { return this.firstdrawindex }\r\n  get length(): number { return this.list.length }\r\n  get pagesize(): number { return this.rowcount }\r\n\r\n  movefirst() {\r\n    if (this.firstdrawindex) {\r\n      this.firstdrawindex = 0;\r\n      this.updateFlag = true;\r\n    }\r\n  }\r\n\r\n  moveprevious() {\r\n    if (this.firstdrawindex) {\r\n      if (this.firstdrawindex - this.rowcount < 0)\r\n        this.firstdrawindex = 0;\r\n      else\r\n        this.firstdrawindex -= this.rowcount;\r\n      this.updateFlag = true;\r\n    }\r\n\r\n  }\r\n\r\n  movenext() {\r\n    if (this.firstdrawindex + this.rowcount < this.list.length) {\r\n      this.firstdrawindex += this.rowcount;\r\n      this.updateFlag = true;\r\n    }\r\n  }\r\n\r\n  movelast() {\r\n    const index = Math.max(this.list.length - this.rowcount, 0);\r\n    if (index != this.firstdrawindex) {\r\n      this.firstdrawindex = index;\r\n      this.updateFlag = true;\r\n    }\r\n  }\r\n\r\n\r\n  isover = false;\r\n  over() {\r\n    if (this.isover || !this.enablehover) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  out() {\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\" (ready)=\"group = $event\" (beforeRender)=\"tick()\">\r\n  <ngt-mesh [geometry]=\"geometry\" [material]=\"popupmaterial\"\r\n            (pointerover)=\"over();$event.stopPropagation()\"\r\n            (pointerout)=\"out();$event.stopPropagation()\"\r\n            (ready)=\"meshready($event)\" (pointermissed)=\"missed()\">\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n\r\n  <ngt-group #parent *ngFor=\"let item of data; index as index\" [position]=\"item.position\" [visible]=\"item.enabled\">\r\n\r\n    <ngt-mesh [visible]=\"item.selected\" [position]=\"item.selectposition\" [material]=\"listselectmaterial\">\r\n      <ngt-plane-geometry [args]=\"[planewidth, planeheight]\"></ngt-plane-geometry>\r\n    </ngt-mesh>\r\n\r\n    <ng-container [ngTemplateOutlet]=\"listItem ? listItem : defaultListItem\"\r\n                  [ngTemplateOutletContext]=\"{ index: index, list: this, text: item.text, data: item.data, width: width-margin*2, parent: parent.instance.value }\">\r\n    </ng-container>\r\n\r\n    <ng-template #defaultListItem let-text=\"text\" let-width=\"width\">\r\n      <flat-ui-button [selectable]=\"selectable\" [text]=\"text\" [width]=\"width\" (pressed)=\"selected(index)\"></flat-ui-button>\r\n    </ng-template>\r\n\r\n  </ngt-group>\r\n\r\n\r\n  <flat-ui-label [visible]=\"list.length==0\" [position]=\"emptyposition\" [width]=\"width\" [text]=\"emptytext\"></flat-ui-label>\r\n\r\n  <flat-ui-paginator *ngIf=\"showpaging\" [paging]=\"this\" [selectable]=\"selectable\" [buttonsize]=\"pagebuttonsize\"\r\n                     [position]=\"[-width/2+margin, -height/2 + pagebuttonsize/2+margin, 0.001]\" [showlabel]=\"showpagecounts\">\r\n  </flat-ui-paginator>\r\n\r\n</ngt-group>\r\n","import { Directive, EventEmitter, Injectable, OnInit, Optional, Output } from \"@angular/core\";\r\n\r\nimport { Object3D } from \"three\";\r\nimport { NgtObject } from \"@angular-three/core\";\r\n\r\nimport { FlatUIList, ListItem } from \"./list/list.component\";\r\n\r\nexport const DRAG_START_EVENT = 'flat-ui-dragstart';\r\nexport const DRAG_END_EVENT = 'flat-ui-dragend';\r\nexport const DRAG_DROP_EVENT = 'flat-ui-drop';\r\n\r\nexport interface DropEvent {\r\n  //list?: Array<ListItem>;\r\n  value: any;\r\n}\r\n\r\n@Injectable()\r\nexport class DropListService {\r\n  droplist: Array<Object3D> = [];\r\n\r\n  source?: Array<ListItem>;\r\n\r\n  addlist(object: Object3D) {\r\n    this.droplist.push(object);\r\n  }\r\n\r\n  start(data: any) {\r\n    this.droplist.forEach(object => object.dispatchEvent({ type: DRAG_START_EVENT, data }))\r\n  }\r\n\r\n  dropped(data: any) {\r\n    this.droplist.forEach(object => object.dispatchEvent({ type: DRAG_DROP_EVENT, data }))\r\n  }\r\n}\r\n\r\n\r\n@Directive({\r\n  selector: '[drop-list]',\r\n  exportAs: 'dropList',\r\n  standalone: true,\r\n})\r\nexport class DropListDirective implements OnInit {\r\n\r\n  @Output() dropped = new EventEmitter<DropEvent>();\r\n\r\n\r\n  constructor(\r\n    public dropservice: DropListService,\r\n    public list: FlatUIList,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.list.ready.subscribe(next => {\r\n      const mesh = this.list.mesh;\r\n\r\n      this.dropservice.addlist(mesh);\r\n\r\n      mesh.addEventListener(DRAG_DROP_EVENT, (e: any) => {\r\n        if (this.list.isover) {\r\n          this.dropped.next({ value: e.data });\r\n        }\r\n        setTimeout(() => {\r\n          this.list.refresh();\r\n        }, 0)\r\n      });\r\n    });\r\n  }\r\n}\r\n\r\n@Directive({\r\n  selector: '[draggable]',\r\n  exportAs: 'draggable',\r\n  standalone: true,\r\n})\r\nexport class DraggableDirective implements OnInit {\r\n  constructor(\r\n    @Optional() private dropservice: DropListService,\r\n    private ngtobject: NgtObject,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.dropservice) return;\r\n\r\n    const object = this.ngtobject.instance.value;\r\n    object.addEventListener(DRAG_START_EVENT, (e: any) => { this.dropservice.start(e.data) });\r\n    object.addEventListener(DRAG_END_EVENT, (e: any) => { this.dropservice.dropped(e.data) });\r\n  }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Intersection, Line, Material, Mesh, Object3D, Shape, ShapeGeometry, Vector3 } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { roundedRect } from \"../flat-ui-utils\";\r\nimport { DRAG_END_EVENT, DRAG_START_EVENT } from \"../drag-and-drop\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-card',\r\n  exportAs: 'flatUICard',\r\n  templateUrl: './card.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgTemplateOutlet,\r\n  ]\r\n})\r\nexport class FlatUICard extends NgtObjectProps<Mesh>{\r\n  private _width = 1\r\n  @Input()\r\n  get width(): number { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    this.updateCardGeometry();\r\n  }\r\n\r\n\r\n  private _height = 1;\r\n  @Input()\r\n  get height(): number { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    this.updateCardGeometry();\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n  @Input() data: any;\r\n\r\n  @Input() cardtype = 'card';\r\n  @Input() allowdragging = true;\r\n  @Input() showhover = true;\r\n\r\n  private _cardmaterial?: Material;\r\n  @Input()\r\n  get cardmaterial(): Material {\r\n    if (this._cardmaterial) return this._cardmaterial;\r\n    return GlobalFlatUITheme.PanelMaterial;\r\n  }\r\n  set cardmaterial(newvalue: Material) {\r\n    this._cardmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  @ContentChild('card') protected card?: TemplateRef<unknown>;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.updateCardGeometry();\r\n  }\r\n\r\n  updateCardGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n    this.outline.dispose();\r\n\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private isover = false;\r\n  over() {\r\n    if (!this.showhover || this.isover) return;\r\n\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  out() {\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n\r\n  protected startdragging() {\r\n    if (!this.allowdragging) return;\r\n    this.dragging = true;\r\n    this.panel.position.z += 0.005;\r\n    this.panel.dispatchEvent({ type: DRAG_START_EVENT, dragtype: this.cardtype, data: this.data })\r\n    this.over();\r\n\r\n  }\r\n\r\n  protected enddragging() {\r\n    this.out();\r\n    if (!this.allowdragging || !this.dragging) return;\r\n    this.dragging = false;\r\n    this.panel.position.z -= 0.005;\r\n    this.panel.dispatchEvent({ type: DRAG_END_EVENT, dragtype: this.cardtype, data: this.data })\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('pointerdown', (e: any) => { this.startdragging() });\r\n    mesh.addEventListener('pointerover', (e: any) => { this.pointerover.next(e.data) });\r\n\r\n    mesh.addEventListener('pointerup', () => { this.enddragging(); });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.enddragging(); this.pointerout.next(e.data) });\r\n    mesh.addEventListener('raymissed', () => { this.enddragging(); });\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => { this.domovemesh(e.data) });\r\n\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  private panel!: Object3D;\r\n\r\n  protected panelready(panel: Object3D) {\r\n    this.panel = panel;\r\n  }\r\n\r\n  //\r\n  // dragging\r\n  //\r\n  protected dragging = false;\r\n\r\n  protected movemesh(event: NgtEvent<PointerEvent>) {\r\n    if (event.object != this.mesh) return;\r\n\r\n    this.domovemesh(event.intersections[0]);\r\n  }\r\n\r\n  private domovemesh(event: Intersection) {\r\n    if (this.dragging && this.allowdragging) {\r\n      const position = new Vector3();\r\n      this.panel.getWorldPosition(position);\r\n\r\n      this.panel.position.x += event.point.x - position.x;\r\n      this.panel.position.y += event.point.y - position.y;\r\n    }\r\n    this.over();\r\n  }\r\n}\r\n","<ngt-group #parent [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n           (ready)=\"panelready($event)\" draggable>\r\n\r\n  <ngt-mesh #mesh\r\n            [geometry]=\"geometry\" [material]=\"cardmaterial\"\r\n            (pointerdown)=\"startdragging();$event.stopPropagation()\" (pointerup)=\"enddragging()\"\r\n            (pointerover)=\"over();pointerover.next($event)\" (pointerout)=\"out();pointerout.next($event)\"\r\n            (pointermove)=\"movemesh($event)\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ng-container [ngTemplateOutlet]=\"card ? card : defaultCard\"\r\n                  [ngTemplateOutletContext]=\"{ parent: parent.instance.value }\">\r\n    </ng-container>\r\n\r\n    <ng-template #defaultCard>\r\n      <!--empty-->\r\n    </ng-template>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\nimport { Group, Material } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-material-icon',\r\n  exportAs: 'flatUIMaterialIcon',\r\n  templateUrl: './material-icon.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtObjectPassThrough,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUIMaterialIcon extends NgtObjectProps<Group> {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    if (newvalue == undefined) newvalue = '';\r\n    this._text = newvalue;\r\n  }\r\n\r\n  @Input() fontsize = 0.07;\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._labelmaterial = newvalue;\r\n  }\r\n}\r\n","<ngt-group [ngtObjectPassThrough]=\"this\">\r\n  <ngt-soba-text [text]=\"text\"\r\n                 [material]=\"labelmaterial\"\r\n                 [fontSize]=\"fontsize\"\r\n                 [font]=\"'https://fonts.gstatic.com/s/materialicons/v139/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff'\"\r\n                 [anchorX]=\"'center'\"\r\n                 [position]=\"[0, 0, 0.001]\">\r\n  </ngt-soba-text>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\nimport { Group } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { FlatUICard } from \"../card/card.component\";\r\nimport { CardAction } from \"../card-action/card-action.component\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { NgFor } from \"@angular/common\";\r\nimport { NgIf } from \"@angular/common\";\r\nimport { FlatUIMaterialIcon } from \"../material-icon/material-icon.component\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-card-actions',\r\n  exportAs: 'flatUICardActions',\r\n  templateUrl: './card-actions.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgTemplateOutlet,\r\n    NgFor,\r\n    NgIf,\r\n    NgtGroup,\r\n    FlatUIBaseButton,\r\n    FlatUILabel,\r\n    FlatUIMaterialIcon,\r\n  ]\r\n})\r\nexport class FlatUICardActions extends NgtObjectProps<Group> {\r\n  @Input() actions: Array<CardAction> = [];\r\n  @Input() buttonwidth = 0.1;\r\n  @Input() buttonheight = 0.1;\r\n  @Input() iconsize = 0.1;\r\n  @Input() showlabels = false;\r\n  @Input() closedelay = 2;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() action = new EventEmitter<CardAction>();\r\n\r\n  private subs = new Subscription();\r\n\r\n  constructor(\r\n    private card: FlatUICard,\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  protected clicked(item: CardAction) {\r\n    this.action.next(item);\r\n    this.hide();\r\n  }\r\n\r\n  private delay = 0;\r\n  private timer: any;\r\n\r\n  override ngOnDestroy(): void {\r\n    super.ngOnDestroy();\r\n\r\n    clearInterval(this.timer);\r\n    this.subs.unsubscribe();\r\n  }\r\n\r\n  override ngOnInit(): void {\r\n    super.ngOnInit();\r\n\r\n    this.visible = false;\r\n\r\n    this.subs.add(this.card.pointerover.subscribe(next => {\r\n      this.show();\r\n    }));\r\n\r\n    this.subs.add(this.card.pointerout.subscribe(next => {\r\n      this.delayhide();\r\n    }));\r\n\r\n    this.timer = setInterval(() => {\r\n      if (this.delay > 0) {\r\n        this.delay--;\r\n        if (!this.delay)\r\n          this.visible = false;\r\n      }\r\n    }, 250);\r\n  }\r\n\r\n  private show() {\r\n    this.visible = true;\r\n    this.delay = 0;\r\n  }\r\n\r\n  private delayhide() {\r\n    this.delay = this.closedelay * 4;\r\n  }\r\n\r\n  private hide() {\r\n    this.visible = false;\r\n    this.delay = 0;\r\n  }\r\n\r\n\r\n  addaction(action: CardAction) {\r\n    this.actions.push(action);\r\n  }\r\n\r\n  removeaction(action: CardAction) {\r\n    this.actions = this.actions.filter(item => item != action);\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\" [appendTo]=\"appendTo\">\r\n\r\n  <flat-ui-base-button *ngFor=\"let item of actions\" [position]=\"item.position\" [width]=\"buttonwidth\" [height]=\"buttonheight\" [selectable]=\"selectable\" (pressed)=\"clicked(item)\">\r\n    <ng-template #button let-parent=\"parent\">\r\n      <ngt-group [appendTo]=\"parent\">\r\n\r\n        <flat-ui-material-icon [text]=\"item.materialicon\" [fontsize]=\"buttonheight*0.7\" [position]=\"[0, showlabels ? buttonheight*0.12 : 0, 0.001]\"></flat-ui-material-icon>\r\n        <flat-ui-label *ngIf=\"showlabels && item.label\" [text]=\"item.label\" [alignx]=\"'center'\" [fontsize]=\"buttonheight*0.25\" [position]=\"[0, -buttonheight*0.3, 0.001]\"></flat-ui-label>\r\n\r\n      </ngt-group>\r\n    </ng-template>\r\n  </flat-ui-base-button>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\n\r\nimport { NgtTriple } from \"@angular-three/core\";\r\n\r\nimport { FlatUICardActions } from \"../card-actions/card-actions.component\";\r\n\r\nexport interface CardAction {\r\n  position: NgtTriple;\r\n  materialicon: string;\r\n  label?: string;\r\n  data?: any;\r\n  //action: EventEmitter<CardAction>;\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-card-action',\r\n  exportAs: 'flatUICardAction',\r\n  template: '',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n})\r\nexport class FlatUICardAction implements OnInit, CardAction {\r\n  @Input() position = [0, 0, 0] as NgtTriple\r\n  @Input() materialicon!: string\r\n  @Input() label?: string\r\n\r\n  @Output() action = new EventEmitter<CardAction>();\r\n\r\n  constructor(\r\n    private actions: FlatUICardActions,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    if (this.actions) {\r\n      this.actions.addaction(this);\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, CanvasTexture, Intersection, Material, MathUtils, Mesh, MeshBasicMaterial, Shape, ShapeGeometry, sRGBEncoding } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { roundedRect } from \"../flat-ui-utils\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry, NgtRingGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtMeshBasicMaterial } from \"@angular-three/core/materials\";\r\n\r\n\r\n//\r\n// adapted from https://github.com/NikLever/CanvasUI/blob/dev/examples/jsm/CanvasColorPicker.js\r\n//\r\n\r\n@Component({\r\n  selector: 'flat-ui-color-picker',\r\n  exportAs: 'flatUIColorPicker',\r\n  templateUrl: './color-picker.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgtMesh,\r\n    NgtPlaneGeometry,\r\n    NgtRingGeometry,\r\n    NgtMeshBasicMaterial,\r\n  ]\r\n})\r\nexport class FlatUIColorPicker extends NgtObjectProps<Mesh> {\r\n  @Input() colorvalue = '#ff0000';\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material) {\r\n    this._popupmaterial = newvalue;\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  @Output() colorpicked = new EventEmitter<string>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  protected picker!: MeshBasicMaterial;\r\n  protected rainbow!: MeshBasicMaterial;\r\n\r\n  protected shadesize = 0.7;\r\n\r\n  override ngOnInit(): void {\r\n    super.ngOnInit();\r\n\r\n    this.initpicker(this.colorvalue);\r\n    this.initrainbow();\r\n\r\n    if (!this.geometry) this.createColorPickerGeometry();\r\n  }\r\n\r\n  createColorPickerGeometry() {\r\n    const colorpickerwidth = 1;\r\n    const colorpickerheight = 0.8;\r\n\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, colorpickerwidth, colorpickerheight, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n  }\r\n\r\n  private pickercontext!: CanvasRenderingContext2D;\r\n\r\n  private initpicker(color: string): void {\r\n    const canvas = document.createElement('canvas');\r\n    canvas.width = 100;\r\n    canvas.height = 100;\r\n\r\n    const options: CanvasRenderingContext2DSettings = { willReadFrequently: true }\r\n    const context = canvas.getContext('2d', options);\r\n    if (!context) return;\r\n\r\n    const white = context.createLinearGradient(0, 0, 100, 0);\r\n    white.addColorStop(0, 'rgba(255,255,255,1)');\r\n    white.addColorStop(1, 'rgba(255,255,255,0)');\r\n\r\n    const black = context.createLinearGradient(0, 0, 0, 100);\r\n    black.addColorStop(0, 'rgba(0,0,0,0)');\r\n    black.addColorStop(1, 'rgba(0,0,0,1)');\r\n\r\n    context.fillStyle = color;\r\n    context.fillRect(0, 0, 100, 100);\r\n\r\n    context.fillStyle = white;\r\n    context.fillRect(0, 0, 100, 100);\r\n\r\n    context.fillStyle = black;\r\n    context.fillRect(0, 0, 100, 100);\r\n\r\n    const texture = new CanvasTexture(canvas)\r\n    texture.encoding = sRGBEncoding;\r\n\r\n    this.picker = new MeshBasicMaterial({ map: texture });\r\n    this.pickercontext = context;\r\n  }\r\n\r\n  private rainbowcontext!: CanvasRenderingContext2D;\r\n\r\n  private initrainbow(): void {\r\n    const canvas = document.createElement('canvas');\r\n    canvas.width = 10;\r\n    canvas.height = 100;\r\n\r\n    const options: CanvasRenderingContext2DSettings = { willReadFrequently: true }\r\n    const context = canvas.getContext('2d', options);\r\n    if (!context) return;\r\n\r\n\r\n    const gradient = context.createLinearGradient(0, 0, 0, 100);\r\n    gradient.addColorStop(0.05, 'rgba(255, 0, 0, 1)');\r\n    gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');\r\n    gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');\r\n    gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');\r\n    gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');\r\n    gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');\r\n    gradient.addColorStop(0.95, 'rgba(255, 0, 0, 1)');\r\n\r\n\r\n    context.fillStyle = gradient;\r\n    context.fillRect(0, 0, 10, 100);\r\n\r\n    const texture = new CanvasTexture(canvas)\r\n    texture.encoding = sRGBEncoding;\r\n\r\n    this.rainbow = new MeshBasicMaterial({ map: texture });\r\n\r\n    this.rainbowcontext = context;\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.shademesh);\r\n    this.selectable?.remove(this.colormesh);\r\n\r\n    this.rainbow.dispose();\r\n    this.picker.dispose();\r\n  }\r\n\r\n  meshready(mesh: Mesh) {\r\n    mesh.addEventListener('click', (e: any) => { e.stop = true; });\r\n    mesh.addEventListener('raymissed', (e: any) => { this.missed(); e.stop = true; });\r\n  }\r\n\r\n  protected missed() {\r\n    this.close.next()\r\n  }\r\n\r\n  protected ignore(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n  }\r\n\r\n  private shademesh!: Mesh;\r\n\r\n  protected shadesready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    // e: {type: 'click', data: Intersection, target: Mesh}\r\n    mesh.addEventListener('click', (e: any) => { this.dopickshade(e.data); e.stop = true; });\r\n    mesh.addEventListener('raymissed', (e: any) => { this.missed(); e.stop = true; });\r\n\r\n    this.shademesh = mesh;\r\n  }\r\n\r\n  protected ringx = 0;\r\n  protected ringy = 0;\r\n\r\n  pickshade(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n\r\n    event.stopPropagation();\r\n\r\n    if (event.uv) this.dopickshade(event)\r\n\r\n  }\r\n\r\n  private dopickshade(event: Intersection) {\r\n    if (!event.uv) return;\r\n\r\n    const x = event.uv.x * 100;\r\n    const y = (1 - event.uv.y) * 100;\r\n\r\n    const imageData = this.pickercontext.getImageData(x, y, 1, 1).data;\r\n\r\n    this.colorvalue = this.getStyleColor(imageData[0], imageData[1], imageData[2]);\r\n    this.colorpicked.next(this.colorvalue);\r\n\r\n\r\n    this.ringx = MathUtils.mapLinear(event.uv.x, 0, 1, -this.shadesize / 2, this.shadesize / 2);\r\n    this.ringy = MathUtils.mapLinear(1 - event.uv.y, 0, 1, this.shadesize / 2, -this.shadesize / 2);\r\n  }\r\n\r\n  private colormesh!: Mesh;\r\n\r\n  protected colorready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    // e: {type: 'click', data: Vector2, target: Mesh}\r\n    mesh.addEventListener('click', (e: any) => { this.dopickcolor(e.data) })\r\n    mesh.addEventListener('raymissed', () => { this.missed() });\r\n\r\n    this.colormesh = mesh;\r\n  }\r\n\r\n  pickcolor(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n\r\n    event.stopPropagation();\r\n\r\n    if (event.uv) this.dopickcolor(event);\r\n  }\r\n\r\n  private dopickcolor(event: Intersection) {\r\n    if (!event.uv) return;\r\n\r\n    const x = event.uv.x * 10;\r\n    const y = (1 - event.uv.y) * 100;\r\n\r\n    const imageData = this.rainbowcontext.getImageData(x, y, 1, 1).data;\r\n\r\n    this.initpicker(this.getStyleColor(imageData[0], imageData[1], imageData[2]));\r\n  }\r\n\r\n  private getStyleColor(r: number, g: number, b: number) {\r\n    return \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\r\n  }\r\n}\r\n","<ngt-mesh #mesh [name]=\"name\" [visible]=\"visible\"\r\n          [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n          [geometry]=\"geometry\" [material]=\"popupmaterial\"\r\n          (click)=\"ignore(mesh.instance.value, $event)\" (pointerover)=\"$event.stopPropagation()\"\r\n          (pointermissed)=\"missed()\" (ready)=\"meshready($event)\">\r\n\r\n  <ngt-mesh #shades [position]=\"[-0.1, 0, 0.0001]\" [material]=\"picker\"\r\n            (ready)=\"shadesready($event)\"\r\n            (click)=\"pickshade(shades.instance.value, $event)\">\r\n    <ngt-plane-geometry [args]=\"[shadesize, shadesize]\"></ngt-plane-geometry>\r\n\r\n    <ngt-mesh [position]=\"[ringx, ringy, 0.0002]\">\r\n      <ngt-ring-geometry [args]=\"[0.045, 0.05, 32]\"></ngt-ring-geometry>\r\n      <ngt-mesh-basic-material color=\"white\"></ngt-mesh-basic-material>\r\n    </ngt-mesh>\r\n    <ngt-mesh [position]=\"[ringx, ringy, 0.0002]\">\r\n      <ngt-ring-geometry [args]=\"[0.035, 0.04, 32]\"></ngt-ring-geometry>\r\n      <ngt-mesh-basic-material color=\"black\"></ngt-mesh-basic-material>\r\n    </ngt-mesh>\r\n  </ngt-mesh>\r\n\r\n  <ngt-mesh #colors [position]=\"[0.375, 0, 0.0001]\" [material]=\"rainbow\"\r\n            (ready)=\"colorready($event)\"\r\n            (click)=\"pickcolor(colors.instance.value, $event)\">\r\n    <ngt-plane-geometry [args]=\"[0.15, 0.7]\"></ngt-plane-geometry>\r\n  </ngt-mesh>\r\n\r\n</ngt-mesh>\r\n\r\n","import { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, Output } from \"@angular/core\";\r\nimport { NgIf } from \"@angular/common\";\r\n\r\nimport { Material, Mesh } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-confirm',\r\n  exportAs: 'flatUIConfirm',\r\n  templateUrl: './confirm.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgtMesh,\r\n    NgtObjectPassThrough,\r\n    NgtPlaneGeometry,\r\n    FlatUILabel,\r\n    FlatUIButton,\r\n  ]\r\n})\r\nexport class FlatUIConfirm extends NgtObjectProps<Mesh> {\r\n  @Input() title = '';\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width(): number { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = Math.max(0.8, newvalue);\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._popupmaterial = newvalue;\r\n  }\r\n\r\n  @Output() result = new EventEmitter<boolean>();\r\n\r\n  private _height = 0; // calculated from height of title\r\n\r\n  protected get height(): number { return this._height }\r\n  protected set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  constructor(private cd: ChangeDetectorRef) { super(); }\r\n\r\n  @HostListener('document:keydown', ['$event'])\r\n  private onKeyUp(event: KeyboardEvent) {\r\n    if (event.key == 'Escape')\r\n      this.result.next(false)\r\n  }\r\n\r\n}\r\n","<ngt-mesh [ngtObjectPassThrough]=\"this\" [material]=\"popupmaterial\">\r\n\r\n  <ngt-plane-geometry [args]=\"[width, height]\"></ngt-plane-geometry>\r\n\r\n  <flat-ui-label [text]=\"title\" [width]=\"width\" [position]=\"[0, 0.09, 0.001]\"\r\n                 (textheight)=\"height=$event+0.2\">\r\n  </flat-ui-label>\r\n\r\n  <flat-ui-button [text]=\"'OK'\" [width]=\"0.3\" [position]=\"[-0.2, -height/2+0.1, 0.001]\"\r\n                  [selectable]=\"selectable\" (pressed)=\"result.next(true)\">\r\n  </flat-ui-button>\r\n\r\n  <flat-ui-button [text]=\"'Cancel'\" [width]=\"0.3\" [position]=\"[0.2, -height/2+0.1, 0.001]\"\r\n                  [selectable]=\"selectable\" (pressed)=\"result.next(false)\">\r\n  </flat-ui-button>\r\n</ngt-mesh>\r\n\r\n","import { make, NgtVector2 } from \"@angular-three/core\";\r\nimport { Object3D, Vector2, Vector3 } from \"three\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"./flat-ui-utils\";\r\n\r\n\r\ninterface ObjectSizeData {\r\n  object: Object3D,\r\n  width: number,\r\n  height: number,\r\n}\r\n\r\nexport abstract class Layout {\r\n  protected updateFlag = true;\r\n\r\n  private _margin: NgtVector2 = 0;\r\n  get margin(): NgtVector2 { return this._margin }\r\n  set margin(newvalue: NgtVector2) {\r\n    this._margin = newvalue;\r\n    this.updateFlag = true;\r\n  }\r\n\r\n\r\n  constructor(private group: Object3D) { }\r\n\r\n  protected reflow(group: Object3D) { }\r\n  protected listen(group: Object3D) { }\r\n\r\n  protected changed = (event: any) => {\r\n    this.updateFlag = true;\r\n  }\r\n\r\n  public update(force = false) {\r\n    if (this.updateFlag || force) {\r\n      this.updateFlag = false;\r\n      this.reflow(this.group);\r\n    }\r\n  }\r\n\r\n  protected getSizes(children: Array<Object3D>): Array<ObjectSizeData> {\r\n    const sizes: Array<ObjectSizeData> = [];\r\n\r\n    const event = { type: LAYOUT_EVENT, width: 0, height: 0, updated: false };\r\n    children.forEach(child => {\r\n      if (!child.visible && !child.userData['layout']) return;\r\n      if (child.userData['skiplayout']) return;\r\n\r\n      if (child.type == 'Group') {\r\n\r\n        const x = this.getSizes(child.children);\r\n        let width = 0\r\n        let height = 0;\r\n        x.forEach(item => {\r\n          if (item.width > width) width = item.width;\r\n          if (item.height > height) height = item.height;\r\n        });\r\n        sizes.push({ object: child, width: width, height: height })\r\n      }\r\n      else {\r\n        if (child.type != 'Mesh') return;\r\n\r\n        event.width = event.height = 0;\r\n        event.updated = false;\r\n        child.dispatchEvent(event);\r\n\r\n        if (event.updated || (event.width != 0 && event.height != 0))\r\n          sizes.push({ object: child, width: event.width, height: event.height })\r\n      }\r\n    })\r\n    return sizes\r\n  }\r\n}\r\n\r\nexport class HorizontalLayout extends Layout {\r\n\r\n  constructor(group: Object3D) {\r\n    super(group);\r\n  }\r\n\r\n  override reflow(group: Object3D) {\r\n    const sizes = this.getSizes(group.children);\r\n\r\n    let marginleft = this.margin as number;\r\n    let marginright = this.margin as number;\r\n\r\n    if (Array.isArray(this.margin)) {\r\n      const margin = make(Vector2, this.margin);\r\n      marginleft = margin.x;\r\n      marginright = margin.y;\r\n    }\r\n\r\n    let x = 0;\r\n    sizes.forEach(item => {\r\n      item.object.position.x = x + item.width / 2 + marginleft;\r\n\r\n      x += item.width + marginleft + marginright;  // move left based on width of this item\r\n    });\r\n\r\n    group.dispatchEvent({ type: WIDTH_CHANGED_EVENT, width: Math.abs(x) });\r\n  }\r\n\r\n  override listen(group: Object3D) {\r\n    // listen for height changes on any meshes\r\n    group.traverse(child => {\r\n      if (child.type != 'Mesh') return;\r\n\r\n      if (!child.hasEventListener(WIDTH_CHANGED_EVENT, this.changed)) {\r\n        child.addEventListener(WIDTH_CHANGED_EVENT, this.changed);\r\n        this.updateFlag = true;\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nexport class VerticalLayout extends Layout {\r\n\r\n  constructor(group: Object3D) {\r\n    super(group);\r\n  }\r\n\r\n  override reflow(group: Object3D) {\r\n    const sizes = this.getSizes(group.children);\r\n\r\n    let margintop = this.margin as number;\r\n    let marginbottom = this.margin as number;\r\n\r\n    if (Array.isArray(this.margin)) {\r\n      const margin = make(Vector2, this.margin);\r\n      margintop = margin.x;\r\n      marginbottom = margin.y;\r\n    }\r\n\r\n    let y = 0;\r\n    sizes.forEach(item => {\r\n      item.object.position.y = y - item.height / 2 - margintop;\r\n\r\n      y -= item.height + margintop + marginbottom;  // move down based on height of this item\r\n    });\r\n\r\n    group.dispatchEvent({ type: HEIGHT_CHANGED_EVENT, height: Math.abs(y) });\r\n  }\r\n\r\n  override listen(group: Object3D) {\r\n    // listen for height changes on any meshes\r\n    group.traverse(child => {\r\n      if (child.type != 'Mesh') return;\r\n\r\n      if (!child.hasEventListener(HEIGHT_CHANGED_EVENT, this.changed)) {\r\n        child.addEventListener(HEIGHT_CHANGED_EVENT, this.changed);\r\n        this.updateFlag = true;\r\n      }\r\n    })\r\n  }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\r\n\r\nimport { NgtVector2 } from \"@angular-three/core\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\n\r\nimport { HorizontalLayout } from \"./layout\";\r\nimport { WIDTH_CHANGED_EVENT } from \"./flat-ui-utils\";\r\n\r\n\r\n@Directive({\r\n  selector: '[horizontal-layout]',\r\n  exportAs: 'horizontalLayout',\r\n  standalone: true,\r\n})\r\nexport class HorizontalLayoutDirective implements OnInit, OnDestroy {\r\n  private _margin: NgtVector2 = 0;\r\n  @Input()\r\n  get margin(): NgtVector2 { return this._margin }\r\n  set margin(newvalue: NgtVector2) {\r\n    this._margin = newvalue;\r\n    if (this.panel) {\r\n      this.panel.margin = newvalue;\r\n    }\r\n  }\r\n\r\n  @Output() widthchange = new EventEmitter<number>();\r\n\r\n  private panel!: HorizontalLayout;\r\n\r\n  constructor(private ngtgroup: NgtGroup) { }\r\n\r\n  ngOnDestroy(): void {\r\n    clearInterval(this.updatetimer)\r\n    clearInterval(this.listentimer)\r\n  }\r\n\r\n  private updatetimer: any;\r\n  private listentimer: any;\r\n\r\n  ngOnInit(): void {\r\n    const group = this.ngtgroup.instance.value;\r\n\r\n    group.addEventListener(WIDTH_CHANGED_EVENT, (e: any) => {\r\n      this.widthchange.next(e.width);\r\n    })\r\n\r\n    this.panel = new HorizontalLayout(group);\r\n    this.panel.margin = this.margin;\r\n\r\n    this.updatetimer = setInterval(() => {\r\n      this.panel.update();\r\n    }, 1000 / 60)\r\n\r\n    this.listentimer = setInterval(() => {\r\n      this.panel.listen(group);\r\n    }, 125)\r\n  }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\r\n\r\nimport { NgtVector2 } from \"@angular-three/core\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\n\r\nimport { VerticalLayout } from \"./layout\";\r\nimport { HEIGHT_CHANGED_EVENT } from \"./flat-ui-utils\";\r\n\r\n\r\n\r\n@Directive({\r\n  selector: '[vertical-layout]',\r\n  exportAs: 'verticalLayout',\r\n  standalone: true\r\n})\r\nexport class VerticalLayoutDirective implements OnInit, OnDestroy {\r\n  private _margin: NgtVector2 = 0;\r\n  @Input()\r\n  get margin(): NgtVector2 { return this._margin }\r\n  set margin(newvalue: NgtVector2) {\r\n    this._margin = newvalue;\r\n    if (this.panel) {\r\n      this.panel.margin = newvalue;\r\n    }\r\n  }\r\n\r\n  @Output() heightchange = new EventEmitter<number>();\r\n\r\n  private panel!: VerticalLayout;\r\n\r\n  constructor(private ngtgroup: NgtGroup) { }\r\n\r\n  ngOnDestroy(): void {\r\n    clearInterval(this.updatetimer)\r\n    clearInterval(this.listentimer)\r\n  }\r\n\r\n  private updatetimer: any;\r\n  private listentimer: any;\r\n\r\n\r\n  ngOnInit(): void {\r\n    const group = this.ngtgroup.instance.value;\r\n\r\n    group.addEventListener(HEIGHT_CHANGED_EVENT, (e: any) => {\r\n      this.heightchange.next(e.height);\r\n    })\r\n\r\n    this.panel = new VerticalLayout(group);\r\n    this.panel.margin = this.margin;\r\n\r\n    this.updatetimer = setInterval(() => {\r\n      this.panel.update();\r\n    }, 1000 / 60)\r\n\r\n    this.listentimer = setInterval(() => {\r\n      this.panel.listen(group);\r\n    }, 125)\r\n  }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\nimport { NgFor } from \"@angular/common\";\r\n\r\nimport { Group } from \"three\";\r\nimport { NgtObjectProps, NgtVector2 } from \"@angular-three/core\";\r\n\r\nimport { FlatUIDataGridColumn } from \"../data-grid-column/data-grid-column.component\";\r\nimport { Paging } from \"../flat-ui-utils\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgIf, NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { HorizontalLayoutDirective } from \"../horizontal-layout.directive\";\r\nimport { VerticalLayoutDirective } from \"../vertical-layout.directive\";\r\n\r\nclass GridData {\r\n  constructor(public data: any) { }\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-data-grid[datasource]',\r\n  exportAs: 'flatUIDataGrid',\r\n  templateUrl: './data-grid.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtObjectPassThrough,\r\n    HorizontalLayoutDirective,\r\n    VerticalLayoutDirective,\r\n    FlatUILabel,\r\n  ]\r\n})\r\nexport class FlatUIDataGrid extends NgtObjectProps<Group> implements Paging {\r\n  @Input() vmargin: NgtVector2 = 0.01;\r\n  @Input() hmargin: NgtVector2 = 0.01;\r\n  @Input() datasource!: Array<any>;\r\n\r\n  private _rowcount = 5;\r\n  @Input()\r\n  get rowcount(): number { return this._rowcount }\r\n  set rowcount(newvalue: number) {\r\n    this._rowcount = newvalue;\r\n\r\n    // reset columns and rows to force a full redraw\r\n    this.columns.length = 0;\r\n    this.rows.length = 0;\r\n\r\n    requestAnimationFrame(() => {\r\n      this.updatecolumns();\r\n      this.refresh();\r\n\r\n      this.heightchange.next(0) // recalculate height\r\n    })\r\n  }\r\n\r\n  @Input() rowheight = 0.1;\r\n\r\n  @Input() pivot = true;\r\n\r\n  @Output() widthchange = new EventEmitter<number>();\r\n  @Output() heightchange = new EventEmitter<number>();\r\n\r\n  private _width = 0;\r\n  get width(): number { return this._width }\r\n  protected set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    this.widthchange.next(newvalue);\r\n  }\r\n\r\n  private _height = 0;\r\n  get height(): number { return this._height }\r\n  protected set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    this.heightchange.next(newvalue);\r\n  }\r\n\r\n  @ContentChild('columnHeader')\r\n  protected columnHeader!: TemplateRef<any>;\r\n\r\n  @ContentChild('columnFooter')\r\n  protected columnFooter!: TemplateRef<any>;\r\n\r\n  private _displaycolumns: Array<string> = []\r\n  @Input()\r\n  get displaycolumns(): Array<string> { return this._displaycolumns }\r\n  set displaycolumns(newvalue: Array<string>) {\r\n    this._displaycolumns = newvalue;\r\n    this.updatecolumns();\r\n  }\r\n\r\n  private updatecolumns() {\r\n    this.columns.length = 0;\r\n    this._displaycolumns.forEach(name => {\r\n      const column = this._columns.find(item => item.name == name);\r\n      if (column) this.columns.push(column);\r\n    });\r\n  }\r\n\r\n  private _columns: Array<FlatUIDataGridColumn> = [];\r\n\r\n  protected columns: Array<FlatUIDataGridColumn> = [];\r\n\r\n  addcolumn(column: FlatUIDataGridColumn) {\r\n    this._columns.push(column);\r\n    column.rows = this.datasource;\r\n    this.updatecolumns();\r\n  }\r\n\r\n  private firstdrawindex = 0;\r\n  get firstindex(): number { return this.firstdrawindex }\r\n  get length(): number { return this.datasource.length }\r\n  get pagesize(): number { return this.rowcount }\r\n\r\n  protected rows: Array<GridData> = [];\r\n\r\n  refresh() {\r\n    let drawindex = this.firstdrawindex;\r\n\r\n    // if the whole list is shorter than what can be displayed, start from the first item in the list\r\n    if (this.datasource.length < this.rowcount) {\r\n      this.firstdrawindex = drawindex = 0;\r\n    }\r\n\r\n    for (let i = 0; i < this.rowcount; i++) {\r\n      let value = {}\r\n      if (drawindex < this.datasource.length)\r\n        value = this.datasource[drawindex++];\r\n\r\n      if (this.rows.length < this.rowcount)\r\n        this.rows.push(new GridData(value));\r\n      else\r\n        this.rows[i].data = value;\r\n    }\r\n  }\r\n\r\n  movefirst() {\r\n    if (this.firstdrawindex) {\r\n      this.firstdrawindex = 0;\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  moveprevious() {\r\n    if (this.firstdrawindex) {\r\n      this.firstdrawindex--;\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  movenext() {\r\n    if (this.datasource.length > this.rowcount && this.firstdrawindex < this.datasource.length - this.rowcount) {\r\n      this.firstdrawindex++;\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  movelast() {\r\n    const index = Math.max(this.datasource.length - this.rowcount, 0);\r\n    if (index != this.firstdrawindex) {\r\n      this.firstdrawindex = index;\r\n      this.refresh();\r\n    }\r\n  }\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    this.refresh();\r\n  }\r\n}\r\n","<ngt-mesh [ngtObjectPassThrough]=\"this\">\r\n\r\n  <ngt-group *ngIf=\"!pivot\" horizontal-layout [margin]=\"hmargin\" (widthchange)=\"width=$event\">\r\n    <ngt-group #parent *ngFor=\"let column of columns; index as index\" vertical-layout [margin]=\"vmargin\" (heightchange)=\"height=$event\">\r\n\r\n      <ng-container [ngTemplateOutlet]=\"columnHeader ? columnHeader : defaultColumnHeader\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, index: index, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-container *ngFor=\"let row of rows\"\r\n                    [ngTemplateOutlet]=\"column.columnRow ? column.columnRow : defaultColumnRow\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, row: row.data, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-container [ngTemplateOutlet]=\"columnFooter ? columnFooter : defaultColumnFooter\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, index: index, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-template #defaultColumnHeader let-column=\"column\">\r\n        <flat-ui-label [text]=\"column.name\" [width]=\"column.width\" [height]=\"column.height\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n      <ng-template #defaultColumnRow let-row=\"row\" let-column=\"column\">\r\n        <flat-ui-label [text]=\"row.name\" [width]=\"column.width\" [height]=\"rowheight\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n      <ng-template #defaultColumnFooter let-column=\"column\">\r\n        <flat-ui-label [text]=\"column.name\" [width]=\"column.width\" [height]=\"column.height\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n    </ngt-group>\r\n\r\n  </ngt-group>\r\n\r\n  <ngt-group *ngIf=\"pivot\" vertical-layout [margin]=\"vmargin\" (heightchange)=\"height=$event\" [ngtObjectPassThrough]=\"this\">\r\n    <ngt-group #parent *ngFor=\"let column of columns; index as index\" horizontal-layout [margin]=\"hmargin\" (widthchange)=\"width=$event\">\r\n\r\n      <ng-container [ngTemplateOutlet]=\"columnHeader ? columnHeader : defaultColumnHeader\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, index: index, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-container *ngFor=\"let row of rows\"\r\n                    [ngTemplateOutlet]=\"column.columnRow ? column.columnRow : defaultColumnRow\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, row: row.data, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-container [ngTemplateOutlet]=\"columnFooter ? columnFooter : defaultColumnFooter\"\r\n                    [ngTemplateOutletContext]=\"{ column: column, index: index, parent: parent.instance.value }\">\r\n      </ng-container>\r\n\r\n      <ng-template #defaultColumnHeader let-column=\"column\">\r\n        <flat-ui-label [text]=\"column.name\" [width]=\"column.width\" [height]=\"column.height\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n      <ng-template #defaultColumnRow let-row=\"row\" let-column=\"column\">\r\n        <flat-ui-label [text]=\"row.name\" [width]=\"column.width\" [height]=\"rowheight\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n      <ng-template #defaultColumnFooter let-column=\"column\">\r\n        <flat-ui-label [text]=\"column.name\" [width]=\"column.width\" [height]=\"column.height\"></flat-ui-label>\r\n      </ng-template>\r\n\r\n\r\n    </ngt-group>\r\n\r\n  </ngt-group>\r\n</ngt-mesh>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, OnInit, Optional, TemplateRef } from \"@angular/core\";\r\n\r\nimport { FlatUIDataGrid } from \"../data-grid/data-grid.component\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-data-grid-column[name]',\r\n  exportAs: 'flatUIDataGridColumn',\r\n  template: '', // rendered in data grid\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n})\r\nexport class FlatUIDataGridColumn implements OnInit {\r\n  @Input() name!: string;\r\n  @Input() width = 0.5;\r\n\r\n  rows: Array<any> = [];  // set by data grid\r\n\r\n  @ContentChild('columnRow')\r\n  columnRow!: TemplateRef<any>;\r\n\r\n  constructor(\r\n    @Optional() public datagrid: FlatUIDataGrid,\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.datagrid) return;\r\n\r\n    this.datagrid.addcolumn(this);\r\n  }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Intersection, Line, Material, Mesh, MeshBasicMaterial, Object3D, Shape, Vector3 } from \"three\";\r\nimport { NgtEvent, NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\nimport { NgIf, NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtMeshBasicMaterial } from \"@angular-three/core/materials\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-drag-panel',\r\n  exportAs: 'flatUIDragPanel',\r\n  templateUrl: './drag-panel.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtMeshBasicMaterial,\r\n    NgtObjectPassThrough,\r\n    NgtPlaneGeometry,\r\n    NgtSobaText,\r\n    FlatUIButton\r\n  ]\r\n})\r\nexport class FlatUIDragPanel extends NgtObjectProps<Mesh>{\r\n  private _title = '';\r\n  @Input()\r\n  get title(): string { return this._title }\r\n  set title(newvalue: string) {\r\n    this._title = newvalue;\r\n    this.displaytitle = this.title.substring(0, this.overflow * this.width);\r\n  }\r\n\r\n  @Input() titlefontsize = 0.07;\r\n  @Input() overflow = 16;\r\n\r\n  private _width = 1\r\n  @Input()\r\n  get width(): number { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    this.createOutline();\r\n  }\r\n\r\n  @Input() minwidth = 0.5;\r\n\r\n  @Input() height = 1;\r\n  @Input() minheight = 0.5;\r\n\r\n  @Input() resizable = false;\r\n\r\n  @Input() expanded = true;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _panelmaterial?: Material;\r\n  @Input()\r\n  get panelmaterial(): Material {\r\n    if (this._panelmaterial) return this._panelmaterial;\r\n    return GlobalFlatUITheme.PanelMaterial;\r\n  }\r\n  set panelmaterial(newvalue: Material) {\r\n    this._panelmaterial = newvalue;\r\n  }\r\n\r\n  private _titlematerial!: Material\r\n  @Input()\r\n  get titlematerial(): Material {\r\n    if (this._titlematerial) return this._titlematerial;\r\n    return GlobalFlatUITheme.TitleMaterial;\r\n  }\r\n  set titlematerial(newvalue: Material) {\r\n    this._titlematerial = newvalue;\r\n  }\r\n\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _scalematerial!: Material\r\n  @Input()\r\n  get scalematerial(): Material {\r\n    if (this._scalematerial) return this._scalematerial;\r\n    return GlobalFlatUITheme.ScaleMaterial;\r\n  }\r\n  set scalematerial(newvalue: Material) {\r\n    this._scalematerial = newvalue;\r\n  }\r\n\r\n  private _resizematerial!: Material\r\n  @Input()\r\n  get resizematerial(): Material {\r\n    if (this._resizematerial) return this._resizematerial;\r\n    return GlobalFlatUITheme.ScaleMaterial;\r\n  }\r\n  set resizematerial(newvalue: Material) {\r\n    this._resizematerial = newvalue;\r\n  }\r\n\r\n\r\n  @Input() locked = false;\r\n  @Input() sixdof = true;\r\n\r\n  @Input() showexpand = true;\r\n  @Input() showclose = true;\r\n\r\n  @Input() scalable = true;\r\n  @Input() minscale = 0.5;\r\n\r\n  @Output() widthchange = new EventEmitter<number>();\r\n  @Output() heightchange = new EventEmitter<number>();\r\n\r\n  @Output() close = new EventEmitter<boolean>();\r\n\r\n  protected displaytitle!: string;\r\n\r\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<unknown>;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  // set opacity to 1 to make drag plane visible\r\n  protected invisiblematerial = new MeshBasicMaterial({ transparent: true, opacity: 0 })\r\n\r\n  protected titleheight = 0.1;\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    this.createOutline()\r\n  }\r\n\r\n  private createOutline() {\r\n    const halfwidth = this.width / 2 - 0.1;\r\n    const halfheight = this.titleheight / 2;\r\n\r\n    const title = new Shape();\r\n    title.moveTo(-halfwidth, halfheight)\r\n    title.lineTo(halfwidth, halfheight)\r\n    title.lineTo(halfwidth, -halfheight)\r\n    title.lineTo(-halfwidth, -halfheight)\r\n    title.closePath();\r\n\r\n    if (this.outline) this.outline.dispose();\r\n    this.outline = new BufferGeometry().setFromPoints(title.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n  }\r\n\r\n  protected panelready(panel: Mesh) {\r\n    panel.visible = false;\r\n    // when expanding, hide long enough for layout to complete once\r\n    const timer = setTimeout(() => {\r\n      panel.visible = true;\r\n      clearTimeout(timer)\r\n    }, 150)\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private isover = false;\r\n  over() {\r\n    if (this.locked || this.isover) return;\r\n\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  out() {\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n  protected desktopdragging = false;\r\n\r\n  startdrag(ismouse: boolean) {\r\n    if (this.locked) return;\r\n    this.dragging = true;\r\n    this.desktopdragging = ismouse;\r\n    this.over();\r\n    if (this.desktopdragging)\r\n      this.invisiblemesh.scale.set(1, 1, 1);\r\n  }\r\n\r\n  enddrag() {\r\n    if (this.locked) return;\r\n    if (this.desktopdragging)\r\n      this.invisiblemesh.scale.set(0, 0, 0);\r\n    this.dragging = this.desktopdragging = false;\r\n    this.out();\r\n  }\r\n\r\n  protected invisiblemesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh, panel: Object3D, invisible: Mesh) {\r\n    this.invisiblemesh = invisible;\r\n\r\n    this.selectable?.add(mesh);\r\n\r\n    const camera = this.store.get(s => s.camera);\r\n    const scene = this.store.get(s => s.scene);\r\n\r\n    mesh.addEventListener('pointerdown', (e: any) => {\r\n      if (this.locked) return;\r\n      this.startdrag(false);\r\n      if (this.sixdof) {\r\n        panel.lookAt(camera.position);\r\n        e.controller.attach(panel);\r\n      }\r\n    });\r\n\r\n    const dragend = (e: any) => {\r\n      if (this.locked) return;\r\n      this.enddrag();\r\n      if (this.sixdof) scene.attach(panel);\r\n      e.stop = true;\r\n    };\r\n\r\n    mesh.addEventListener('pointerup', dragend);\r\n    mesh.addEventListener('pointerout', dragend);\r\n    mesh.addEventListener('raymissed', dragend);\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => { this.domovepanel(e.data.object, e.data, panel); this.over(); e.stop = true; });\r\n  }\r\n\r\n  //\r\n  // dragging\r\n  //\r\n  protected dragging = false;\r\n  private offset = 0;\r\n  protected movepanel(titlebar: Mesh, event: NgtEvent<PointerEvent>, panel: Object3D) {\r\n    if (event.object != titlebar) return;\r\n    event.stopPropagation();\r\n\r\n    this.domovepanel(titlebar, event, panel);\r\n  }\r\n\r\n  private domovepanel(titlebar: Mesh, event: Intersection, panel: Object3D) {\r\n    if (this.locked) return;\r\n\r\n    if (this.dragging) {\r\n      const position = new Vector3();\r\n      titlebar.getWorldPosition(position);\r\n\r\n      panel.position.x += event.point.x - position.x;\r\n      panel.position.y += event.point.y - position.y;\r\n\r\n      // allow selecting anywhere in the title bar\r\n      if (!this.offset && Math.abs(event.point.x - position.x) > 0.1) {\r\n        this.offset = Math.abs(event.point.x - position.x);\r\n      }\r\n      if (event.point.x < position.x)\r\n        panel.position.x += this.offset;\r\n      else\r\n        panel.position.x -= this.offset;\r\n    }\r\n    else {\r\n      this.offset = 0;\r\n    }\r\n  }\r\n\r\n  //\r\n  // scaling\r\n  //\r\n  protected showscaling = false;\r\n  private scalemeshes: Array<Mesh> = [];\r\n\r\n  protected scaleready(mesh: Mesh, panel: Object3D) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => {\r\n      this.showscaling = true;\r\n      this.doscale(mesh, e.data, panel);\r\n      e.stop = true;\r\n    });\r\n\r\n    mesh.addEventListener('pointerdown', (e: any) => { this.scaling = true; e.stop = true; });\r\n    mesh.addEventListener('pointerup', (e: any) => { this.scaling = false; });\r\n    mesh.addEventListener('pointerout', () => { this.showscaling = false; });\r\n    mesh.addEventListener('raymissed', () => { this.scaling = false; });\r\n\r\n    this.scalemeshes.push(mesh);\r\n  }\r\n\r\n\r\n  protected scaling = false;\r\n  protected scalepanel(mesh: Mesh, event: NgtEvent<PointerEvent>, panel: Object3D) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doscale(mesh, event, panel);\r\n    this.postscale(panel);\r\n  }\r\n\r\n  private doscale(mesh: Mesh, event: Intersection, panel: Object3D) {\r\n\r\n    if (this.scaling) {\r\n      panel.worldToLocal(event.point);\r\n\r\n      let diffx;\r\n      if (mesh.position.x < 0)  // left side\r\n        diffx = mesh.position.x - event.point.x;\r\n      else\r\n        diffx = event.point.x - mesh.position.x;\r\n      const diffy = mesh.position.y - event.point.y;\r\n\r\n      // scale width and height by same amount\r\n      panel.scale.x += diffx;\r\n      panel.scale.y += diffy;\r\n\r\n\r\n      this.postscale(panel);\r\n    }\r\n  }\r\n\r\n  private postscale(panel: Object3D) {\r\n    panel.scale.x = Math.max(this.minscale, panel.scale.x);\r\n    panel.scale.y = Math.max(this.minscale, panel.scale.y);\r\n\r\n    this.scalemeshes.forEach(mesh => {\r\n      if (panel.scale.x < 1) {\r\n        mesh.scale.x = 1 / panel.scale.x;\r\n        mesh.scale.y = 1 / panel.scale.y;\r\n      }\r\n    });\r\n  }\r\n\r\n  //\r\n  // resizing\r\n  //\r\n  protected showresizing = false;\r\n\r\n  protected resizeready(mesh: Mesh, panel: Object3D, iswidth: boolean) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => {\r\n      this.showresizing = true;\r\n      this.doresize(mesh, e.data, panel, iswidth);\r\n      e.stop = true;\r\n    });\r\n\r\n    mesh.addEventListener('pointerdown', (e: any) => { this.resizing = true; e.stop = true; });\r\n    mesh.addEventListener('pointerup', (e: any) => { this.resizing = false; });\r\n    mesh.addEventListener('pointerout', () => { this.showresizing = false; });\r\n    mesh.addEventListener('raymissed', () => { this.resizing = false; });\r\n\r\n    this.scalemeshes.push(mesh);\r\n  }\r\n\r\n\r\n  private _resizing = false;\r\n  protected get resizing(): boolean { return this._resizing }\r\n  protected set resizing(newvalue: boolean) {\r\n    this._resizing = newvalue;\r\n    // done resizing, update outline\r\n    if (!newvalue) {\r\n      this.createOutline();\r\n    }\r\n  }\r\n  protected resizepanel(mesh: Mesh, event: NgtEvent<PointerEvent>, panel: Object3D, iswidth: boolean) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doresize(mesh, event, panel, iswidth);\r\n  }\r\n\r\n  private doresize(mesh: Mesh, event: Intersection, panel: Object3D, iswidth: boolean) {\r\n\r\n    if (this.resizing) {\r\n      panel.worldToLocal(event.point);\r\n\r\n\r\n      // resize width and height by same amount\r\n      if (iswidth) {\r\n        let diff;\r\n        if (mesh.position.x < 0)  // left side\r\n          diff = mesh.position.x - event.point.x;\r\n        else\r\n          diff = event.point.x - mesh.position.x;\r\n\r\n        this.width += diff;\r\n        this.width = Math.max(this.minwidth, this.width);\r\n\r\n        this.widthchange.next(this.width)\r\n      }\r\n      else {\r\n        const diff = mesh.position.y - event.point.y;\r\n        this.height += diff;\r\n\r\n        this.height = Math.max(this.minheight, this.height);\r\n\r\n        this.heightchange.next(this.height)\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","<ngt-group #panel [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\" [visible]=\"visible\" [name]=\"displaytitle\"\r\n           [ngtObjectPassThrough]=\"this\">\r\n\r\n  <ngt-group [position]=\"[0, height/2+0.06, 0]\">\r\n\r\n    <!-- invisible drag area so when mouse not over title, dragging continues -->\r\n    <ngt-mesh #invisible [position]=\"[0, 0, -0.001]\" [scale]=\"0\" [material]=\"invisiblematerial\"\r\n              (pointerup)=\"enddrag()\"\r\n              (pointermove)=\"movepanel(invisible.instance.value, $event, panel.instance.value)\">\r\n\r\n      <ngt-plane-geometry [args]=\"[10,10]\"></ngt-plane-geometry>\r\n    </ngt-mesh>\r\n\r\n    <ngt-mesh #title [material]=\"titlematerial\"\r\n              (pointerdown)=\"startdrag(true)\" (pointerup)=\"enddrag()\"\r\n              (pointerover)=\"over()\" (pointerout)=\"showscaling=false;out()\"\r\n              (ready)=\"meshready($event, panel.instance.value, invisible.instance.value)\">\r\n\r\n      <ngt-plane-geometry [args]=\"[width-0.2, titleheight]\"></ngt-plane-geometry>\r\n    </ngt-mesh>\r\n\r\n    <ngt-line (ready)=\"lineready($event)\"\r\n              [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n    <ngt-soba-text [text]=\"displaytitle\" [material]=\"labelmaterial\" [fontSize]=\"titlefontsize\" [anchorX]=\"'left'\" [position]=\"[-width/2+0.1, 0, 0.0001]\"></ngt-soba-text>\r\n\r\n    <flat-ui-button *ngIf=\"showexpand\" [text]=\"expanded ? 'v' : '>'\" [width]=\"0.08\" [height]=\"0.1\" [position]=\"[-width/2+0.05, 0, 0.001]\" [selectable]=\"selectable\" (pressed)=\"expanded=!expanded\"></flat-ui-button>\r\n\r\n    <flat-ui-button *ngIf=\"showclose\" [text]=\"'x'\" [width]=\"0.08\" [height]=\"0.1\" [position]=\"[width/2-0.05, 0, 0.001]\" [selectable]=\"selectable\" (pressed)=\"close.next(true)\"></flat-ui-button>\r\n\r\n  </ngt-group>\r\n\r\n\r\n  <ngt-mesh #parent *ngIf=\"expanded\" (ready)=\"panelready($event)\" [material]=\"panelmaterial\">\r\n    <ngt-plane-geometry [args]=\"[width, height]\"></ngt-plane-geometry>\r\n\r\n    <ngt-group *ngIf=\"scalable\">\r\n      <ngt-mesh #scaleleft [position]=\"[-width/2, -height/2, 0.01]\" [visible]=\"showscaling\" [material]=\"scalematerial\"\r\n                (pointerdown)=\"scaling=true\" (pointerup)=\"scaling=false\"\r\n                (pointerover)=\"showscaling=true\" (pointerout)=\"showscaling=false;scaling=false\"\r\n                (pointermove)=\"scalepanel(scaleleft.instance.value, $event, panel.instance.value)\"\r\n                (ready)=\"scaleready($event, panel.instance.value)\">\r\n        <ngt-plane-geometry [args]=\"[0.1, 0.1]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n\r\n      <ngt-mesh #scaleright [position]=\"[width/2, -height/2, 0.01]\" [visible]=\"showscaling\" [material]=\"scalematerial\"\r\n                (pointerdown)=\"scaling=true\" (pointerup)=\"scaling=false\"\r\n                (pointerover)=\"showscaling=true\" (pointerout)=\"showscaling=false;scaling=false\"\r\n                (pointermove)=\"scalepanel(scaleright.instance.value, $event, panel.instance.value)\"\r\n                (ready)=\"scaleready($event, panel.instance.value)\">\r\n        <ngt-plane-geometry [args]=\"[0.1, 0.1]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n    </ngt-group>\r\n\r\n    <ngt-group *ngIf=\"resizable\">\r\n      <ngt-mesh #resizeleft [position]=\"[-width/2, 0, 0.01]\" [visible]=\"showresizing\" [material]=\"resizematerial\"\r\n                (pointerdown)=\"resizing=true\" (pointerup)=\"resizing=false\"\r\n                (pointerover)=\"showresizing=true\" (pointerout)=\"showresizing=false;resizing=false\"\r\n                (pointermove)=\"resizepanel(resizeleft.instance.value, $event, panel.instance.value, true)\"\r\n                (ready)=\"resizeready($event, panel.instance.value, true)\">\r\n        <ngt-plane-geometry [args]=\"[0.1, 0.1]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n\r\n      <ngt-mesh #resizeright [position]=\"[width/2, 0, 0.01]\" [visible]=\"showresizing\" [material]=\"resizematerial\"\r\n                (pointerdown)=\"resizing=true\" (pointerup)=\"resizing=false\"\r\n                (pointerover)=\"showresizing=true\" (pointerout)=\"showresizing=false;resizing=false\"\r\n                (pointermove)=\"resizepanel(resizeleft.instance.value, $event, panel.instance.value, true)\"\r\n                (ready)=\"resizeready($event, panel.instance.value, true)\">\r\n        <ngt-plane-geometry [args]=\"[0.1, 0.1]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n      <ngt-mesh #resizebottom [position]=\"[0, -height/2, 0.01]\" [visible]=\"showresizing\" [material]=\"resizematerial\"\r\n                (pointerdown)=\"resizing=true\" (pointerup)=\"resizing=false\"\r\n                (pointerover)=\"showresizing=true\" (pointerout)=\"showresizing=false;resizing=false\"\r\n                (pointermove)=\"resizepanel(resizebottom.instance.value, $event, panel.instance.value, false)\"\r\n                (ready)=\"resizeready($event, panel.instance.value, false)\">\r\n        <ngt-plane-geometry [args]=\"[0.1, 0.1]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n    </ngt-group>\r\n\r\n    <ng-container *ngIf=\"templateRef\"\r\n                  [ngTemplateOutlet]=\"templateRef\"\r\n                  [ngTemplateOutletContext]=\"{ parent: parent.instance.value }\"></ng-container>\r\n  </ngt-mesh>\r\n</ngt-group>\r\n","import { AfterViewInit, Component, Input } from \"@angular/core\";\r\n\r\nimport { Material, Mesh } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-divider',\r\n  exportAs: 'flatUIDivider',\r\n  templateUrl: './divider.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgtMesh,\r\n    NgtPlaneGeometry,\r\n    NgtObjectPassThrough,\r\n  ]\r\n})\r\nexport class FlatUIDivider extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.01;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _dividermaterial!: Material\r\n  @Input()\r\n  get dividermaterial(): Material {\r\n    if (this._dividermaterial) return this._dividermaterial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set dividermaterial(newvalue: Material) {\r\n    this._dividermaterial = newvalue;\r\n  }\r\n\r\n  protected mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n}\r\n","<ngt-mesh #mesh [ngtObjectPassThrough]=\"this\" (ready)=\"meshready($event)\" [material]=\"dividermaterial\">\r\n\r\n  <ngt-plane-geometry [args]=\"[width, height]\"></ngt-plane-geometry>\r\n\r\n</ngt-mesh>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Group, Material, Mesh, Object3D } from \"three\";\r\nimport { NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgIf } from \"@angular/common\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-expansion-panel',\r\n  exportAs: 'flatUIExpansionPanel',\r\n  templateUrl: './expansion-panel.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtPlaneGeometry,\r\n    NgtObjectPassThrough,\r\n    NgtSobaText,\r\n    FlatUIButton,\r\n  ]\r\n})\r\nexport class FlatUIExpansionPanel extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  private _title = '';\r\n  @Input()\r\n  get title(): string { return this._title }\r\n  set title(newvalue: string) {\r\n    this._title = newvalue;\r\n    this.displaytitle = this.title.substring(0, this.overflow * this.width);\r\n  }\r\n\r\n  @Input() overflow = 24;\r\n\r\n  titleheight = 0.1;\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 1;\r\n  @Input()\r\n  get height() {\r\n    let height = this.titleheight;\r\n    if (this.expanded) height += this._height;\r\n    return height\r\n  }\r\n\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _expanded = true;\r\n  @Input()\r\n  get expanded(): boolean { return this._expanded }\r\n  set expanded(newvalue: boolean) {\r\n    this._expanded = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n\r\n    // hide the group when expanding.  Visbable when layout called\r\n    if (this.group && newvalue) {\r\n      this.group.visible = false;\r\n      const timer = setTimeout(() => {\r\n        this.group.visible = true;\r\n        clearTimeout(timer);\r\n        this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n      }, 100)\r\n\r\n    }\r\n\r\n    if (this.panel) this.panel.scale.y = newvalue ? 1 : 0;\r\n  }\r\n\r\n  private _panelmaterial?: Material;\r\n  @Input()\r\n  get panelmaterial(): Material {\r\n    if (this._panelmaterial) return this._panelmaterial;\r\n    return GlobalFlatUITheme.PanelMaterial;\r\n  }\r\n  set panelmaterial(newvalue: Material) {\r\n    this._panelmaterial = newvalue;\r\n  }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  protected displaytitle!: string\r\n\r\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<unknown>;\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  protected group!: Group;\r\n  protected panel!: Mesh;\r\n\r\n  private mesh!: Object3D;\r\n\r\n  protected meshready(mesh: Object3D) {\r\n    this.selectable?.add(mesh);\r\n\r\n    this.mesh = mesh;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [ngtObjectPassThrough]=\"this\"\r\n           [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-group [position]=\"[0, height/2-titleheight/2, 0]\" (ready)=\"group = $event\">\r\n\r\n    <ngt-mesh [material]=\"panelmaterial\" (ready)=\"meshready($event)\">\r\n      <ngt-plane-geometry [args]=\"[width, titleheight]\"></ngt-plane-geometry>\r\n    </ngt-mesh>\r\n\r\n    <ngt-group [position]=\"[titleheight/2, 0, 0]\">\r\n\r\n      <flat-ui-button [position]=\"[-width/2+0.01, 0, 0.001]\" [text]=\"expanded ? 'v' : '>'\" [width]=\"titleheight\" [height]=\"titleheight\" [selectable]=\"selectable\" (pressed)=\"expanded=!expanded\"></flat-ui-button>\r\n\r\n      <ngt-soba-text [text]=\"displaytitle\" [material]=\"labelmaterial\" [fontSize]=\"0.07\" [anchorX]=\"'left'\" [position]=\"[-width/2+titleheight/2+0.04, 0, 0.0001]\"></ngt-soba-text>\r\n    </ngt-group>\r\n\r\n    <ngt-mesh #parent [visible]=\"expanded\" [position]=\"[0, -height/2, 0]\" (ready)=\"panel = $event\" [material]=\"panelmaterial\">\r\n      <ngt-plane-geometry [args]=\"[width, height-titleheight]\"></ngt-plane-geometry>\r\n\r\n      <ng-container *ngIf=\"templateRef\"\r\n                    [ngTemplateOutlet]=\"templateRef\"\r\n                    [ngTemplateOutletContext]=\"{ parent: parent.instance.value }\"></ng-container>\r\n    </ngt-mesh>\r\n  </ngt-group>\r\n\r\n</ngt-group>\r\n\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Shape, ShapeGeometry, Vector3 } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { FlatUIIcon } from \"../icon/icon.component\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-icon-button',\r\n  exportAs: 'flatUIIconButton',\r\n  templateUrl: './icon-button.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    FlatUIIcon,\r\n  ]\r\n})\r\nexport class FlatUIIconButton extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  @Input() url?: string;\r\n  @Input() svg?: string;\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setButtonColor();\r\n  }\r\n\r\n\r\n  private _width = 0.1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _buttonmaterial!: Material\r\n  @Input()\r\n  get buttonmaterial(): Material {\r\n    if (this._buttonmaterial) return this._buttonmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set buttonmaterial(newvalue: Material) {\r\n    this._buttonmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _iconmaterial!: Material\r\n  @Input()\r\n  get iconmaterial(): Material {\r\n    if (this._iconmaterial) return this._iconmaterial;\r\n    return GlobalFlatUITheme.IconMaterial;\r\n  }\r\n  set iconmaterial(newvalue: Material) {\r\n    this._iconmaterial = newvalue;\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() pressed = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n  protected icongeometry!: BufferGeometry;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  protected svgscale!: Vector3;\r\n\r\n  constructor(private cd: ChangeDetectorRef) { super() }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createButtonGeometry();\r\n  }\r\n\r\n  createButtonGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, 0.1, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setButtonColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.buttonmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n    this.buttonmaterial?.dispose();\r\n    this.iconmaterial?.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.width;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', () => { this.doclick() })\r\n    mesh.addEventListener('pointermove', () => { this.over() });\r\n    mesh.addEventListener('pointerout', () => { this.out() });\r\n\r\n    this.mesh = mesh;\r\n    this.setButtonColor();\r\n  }\r\n\r\n\r\n  clicked(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclick();\r\n  }\r\n\r\n  clicking = false;\r\n  private doclick() {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.mesh.scale.addScalar(-0.1);\r\n    this.line.scale.addScalar(-0.1);\r\n    this.clicking = true;\r\n\r\n    const timer = setTimeout(() => {\r\n      this.mesh.scale.addScalar(0.1);\r\n      this.line.scale.addScalar(0.1);\r\n\r\n      this.pressed.next();\r\n\r\n      clearTimeout(timer);\r\n      this.clicking = false;\r\n    }, 100);\r\n  }\r\n\r\n  isover = false;\r\n  over() {\r\n    if (this.clicking || this.isover || !this.enabled || !this.visible) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  out() {\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n  <ngt-mesh #mesh \r\n            (click)=\"clicked(mesh.instance.value, $event)\" (pointermove)=\"over()\" (pointerout)=\"out()\"\r\n            [geometry]=\"geometry\" \r\n            (ready)=\"meshready($event)\">\r\n\r\n    <flat-ui-icon [position]=\"[0, 0, 0.001]\" [width]=\"width\" [svg]=\"svg\" [url]=\"url\" [iconmaterial]=\"iconmaterial\"></flat-ui-icon>\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Shape, Texture, TextureLoader } from \"three\";\r\nimport { NgtEvent, NgtLoader, NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtMeshBasicMaterial } from \"@angular-three/core/materials\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-basic-image',\r\n  exportAs: 'flatUIBasicImage',\r\n  templateUrl: './basic-image.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtPlaneGeometry,\r\n    NgtMeshBasicMaterial,\r\n    NgtLine,\r\n    NgtObjectPassThrough,\r\n  ]\r\n})\r\nexport class FlatUIBasicImage extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  @Input()\r\n  set map(newvalue: string) {\r\n    if (!newvalue) return;\r\n\r\n    const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n      this.maptexture = next;\r\n      this.cd.detectChanges();\r\n    },\r\n      () => { },\r\n      () => { s.unsubscribe(); }\r\n    );\r\n  }\r\n  @Input() maptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set lightMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.lightMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() lightMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set aoMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.aoMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() aoMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set emissiveMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.emissiveMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() emissiveMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set bumpMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.bumpMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() bumpMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set normalMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.normalMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() normalMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set displacementMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.displacementMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() displacementMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set roughnessMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.roughnessMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() roughnessMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set metalnessMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.metalnessMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() metalnessMaptexture!: Texture;\r\n\r\n\r\n  //@Input()\r\n  //set alphaMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.alphaMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() alphaMaptexture!: Texture;\r\n\r\n  //@Input()\r\n  //set envMap(newvalue: string) {\r\n  //  const s = this.loader.use(TextureLoader, newvalue).subscribe(next => {\r\n  //    this.envMaptexture = next;\r\n  //  },\r\n  //    () => { },\r\n  //    () => { s.unsubscribe(); }\r\n  //  );\r\n  //}\r\n  //@Input() envMaptexture!: Texture;\r\n\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._outlinematerial = newvalue;\r\n  }\r\n\r\n  @Input() enabled = false;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() pressed = new EventEmitter<void>();\r\n\r\n  protected mesh!: Mesh;\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  constructor(\r\n    private loader: NgtLoader,\r\n    private cd: ChangeDetectorRef,\r\n  ) { super(); }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n  }\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    const halfwidth = this.width / 2;\r\n    const halfheight = this.height / 2;\r\n\r\n    const border = new Shape();\r\n    border.moveTo(-halfwidth, halfheight)\r\n    border.lineTo(halfwidth, halfheight)\r\n    border.lineTo(halfwidth, -halfheight)\r\n    border.lineTo(-halfwidth, -halfheight)\r\n    border.closePath();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(border.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclick(); e.stop = true; })\r\n    mesh.addEventListener('pointerover', (e: any) => { this.over(); e.stop = true; })\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; })\r\n\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  clicked(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclick();\r\n  }\r\n\r\n  clicking = false;\r\n  private doclick() {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.mesh.scale.addScalar(-0.05);\r\n    this.line.scale.addScalar(-0.05);\r\n\r\n    this.clicking = true;\r\n\r\n    const timer = setTimeout(() => {\r\n      this.mesh.scale.addScalar(0.05);\r\n      this.line.scale.addScalar(0.05);\r\n\r\n      this.pressed.next();\r\n\r\n      clearTimeout(timer);\r\n      this.clicking = false;\r\n    }, 100);\r\n  }\r\n\r\n  isover = false;\r\n  over() {\r\n    if (this.clicking || this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n}\r\n","<ngt-group [ngtObjectPassThrough]=\"this\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"clicked(mesh.instance.value, $event)\"\r\n            (pointerover)=\"over();$event.stopPropagation()\" (pointerout)=\"out();$event.stopPropagation()\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-plane-geometry [args]=\"[width, height]\"></ngt-plane-geometry>\r\n\r\n    <ngt-mesh-basic-material [map]=\"maptexture\"></ngt-mesh-basic-material>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n\r\n<!--\r\n[lightMap]=\"lightMaptexture\"\r\n[aoMap]=\"aoMaptexture\"\r\n[alphaMap]=\"alphaMaptexture\"\r\n[envMap]=\"envMaptexture\"\r\n[emissiveMap]=\"emissiveMaptexture\"\r\n[bumpMap]=\"bumpMaptexture\"\r\n[normalMap]=\"normalMaptexture\"\r\n[displacementMap]=\"displacementMaptexture\"\r\n[roughnessMap]=\"roughnessMaptexture\"\r\n[metalnessMap]=\"metalnessMaptexture\"\r\n -->\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, PlaneGeometry, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-checkbox',\r\n  exportAs: 'flatUIInputCheckbox',\r\n  templateUrl: './input-checkbox.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n  ]\r\n})\r\nexport class FlatUIInputCheckbox extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  private _checked = false;\r\n  @Input()\r\n  get checked(): boolean { return this._checked }\r\n  set checked(newvalue: boolean) {\r\n    this._checked = newvalue;\r\n\r\n    if (this.checkmesh)\r\n      this.checkmesh.visible = this.checked;\r\n  }\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _width = 0.1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _checkmaterial!: Material\r\n  @Input()\r\n  get checkmaterial(): Material {\r\n    if (this._checkmaterial) return this._checkmaterial;\r\n    return GlobalFlatUITheme.CheckMaterial;\r\n  }\r\n  set checkmaterial(newvalue: Material) {\r\n    this._checkmaterial = newvalue;\r\n  }\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n  @Input() checkgeometry!: BufferGeometry;\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() change = new EventEmitter<boolean>();\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  private checkmesh!: Mesh;\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createButtonGeometry();\r\n    if (!this.checkgeometry) this.createCheckGeometry();\r\n  }\r\n\r\n  createButtonGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.width, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  createCheckGeometry() {\r\n    this.checkgeometry = new PlaneGeometry(this.width * 0.7, this.width * 0.7)\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n    this.selectable?.remove(this.checkmesh);\r\n\r\n    this.geometry.dispose();\r\n    this.checkgeometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.width;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('pointermove', () => { this.over() });\r\n    mesh.addEventListener('pointerout', () => { this.out() });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  protected checkready(mesh: Mesh) {\r\n    this.selectable?.add(mesh)\r\n\r\n    mesh.visible = this.checked;\r\n\r\n    mesh.addEventListener('click', () => { this.doclick() })\r\n    mesh.addEventListener('pointermove', () => { this.over() });\r\n    mesh.addEventListener('pointerout', () => { this.out() });\r\n\r\n    this.checkmesh = mesh;\r\n  }\r\n\r\n  protected clicked(event: NgtEvent<MouseEvent>) {\r\n    if (event.object != this.checkmesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclick();\r\n  }\r\n\r\n  private doclick() {\r\n    if (!this.enabled || !this.visible) return;\r\n    this.checked = !this.checked;\r\n    this.change.next(this.checked);\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  protected out() {\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh (pointermove)=\"over()\" (pointerout)=\"out()\"\r\n            [geometry]=\"geometry\" \r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-mesh [position]=\"[0, 0, 0.0001]\" [geometry]=\"checkgeometry\" [material]=\"checkmaterial\"\r\n              (ready)=\"checkready($event)\" (click)=\"clicked($event)\">\r\n    </ngt-mesh>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Color, Line, Material, Mesh, MeshBasicMaterial, Object3D, Shape, ShapeGeometry } from \"three\";\r\nimport { make, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, UIInput, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-color',\r\n  exportAs: 'flatUIInputColor',\r\n  templateUrl: './input-color.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n  ]\r\n})\r\nexport class FlatUIInputColor extends NgtObjectProps<Mesh> implements AfterViewInit, UIInput {\r\n  private _text = GlobalFlatUITheme.ButtonColor;\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    this._text = '#' + make(Color, newvalue).getHexString();\r\n    this.updatecolor();\r\n    this.change.next(newvalue);\r\n\r\n  }\r\n\r\n  @Input() enabled = true;\r\n\r\n  private _width = 0.4;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  inputopen = false;\r\n  @Output() openinput = new EventEmitter<Object3D>();\r\n\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() enter = new EventEmitter<void>();\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n  protected material!: Material;\r\n\r\n  private updatecolor() {\r\n    if (!this.mesh) return;\r\n\r\n    (this.mesh.material as MeshBasicMaterial).color.setStyle(this.text);\r\n  }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createButtonGeometry()\r\n    this.createButtonMaterial()\r\n  }\r\n\r\n  createButtonGeometry() {\r\n    let flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n\r\n    flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width - 0.01, this.height - 0.01, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n  }\r\n\r\n  createButtonMaterial() {\r\n    this.material = new MeshBasicMaterial();\r\n    this.updatecolor();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n    this.material.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh)\r\n\r\n    mesh.addEventListener('click', () => { this.enableinput(mesh) });\r\n    mesh.addEventListener('pointermove', () => { this.over() });\r\n    mesh.addEventListener('pointerout', () => { this.out() });\r\n\r\n    this.mesh = mesh;\r\n    this.updatecolor();\r\n  }\r\n\r\n  protected enableinput(mesh: Mesh) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.inputopen = true;\r\n    this.openinput.next(mesh);\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-group [position]=\"[0, 0, 0.001]\">\r\n\r\n    <ngt-mesh #mesh\r\n              (pointerover)=\"over()\" (pointerout)=\"out()\" (click)=\"enableinput(mesh.instance.value)\"\r\n              [geometry]=\"geometry\"\r\n              (ready)=\"meshready($event)\">\r\n    </ngt-mesh>\r\n\r\n    <ngt-line (ready)=\"lineready($event)\"\r\n              [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n  </ngt-group>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, MathUtils, Mesh, Object3D, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, UIInput, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-number',\r\n  exportAs: 'flatUIInputNumber',\r\n  templateUrl: './input-number.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUIInputNumber extends NgtObjectProps<Mesh> implements AfterViewInit, UIInput {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    if (newvalue == '.' || newvalue == '-' || newvalue == '-.') {\r\n      this._text = newvalue;\r\n    }\r\n    else {\r\n      let value = +newvalue;\r\n      if (!isNaN(value)) {\r\n        if (this.min != undefined && this.max != undefined)\r\n          value = MathUtils.clamp(value, this.min, this.max);\r\n        this.change.next(value);\r\n\r\n        this._text = newvalue;\r\n      }\r\n    }\r\n    this.updatedisplaytext();\r\n  }\r\n  @Input() overflow = 6;\r\n\r\n  @Input() min?: number;\r\n  @Input() max?: number;\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    this.updatedisplaytext();\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _numbermaterial!: Material\r\n  @Input()\r\n  get numbermaterial(): Material {\r\n    if (this._numbermaterial) return this._numbermaterial;\r\n    return GlobalFlatUITheme.NumberMaterial;\r\n  }\r\n  set numbermaterial(newvalue: Material) {\r\n    this._numbermaterial = newvalue;\r\n  }\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _width = 0.5;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  private _inputopen = false;\r\n  get inputopen(): boolean { return this._inputopen }\r\n  set inputopen(newvalue: boolean) {\r\n    this._inputopen = newvalue;\r\n    this.updatedisplaytext();\r\n  }\r\n  @Output() openinput = new EventEmitter<Object3D>();\r\n\r\n  @Output() change = new EventEmitter<number>();\r\n  @Output() enter = new EventEmitter<void>();\r\n\r\n  protected displaytext!: string;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  private updatedisplaytext() {\r\n    let text = this.text.substring(this.text.length - this.overflow);\r\n    if (this.inputopen && this.enabled) text += '_'\r\n    this.displaytext = text;\r\n  }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createButtonGeometry();\r\n  }\r\n\r\n  createButtonGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doenableinput(mesh); e.stop = true; })\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n\r\n  protected enableinput(event: NgtEvent<MouseEvent>, mesh: Mesh) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doenableinput(mesh);\r\n  }\r\n\r\n  protected doenableinput(mesh: Mesh) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.inputopen = true;\r\n    this.openinput.next(mesh);\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"enableinput($event, mesh.instance.value)\"\r\n            (pointermove)=\"over();$event.stopPropagation()\"\r\n            (pointerout)=\"out();$event.stopPropagation()\"\r\n            [geometry]=\"geometry\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-soba-text [text]=\"displaytext\"\r\n                   [material]=\"numbermaterial\"\r\n                   [anchorX]=\"'left'\"\r\n                   [fontSize]=\"0.07\"\r\n                   [position]=\"[-width/2+0.01, 0, 0.001]\">\r\n    </ngt-soba-text>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Intersection, Line, Material, MathUtils, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtCircleGeometry } from \"@angular-three/core/geometries\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-slider',\r\n  exportAs: 'flatUIInputSlider',\r\n  templateUrl: './input-slider.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtCircleGeometry,\r\n  ]\r\n})\r\nexport class FlatUIInputSlider extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  private _value = 0;\r\n  @Input()\r\n  get value(): number { return this._value }\r\n  set value(newvalue: number) {\r\n    if (this.min != undefined && this.max != undefined) {\r\n      if (this.min > this.max) {\r\n        console.warn(`min ${this.min} is greater than max ${this.max}`);\r\n        let temp = this.min;\r\n        this.min = this.max;\r\n        this.max = temp;\r\n      }\r\n      this._value = MathUtils.clamp(newvalue, this.min, this.max);\r\n      this.change.next(this._value);\r\n    }\r\n    else {\r\n      this._value = newvalue\r\n      this.change.next(this._value);\r\n    }\r\n  }\r\n\r\n  @Input() min?: number;\r\n  @Input() max?: number;\r\n\r\n  private _step?= 1;\r\n  @Input()\r\n  get step(): number | undefined { return this._step }\r\n  set step(newvalue: number | undefined) {\r\n    this._step = newvalue;\r\n\r\n    if (newvalue != undefined) {\r\n      let cur = newvalue;\r\n      this.precision = 1\r\n      while (Math.floor(cur) !== cur) {\r\n        cur *= 10\r\n        this.precision++\r\n      }\r\n    }\r\n    else {\r\n      if (this.min != undefined && this.max != undefined) {\r\n        this._step = (this.max - this.min) / 10;\r\n      }\r\n    }\r\n  }\r\n  private precision = 1;\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _slidermaterial!: Material\r\n  @Input()\r\n  get slidermaterial(): Material {\r\n    if (this._slidermaterial) return this._slidermaterial;\r\n    return GlobalFlatUITheme.SliderMaterial;\r\n  }\r\n  set slidermaterial(newvalue: Material) {\r\n    this._slidermaterial = newvalue;\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() change = new EventEmitter<number>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  get x(): number {\r\n    if (this.min != undefined && this.max != undefined) {\r\n      return MathUtils.mapLinear(this.value, this.min, this.max, -this.width / 2, this.width / 2);\r\n    }\r\n    return this.width / 2;\r\n  }\r\n\r\n  protected innerscale = 0.7;\r\n  protected radius = 0.04;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createSliderGeometry();\r\n  }\r\n\r\n  createSliderGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, this.height / 2);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n    this.selectable?.remove(this.slidermesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclicked(mesh, e.data); e.stop = true; });\r\n    mesh.addEventListener('pointerdown', (e: any) => { this.dragging = true; e.stop = true; });\r\n    mesh.addEventListener('pointerup', (e: any) => { this.dragging = false; e.stop = true; });\r\n\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(mesh, e.data); e.stop = true; });\r\n    mesh.addEventListener('pointerout', () => { this.out() });\r\n    mesh.addEventListener('raymissed', () => { this.dragging = false; });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  private slidermesh!: Mesh;\r\n\r\n  protected sliderready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    this.slidermesh = mesh;\r\n  }\r\n\r\n  dragging = false;\r\n\r\n  protected clicked(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclicked(mesh, event);\r\n  }\r\n\r\n  private doclicked(mesh: Mesh, event: Intersection) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    if (this.min != undefined && this.max != undefined && this.step != undefined) {\r\n      mesh.worldToLocal(event.point);\r\n\r\n      const buttonmin = -(this.width / 2) * this.innerscale + this.radius;\r\n      const buttonmax = (this.width / 2) * this.innerscale - this.radius;\r\n      const buttonx = MathUtils.clamp(event.point.x * this.innerscale, buttonmin, buttonmax);\r\n\r\n      const value = MathUtils.mapLinear(buttonx, buttonmin, buttonmax, this.min, this.max);\r\n\r\n      // avoid problems when step is fractional\r\n      this.value = +((Math.round(value / this.step) * this.step).toFixed(this.precision));\r\n\r\n      this.change.next(this.value);\r\n    }\r\n  }\r\n\r\n  protected over(mesh: Mesh, event: Intersection) {\r\n    if (!this.enabled) return;\r\n\r\n    if (this.dragging) {\r\n      this.doclicked(mesh, event);\r\n    }\r\n    this.line.visible = true;\r\n  }\r\n\r\n  protected out() {\r\n    this.line.visible = false;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"clicked(mesh.instance.value, $event)\"\r\n            (pointerdown)=\"dragging=true\" (pointerup)=\"dragging=false\"\r\n            (pointermove)=\"over(mesh.instance.value, $event)\" (pointerout)=\"out();dragging=false\"\r\n            [geometry]=\"geometry\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-mesh [position]=\"[x*innerscale, 0, 0.0001]\" (ready)=\"sliderready($event)\" [material]=\"slidermaterial\">\r\n      <ngt-circle-geometry [args]=\"[radius, 32]\"></ngt-circle-geometry>\r\n    </ngt-mesh>\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Object3D, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, UIInput, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-text',\r\n  exportAs: 'flatUIInputText',\r\n  templateUrl: './input-text.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUIInputText extends NgtObjectProps<Mesh> implements AfterViewInit, UIInput {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    this._text = newvalue;\r\n    this.change.next(newvalue);\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  @Input() overflow = 6; // deprecated\r\n\r\n  @Input()\r\n  private _password = false;\r\n  get password(): boolean { return this._password }\r\n  set password(newvalue: boolean) {\r\n    this._password = newvalue;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    this.updatedisplaytext();\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _placeholder?: string;\r\n  @Input()\r\n  get placeholder(): string | undefined { return this._placeholder }\r\n  set placeholder(newvalue: string | undefined) {\r\n    this._placeholder = newvalue;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _textmaterial!: Material\r\n  @Input()\r\n  get textmaterial(): Material {\r\n    if (this._textmaterial) return this._textmaterial;\r\n    return GlobalFlatUITheme.StringMaterial;\r\n  }\r\n  set textmaterial(newvalue: Material) {\r\n    this._textmaterial = newvalue;\r\n  }\r\n\r\n  private _width = 0.5;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _inputopen = false;\r\n  get inputopen(): boolean { return this._inputopen }\r\n  set inputopen(newvalue: boolean) {\r\n    this._inputopen = true;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  @Output() openinput = new EventEmitter<Object3D>();\r\n\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() enter = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected displaytext!: string;\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  private updatedisplaytext() {\r\n    let text\r\n    if (this.text == '' && this.placeholder != undefined) {\r\n      if (this.inputopen && this.enabled)\r\n        text = '_'\r\n      else\r\n        text = this.placeholder;\r\n    }\r\n    else {\r\n      if (this.password)\r\n        text = '*'.repeat(this.text.length);\r\n      else\r\n        text = this.text;\r\n\r\n      if (this.inputopen && this.enabled) text += '_'\r\n    }\r\n    this.displaytext = text;\r\n  }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createTextGeometry();\r\n  }\r\n\r\n  createTextGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  protected lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doenableinput(mesh); e.stop = true })\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  protected enableinput(event: NgtEvent<MouseEvent>, mesh: Mesh) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doenableinput(mesh);\r\n  }\r\n\r\n  protected doenableinput(mesh: Mesh) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.inputopen = true;\r\n    this.openinput.next(mesh);\r\n  }\r\n\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"enableinput($event, mesh.instance.value)\"\r\n            (pointermove)=\"over();$event.stopPropagation()\"\r\n            (pointerout)=\"out();$event.stopPropagation()\"\r\n            [geometry]=\"geometry\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-soba-text [text]=\"displaytext\"\r\n                   [material]=\"textmaterial\"\r\n                   [clipRect]=\"[0, -height/2, this.width-0.05, height/2]\"\r\n                   [anchorX]=\"'left'\"\r\n                   [fontSize]=\"0.07\"\r\n                   [position]=\"[-width/2+0.01, 0, 0.001]\">\r\n    </ngt-soba-text>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Object3D, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\n// @ts-ignore\r\nimport { Text } from 'troika-three-text'\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, UIInput, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-textarea',\r\n  exportAs: 'flatUIInputTextArea',\r\n  templateUrl: './input-textarea.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUIInputTextArea extends NgtObjectProps<Mesh> implements AfterViewInit, UIInput {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    this._text = newvalue;\r\n    this.change.next(newvalue);\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  @Input() font = ''; // for example, https://fonts.gstatic.com/s/raleway/v14/1Ptrg8zYS_SKggPNwK4vaqI.woff\r\n  @Input() fontsize = 0.07;\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    this.updatedisplaytext();\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _placeholder?: string;\r\n  @Input()\r\n  get placeholder(): string | undefined { return this._placeholder }\r\n  set placeholder(newvalue: string | undefined) {\r\n    this._placeholder = newvalue;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _textmaterial!: Material\r\n  @Input()\r\n  get textmaterial(): Material {\r\n    if (this._textmaterial) return this._textmaterial;\r\n    return GlobalFlatUITheme.StringMaterial;\r\n  }\r\n  set textmaterial(newvalue: Material) {\r\n    this._textmaterial = newvalue;\r\n  }\r\n\r\n  private _width = 0.5;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.17;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _inputopen = false;\r\n  get inputopen(): boolean { return this._inputopen }\r\n  set inputopen(newvalue: boolean) {\r\n    this._inputopen = true;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  @Output() openinput = new EventEmitter<Object3D>();\r\n\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() enter = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected displaytext!: string;\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  private updatedisplaytext() {\r\n    let text\r\n    if (this.text == '' && this.placeholder != undefined) {\r\n      if (this.inputopen && this.enabled)\r\n        text = '_'\r\n      else\r\n        text = this.placeholder;\r\n    }\r\n    else {\r\n      text = this.text;\r\n\r\n      if (this.inputopen && this.enabled) text += '_'\r\n    }\r\n    this.displaytext = text;\r\n  }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createTextGeometry();\r\n  }\r\n\r\n  protected createTextGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  protected setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = Math.max(this.height, this.fontsize);\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  protected lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doenableinput(mesh); e.stop = true })\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  protected enableinput(event: NgtEvent<MouseEvent>, mesh: Mesh) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doenableinput(mesh);\r\n  }\r\n\r\n  protected doenableinput(mesh: Mesh) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.inputopen = true;\r\n    this.openinput.next(mesh);\r\n  }\r\n\r\n  protected doover(event: NgtEvent<MouseEvent>, mesh: Mesh) {\r\n    if (event.object != mesh) return;\r\n    this.over();\r\n    event.stopPropagation();\r\n  }\r\n\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n\r\n  private triokaText!: Text;\r\n  private lineheight = this.fontsize;\r\n  private topY = 0;\r\n  private maxY = 0;\r\n\r\n  protected textready(text: Text) {\r\n    text.clipRect = [0, -this.height, this.width, 0];\r\n    text.position.x = -this.width / 2;\r\n    text.position.y = this.height / 2;\r\n    text.position.z = 0.001;\r\n    text.addEventListener('synccomplete', () => {\r\n      // get the computed height of each line\r\n      this.lineheight = text.textRenderInfo.lineHeight;\r\n\r\n      const bounds = text.textRenderInfo.blockBounds;\r\n      this.maxY = bounds[3] - bounds[1] + this.height / 2;\r\n    });\r\n    this.triokaText = text;\r\n  }\r\n\r\n  protected scroll(e: NgtEvent<WheelEvent>) {\r\n    this.doscroll((e as any).deltaY);\r\n  }\r\n\r\n  private doscroll(change: number) {\r\n    let deltaY = this.lineheight;\r\n    if (change < 0)\r\n      deltaY = -deltaY;\r\n\r\n    if (this.topY + deltaY >= 0 && this.topY + this.height + deltaY < this.maxY) {\r\n      this.triokaText.position.y += deltaY;\r\n      this.topY += deltaY;\r\n\r\n      this.triokaText.clipRect = [\r\n        0,\r\n        -this.topY - this.height,\r\n        this.width,\r\n        -this.topY,\r\n      ];\r\n    }\r\n  }\r\n\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"enableinput($event, mesh.instance.value)\"\r\n            (pointermove)=\"doover($event, mesh.instance.value)\"\r\n            (pointerout)=\"out();$event.stopPropagation()\"\r\n            [geometry]=\"geometry\" (wheel)=\"scroll($event)\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-soba-text [text]=\"displaytext\"\r\n                   [material]=\"textmaterial\"\r\n                   [anchorX]=\"'left'\"\r\n                   [anchorY]=\"'top'\"\r\n                   [font]=\"font\"\r\n                   [maxWidth]=\"width\"\r\n                   [fontSize]=\"fontsize\"\r\n                   [position]=\"[-width/2+0.01, height/2, 0.001]\"\r\n                   (ready)=\"textready($event)\">\r\n    </ngt-soba-text>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtCircleGeometry } from \"@angular-three/core/geometries\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-input-toggle',\r\n  exportAs: 'flatUIInputToggle',\r\n  templateUrl: './input-toggle.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtCircleGeometry,\r\n  ]\r\n})\r\nexport class FlatUIInputToggle extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  private _checked = false;\r\n  @Input()\r\n  get checked(): boolean { return this._checked }\r\n  set checked(newvalue: boolean) {\r\n    this._checked = newvalue;\r\n    this.togglematerial = newvalue ? this.truematerial : this.falsematerial;\r\n\r\n    if (this.togglemesh) {\r\n      this.updatetoggle();\r\n    }\r\n  }\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _falsematerial!: Material\r\n  @Input()\r\n  get falsematerial(): Material {\r\n    if (this._falsematerial) return this._falsematerial;\r\n    return GlobalFlatUITheme.ToggleFalseMaterial;\r\n  }\r\n  set falsematerial(newvalue: Material) {\r\n    this._falsematerial = newvalue;\r\n  }\r\n\r\n  private _truematerial!: Material\r\n  @Input()\r\n  get truematerial(): Material {\r\n    if (this._truematerial) return this._truematerial;\r\n    return GlobalFlatUITheme.ToggleTrueMaterial;\r\n  }\r\n  set truematerial(newvalue: Material) {\r\n    this._truematerial = newvalue;\r\n  }\r\n\r\n  protected width = 0.2;\r\n  protected height = 0.1;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() change = new EventEmitter<boolean>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected togglematerial = this.falsematerial;\r\n\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createToggleGeometry();\r\n  }\r\n\r\n  createToggleGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, this.height / 2);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n    this.selectable?.remove(this.togglemesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclicked(); e.stop = true; });\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n\r\n  private togglemesh!: Mesh;\r\n\r\n  protected toggleready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclicked(); e.stop = true; });\r\n\r\n    this.togglemesh = mesh;\r\n\r\n    this.updatetoggle();\r\n\r\n  }\r\n\r\n  private updatetoggle() {\r\n    const offset = this.width / 4;\r\n    this.togglemesh.position.x = this.checked ? offset : -offset;\r\n  }\r\n\r\n  protected clicked(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n\r\n    this.doclicked();\r\n  }\r\n\r\n  private doclicked() {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.checked = !this.checked;\r\n    this.change.next(this.checked);\r\n  }\r\n\r\n  protected over() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = true;\r\n  }\r\n  protected out() {\r\n    this.line.visible = false;\r\n  }\r\n\r\n\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"clicked(mesh.instance.value, $event)\" (pointermove)=\"over()\" (pointerout)=\"out()\"\r\n            [geometry]=\"geometry\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-mesh (ready)=\"toggleready($event)\" (click)=\"clicked(mesh.instance.value, $event)\" [position]=\"[0, 0, 0.0001]\" [material]=\"togglematerial\">\r\n      <ngt-circle-geometry [args]=\"[0.04,32]\"></ngt-circle-geometry>\r\n    </ngt-mesh>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { Component, EventEmitter, HostListener, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Material, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps, NgtTriple } from \"@angular-three/core\";\r\n\r\nimport { roundedRect } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgFor } from \"@angular/common\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\nimport { FlatUIMaterialIcon } from \"../material-icon/material-icon.component\";\r\n\r\n\r\nclass KeySetting {\r\n  constructor(public position: NgtTriple, public lower: string,\r\n    public upper?: string, public alpha?: string,\r\n    public size = 0.1, public fontsize = 0.15) { }\r\n}\r\n\r\ntype KeyCase = 'lower' | 'upper' | 'numbers';\r\n\r\nclass IconSetting {\r\n  constructor(public position: NgtTriple, public icon: string, public keycode: string) { }\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-keyboard',\r\n  exportAs: 'flatUIKeyboard',\r\n  templateUrl: './keyboard.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtSobaText,\r\n    FlatUIBaseButton,\r\n    FlatUIMaterialIcon,\r\n  ]\r\n})\r\nexport class FlatUIKeyboard extends NgtObjectProps<Mesh>  {\r\n  @Input() text: string = ''\r\n  @Input() allowenter = false;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material) {\r\n    this._popupmaterial = newvalue;\r\n  }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  @Output() pressed = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected keys: Array<KeySetting> = [];\r\n  protected icons: Array<IconSetting> = [];\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createKeyboardGeometry();\r\n  }\r\n\r\n  private keyboardwidth = 1.9;\r\n  private keyboardheight = 0.48;\r\n\r\n  createKeyboardGeometry() {\r\n\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.keyboardwidth, this.keyboardheight, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  protected missed() {\r\n    this.close.next();\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n\r\n    const top = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p']\r\n    const topalpha = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']\r\n    const middle = ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l']\r\n    const middlealpha = ['#', '$', '_', '&', '-', '+', '(', ')', '`']\r\n    const bottom = ['z', 'x', 'c', 'v', 'b', 'n', 'm']\r\n    const bottomalpha = ['*', '\"', \"'\", '<', ';', '!', '~']\r\n\r\n    const buttonwidth = 0.11\r\n    const z = 0.001;\r\n    const ytop = 0.17\r\n    const ymiddle = 0.06\r\n    const ybottom = -0.05\r\n    const yspace = -0.16\r\n\r\n    let width = (top.length - 1) * buttonwidth;\r\n    top.forEach((lower, index) => {\r\n      this.keys.push(new KeySetting([(-width / 2 + index * buttonwidth), ytop, z], lower, lower.toUpperCase(), topalpha[index]));\r\n    })\r\n    this.icons.push(new IconSetting([(width / 2 + 0.35), 0.16, z], 'content_copy', 'ctrl+c'));\r\n    this.icons.push(new IconSetting([(width / 2 + 0.35), 0, z], 'content_cut', 'ctrl+x'));\r\n    this.icons.push(new IconSetting([(width / 2 + 0.35), -0.16, z], 'content_paste', 'ctrl+v'));\r\n\r\n    width = (middle.length - 1) * (buttonwidth + 0.01);\r\n    middle.forEach((lower, index) => {\r\n      this.keys.push(new KeySetting([(-width / 2 + index * buttonwidth + 0.12), ymiddle, z], lower, lower.toUpperCase(), middlealpha[index]));\r\n    })\r\n    this.icons.push(new IconSetting([(-width / 2 + middle.length * buttonwidth + 0.15), ymiddle, z], 'backspace', 'Backspace'));\r\n    this.keys.push(new KeySetting([(-width / 2 - 0.09), ymiddle, z], 'ABC', 'abc', 'ABC', 0.3, 0.1));\r\n\r\n    width = (bottom.length - 1) * buttonwidth;\r\n    bottom.forEach((lower, index) => {\r\n      this.keys.push(new KeySetting([(-width / 2 + index * buttonwidth), ybottom, z], lower, lower.toUpperCase(), bottomalpha[index]));\r\n    })\r\n    if (this.allowenter) {\r\n      this.icons.push(new IconSetting([(-width / 2 + bottom.length * buttonwidth + 0.05), ybottom, z], 'keyboard_return', 'Enter'));\r\n    }\r\n\r\n    this.keys.push(new KeySetting([-0.56, yspace, z], '123', '123', 'abc', 0.3, 0.1));\r\n    this.keys.push(new KeySetting([0, yspace, z], ' ', ' ', ' ', 0.8));\r\n    this.keys.push(new KeySetting([0.51, yspace, z], '.', ',', ':'));\r\n    this.keys.push(new KeySetting([0.62, yspace, z], '@', '?', '/'));\r\n\r\n    this.selectable?.add(mesh);\r\n    mesh.addEventListener('click', (e: any) => { e.stop = true; });\r\n    mesh.addEventListener('raymissed', (e: any) => { this.missed(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  @HostListener('document:keydown', ['$event'])\r\n  private onKeyDown(event: KeyboardEvent) {\r\n    let keycode = event.key;\r\n    if (event.key == 'Backspace' || event.key == 'Enter')\r\n      this.clicked(event.key);\r\n    else if (event.key == 'Shift') {\r\n      if (this.keycase == 'lower') {\r\n        keycode = 'ABC';\r\n      } else if (this.keycase == 'upper') {\r\n        keycode = '123';\r\n      } else if (this.keycase == 'numbers') {\r\n        keycode = 'abc';\r\n      }\r\n    }\r\n    if (event.ctrlKey) {\r\n      const key = event.key.toLowerCase();\r\n      if (key == 'v' || key == 'c' || key == 'x') {\r\n        this.clicked(\"ctrl+\" + key);\r\n      }\r\n    }\r\n    else {\r\n      const key = this.keys.find(x => x.lower == keycode || x.upper == keycode || x.alpha == keycode);\r\n      if (key)\r\n        this.clicked(keycode);\r\n    }\r\n  }\r\n\r\n  @HostListener('document:keyup', ['$event'])\r\n  private onKeyUp(event: KeyboardEvent) {\r\n    let keycode = event.key;\r\n    if (event.key == 'Shift') {\r\n      if (this.keycase == 'lower') {\r\n        keycode = 'ABC';\r\n      } else if (this.keycase == 'upper') {\r\n        keycode = 'abc';\r\n      }\r\n      this.clicked(keycode);\r\n    }\r\n  }\r\n\r\n  private keycase: KeyCase = 'lower';\r\n\r\n  protected keycode(keys: KeySetting): string {\r\n    if (this.keycase == 'lower')\r\n      return keys.lower;\r\n    else if (this.keycase == 'upper')\r\n      return keys.upper ? keys.upper : keys.lower;\r\n    else\r\n      return keys.alpha ? keys.alpha : keys.lower;\r\n  }\r\n\r\n  protected iconcode(icons: IconSetting): string {\r\n    return icons.keycode;\r\n  }\r\n\r\n  protected clicked(keycode: string) {\r\n    if (!this.visible) return;\r\n\r\n    if (keycode == 'ABC') {\r\n      this.keycase = 'upper'\r\n    } else if (keycode == 'abc') {\r\n      this.keycase = 'lower';\r\n    } else if (keycode == '123') {\r\n      this.keycase = 'numbers'\r\n    }\r\n    else if (keycode == 'ctrl+v') {\r\n      navigator.clipboard.readText().then(text => {\r\n        this.text += text;\r\n        this.change.next(this.text);\r\n      });\r\n    }\r\n    else if (keycode == 'ctrl+c' || keycode == 'ctrl+x') {\r\n      navigator.clipboard.writeText(this.text).then(() => {\r\n        console.log(this.text, 'saved to clipboard');\r\n        if (keycode == 'ctrl+x') {\r\n          this.text = '';\r\n          this.change.next(this.text);\r\n        }\r\n      });\r\n    }\r\n    else {\r\n      this.pressed.next(keycode);\r\n      if (keycode == 'Enter') {\r\n        if (this.allowenter) {\r\n          this.change.next(this.text);\r\n          this.text = '';\r\n        }\r\n      }\r\n      else if (keycode == 'Backspace') {\r\n        if (this.text.length > 0) {\r\n          this.text = this.text.slice(0, this.text.length - 1);\r\n          this.change.next(this.text);\r\n        }\r\n      }\r\n      else {\r\n        this.text += keycode;\r\n        this.change.next(this.text);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected ignore(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            [geometry]=\"geometry\" [material]=\"popupmaterial\"\r\n            (click)=\"ignore(mesh.instance.value, $event)\" (pointerover)=\"$event.stopPropagation()\"\r\n            (ready)=\"meshready($event)\" (pointermissed)=\"missed()\">\r\n  </ngt-mesh>\r\n\r\n  <flat-ui-base-button *ngFor=\"let item of keys\" [selectable]=\"selectable\"\r\n                       [position]=\"item.position\" [width]=\"item.size\" \r\n                       (pressed)=\"clicked(keycode(item))\">\r\n\r\n    <ng-template #button let-parent=\"parent\">\r\n      <ngt-soba-text [appendTo]=\"parent\" [text]=\"keycode(item)\" [material]=\"labelmaterial\" [position]=\"[0, 0, 0.001]\"></ngt-soba-text>\r\n    </ng-template>\r\n  </flat-ui-base-button>\r\n\r\n  <flat-ui-base-button *ngFor=\"let item of icons\" [selectable]=\"selectable\"\r\n                       [position]=\"item.position\" [width]=\"0.15\"\r\n                       (pressed)=\"clicked(iconcode(item))\">\r\n\r\n    <ng-template #button let-parent=\"parent\">\r\n      <flat-ui-material-icon [appendTo]=\"parent\" [text]=\"item.icon\" [labelmaterial]=\"labelmaterial\" [position]=\"[0, 0, 0.001]\"></flat-ui-material-icon>\r\n    </ng-template>\r\n  </flat-ui-base-button>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Material, Mesh } from \"three\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgIf } from \"@angular/common\";\r\nimport { FlatUIMaterialIcon } from \"../material-icon/material-icon.component\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-material-button',\r\n  exportAs: 'flatUIMaterialButton',\r\n  templateUrl: './material-button.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    FlatUIBaseButton,\r\n    FlatUIMaterialIcon,\r\n  ]\r\n})\r\nexport class FlatUIMaterialButton extends NgtObjectProps<Mesh> {\r\n  @Input() text = '';\r\n  @Input() width = 0.1;\r\n  @Input() height = 0.1;\r\n  @Input() enabled = true;\r\n  @Input() buttonmaterial: Material | undefined;\r\n  @Input() disabledmaterial: Material | undefined;\r\n  @Input() outlinematerial: Material | undefined;\r\n  @Input() selectable?: InteractiveObjects;\r\n  @Input() stoppropagation = true;\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._labelmaterial = newvalue;\r\n  }\r\n\r\n  @Output() pressed = new EventEmitter<string>();\r\n  @Output() hover = new EventEmitter<boolean>();\r\n}\r\n","<flat-ui-base-button #parent [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n                     [text]=\"text\" [enabled]=\"enabled\"\r\n                     [width]=\"width\" [height]=\"height\"\r\n                     [buttonmaterial]=\"buttonmaterial\"\r\n                     [disabledmaterial]=\"disabledmaterial\"\r\n                     [outlinematerial]=\"outlinematerial\"\r\n                     [selectable]=\"selectable\"\r\n                     [stoppropagation]=\"stoppropagation\"\r\n                     (hover)=\"hover.next($event)\"\r\n                     (pressed)=\"pressed.next($event)\">\r\n\r\n  <ng-template #button let-parent=\"parent\">\r\n    <flat-ui-material-icon [appendTo]=\"parent\" [text]=\"text\" [labelmaterial]=\"labelmaterial\" [position]=\"[0, 0, 0.001]\"></flat-ui-material-icon>\r\n  </ng-template>\r\n\r\n</flat-ui-base-button>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { NgFor, NgIf } from \"@angular/common\";\r\n\r\nimport { Group, Material } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\n\r\nimport { FlatUIList, ListItem } from \"../list/list.component\";\r\nimport { FlatUIMaterialIcon } from \"../material-icon/material-icon.component\";\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\n\r\nexport interface MenuItem {\r\n  text: string;\r\n  icon?: string;\r\n  keycode: string;\r\n  enabled: boolean;\r\n  submenu?: Array<MenuItem>;\r\n  selected?: (item: MenuItem) => void;\r\n  color?: Material;  // icon color material\r\n  visible: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-menu',\r\n  exportAs: 'flatUIMenu',\r\n  templateUrl: './menu.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgtGroup,\r\n    FlatUIBaseButton,\r\n    FlatUIList,\r\n    FlatUIMaterialIcon,\r\n    FlatUILabel,\r\n  ]\r\n})\r\nexport class FlatUIMenu extends NgtObjectProps<Group> {\r\n  private _menuitems: Array<MenuItem> = [];\r\n  @Input()\r\n  get menuitems(): Array<MenuItem> { return this._menuitems }\r\n  set menuitems(newvalue: Array<MenuItem>) {\r\n    this._menuitems = newvalue;\r\n    this.list = newvalue.map(x => <ListItem>{ text: x.text, data: x });\r\n  }\r\n\r\n\r\n  @Input() width = 1;\r\n\r\n  @Input() rowheight = 0.1;\r\n  @Input() rowspacing = 0.01;\r\n  @Input() margin = 0.03;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() selected = new EventEmitter<MenuItem>();\r\n\r\n  protected list: Array<ListItem> = [];\r\n\r\n  get height(): number { return (this.rowheight + this.rowspacing) * this.menuitems.length + this.margin * 2 };\r\n\r\n  protected pressed(item: MenuItem) {\r\n    if (item.selected) item.selected(item);\r\n    this.selected.next(item);\r\n  }\r\n}\r\n","<flat-ui-list [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n              [enablehover]=\"true\" [list]=\"list\" [rowcount]=\"list.length\" [rowsize]=\"rowheight\" [margin]=\"margin\"\r\n              [width]=\"width\" [height]=\"height\" [selectable]=\"selectable\" [showpaging]=\"false\"\r\n              [vertical]=\"true\">\r\n\r\n  <ng-template #listItem let-list=\"list\" let-text=\"text\" let-width=\"width\" let-data=\"data\" let-index=\"index\" let-parent=\"parent\">\r\n    <ngt-group [appendTo]=\"parent\">\r\n      <flat-ui-base-button [selectable]=\"selectable\" [text]=\"text\" [width]=\"width\" (pressed)=\"pressed(data)\">\r\n        <ng-template #button let-parent=\"parent\">\r\n          <ngt-group [appendTo]=\"parent\" [position]=\"[0, 0, 0.001]\">\r\n            <flat-ui-material-icon [text]=\"data.icon\" [position]=\"[-width/2+0.05, 0, 0]\"></flat-ui-material-icon>\r\n            <flat-ui-label [text]=\"text\" [position]=\"[data.icon ? 0.12 : 0.05, 0, 0]\"></flat-ui-label>\r\n            <flat-ui-material-icon *ngIf=\"data.submenu\" [text]=\"'play_arrow'\" [position]=\"[width/2-0.05, 0, 0]\"></flat-ui-material-icon>\r\n          </ngt-group>\r\n        </ng-template>\r\n      </flat-ui-base-button>\r\n    </ngt-group>\r\n  </ng-template>\r\n\r\n</flat-ui-list>\r\n\r\n","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { NgFor, NgIf } from \"@angular/common\";\r\n\r\nimport { Group, Material, Vector3 } from \"three\";\r\n\r\nimport { NgtObjectPassThrough, NgtObjectProps } from \"@angular-three/core\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\n\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\nimport { FlatUIMaterialButton } from \"../material-button/material-button.component\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\n\r\nimport { MenuItem } from \"../menu/menu.component\";\r\n\r\ninterface MiniData {\r\n  position: Vector3,\r\n  menu: MenuItem,\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-menu-mini',\r\n  exportAs: 'flatUIMenuMini',\r\n  templateUrl: './menu-mini.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgtGroup,\r\n    NgtObjectPassThrough,\r\n    FlatUIMaterialButton,\r\n    FlatUILabel,\r\n    FlatUIButton,\r\n  ]\r\n})\r\nexport class FlatUIMenuMini extends NgtObjectProps<Group> {\r\n  private _menuitems: Array<MenuItem> = [];\r\n  @Input()\r\n  get menuitems(): Array<MenuItem> { return this._menuitems }\r\n  set menuitems(newvalue: Array<MenuItem>) {\r\n    this._menuitems = newvalue;\r\n    this.updatemenu();\r\n  }\r\n\r\n  private updatemenu() {\r\n    const list: Array<MiniData> = [];\r\n    this._menuitems.forEach((item, index) => {\r\n      const position = new Vector3((0.1 + this.margin) * index + 0.06, 0, 0.001);\r\n\r\n      list.push({ position, menu: item });\r\n    });\r\n\r\n    this.icons = list;\r\n  }\r\n\r\n  @Input() margin = 0.02;\r\n\r\n  @Input() buttonmaterial: Material | undefined;\r\n  @Input() disabledmaterial: Material | undefined;\r\n  @Input() outlinematerial: Material | undefined;\r\n  @Input() labelmaterial: Material | undefined;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n  @Input() stoppropagation = true;\r\n\r\n  @Output() selected = new EventEmitter<MenuItem>();\r\n\r\n\r\n  protected icons: Array<MiniData> = [];\r\n  protected text!: string;\r\n\r\n  public get width(): number { return (0.1 + this.margin) * this.menuitems.length + this.margin * 2 };\r\n\r\n  constructor(private cd: ChangeDetectorRef) { super(); }\r\n\r\n  protected hover(isover: boolean, data: MiniData) {\r\n    this.text = isover ? data.menu.text : '';\r\n    this.cd.detectChanges();\r\n  }\r\n\r\n  protected pressed(item: MenuItem) {\r\n    if (item.selected) item.selected(item);\r\n    this.selected.next(item);\r\n  }\r\n\r\n  public addmenuitem(menu: MenuItem) {\r\n    this.menuitems.push(menu);\r\n    this.updatemenu();\r\n  }\r\n\r\n  public removemenuitem(menu: MenuItem) {\r\n    this.menuitems = this.menuitems.filter(item => item != menu);\r\n  }\r\n}\r\n","<ngt-group [ngtObjectPassThrough]=\"this\">\r\n  <ng-container *ngFor=\"let item of icons\">\r\n\r\n    <flat-ui-material-button *ngIf=\"item.menu.icon\" [visible]=\"item.menu.visible\" [position]=\"item.position\"\r\n                             [enabled]=\"item.menu.enabled\" [text]=\"item.menu.icon\"\r\n                             [selectable]=\"selectable\" [stoppropagation]=\"stoppropagation\"\r\n                             [labelmaterial]=\"item.menu.color\" [buttonmaterial]=\"buttonmaterial\"\r\n                             [outlinematerial]=\"outlinematerial\" [disabledmaterial]=\"disabledmaterial\"\r\n                             (hover)=\"hover($event, item)\" (pressed)=\"pressed(item.menu)\">\r\n    </flat-ui-material-button>\r\n\r\n    <flat-ui-button *ngIf=\"!item.menu.icon\" [visible]=\"item.menu.visible\" [position]=\"item.position\"\r\n                    [labelmaterial]=\"item.menu.color\" [buttonmaterial]=\"buttonmaterial\"\r\n                    [outlinematerial]=\"outlinematerial\" [disabledmaterial]=\"disabledmaterial\"\r\n                    [text]=\"item.menu.keycode\" [width]=\"0.1\" [enabled]=\"item.menu.enabled\"\r\n                    [selectable]=\"selectable\" [stoppropagation]=\"stoppropagation\"\r\n                    (hover)=\"hover($event, item)\" (pressed)=\"pressed(item.menu)\">\r\n    </flat-ui-button>\r\n\r\n  </ng-container>\r\n\r\n  <flat-ui-label [text]=\"text\" [position]=\"[0.5, -0.1, 0.002]\" [labelmaterial]=\"labelmaterial\"></flat-ui-label>\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Optional, Output } from \"@angular/core\";\r\n\r\nimport { Material } from \"three\";\r\n\r\nimport { MenuItem } from \"../menu/menu.component\";\r\nimport { FlatUIMenuMini } from \"../menu-mini/menu-mini.component\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-menu-item',\r\n  exportAs: 'flatUIMenuItem',\r\n  template: '',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n})\r\nexport class FlatUIMenuItem implements OnInit, OnDestroy, MenuItem {\r\n  @Input() text = '';\r\n  @Input() icon: string | undefined;\r\n  @Input() keycode = '';\r\n  @Input() enabled = true;\r\n  @Input() submenu: MenuItem[] | undefined;\r\n  @Input() color: Material | undefined;\r\n  @Input() visible = true;\r\n\r\n  @Output() pressed = new EventEmitter<MenuItem>();\r\n\r\n  selected(item: MenuItem) {\r\n    this.pressed.next(item);\r\n  }\r\n\r\n  constructor(\r\n    @Optional() private menu: FlatUIMenuMini,\r\n  ) { }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.menu)\r\n      this.menu.removemenuitem(this);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (!this.menu) return;\r\n\r\n    this.menu.addmenuitem(this);\r\n  }\r\n}\r\n","import { Component, EventEmitter, HostListener, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Material, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtEvent, NgtObjectProps, NgtTriple } from \"@angular-three/core\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\n\r\nimport { roundedRect } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgFor } from \"@angular/common\";\r\nimport { FlatUIBaseButton } from \"../base-button/base-button.component\";\r\nimport { FlatUIMaterialIcon } from \"../material-icon/material-icon.component\";\r\n\r\n\r\nclass NumKeySetting {\r\n  constructor(public position: NgtTriple, public numkey: string) { }\r\n}\r\n\r\nclass NumIconSetting {\r\n  constructor(public position: NgtTriple, public icon: string, public keycode: string) { }\r\n}\r\n\r\n@Component({\r\n  selector: 'flat-ui-numpad',\r\n  exportAs: 'flatUINumpad',\r\n  templateUrl: './numpad.component.html',\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtSobaText,\r\n    FlatUIBaseButton,\r\n    FlatUIMaterialIcon,\r\n  ]\r\n})\r\nexport class FlatUINumpad extends NgtObjectProps<Mesh> {\r\n  @Input() text: string = ''\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material) {\r\n    this._popupmaterial = newvalue;\r\n  }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  @Output() pressed = new EventEmitter<string>();\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected keys: Array<NumKeySetting> = [];\r\n  protected icons: Array<NumIconSetting> = [];\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createNumpadGeometry();\r\n  }\r\n\r\n  createNumpadGeometry() {\r\n    const numpadwidth = 0.60;\r\n    const numpadheight = 0.50;\r\n\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, numpadwidth, numpadheight, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    const top = ['7', '8', '9', '-', 'content_copy']\r\n    const middle = ['4', '5', '6', '', 'content_cut']\r\n    const bottom = ['1', '2', '3', '', 'content_paste']\r\n    const last = [',', '0', '.', 'backspace', '']\r\n\r\n    const buttonwidth = 0.12\r\n    const z = 0.001;\r\n    const ytop = 0.18\r\n    const ymiddle = 0.06\r\n    const ybottom = -0.06\r\n    const ylast = -0.18\r\n\r\n    let width = (top.length - 1) * buttonwidth;\r\n    top.forEach((numkey, index) => {\r\n      if (numkey.length > 1) {\r\n        this.icons.push(new NumIconSetting([(-width / 2 + index * buttonwidth), ytop, z], numkey, 'ctrl+c'));\r\n      } else {\r\n        this.keys.push(new NumKeySetting([(-width / 2 + index * buttonwidth), ytop, z], numkey));\r\n      }\r\n    })\r\n\r\n    width = (middle.length - 1) * buttonwidth;\r\n    middle.forEach((numkey, index) => {\r\n      if (numkey.length > 1) {\r\n        this.icons.push(new NumIconSetting([(-width / 2 + index * buttonwidth), ymiddle, z], numkey, 'ctrl+x'));\r\n      } else {\r\n        this.keys.push(new NumKeySetting([(-width / 2 + index * buttonwidth), ymiddle, z], numkey));\r\n      }\r\n    })\r\n\r\n    width = (bottom.length - 1) * buttonwidth;\r\n    bottom.forEach((numkey, index) => {\r\n      if (numkey.length > 1) {\r\n        this.icons.push(new NumIconSetting([(-width / 2 + index * buttonwidth), ybottom, z], numkey, 'ctrl+v'));\r\n      } else {\r\n        this.keys.push(new NumKeySetting([(-width / 2 + index * buttonwidth), ybottom, z], numkey));\r\n      }\r\n    })\r\n\r\n    width = (last.length - 1) * buttonwidth;\r\n    last.forEach((numkey, index) => {\r\n      if (numkey.length > 1) {\r\n        this.icons.push(new NumIconSetting([(-width / 2 + index * buttonwidth), ylast, z], numkey, 'Backspace'));\r\n      } else {\r\n        this.keys.push(new NumKeySetting([(-width / 2 + index * buttonwidth), ylast, z], numkey));\r\n      }\r\n    })\r\n\r\n    this.selectable?.add(mesh);\r\n    mesh.addEventListener('click', (e: any) => { e.stop = true; });\r\n    mesh.addEventListener('raymissed', (e: any) => { this.missed(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  protected missed() {\r\n    this.close.next()\r\n  }\r\n\r\n  @HostListener('document:keydown', ['$event'])\r\n  private onKeyUp(event: KeyboardEvent) {\r\n    let keycode = event.key;\r\n    if (event.key == 'Backspace')\r\n      this.clicked(event.key);\r\n    else {\r\n      const key = this.keys.find(x => x.numkey == keycode);\r\n      if (key)\r\n        this.clicked(keycode);\r\n    }\r\n  }\r\n\r\n  protected clicked(keycode: string) {\r\n    if (!this.visible) return;\r\n\r\n    this.pressed.next(keycode);\r\n    if (keycode == 'Backspace') {\r\n      if (this.text.length > 0) {\r\n        this.text = this.text.slice(0, this.text.length - 1);\r\n        this.change.next(this.text);\r\n      }\r\n    }\r\n    else if (keycode == 'ctrl+v') {\r\n      navigator.clipboard.readText().then(text => {\r\n        this.text += text;\r\n        this.change.next(this.text);\r\n      });\r\n    }\r\n    else if (keycode == 'ctrl+c' || keycode == 'ctrl+x') {\r\n      navigator.clipboard.writeText(this.text).then(() => {\r\n        console.log(this.text, 'saved to clipboard');\r\n        if (keycode == 'ctrl+x') {\r\n          this.text = '';\r\n          this.change.next(this.text);\r\n        }\r\n      });\r\n    }\r\n    else {\r\n      this.text += keycode;\r\n      this.change.next(this.text);\r\n    }\r\n  }\r\n\r\n  protected ignore(mesh: Mesh, event: NgtEvent<MouseEvent>) {\r\n    if (event.object != mesh) return;\r\n    event.stopPropagation();\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            [geometry]=\"geometry\" [material]=\"popupmaterial\"\r\n            (click)=\"ignore(mesh.instance.value, $event)\" (pointermove)=\"$event.stopPropagation()\"\r\n            (ready)=\"meshready($event)\" (pointermissed)=\"missed()\">\r\n  </ngt-mesh>\r\n\r\n  <flat-ui-base-button *ngFor=\"let item of keys\" [selectable]=\"selectable\"\r\n                       [position]=\"item.position\" [width]=\"0.1\" [text]=\"item.numkey\" [enabled]=\"item.numkey!=''\"\r\n                       (pressed)=\"clicked($event)\">\r\n\r\n    <ng-template #button let-parent=\"parent\">\r\n      <ngt-soba-text [appendTo]=\"parent\" [text]=\"item.numkey\" [material]=\"labelmaterial\" [position]=\"[0, 0, 0.001]\"></ngt-soba-text>\r\n    </ng-template>\r\n\r\n  </flat-ui-base-button>\r\n\r\n  <flat-ui-base-button *ngFor=\"let item of icons\" [selectable]=\"selectable\"\r\n                       [position]=\"item.position\" [width]=\"0.1\"\r\n                       (pressed)=\"clicked(item.keycode)\">\r\n\r\n    <ng-template #button let-parent=\"parent\">\r\n      <flat-ui-material-icon [appendTo]=\"parent\" [text]=\"item.icon\" [labelmaterial]=\"labelmaterial\" [position]=\"[0, 0, 0.001]\"></flat-ui-material-icon>\r\n    </ng-template>\r\n  </flat-ui-base-button>\r\n\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Material, MathUtils, Mesh, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-progress-bar',\r\n  exportAs: 'flatUIProgressBar',\r\n  templateUrl: './progress-bar.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtMesh,\r\n  ]\r\n})\r\nexport class FlatUIProgressBar extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  private _value = 0;\r\n  @Input()\r\n  get value(): number { return this._value }\r\n  set value(newvalue: number) {\r\n    if (this.min > this.max) {\r\n      console.warn(`min ${this.min} is greater than max ${this.max}`);\r\n      let temp = this.min;\r\n      this.min = this.max;\r\n      this.max = temp;\r\n    }\r\n    this._value = MathUtils.clamp(newvalue, this.min, this.max);\r\n\r\n    this.renderprogress();\r\n  }\r\n\r\n  @Input() min = 0;\r\n  @Input() max = 10;\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n\r\n  @Input() progressheight = 0.08;\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _progressmaterial!: Material\r\n  @Input()\r\n  get progressmaterial(): Material {\r\n    if (this._progressmaterial) return this._progressmaterial;\r\n    return GlobalFlatUITheme.ProgressMaterial;\r\n  }\r\n  set progressmaterial(newvalue: Material) {\r\n    this._progressmaterial = newvalue;\r\n  }\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected progress!: BufferGeometry;\r\n  protected showprogress = true;\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createProgressGeometry();\r\n  }\r\n\r\n  createProgressGeometry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.025);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.geometry?.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.mesh = mesh;\r\n  }\r\n\r\n  private renderprogress() {\r\n\r\n    const width = MathUtils.mapLinear(this.value, this.min, this.max, 0, this.width - 0.02);\r\n\r\n    const shape = new Shape();\r\n    roundedRect(shape, 0, 0, width, this.progressheight, 0.025);\r\n\r\n    this.progress?.dispose();\r\n    this.progress = new ShapeGeometry(shape);\r\n\r\n    this.showprogress = width != 0;\r\n  }\r\n}\r\n","<ngt-mesh [name]=\"name\" [visible]=\"visible\"\r\n          [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n          [geometry]=\"geometry\" [material]=\"backgroundmaterial\" (ready)=\"meshready($event)\">\r\n\r\n  <ngt-mesh [visible]=\"showprogress\" [position]=\"[-width/2+0.01 , -progressheight/2, 0.001]\" [geometry]=\"progress\" [material]=\"progressmaterial\">\r\n  </ngt-mesh>\r\n</ngt-mesh>\r\n","import { Injectable } from \"@angular/core\";\r\n\r\nimport { Euler, Object3D, Quaternion, Vector3 } from \"three\";\r\n\r\nimport { UIInput } from \"./flat-ui-utils\";\r\nimport { ListItem } from \"./list/list.component\";\r\n\r\n\r\n\r\n\r\n@Injectable()\r\nexport class FlatUIInputService {\r\n  // input methods\r\n  method!: UIInput;\r\n  position = new Vector3();\r\n  rotation = new Euler();\r\n  scale = new Vector3(1, 1, 1);\r\n\r\n  changeinput(input: UIInput) {\r\n    if (this.method && this.method != input)\r\n      this.closeinput();\r\n    this.method = input;\r\n  }\r\n\r\n  closeinput() {\r\n    this.method.inputopen = false;\r\n  }\r\n\r\n  shownumpad = false;\r\n\r\n  opennumpad(object: Object3D, input: UIInput, text: string) {\r\n    this.changeinput(input);\r\n    this.showkeyboard = this.showlist = this.showpicker = false;\r\n\r\n    object.getWorldPosition(this.position);\r\n    this.position.y -= 0.35 * this.scale.y;\r\n    this.position.z += 0.1;\r\n\r\n    const quat = new Quaternion()\r\n    object.getWorldQuaternion(quat);\r\n    this.rotation.setFromQuaternion(quat);\r\n\r\n    this.method.text = text;\r\n    this.shownumpad = true;\r\n  }\r\n\r\n  showkeyboard = false;\r\n  allowenter = false;\r\n\r\n  openkeyboard(object: Object3D, input: UIInput, text: string) {\r\n    this.changeinput(input);\r\n    this.showlist = this.shownumpad = this.showpicker = false;\r\n\r\n    object.getWorldPosition(this.position);\r\n    this.position.x += 0.01;\r\n    this.position.y -= 0.35 * this.scale.y;\r\n    this.position.z += 0.1;\r\n\r\n    const quat = new Quaternion()\r\n    object.getWorldQuaternion(quat);\r\n    this.rotation.setFromQuaternion(quat);\r\n\r\n    this.method.text = text;\r\n    this.showkeyboard = true;\r\n  }\r\n\r\n  showpicker = false;\r\n\r\n  opencolor(object: Object3D, input: UIInput) {\r\n    this.changeinput(input);\r\n    this.showkeyboard = this.showlist = this.shownumpad = false;\r\n\r\n    object.getWorldPosition(this.position);\r\n    this.position.x -= 0.02;\r\n    this.position.y -= 0.42 * this.scale.y;\r\n    this.position.z += 0.1;\r\n\r\n    const quat = new Quaternion()\r\n    object.getWorldQuaternion(quat);\r\n    this.rotation.setFromQuaternion(quat);\r\n\r\n    this.showpicker = true;\r\n  }\r\n\r\n  showlist = false;\r\n  list!: Array<ListItem>;\r\n\r\n  openlist(object: Object3D, input: UIInput, list: Array<ListItem>, selected: string) {\r\n    this.changeinput(input);\r\n    this.showkeyboard = this.shownumpad = this.showpicker = false;\r\n\r\n    object.getWorldPosition(this.position);\r\n    this.position.x -= 0.02;\r\n    this.position.y -= 0.7 * this.scale.y;\r\n    this.position.z += 0.1;\r\n     \r\n\r\n    const quat = new Quaternion()\r\n    object.getWorldQuaternion(quat);\r\n    this.rotation.setFromQuaternion(quat);\r\n\r\n    this.list = list;\r\n    this.method.text = selected;\r\n\r\n    this.showlist = true;\r\n  }\r\n\r\n}\r\n","import { Component, EventEmitter, HostListener, Input, Output } from \"@angular/core\";\r\nimport { NgIf } from \"@angular/common\";\r\n\r\nimport { Material, Mesh, Vector3 } from \"three\";\r\nimport { make, NgtObjectProps } from \"@angular-three/core\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgtObjectPassThrough } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { FlatUILabel } from \"../label/label.component\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\nimport { FlatUIInputText } from \"../input-text/input-text.component\";\r\nimport { FlatUIInputService } from \"../flat-ui-input.service\";\r\nimport { FlatUIKeyboard } from \"../keyboard/keyboard.component\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-prompt',\r\n  exportAs: 'flatUIPrompt',\r\n  templateUrl: './prompt.component.html',\r\n  standalone: true,\r\n  providers: [FlatUIInputService],\r\n  imports: [\r\n    NgIf,\r\n    NgtMesh,\r\n    NgtObjectPassThrough,\r\n    NgtPlaneGeometry,\r\n    FlatUILabel,\r\n    FlatUIButton,\r\n    FlatUIInputText,\r\n    FlatUIKeyboard,\r\n  ]\r\n})\r\nexport class FlatUIPrompt extends NgtObjectProps<Mesh> {\r\n  @Input() title = '';\r\n  @Input() defaultvalue = '';\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width(): number { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = Math.max(0.8, newvalue);\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  private _popupmaterial!: Material\r\n  @Input()\r\n  get popupmaterial(): Material {\r\n    if (this._popupmaterial) return this._popupmaterial;\r\n    return GlobalFlatUITheme.PopupMaterial;\r\n  }\r\n  set popupmaterial(newvalue: Material | undefined) {\r\n    if (newvalue)\r\n      this._popupmaterial = newvalue;\r\n  }\r\n\r\n  @Output() result = new EventEmitter<string | undefined>();\r\n\r\n  protected height = 0.4;\r\n\r\n  constructor(public input: FlatUIInputService) {\r\n    super();\r\n  }\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n    this.input.scale = make(Vector3, this.scale);\r\n  }\r\n\r\n  protected pressed(keycode: string) {\r\n    if (keycode == 'Enter') {\r\n      this.result.next(this.defaultvalue);\r\n    }\r\n  }\r\n\r\n  @HostListener('document:keydown', ['$event'])\r\n  private onKeyUp(event: KeyboardEvent) {\r\n    if (event.key == 'Escape') {\r\n      this.result.next(undefined);\r\n    }\r\n  }\r\n\r\n}\r\n","<ngt-mesh [ngtObjectPassThrough]=\"this\" [material]=\"popupmaterial\">\r\n\r\n  <ngt-plane-geometry [args]=\"[width, height]\"></ngt-plane-geometry>\r\n\r\n  <flat-ui-label [text]=\"title\" [width]=\"width\" [position]=\"[0.02, 0.15, 0.001]\"></flat-ui-label>\r\n\r\n  <flat-ui-input-text #keyboard [text]=\"defaultvalue\" [selectable]=\"selectable\"\r\n                      [width]=\"width-0.04\" [position]=\"[0, 0.04, 0.001]\"\r\n                      (change)=\"defaultvalue=$event\"\r\n                      (openinput)=\"input.openkeyboard($event, keyboard, defaultvalue)\">\r\n  </flat-ui-input-text>\r\n\r\n  <flat-ui-button [text]=\"'OK'\" [width]=\"0.3\" [position]=\"[-0.2, -height/2+0.1, 0.001]\"\r\n                  [selectable]=\"selectable\" (pressed)=\"result.next(defaultvalue)\">\r\n  </flat-ui-button>\r\n\r\n  <flat-ui-button [text]=\"'Cancel'\" [width]=\"0.3\" [position]=\"[0.2, -height/2+0.1, 0.001]\"\r\n                  [selectable]=\"selectable\" (pressed)=\"result.next(undefined)\">\r\n  </flat-ui-button>\r\n\r\n  <flat-ui-keyboard *ngIf=\"input.showkeyboard\" [text]=\"input.method.text\" [allowenter]=\"true\"\r\n                    [position]=\"[0, -height, 0]\" [selectable]=\"selectable\"\r\n                    (change)=\"input.method.text = $event\" (pressed)=\"pressed($event)\" (close)=\"result.next(undefined)\">\r\n  </flat-ui-keyboard>\r\n</ngt-mesh>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Group } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { FlatUIRadioButton } from \"../radio-button/radio-button.component\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgIf } from \"@angular/common\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-radio-group',\r\n  exportAs: 'flatUIRadioGroup',\r\n  templateUrl: './radio-group.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n  ]\r\n})\r\nexport class FlatUIRadioGroup extends NgtObjectProps<Group> {\r\n  private _value: any;\r\n  @Input()\r\n  get value(): any { return this._value }\r\n  set value(newvalue: any) {\r\n    this._value = newvalue;\r\n\r\n    const button = this.buttons.find(item => item.value == newvalue);\r\n    if (button) {\r\n      this.selectButton(button);\r\n    }\r\n  }\r\n\r\n  @Input() enabled = true;\r\n\r\n  buttons: Array<FlatUIRadioButton> = [];\r\n\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<unknown>;\r\n\r\n  private selected?: FlatUIRadioButton;\r\n\r\n  private selectButton(newbutton: FlatUIRadioButton) {\r\n    if (this.selected)\r\n      this.selected.checked = false;\r\n\r\n    newbutton.checked = true;\r\n    this.change.next(newbutton.value);\r\n\r\n    this.selected = newbutton;\r\n  }\r\n\r\n  addbutton(button: FlatUIRadioButton) {\r\n    this.buttons.push(button);\r\n\r\n    button.name = this.name;\r\n    if (this.value == button.value) {\r\n      this.selectButton(button);\r\n    }\r\n  }\r\n\r\n  removebutton(button: FlatUIRadioButton) {\r\n    this.buttons = this.buttons.filter(item => item != button);\r\n  }\r\n}\r\n","<ngt-group>\r\n  <ng-container *ngIf=\"templateRef\"\r\n                [ngTemplateOutlet]=\"templateRef\"></ng-container>\r\n</ngt-group>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output } from \"@angular/core\";\r\n\r\nimport { Material, Mesh } from \"three\";\r\nimport { NgtEvent, NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { FlatUIRadioGroup } from \"../radio-group/radio-group.component\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtCircleGeometry, NgtRingGeometry } from \"@angular-three/core/geometries\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-radio-button',\r\n  exportAs: 'flatUIRadioButton',\r\n  templateUrl: './radio-button.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtMesh,\r\n    NgtRingGeometry,\r\n    NgtCircleGeometry,\r\n  ]\r\n})\r\nexport class FlatUIRadioButton extends NgtObjectProps<Mesh> implements AfterViewInit {\r\n  @Input() value: any;\r\n\r\n  private _checked = false;\r\n  @Input()\r\n  get checked(): boolean { return this._checked }\r\n  set checked(newvalue: boolean) {\r\n    this._checked = newvalue;\r\n    if (this.checkmesh)\r\n      this.checkmesh.visible = newvalue;\r\n    this.change.next(newvalue);\r\n  }\r\n\r\n\r\n  @Input() segments = 32;\r\n\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _radiomaterial!: Material\r\n  @Input()\r\n  get radiomaterial(): Material {\r\n    if (this._radiomaterial) return this._radiomaterial;\r\n    return GlobalFlatUITheme.CheckMaterial;\r\n  }\r\n  set radiomaterial(newvalue: Material) {\r\n    this._radiomaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _width = 0.1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.checkmesh) {\r\n      this.checkmesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n      this.checkmesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() change = new EventEmitter<boolean>();\r\n\r\n  setBackgroundColor() {\r\n    if (!this.mesh) return;\r\n\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  constructor(\r\n    @Optional() private radiogroup?: FlatUIRadioGroup\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    // add if part of a group\r\n    this.radiogroup?.addbutton(this);\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.checkmesh);\r\n\r\n    this.radiogroup?.removebutton(this);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.width;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  private checkmesh!: Mesh;\r\n\r\n  protected checkmeshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.doclicked(); e.stop = true; });\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; });\r\n\r\n    this.checkmesh = mesh;\r\n    this.checkmesh.visible = this.checked;\r\n  }\r\n\r\n  protected clicked(event: NgtEvent<MouseEvent>) {\r\n    event.stopPropagation();\r\n\r\n    this.doclicked();\r\n  }\r\n\r\n  private doclicked() {\r\n    if (!this.enabled || !this.visible || this.checked) return;\r\n\r\n    this.checked = true;\r\n    if (this.radiogroup)\r\n      this.radiogroup.value = this.value;\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.mesh.material = this.outlinematerial;\r\n    this.isover = true;\r\n  }\r\n\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.mesh.material = this.backgroundmaterial;\r\n    this.isover = false;\r\n  }\r\n\r\n}\r\n","<ngt-mesh [name]=\"name\" [visible]=\"visible\" \r\n          (click)=\"clicked($event)\" (pointermove)=\"over()\" (pointerout)=\"out()\"\r\n          [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\"\r\n          (ready)=\"meshready($event)\">\r\n\r\n  <ngt-ring-geometry [args]=\"[0.045, 0.05, segments]\"></ngt-ring-geometry>\r\n\r\n  <ngt-mesh [position]=\"[0, 0, 0.0001]\" (ready)=\"checkmeshready($event)\" [material]=\"radiomaterial\">\r\n    <ngt-circle-geometry [args]=\"[0.03,segments]\"></ngt-circle-geometry>\r\n  </ngt-mesh>\r\n</ngt-mesh>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\n\r\nimport { BufferGeometry, Line, Material, Mesh, Object3D, Shape, ShapeGeometry } from \"three\";\r\nimport { NgtObjectProps, NgtRadianPipe } from \"@angular-three/core\";\r\n\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, roundedRect, UIInput, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtLine } from \"@angular-three/core/lines\";\r\nimport { NgtSobaText } from \"@angular-three/soba/abstractions\";\r\nimport { NgtCircleGeometry } from \"@angular-three/core/geometries\";\r\n\r\n@Component({\r\n  selector: 'flat-ui-select',\r\n  exportAs: 'flatUISelect',\r\n  templateUrl: './select.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtRadianPipe,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtLine,\r\n    NgtCircleGeometry,\r\n    NgtSobaText,\r\n  ]\r\n})\r\nexport class FlatUISelect extends NgtObjectProps<Mesh> implements AfterViewInit, UIInput {\r\n  private _text = '';\r\n  @Input()\r\n  get text(): string { return this._text }\r\n  set text(newvalue: string) {\r\n    this._text = newvalue;\r\n    this.change.next(newvalue);\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  private _placeholder?: string;\r\n  @Input()\r\n  get placeholder(): string | undefined { return this._placeholder }\r\n  set placeholder(newvalue: string | undefined) {\r\n    this._placeholder = newvalue;\r\n    this.updatedisplaytext();\r\n  }\r\n\r\n  private updatedisplaytext() {\r\n    if (this.text == '' && this.placeholder) {\r\n      this.displaytext = this.placeholder;\r\n    }\r\n    else {\r\n      this.displaytext = this.text.substring(0, this.overflow * this.width);\r\n    }\r\n  }\r\n\r\n  @Input() overflow = 24;\r\n\r\n  private _enabled = true;\r\n  @Input()\r\n  get enabled(): boolean { return this._enabled }\r\n  set enabled(newvalue: boolean) {\r\n    this._enabled = newvalue;\r\n    if (this.mesh)\r\n      this.setBackgroundColor();\r\n  }\r\n\r\n\r\n  private _backgroundmaterial!: Material\r\n  @Input()\r\n  get backgroundmaterial(): Material {\r\n    if (this._backgroundmaterial) return this._backgroundmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set backgroundmaterial(newvalue: Material) {\r\n    this._backgroundmaterial = newvalue;\r\n  }\r\n\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  private _selectmaterial!: Material\r\n  @Input()\r\n  get selectmaterial(): Material {\r\n    if (this._selectmaterial) return this._selectmaterial;\r\n    return GlobalFlatUITheme.SelectMaterial;\r\n  }\r\n  set selectmaterial(newvalue: Material) {\r\n    this._selectmaterial = newvalue;\r\n  }\r\n\r\n  private _outlinematerial!: Material\r\n  @Input()\r\n  get outlinematerial(): Material {\r\n    if (this._outlinematerial) return this._outlinematerial;\r\n    return GlobalFlatUITheme.OutlineMaterial;\r\n  }\r\n  set outlinematerial(newvalue: Material) {\r\n    this._outlinematerial = newvalue;\r\n  }\r\n\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 0.1;\r\n  @Input()\r\n  get height() { return this._height }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  inputopen = false;\r\n  @Output() openinput = new EventEmitter<Object3D>();\r\n\r\n  @Output() change = new EventEmitter<string>();\r\n  @Output() enter = new EventEmitter<void>();\r\n\r\n  @Input() geometry!: BufferGeometry;\r\n\r\n  protected displaytext!: string;\r\n  protected outline!: BufferGeometry; // outline material\r\n\r\n  override preInit() {\r\n    super.preInit();\r\n\r\n    if (!this.geometry) this.createSelectGeoemetry();\r\n  }\r\n\r\n  createSelectGeoemetry() {\r\n    const flat = new Shape();\r\n    roundedRect(flat, 0, 0, this.width, this.height, 0.02);\r\n\r\n    this.geometry = new ShapeGeometry(flat);\r\n    this.geometry.center();\r\n\r\n    this.outline = new BufferGeometry().setFromPoints(flat.getPoints());\r\n    this.outline.center();\r\n  }\r\n\r\n  setBackgroundColor() {\r\n    if (this.enabled) {\r\n      this.mesh.material = this.backgroundmaterial;\r\n    }\r\n    else {\r\n      this.mesh.material = this.disabledmaterial;\r\n    }\r\n  }\r\n\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.selectable?.remove(this.mesh);\r\n\r\n    this.geometry.dispose();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = this.width;\r\n      e.height = this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private line!: Line;\r\n  lineready(line: Line) {\r\n    line.visible = false;\r\n    this.line = line;\r\n  }\r\n\r\n\r\n  private mesh!: Mesh;\r\n\r\n  protected meshready(mesh: Mesh) {\r\n    this.selectable?.add(mesh);\r\n\r\n    mesh.addEventListener('click', (e: any) => { this.enableinput(mesh); e.stop = true; });\r\n    mesh.addEventListener('pointermove', (e: any) => { this.over(); e.stop = true; });\r\n    mesh.addEventListener('pointerout', (e: any) => { this.out(); e.stop = true; });\r\n\r\n    this.mesh = mesh;\r\n    this.setBackgroundColor();\r\n  }\r\n\r\n  protected enableinput(mesh: Mesh) {\r\n    if (!this.enabled || !this.visible) return;\r\n\r\n    this.inputopen = true;\r\n    this.openinput.next(mesh);\r\n  }\r\n\r\n  private isover = false;\r\n  protected over() {\r\n    if (this.isover || !this.enabled) return;\r\n    this.line.visible = true;\r\n    this.isover = true;\r\n  }\r\n\r\n  protected out() {\r\n    if (!this.enabled) return;\r\n    this.line.visible = false;\r\n    this.isover = false;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <ngt-mesh #mesh\r\n            (click)=\"enableinput(mesh.instance.value)\" (pointermove)=\"over()\" (pointerout)=\"out()\"\r\n            [geometry]=\"geometry\"\r\n            (ready)=\"meshready($event)\">\r\n\r\n    <ngt-soba-text [text]=\"displaytext\"\r\n                   [material]=\"labelmaterial\"\r\n                   [anchorX]=\"'left'\" [fontSize]=\"0.07\"\r\n                   [position]=\"[-width/2+0.04, 0, 0.001]\">\r\n    </ngt-soba-text>\r\n\r\n    <ngt-mesh [position]=\"[width/2-0.06, 0, 0.002]\" [rotation]=\"[0, 0, 30 | radian]\" [material]=\"selectmaterial\">\r\n      <ngt-circle-geometry [args]=\"[0.03,3]\"></ngt-circle-geometry>\r\n    </ngt-mesh>\r\n\r\n  </ngt-mesh>\r\n\r\n  <ngt-line (ready)=\"lineready($event)\"\r\n            [geometry]=\"outline\" [material]=\"outlinematerial\"> </ngt-line>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Group, Material, Mesh } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { FlatUITab } from \"../tab/tab.component\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\nimport { HEIGHT_CHANGED_EVENT, LAYOUT_EVENT, WIDTH_CHANGED_EVENT } from \"../flat-ui-utils\";\r\nimport { InteractiveObjects } from \"../interactive-objects\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\nimport { NgtMesh } from \"@angular-three/core/meshes\";\r\nimport { NgtPlaneGeometry } from \"@angular-three/core/geometries\";\r\nimport { NgFor, NgIf } from \"@angular/common\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { FlatUIButton } from \"../button/button.component\";\r\n\r\nexport type FlatUITabHeaderPosition = 'above' | 'below';\r\n\r\n@Component({\r\n  selector: 'flat-ui-tab-group',\r\n  exportAs: 'flatUITabGroup',\r\n  templateUrl: './tab-group.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgFor,\r\n    NgIf,\r\n    NgTemplateOutlet,\r\n    NgtGroup,\r\n    NgtMesh,\r\n    NgtPlaneGeometry,\r\n    FlatUIButton,\r\n  ]\r\n})\r\nexport class FlatUITabGroup extends NgtObjectProps<Group> {\r\n  private _label: any;\r\n  @Input()\r\n  get label(): any { return this._label }\r\n  set label(newvalue: any) {\r\n    this._label = newvalue;\r\n\r\n    const tab = this.tabs.find(item => item.label == newvalue);\r\n    if (tab) {\r\n      this.selectTab(tab);\r\n    }\r\n  }\r\n\r\n  @Input() enabled = true;\r\n\r\n  @Input() tabheader: FlatUITabHeaderPosition = 'above';\r\n\r\n  get tabposition(): number {\r\n    if (this.tabheader == 'above')\r\n      return -this.tabheight / 2 + 0.01;\r\n    return this.tabheight / 2 - 0.01\r\n  }\r\n\r\n  get panelposition(): number {\r\n    if (this.tabheader == 'above')\r\n      return -this.tabheight / 2;\r\n    return this.tabheight / 2;\r\n  }\r\n  // content panel width and height\r\n  private _width = 1;\r\n  @Input()\r\n  get width() { return this._width }\r\n  set width(newvalue: number) {\r\n    this._width = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: WIDTH_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _height = 1;\r\n  @Input()\r\n  get height() {\r\n    return this.tabheight + this._height;\r\n  }\r\n  set height(newvalue: number) {\r\n    this._height = newvalue;\r\n    if (this.mesh) {\r\n      this.mesh.dispatchEvent({ type: HEIGHT_CHANGED_EVENT });\r\n    }\r\n  }\r\n\r\n  private _panelmaterial?: Material;\r\n  @Input()\r\n  get panelmaterial(): Material {\r\n    if (this._panelmaterial) return this._panelmaterial;\r\n    return GlobalFlatUITheme.PanelMaterial;\r\n  }\r\n  set panelmaterial(newvalue: Material) {\r\n    this._panelmaterial = newvalue;\r\n  }\r\n\r\n  @Input() tabheight = 0.15;\r\n\r\n  @Input() selectable?: InteractiveObjects;\r\n\r\n  @Output() change = new EventEmitter<any>();\r\n\r\n  protected mesh!: Mesh;\r\n\r\n  tabs: Array<FlatUITab> = [];\r\n\r\n\r\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<unknown>;\r\n\r\n  private selected?: FlatUITab;\r\n\r\n  ngAfterViewInit(): void {\r\n    this.mesh.addEventListener(LAYOUT_EVENT, (e: any) => {\r\n      e.width = Math.max(this.xoffset, this.width);\r\n      e.height = this.tabheight + this.height;\r\n      e.updated = true;\r\n    });\r\n  }\r\n\r\n  private selectTab(newtab: FlatUITab) {\r\n    if (this.selected)\r\n      this.selected.active = false;\r\n\r\n    newtab.active = true;\r\n    this.change.next(newtab.label);\r\n\r\n    // hide the panel when switching content.  Visible when layout called\r\n    if (this.mesh) {\r\n      this.mesh.userData['layout'] = true;  // hint to still layout even though invisible\r\n      this.mesh.visible = false;\r\n      this.templateRef = newtab.templateRef;\r\n      const timer = setTimeout(() => {\r\n        this.mesh.visible = true;\r\n        this.mesh.userData['layout'] = false;\r\n        clearTimeout(timer);\r\n      }, 100)\r\n    }\r\n\r\n    this.selected = newtab;\r\n  }\r\n\r\n  private xoffset = 0;\r\n\r\n  addtab(tab: FlatUITab) {\r\n    const dup = this.tabs.find(item => item.label == tab.label);\r\n    if (dup) console.warn('duplicate tab with label', tab.label);\r\n\r\n    this.tabs.push(tab);\r\n\r\n    // offset center of first tab\r\n    if (this.xoffset == 0) {\r\n      this.xoffset = -this.width / 2;\r\n    }\r\n    this.xoffset += tab.tabwidth / 2\r\n    tab.position.x = this.xoffset;\r\n    tab.position.y = this.height / 2 - this.tabheight / 2;\r\n    // move to the bottom of the panel\r\n    if (this.tabheader == 'below') tab.position.y = -tab.position.y;\r\n    this.xoffset += (tab.tabwidth / 2 + 0.01); // add small space between tabs\r\n\r\n    if (this.label == tab.label || tab.active) {\r\n      this.selectTab(tab);\r\n    }\r\n  }\r\n\r\n  removetab(tab: FlatUITab) {\r\n    this.tabs = this.tabs.filter(item => item != tab);\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <flat-ui-button *ngFor=\"let item of tabs\"\r\n                  [text]=\"item.text\" [width]=\"item.tabwidth\" [height]=\"tabheight\" [selectable]=\"selectable\" [enabled]=\"enabled && item.enabled\"\r\n                  [position]=\"item.position\"\r\n                  [buttonmaterial]=\"item.buttonmaterial\" [disabledmaterial]=\"item.disabledmaterial\" [labelmaterial]=\"item.labelmaterial\"\r\n                  (pressed)=\"item.pressed()\">\r\n\r\n    <ng-template let-parent=\"parent\">\r\n      <ngt-mesh [appendTo]=\"parent\" [position]=\"[0, tabposition, 0.001]\"\r\n                [material]=\"item.listselectmaterial\" (ready)=\"item.meshready($event)\">\r\n        <ngt-plane-geometry [args]=\"[item.tabwidth, 0.02]\"></ngt-plane-geometry>\r\n      </ngt-mesh>\r\n    </ng-template>\r\n  </flat-ui-button>\r\n\r\n  <ngt-mesh #content [position]=\"[0, panelposition, 0]\" (ready)=\"mesh = $event\" [material]=\"panelmaterial\">\r\n    <ngt-plane-geometry [args]=\"[width, height-tabheight]\"></ngt-plane-geometry>\r\n\r\n    <ng-container *ngIf=\"templateRef\"\r\n                  [ngTemplateOutlet]=\"templateRef\"\r\n                  [ngTemplateOutletContext]=\"{ parent: content.instance.value }\"></ng-container>\r\n  </ngt-mesh>\r\n\r\n</ngt-group>\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Optional, Output, TemplateRef } from \"@angular/core\";\r\n\r\nimport { Material, Mesh, Object3D } from \"three\";\r\nimport { NgtObjectProps } from \"@angular-three/core\";\r\n\r\nimport { GlobalFlatUITheme } from \"../flat-ui-theme\";\r\n\r\nimport { FlatUITabGroup } from \"../tab-group/tab-group.component\";\r\nimport { NgtGroup } from \"@angular-three/core/group\";\r\n\r\n\r\n@Component({\r\n  selector: 'flat-ui-tab',\r\n  exportAs: 'flatUITab',\r\n  templateUrl: './tab.component.html',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [\r\n    NgtGroup,\r\n  ]\r\n})\r\nexport class FlatUITab extends NgtObjectProps<Mesh> {\r\n  @Input() label: string = 'tab'\r\n\r\n  private _text!: string;\r\n  @Input()\r\n  get text(): string {\r\n    if (this._text) return this._text;\r\n    return this.label;\r\n  }\r\n  set text(newvalue: string) {\r\n    this._text = newvalue;\r\n\r\n    let text = this.label;\r\n    if (newvalue) text = newvalue;\r\n\r\n    this.displaytitle = text.substring(0, this.overflow * this.tabwidth);\r\n  }\r\n\r\n  @Input() overflow = 24;\r\n\r\n\r\n  private _active = false;\r\n  @Input()\r\n  get active(): boolean { return this._active }\r\n  set active(newvalue: boolean) {\r\n    this._active = newvalue;\r\n\r\n    if (this.mesh) {\r\n      this.mesh.visible = newvalue;\r\n    }\r\n    this.change.next(newvalue);\r\n  }\r\n\r\n  @Input() enabled = true;\r\n\r\n  @Input() tabwidth = 0.5; // tab width\r\n\r\n  private _buttonmaterial!: Material\r\n  @Input()\r\n  get buttonmaterial(): Material {\r\n    if (this._buttonmaterial) return this._buttonmaterial;\r\n    return GlobalFlatUITheme.ButtonMaterial;\r\n  }\r\n  set buttonmaterial(newvalue: Material) {\r\n    this._buttonmaterial = newvalue;\r\n  }\r\n\r\n  private _disabledmaterial!: Material\r\n  @Input()\r\n  get disabledmaterial(): Material {\r\n    if (this._disabledmaterial) return this._disabledmaterial;\r\n    return GlobalFlatUITheme.DisabledMaterial;\r\n  }\r\n  set disabledmaterial(newvalue: Material) {\r\n    this._disabledmaterial = newvalue;\r\n  }\r\n\r\n  private _labelmaterial!: Material\r\n  @Input()\r\n  get labelmaterial(): Material {\r\n    if (this._labelmaterial) return this._labelmaterial;\r\n    return GlobalFlatUITheme.LabelMaterial;\r\n  }\r\n  set labelmaterial(newvalue: Material) {\r\n    this._labelmaterial = newvalue;\r\n  }\r\n\r\n  private _listselectmaterial!: Material\r\n  @Input()\r\n  get listselectmaterial(): Material {\r\n    if (this._listselectmaterial) return this._listselectmaterial;\r\n    return GlobalFlatUITheme.ListSelectMaterial;\r\n  }\r\n  set listselectmaterial(newvalue: Material) {\r\n    this._listselectmaterial = newvalue;\r\n  }\r\n\r\n\r\n  @Output() change = new EventEmitter<boolean>();\r\n\r\n\r\n  protected displaytitle!: string\r\n\r\n  @ContentChild(TemplateRef) templateRef?: TemplateRef<unknown>;\r\n\r\n  constructor(\r\n    @Optional() private tabgroup?: FlatUITabGroup\r\n  ) {\r\n    super();\r\n  }\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n\r\n    // add if part of a group\r\n    this.tabgroup?.addtab(this);\r\n\r\n  }\r\n  override ngOnDestroy() {\r\n    super.ngOnDestroy();\r\n\r\n    this.tabgroup?.removetab(this);\r\n  }\r\n\r\n  private mesh!: Object3D;\r\n\r\n  meshready(mesh: Object3D) {\r\n    this.mesh = mesh;\r\n    this.mesh.visible = this.active;\r\n  }\r\n\r\n  pressed() {\r\n    if (!this.enabled || !this.visible || this.active) return;\r\n\r\n    this.active = true;\r\n    if (this.tabgroup)\r\n      this.tabgroup.label = this.label;\r\n  }\r\n}\r\n","<ngt-group [name]=\"name\" [visible]=\"visible\" \r\n           [position]=\"position\" [rotation]=\"rotation\" [scale]=\"scale\">\r\n\r\n  <!--rendering done in tab group-->\r\n\r\n</ngt-group>\r\n\r\n","import { Object3D } from \"three\";\r\n\r\n\r\nexport class InteractiveObjects {\r\n  private _list: Array<Object3D> = [];\r\n\r\n  get list(): Array<Object3D> { return this._list; }\r\n\r\n  add(...object: Object3D[]) {\r\n    this._list.push(...object);\r\n  }\r\n\r\n  remove(...object: Object3D[]) {\r\n    object.forEach(item => {\r\n      const index = this._list.findIndex(x => x == item);\r\n      if (index != undefined && index != -1)\r\n        this._list.splice(index, 1);\r\n    });\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { FlatUIBaseButton } from './base-button/base-button.component';\r\nimport { FlatUIButton } from './button/button.component';\r\nimport { FlatUIColorPicker } from './color-picker/color-picker.component';\r\nimport { FlatUIDragPanel } from './drag-panel/drag-panel.component';\r\nimport { FlatUIExpansionPanel } from './expansion-panel/expansion-panel.component';\r\nimport { HorizontalLayoutDirective } from './horizontal-layout.directive';\r\nimport { FlatUIIconButton } from './icon-button/icon-button.component';\r\nimport { FlatUIInputCheckbox } from './input-checkbox/input-checkbox.component';\r\nimport { FlatUIInputColor } from './input-color/input-color.component';\r\nimport { FlatUIInputNumber } from './input-number/input-number.component';\r\nimport { FlatUIInputSlider } from './input-slider/input-slider.component';\r\nimport { FlatUIInputText } from './input-text/input-text.component';\r\nimport { FlatUIInputToggle } from './input-toggle/input-toggle.component';\r\nimport { FlatUIKeyboard } from './keyboard/keyboard.component';\r\nimport { FlatUILabel } from './label/label.component';\r\nimport { FlatUIList } from './list/list.component';\r\nimport { FlatUINumpad } from './numpad/numpad.component';\r\nimport { FlatUIProgressBar } from './progress-bar/progress-bar.component';\r\nimport { FlatUIRadioButton } from './radio-button/radio-button.component';\r\nimport { FlatUISelect } from './select/select.component';\r\nimport { VerticalLayoutDirective } from './vertical-layout.directive';\r\nimport { FlatUIRadioGroup } from './radio-group/radio-group.component';\r\nimport { FlatUIIcon } from './icon/icon.component';\r\nimport { FlatUITab } from './tab/tab.component';\r\nimport { FlatUITabGroup } from './tab-group/tab-group.component';\r\nimport { FlatUIDataGrid } from './data-grid/data-grid.component';\r\nimport { FlatUIDataGridColumn } from './data-grid-column/data-grid-column.component';\r\nimport { FlatUIInputTextArea } from './input-textarea/input-textarea.component';\r\nimport { FlatUIPaginator } from './paginator/paginator.component';\r\nimport { FlatUIBasicImage } from './basic-image/basic-image.component';\r\nimport { FlatUIDivider } from './divider/divider.component';\r\nimport { FlatUIMaterialIcon } from './material-icon/material-icon.component';\r\nimport { FlatUIAvatar } from './avatar/avatar.component';\r\nimport { FlatUICard } from './card/card.component';\r\nimport { DraggableDirective, DropListDirective } from './drag-and-drop';\r\nimport { FlatUICardActions } from './card-actions/card-actions.component';\r\nimport { FlatUICardAction } from './card-action/card-action.component';\r\nimport { FlatUIMaterialButton } from './material-button/material-button.component';\r\nimport { FlatUIMenu } from './menu/menu.component';\r\nimport { FlatUIMenuMini } from './menu-mini/menu-mini.component';\r\nimport { FlatUIMenuItem } from './menu-item/menu-item.component';\r\nimport { FlatUIConfirm } from './confirm/confirm.component';\r\nimport { FlatUIPrompt } from './prompt/prompt.component';\r\n\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    FlatUIAvatar,\r\n    FlatUIBaseButton,\r\n    FlatUIBasicImage,\r\n    FlatUIButton,\r\n    FlatUICard,\r\n    FlatUICardAction,\r\n    FlatUICardActions,\r\n    FlatUIIcon,\r\n    FlatUIIconButton,\r\n    FlatUIDivider,\r\n    FlatUIInputCheckbox,\r\n    FlatUIInputColor,\r\n    FlatUIInputNumber,\r\n    FlatUIInputSlider,\r\n    FlatUIInputText,\r\n    FlatUIInputTextArea,\r\n    FlatUIInputToggle,\r\n    FlatUIProgressBar,\r\n    FlatUIRadioButton,\r\n    FlatUIRadioGroup,\r\n    FlatUISelect,\r\n    FlatUITab,\r\n    FlatUITabGroup,\r\n    FlatUILabel,\r\n    FlatUIMaterialIcon,\r\n    FlatUIMaterialButton,\r\n    FlatUIMenu,\r\n    FlatUIMenuMini,\r\n    FlatUIMenuItem,\r\n\r\n    FlatUIColorPicker,\r\n    FlatUIKeyboard,\r\n    FlatUIList,\r\n    FlatUINumpad,\r\n\r\n    FlatUIConfirm,\r\n    FlatUIPrompt,\r\n\r\n    FlatUIPaginator,\r\n    FlatUIDragPanel,\r\n    FlatUIExpansionPanel,\r\n\r\n    FlatUIDataGrid,\r\n    FlatUIDataGridColumn,\r\n\r\n    HorizontalLayoutDirective,\r\n    VerticalLayoutDirective,\r\n\r\n    DropListDirective,\r\n    DraggableDirective,\r\n  ],\r\n  exports: [\r\n    FlatUIAvatar,\r\n    FlatUIBaseButton,\r\n    FlatUIButton,\r\n    FlatUICard,\r\n    FlatUICardActions,\r\n    FlatUICardAction,\r\n    FlatUIIcon,\r\n    FlatUIIconButton,\r\n    FlatUIBasicImage,\r\n    FlatUIDivider,\r\n    FlatUIInputCheckbox,\r\n    FlatUIInputColor,\r\n    FlatUIInputNumber,\r\n    FlatUIInputSlider,\r\n    FlatUIInputText,\r\n    FlatUIInputTextArea,\r\n    FlatUIInputToggle,\r\n    FlatUILabel,\r\n    FlatUIMaterialIcon,\r\n    FlatUIMaterialButton,\r\n    FlatUIMenu,\r\n    FlatUIMenuMini,\r\n    FlatUIMenuItem,\r\n    FlatUIProgressBar,\r\n    FlatUIRadioButton,\r\n    FlatUIRadioGroup,\r\n    FlatUISelect,\r\n    FlatUITab,\r\n    FlatUITabGroup,\r\n\r\n    FlatUIColorPicker,\r\n    FlatUIKeyboard,\r\n    FlatUIList,\r\n    FlatUINumpad,\r\n\r\n    FlatUIConfirm,\r\n    FlatUIPrompt,\r\n\r\n    FlatUIDragPanel,\r\n    FlatUIExpansionPanel,\r\n\r\n    FlatUIDataGrid,\r\n    FlatUIDataGridColumn,\r\n    FlatUIPaginator,\r\n\r\n    HorizontalLayoutDirective,\r\n    VerticalLayoutDirective,\r\n\r\n    DropListDirective,\r\n    DraggableDirective,\r\n  ]\r\n})\r\nexport class Ng3FlatUiModule { }\r\n","/*\r\n * Public API Surface of ng3-flat-ui\r\n */\r\n\r\nexport * from './lib/avatar/avatar.component';\r\nexport * from './lib/button/button.component';\r\nexport * from './lib/base-button/base-button.component';\r\nexport * from './lib/icon/icon.component';\r\nexport * from './lib/card/card.component';\r\nexport * from './lib/card-actions/card-actions.component';\r\nexport * from './lib/card-action/card-action.component';\r\nexport * from './lib/color-picker/color-picker.component';\r\nexport * from './lib/confirm/confirm.component';\r\nexport * from './lib/data-grid/data-grid.component';\r\nexport * from './lib/data-grid-column/data-grid-column.component';\r\nexport * from './lib/drag-panel/drag-panel.component';\r\nexport * from './lib/divider/divider.component';\r\nexport * from './lib/expansion-panel/expansion-panel.component';\r\nexport * from './lib/icon-button/icon-button.component';\r\nexport * from './lib/basic-image/basic-image.component';\r\nexport * from './lib/input-checkbox/input-checkbox.component';\r\nexport * from './lib/input-color/input-color.component';\r\nexport * from './lib/input-number/input-number.component';\r\nexport * from './lib/input-slider/input-slider.component';\r\nexport * from './lib/input-text/input-text.component';\r\nexport * from './lib/input-textarea/input-textarea.component';\r\nexport * from './lib/input-toggle/input-toggle.component';\r\nexport * from './lib/input-toggle/input-toggle.component';\r\nexport * from './lib/keyboard/keyboard.component';\r\nexport * from './lib/label/label.component';\r\nexport * from './lib/list/list.component';\r\nexport * from './lib/material-icon/material-icon.component';\r\nexport * from './lib/material-button/material-button.component';\r\nexport * from './lib/menu/menu.component';\r\nexport * from './lib/menu-mini/menu-mini.component';\r\nexport * from './lib/menu-item/menu-item.component';\r\nexport * from './lib/numpad/numpad.component';\r\nexport * from './lib/paginator/paginator.component';\r\nexport * from './lib/progress-bar/progress-bar.component';\r\nexport * from './lib/prompt/prompt.component';\r\nexport * from './lib/radio-button/radio-button.component';\r\nexport * from './lib/radio-group/radio-group.component';\r\nexport * from './lib/select/select.component';\r\nexport * from './lib/tab/tab.component';\r\nexport * from './lib/tab-group/tab-group.component';\r\nexport * from './lib/flat-ui-theme';\r\nexport * from './lib/flat-ui-utils';\r\nexport * from './lib/horizontal-layout.directive';\r\nexport * from './lib/interactive-objects';\r\nexport * from './lib/layout';\r\nexport * from './lib/vertical-layout.directive';\r\nexport * from './lib/drag-and-drop';\r\n\r\nexport * from './lib/flat-ui-input.service';\r\n\r\nexport * from './lib/ng3-flat-ui.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FlatUIList","i2","i1.FlatUICard","i1.FlatUICardActions","i1","i1.FlatUIDataGrid","i1.FlatUIMenuMini","i1.FlatUIInputService","i1.FlatUIRadioGroup","i1.FlatUITabGroup"],"mappings":"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"}