{"version":3,"sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/JsonReferenceResolver.ts","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/components/data-status/data-status.component.ts","./src/app/components/data-status/data-status.component.html","./src/app/components/datamanager/clikclientconfiguration.component.ts","./src/app/components/datamanager/clikclientconfiguration.component.html","./src/app/components/datamanager/datamanager.component.ts","./src/app/components/datamanager/datamanager.component.html","./src/app/components/feature-hint-input/feature-hint-input.component.ts","./src/app/components/feature-hint-input/feature-hint-input.component.html","./src/app/components/home/home.component.ts","./src/app/components/login/login.component.ts","./src/app/components/login/login.component.html","./src/app/components/modals/busydialog/busydialog.component.html","./src/app/components/modals/busydialog/busydialog.component.ts","./src/app/components/nav/menu.component.html","./src/app/components/nav/menu.component.ts","./src/app/components/nav/nav.component.html","./src/app/components/nav/nav.component.ts","./src/app/components/profile/profile.component.ts","./src/app/components/profile/profile.component.html","./src/app/components/threed/threed.component.ts","./src/app/components/threed/threed.component.html","./src/app/interceptors/auth.interceptor.ts","./src/app/models/matrix-functions.ts","./src/app/services/auth/auth.directive.ts","./src/app/services/auth/auth.service.ts","./src/app/services/auth/clikCRM.service.ts","./src/app/services/auth/permission.service.ts","./src/app/services/init.service.ts","./src/app/services/user-session.service.ts","./src/app/types/clik/ClikProjectInfo.ts","./src/app/types/enums.ts","./src/environments/environment.prod.ts","./src/main.ts","ignored|/home/jenkins/workspace/Certusoft_clik-3d-web_master/client/clik3d-web/node_modules/seedrandom|crypto"],"names":[],"mappings":"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","file":"main-es2017.6dc1b2349596fbf53292.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\n// @ts-nocheck\n\n'use strict'\n// https://stackoverflow.com/questions/15312529/resolve-circular-references-from-json-object\nexport function resolveReferences(json, removeIds?) {\n if (typeof json === 'string') json = JSON.parse(json)\n\n var byid = {}, // all objects by id\n refs = [] // references to objects that could not be resolved\n json = (function recurse(obj, prop, parent) {\n if (typeof obj !== 'object' || !obj)\n // a primitive value\n return obj\n if (Object.prototype.toString.call(obj) === '[object Array]') {\n for (var i = 0; i < obj.length; i++)\n // check also if the array element is not a primitive value\n if (typeof obj[i] !== 'object' || !obj[i])\n // a primitive value\n continue\n else if ('$ref' in obj[i]) obj[i] = recurse(obj[i], i, obj)\n else obj[i] = recurse(obj[i], prop, obj)\n return obj\n }\n if ('$ref' in obj) {\n // a reference\n var ref = obj.$ref\n if (ref in byid) return byid[ref]\n // else we have to make it lazy:\n refs.push([parent, prop, ref])\n return\n } else if ('$id' in obj) {\n var id = obj.$id\n if (removeIds) {\n delete obj.$id // this strips the \"$id' field from the JSON.\n }\n byid[id] = obj\n }\n\n if ('$values' in obj)\n // an array\n obj = obj.$values.map(recurse)\n // a plain object\n else for (var prop1 in obj) obj[prop1] = recurse(obj[prop1], prop1, obj)\n\n return obj\n })(json) // run it!\n\n for (var i = 0; i < refs.length; i++) {\n // resolve previously unknown references\n var ref = refs[i]\n ref[0][ref[1]] = byid[ref[2]]\n // Notice that this throws if you put in a reference at top-level\n }\n return json\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { NgModule } from '@angular/core'\nimport { RouterModule, Routes } from '@angular/router'\nimport { HomeComponent } from './components/home/home.component'\nimport { LoginComponent } from './components/login/login.component'\nimport { ThreedComponent } from './components/threed/threed.component'\nimport { DataStatusComponent } from './components/data-status/data-status.component'\nimport { AuthService } from './services/auth/auth.service'\nimport { ProfileComponent } from './components/profile/profile.component'\nimport { DatamanagerComponent } from './components/datamanager/datamanager.component'\n\nconst routes: Routes = [\n { path: 'app/home', component: HomeComponent },\n { path: 'app/login', component: LoginComponent },\n { path: 'app/3d', component: ThreedComponent, canActivate: [AuthService] },\n { path: 'app/datastatus', component: DataStatusComponent, canActivate: [AuthService] },\n { path: 'app/profile', component: ProfileComponent, canActivate: [AuthService] },\n { path: 'app/datamanager', component: DatamanagerComponent, canActivate: [AuthService] },\n { path: '', redirectTo: 'app/home', pathMatch: 'full' },\n { path: '**', redirectTo: 'app/home', pathMatch: 'full' },\n]\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core'\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.less'],\n})\nexport class AppComponent {\n title = 'clik3d-web'\n}\n","\n\n\n\n\n \n\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { APP_INITIALIZER, NgModule } from '@angular/core'\nimport { BrowserModule } from '@angular/platform-browser'\n\nimport { AppRoutingModule } from './app-routing.module'\nimport { AppComponent } from './app.component'\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http'\nimport { LoginComponent } from './components/login/login.component'\nimport { ThreedComponent } from './components/threed/threed.component'\nimport { HomeComponent } from './components/home/home.component'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { FormlyModule } from '@ngx-formly/core'\nimport { FormlyBootstrapModule } from '@ngx-formly/bootstrap'\nimport { NavComponent } from './components/nav/nav.component'\nimport { MenuComponent } from './components/nav/menu.component'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner'\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\nimport { FeatureHintInputComponent } from './components/feature-hint-input/feature-hint-input.component'\nimport { Router } from '@angular/router'\nimport { AuthInterceptor } from './interceptors/auth.interceptor'\nimport { DataStatusComponent } from './components/data-status/data-status.component'\nimport { AuthDirective } from './services/auth/auth.directive'\nimport { AuthService } from './services/auth/auth.service'\nimport { InitService } from './services/init.service'\nimport { ProfileComponent } from './components/profile/profile.component'\nimport { DatamanagerComponent } from './components/datamanager/datamanager.component'\nimport { ClikclientconfigurationComponent } from './components/datamanager/clikclientconfiguration.component'\nimport { BusydialogComponent } from './components/modals/busydialog/busydialog.component'\n\n@NgModule({\n declarations: [\n AppComponent,\n LoginComponent,\n ThreedComponent,\n HomeComponent,\n NavComponent,\n MenuComponent,\n FeatureHintInputComponent,\n DataStatusComponent,\n AuthDirective,\n ProfileComponent,\n DatamanagerComponent,\n ClikclientconfigurationComponent,\n BusydialogComponent,\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n HttpClientModule,\n ReactiveFormsModule,\n FormlyModule.forRoot({ extras: { lazyRender: true } }),\n FormlyBootstrapModule,\n NgbModule,\n FormsModule,\n MatProgressSpinnerModule,\n BrowserAnimationsModule,\n ],\n entryComponents: [BusydialogComponent],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useFactory: function (authService: AuthService, router: Router) {\n return new AuthInterceptor(authService, router)\n },\n multi: true,\n deps: [AuthService, Router],\n },\n {\n provide: APP_INITIALIZER,\n useFactory: (initService: InitService) => () => initService.recoverSession(),\n multi: true,\n deps: [InitService],\n },\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core'\nimport { resolveReferences } from '../../../JsonReferenceResolver'\nimport { HttpClient } from '@angular/common/http'\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-data-status',\n templateUrl: './data-status.component.html',\n styleUrls: ['./data-status.component.less'],\n})\nexport class DataStatusComponent implements OnInit {\n constructor(private $http: HttpClient) {}\n\n public pendingList: any = []\n\n ngOnInit(): void {\n let vm = this\n\n vm.getPending()\n }\n\n getPending() {\n let vm = this\n vm.$http\n .get('/api/clik-data/pending')\n .toPromise()\n .then(\n function (response: any) {\n response = resolveReferences(response)\n vm.pendingList = response\n },\n function (response: any) {\n console.error('Error getting pending data...', response)\n }\n )\n }\n\n commitData() {\n let vm = this\n vm.$http\n .post('/api/clik-data/commit', {})\n .toPromise()\n .then(\n function (response: any) {\n vm.getPending()\n },\n function (response: any) {\n console.error('Error committing data...', response)\n }\n )\n }\n}\n","\n
\n \n \n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Type IDVersionType NameStatusInstance KeySubject IDSubmitted Date
{{ item.id.split('-')[0].toUpperCase() }}{{ item.version }}{{ item.cliktype.split('.').pop().replace('$', ':') }}{{ item.status }}{{ item.clikkey }}{{ item.lastSubjectId }}{{ item.submitteddate | date: 'yyyy-MM-dd HH:mm:ss' }}
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'\nimport * as _ from 'lodash'\nimport { ClikProjectInfo } from '../../types/clik/ClikProjectInfo'\nimport { HttpClient } from '@angular/common/http'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\n\n@Component({\n selector: 'app-clik-client-configuration',\n templateUrl: './clikclientconfiguration.component.html',\n styleUrls: ['./clikclientconfiguration.component.less'],\n})\nexport class ClikclientconfigurationComponent implements OnInit {\n @Output() changeEvent = new EventEmitter()\n\n constructor(private $http: HttpClient, private modalService: NgbModal) {}\n\n @Input() clikConfigurationName: any\n\n public info = new ClikProjectInfo()\n public options: any = {\n projectOptions: [],\n tagOptions: [],\n }\n\n ngOnInit(): void {\n let vm = this\n\n vm.info.configurationName = vm.clikConfigurationName\n\n Promise.all([vm.currentProject(), vm.currentTag()]).then(function (results: any[]) {\n vm.info.projectName = results[0].project_name\n vm.info.tagName = results[1].tag_name\n\n console.log(vm.info)\n\n if (vm.info.projectName) {\n vm.getTagOptions()\n }\n\n // Emit the initial state\n vm.changeEvent.emit(vm.info)\n })\n\n vm.getProjectOptions()\n }\n\n projects() {\n let vm = this\n return vm.$http\n .get('/api/clik/' + vm.clikConfigurationName + '/projects')\n .toPromise()\n .then(\n function (result: any) {\n console.debug('Got Good response for projects' + JSON.stringify(result))\n return result.records\n },\n function (result) {\n console.debug('Got Bad Result for projects')\n return []\n }\n )\n }\n\n tags(projectName: string) {\n let vm = this\n return vm.$http\n .get('/api/clik/' + vm.clikConfigurationName + '/tags?project_name=' + encodeURIComponent(projectName))\n .toPromise()\n .then(\n function (result: any) {\n console.debug('Got Good response for tags' + JSON.stringify(result))\n return result.records\n },\n function (result: any) {\n console.debug('Got Bad Result for tags')\n return []\n }\n )\n }\n\n currentProject(projectName?: string) {\n let vm = this\n let promise\n if (projectName) {\n promise = vm.$http\n .put('/api/clik/' + vm.clikConfigurationName + '/project/' + encodeURIComponent(projectName), null)\n .toPromise()\n } else {\n promise = vm.$http.get('api/clik/' + vm.clikConfigurationName + '/project').toPromise()\n }\n promise = promise.then(\n function (result: any) {\n console.debug('Got Good response for project ' + JSON.stringify(result))\n return result\n },\n function (result: any) {\n console.debug('Got Bad Result for project')\n vm.showError(result)\n return {}\n }\n )\n return promise\n }\n\n currentTag(tagName?: string | null) {\n let vm = this\n let promise\n if (tagName !== undefined) {\n promise = vm.$http\n .put('/api/clik/' + vm.clikConfigurationName + '/tag/' + encodeURIComponent(tagName || ''), null)\n .toPromise()\n } else {\n promise = vm.$http.get('api/clik/' + vm.clikConfigurationName + '/tag').toPromise()\n }\n promise = promise.then(\n function (result: any) {\n console.debug('Got Good response for tag ' + JSON.stringify(result))\n return result\n },\n function (result: any) {\n console.debug('Got Bad Result for tag')\n vm.showError(result)\n return {}\n }\n )\n return promise\n }\n\n projectChange() {\n let vm = this\n let val = vm.info.projectName\n if (val) {\n console.debug('Setting Project Name for configuration=' + vm.clikConfigurationName + ', project=' + val)\n //$scope.info.projectName = val;\n vm.currentProject(val).then(function (response) {\n vm.info.projectName = response.project_name\n\n // Clear the tag if the project changes\n vm.info.tagName = null\n vm.tagChange()\n\n vm.getTagOptions()\n })\n }\n return vm.info.projectName\n }\n\n getProjectOptions() {\n let vm = this\n vm.projects()\n .then(function (projects: any) {\n console.debug(\n 'Got Projects for configuration=' +\n vm.clikConfigurationName +\n ', projects=' +\n JSON.stringify(projects)\n )\n vm.options.projectOptions = projects\n return projects\n })\n .then(function (projects: any) {\n _.each(projects, function (proj) {\n proj.display_label = proj.project_name\n if (proj.project_description) {\n proj.display_label += ' - ' + proj.project_description\n }\n })\n // Push the 'no project' to the front.\n projects.unshift({ project_name: null, display_label: 'Default' })\n if (0 < projects.length) {\n if (!vm.info.projectName) {\n console.debug('selecting project: ' + projects[0].project_name)\n vm.info.projectName = projects[0].project_name // this value should already be in context\n }\n }\n vm.options.projectOptions = projects\n })\n }\n\n getTagOptions() {\n let vm = this\n vm.tags(vm.info.projectName)\n .then(function (tags: any) {\n console.debug('Got tags: ' + JSON.stringify(tags))\n _.each(tags, function (tag) {\n tag.display_label = tag.tag_name\n })\n vm.options.tagOptions = tags\n return tags\n })\n .then(function (tags: any) {\n // Push the 'no tag' to the front.\n tags.unshift({ tag_name: null, display_label: 'None' })\n if (0 < tags.length) {\n if (!vm.info.tagName) {\n console.debug('selecting tag: ' + tags[0].tag_name)\n vm.info.tagName = tags[0].tag_name // this value should already be in context\n }\n }\n vm.options.tagOptions = tags\n })\n }\n\n tagChange() {\n let vm = this\n let val = vm.info.tagName\n console.debug('Setting Tag Name ' + val)\n //vm.info.tagName = val;\n vm.currentTag(val).then(function (response) {\n vm.info.tagName = response?.tag_name\n vm.changeEvent.emit(vm.info)\n })\n return vm.info.tagName\n }\n\n showError(result: any) {\n let vm = this\n vm.modalService.open({\n component: 'BusydialogComponent',\n backdrop: 'static',\n resolve: {\n errorTitle: function () {\n return 'Error'\n },\n result: function () {\n return {\n value: new Promise(function (resolve, reject) {\n reject({\n error: 'Data Manager Error:',\n messages: [result.message],\n })\n }),\n }\n },\n },\n })\n }\n}\n","\n\n
\n

\n : {{ clikConfigurationName }}\n

\n
\n
\n \n \n
\n \n \n
\n
\n
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, EventEmitter, OnInit, Output } from '@angular/core'\nimport * as _ from 'lodash'\nimport { HttpClient } from '@angular/common/http'\nimport { ClikProjectInfo } from '../../types/clik/ClikProjectInfo'\n\n@Component({\n selector: 'app-datamanager',\n templateUrl: './datamanager.component.html',\n styleUrls: ['./datamanager.component.less'],\n})\nexport class DatamanagerComponent implements OnInit {\n @Output() changeEvent = new EventEmitter()\n\n constructor(private $http: HttpClient) {}\n\n public clikConfigurationNames = []\n\n ngOnInit(): void {\n let vm = this\n vm.configurations().then(function (result: any) {\n vm.clikConfigurationNames = result\n })\n }\n\n configurations() {\n let vm = this\n let promise = vm.$http\n .get('/api/clik/configurations')\n .toPromise()\n .then(\n function (result: any) {\n console.log('Got Good response for configurations' + result)\n return _.filter(result.records, function (rec) {\n // Filter out the cliksales entry, it's only there because some underlying backend code requires it.\n // Also filter out the CRM entry since that shouldn't be changed.\n // TODO: Control this with permisisons\n return !['cliksales', 'clikcrm'].includes(rec)\n })\n },\n function (result) {\n console.log('Got Bad Result for configurations')\n return []\n }\n )\n .then(function (value) {\n return value\n })\n return promise\n }\n\n emitChange(info: any) {\n let vm = this\n vm.changeEvent.emit(info)\n\n console.log('[Data Manager] Updating Project: ', info)\n }\n}\n","\n\n
\n

\n Select a Projects/Tag to use.\n

\n
\n
\n \n
\n
\n
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, ElementRef, Input, OnInit } from '@angular/core'\nimport {\n FeatureLanguageAutocompleteModel,\n FeatureLanguageSpec,\n ParsedHintNode,\n SyntacticHintNode,\n SyntaxHighlightingNode,\n} from '../../types/app'\nimport { HttpClient, HttpParams } from '@angular/common/http'\nimport { CancellationToken, editor, KeyCode, languages, Position, Range } from 'monaco-editor'\nimport { EntityEvalDetails, EntityType, threedMode, TokenCategory } from '../../types/enums'\nimport * as _ from 'lodash'\n\n@Component({\n selector: 'app-feature-hint-input',\n templateUrl: './feature-hint-input.component.html',\n styleUrls: ['./feature-hint-input.component.less'],\n})\nexport class FeatureHintInputComponent implements OnInit {\n constructor(private $http: HttpClient, private elRef: ElementRef) {}\n\n @Input() datum: any\n @Input() assemblyKey!: string\n @Input() partInfo: any\n @Input() mode: threedMode = threedMode.DATUM\n\n public datumPathMap: any = {}\n\n // Data structure containing the full specification for the feature hint language.\n // Will only be loaded once, then cached.\n public featureLanguageSpec!: FeatureLanguageSpec\n static featureLanguageRegistered: boolean = false\n private featureEditor!: editor.IStandaloneCodeEditor\n private parseDecorations: string[] = []\n private parseDecorationsHighlight: string[] = []\n // see app.d.ts for more info about FeatureLanguageAutocompleteModel\n private autocompleteModel: FeatureLanguageAutocompleteModel = {\n lastParsedSyntaxInfo: {\n // simple example to act as placeholder\n tokens: ['hole', ' ', 'pattern'],\n tokenStartIndices: [0, 4, 5],\n tokenCategories: [TokenCategory.ENTITY_DEF, TokenCategory.IGNORED, TokenCategory.ENTITY_DEF],\n },\n lastSuccessfulParseText: 'hole pattern',\n lastParsedSyntacticTree: {\n entityType: EntityType.HOLE_PATTERN,\n entityCharacterStart: 0,\n entityCharacterEnd: 12,\n treeNodeConstructionDocsIndex: -1, // basically just garbage filler from here on out\n leafNodeConstructionDocsIndex: -1,\n children: [],\n predicateTexts: undefined,\n completionHints: {\n predicateInsertionPt: 0,\n numPredicates: 0,\n predicateCompletionHints: [],\n maximizerCompletionHints: [],\n maximizerInsertionPts: [0],\n },\n maximizerDocLabels: undefined,\n maximizerTexts: undefined,\n predicateDocLabels: undefined,\n },\n gFunc: [[0, 12]], // for filler input \"hole pattern\" -> ''\n cursorFunc(position: number): Array {\n let min = Number.POSITIVE_INFINITY\n let max = Number.NEGATIVE_INFINITY\n for (let i = 0; i < this.gFunc.length; i++) {\n const value = this.gFunc[i]\n if (value[0] <= position && value[1] >= position) {\n min = Math.min(min, i)\n max = Math.max(max, i)\n }\n }\n return [min, max]\n },\n deleteChar(cursorPosBeforeChar: number): void {\n for (let i = 0; i < this.gFunc.length; i++) {\n const value = this.gFunc[i]\n if (cursorPosBeforeChar < value[0]) {\n value[0]--\n value[1]--\n } else if (cursorPosBeforeChar >= value[1]) {\n // do nothing\n } else {\n value[1]--\n }\n }\n },\n insertChar(cursorPosition: number): void {\n for (let i = 0; i < this.gFunc.length; i++) {\n const value = this.gFunc[i]\n if (cursorPosition < value[0]) {\n value[0]++\n value[1]++\n } else if (cursorPosition > value[1]) {\n // do nothing\n } else {\n value[1]++\n }\n }\n },\n setToIdentity(initCursorPositionCount: number): void {\n this.gFunc = []\n for (let i = 0; i < initCursorPositionCount; i++) {\n this.gFunc.push([i, i])\n }\n },\n }\n // retrieves all templates in langaugeSpec.entityDefinitions[targetType] that match the given regex.\n // Information regarding the position of [ENTITY] (i.e. [ARC] or [FACE]) substrings will also be returned.\n getMatchingTreeNodeTemplates(languageSpec: FeatureLanguageSpec, targetType: EntityType, regex: RegExp) {\n const res = []\n const typeDef = languageSpec.entityDefinitions[targetType]\n for (const treeOption of typeDef.treeNodeOptions) {\n if (treeOption.template.match(regex)) {\n // get entity types for args\n const regex = /\\[[A-Z_]+\\]/gm\n let regexMatch\n const args = []\n while ((regexMatch = regex.exec(treeOption.template)) !== null) {\n const m = regexMatch[0]\n args.push({\n index: regexMatch.index,\n length: regexMatch.length,\n type: EntityType[m.substring(1, m.length - 1) as keyof typeof EntityType],\n })\n }\n res.push({\n template: treeOption.template,\n args: args,\n })\n }\n }\n return res\n }\n\n ngOnInit(): void {\n this.datumPathMap[threedMode.DATUM] = 'featureDescription'\n this.datumPathMap[threedMode.SUBCAT] = 'featureDescription'\n\n this.initMonacoEditor()\n\n if (!this.featureLanguageSpec) {\n this.initLanguageSpec()\n }\n }\n\n initMonacoEditor(): void {\n // set up custom language\n this.registerMonacoFeatureLanguage()\n\n // set up the editor options\n this.featureEditor = editor.create(this.elRef.nativeElement.querySelector('.feature-text-editor'), {\n value: _.get(this.datum, this.datumPathMap[this.mode]), // the initial text\n minimap: { enabled: false }, // this is a bar on the right side that shows a super-zoomed-out view of the code\n theme: 'featureHintLangTheme', // syntax highlighting colors\n language: 'featureHintLang', // syntax highlighting\n 'semanticHighlighting.enabled': true, // we use semantic syntax highlighting\n glyphMargin: true, // for the check/x mark in the margin\n lineNumbersMinChars: 2, // reduce spacing in the line number div\n fixedOverflowWidgets: true, // to promote monaco playing nice with surround html\n wordBasedSuggestions: false, // prevent common word suggestions based on what was previously typed\n overflowWidgetsDomNode: document.querySelector('html body') as HTMLElement, // This places the hover popup in the dom directly, allowing us to control z-index issues\n })\n // see https://github.com/microsoft/monaco-editor/issues/2233\n document.querySelector('html body')?.classList.add('monaco-editor')\n\n // so we can access the component associated with the editor from inside syntax highlighting/hover events defined in registerMonacoFeatureLanguage()\n ;(this.featureEditor.getModel()).parentComponent = this\n\n // update datum.featureDescription when the editor is changed\n this.featureEditor.onDidChangeModelContent((event) => {\n _.set(this.datum, this.datumPathMap[this.mode], this.featureEditor.getValue())\n this.datum.descriptionDirty(true)\n if (this.autocompleteModel.lastParsedSyntacticTree) {\n // update autocomplete model's cursorMap\n for (let change of event.changes) {\n // a change consists of a range [change.rangeOffset, change.rangeOffset + change.rangeLength] replaced by change.text\n // rangeOffset is the cursor index immediately preceding the range\n for (let i = 0; i < change.rangeLength; i++) {\n this.autocompleteModel.deleteChar(change.rangeOffset)\n }\n for (let i = 0; i < change.text.length; i++) {\n this.autocompleteModel.insertChar(change.rangeOffset)\n }\n }\n }\n })\n\n // the ctl-space autocomplete trigger\n this.featureEditor.onKeyUp((event) => {\n if (event.keyCode === KeyCode.Space && event.ctrlKey) {\n this.featureEditor.trigger('', 'editor.action.triggerSuggest', {})\n }\n })\n }\n\n // this is called from inside the syntax highlighting procedure.\n // Perhaps this is not the best form, but it is convenient!\n onParseResult(\n parseSuccessful: boolean,\n parseText: string,\n syntacticTree: SyntacticHintNode,\n syntaxNode: SyntaxHighlightingNode\n ): void {\n if (this.featureEditor) {\n if (parseSuccessful) {\n // set check mark glyph\n this.parseDecorations = this.featureEditor.deltaDecorations(this.parseDecorations, [\n {\n range: new Range(1, 1, 1, 1),\n options: {\n isWholeLine: true,\n glyphMarginClassName: 'glyphicon glyphicon-ok monaco-margin-check-mark',\n glyphMarginHoverMessage: { value: 'parse successful' },\n },\n },\n ])\n } else {\n // set x mark glyph\n this.parseDecorations = this.featureEditor.deltaDecorations(this.parseDecorations, [\n {\n range: new Range(1, 1, 1, 1),\n options: {\n isWholeLine: true,\n glyphMarginClassName: 'glyphicon glyphicon-remove monaco-margin-x',\n glyphMarginHoverMessage: { value: 'parse unsuccessful' },\n },\n },\n ])\n }\n\n // reset autocomplete state\n if (parseSuccessful) {\n this.autocompleteModel.lastSuccessfulParseText = parseText\n this.autocompleteModel.lastParsedSyntacticTree = syntacticTree\n this.autocompleteModel.lastParsedSyntaxInfo = syntaxNode\n this.autocompleteModel.setToIdentity(parseText.length + 1)\n }\n }\n }\n\n // onParseResult deals purely with the syntactic structure. onEvaluationResult is for things dealing with\n // the logical structure, i.e. leaf failure indication\n onEvaluationResult(evaluationText: string, logicalStructure: ParsedHintNode): void {\n // check if the current text is equal to the string that was used for evaluation (could have been\n // changed in the meantime)\n if (evaluationText !== this.featureEditor.getValue()) {\n return\n }\n\n // maps line number to first character on the line\n const lineMap: number[] = [0]\n for (let i = 0; i < evaluationText.length; i++) {\n if (evaluationText.charAt(i) === '\\n') {\n lineMap.push(i + 1)\n }\n }\n const getRowColumn = (charIndex: number) => {\n let row = 0\n while (row < lineMap.length && lineMap[row] <= charIndex) {\n row++\n }\n row--\n return [row, charIndex - lineMap[row]]\n }\n const getRange = (charStartInclusive: number, charEndInclusive: number) => {\n const startRowCol = getRowColumn(charStartInclusive)\n const endRowCol = getRowColumn(charEndInclusive)\n // monaco rows/columns are 1-indexed\n return new Range(startRowCol[0] + 1, startRowCol[1] + 1, endRowCol[0] + 1, endRowCol[1] + 1)\n }\n\n // look for logical nodes that have multiple or no matches\n const decorations = []\n const nodeStack = [logicalStructure]\n while (nodeStack.length > 0) {\n const n = nodeStack.pop()\n if (n && !n.isLeaf) {\n // only consider leaf entities\n nodeStack.push(...n.children)\n continue\n }\n if (n && !n.entityEvaluationSuccessful) {\n const failureReason = n.entityEvaluationDetails\n let className = 'monaco-failed-entity-highlight-multiple-matches'\n let message = 'Multiple matches found for entity'\n if (failureReason === EntityEvalDetails.NO_MATCHES) {\n className = 'monaco-failed-entity-highlight-no-matches'\n message = 'No matches found for entity'\n }\n\n const decoration = {\n range: getRange(n.entityCharacterStart, n.entityCharacterEnd),\n options: {\n isWholeLine: false,\n className: className, // these class definitions can be found in styles.less\n hoverMessage: { value: message }, // The hover message will appear appended to any existing hover message\n },\n }\n decorations.push(decoration)\n }\n }\n\n // don't overwrite existing decorations\n const prevDecorations = this.parseDecorations.slice()\n this.parseDecorations = this.featureEditor.deltaDecorations(this.parseDecorationsHighlight, decorations)\n // add everything in this.parseDecorations NOT in prevDecorations to this.parseDecorationsHighlight\n while (this.parseDecorationsHighlight.length > 0) {\n this.parseDecorationsHighlight.pop()\n }\n for (let s of this.parseDecorations) {\n if (prevDecorations.indexOf(s) === -1) {\n this.parseDecorationsHighlight.push(s)\n }\n }\n }\n\n // featureEditor will not be initialized until after this call\n registerMonacoFeatureLanguage(): void {\n // only register the language once\n if (FeatureHintInputComponent.featureLanguageRegistered) {\n return\n }\n FeatureHintInputComponent.featureLanguageRegistered = true\n\n const fhc = this\n languages.register({ id: 'featureHintLang' })\n\n const typeMap: any = {}\n let j = 0\n for (let type in TokenCategory) {\n typeMap[type] = j++\n }\n\n // hover behavior\n languages.registerHoverProvider('featureHintLang', {\n provideHover(\n model: editor.ITextModel,\n position: Position,\n token: CancellationToken\n ): languages.ProviderResult {\n // parse model\n const editorText = model.getValue()\n const serverResult = FeatureHintInputComponent.parseFeatureHint(\n fhc.$http,\n editorText,\n fhc.assemblyKey,\n [-1, 0, 0],\n [0, 0, 1],\n '',\n true\n )\n // maps line number to first character on the line\n const lineMap: number[] = [0]\n for (let i = 0; i < editorText.length; i++) {\n if (editorText.charAt(i) === '\\n') {\n lineMap.push(i + 1)\n }\n }\n\n return {\n then(\n onfulfilled:\n | ((value: languages.Hover | undefined | null) => PromiseLike | TResult1)\n | undefined\n | null,\n onrejected: ((reason: any) => PromiseLike | TResult2) | undefined | null\n ): PromiseLike {\n return serverResult.then(\n (value) => {\n const parseRes: SyntacticHintNode = (value).data.syntacticStructure\n if (!onfulfilled) {\n // this will never happen\n return {}\n }\n // gotta convert the position to a useful form (i.e. char index)\n const charIndex = lineMap[position.lineNumber - 1] + position.column - 1 // line numbers are 1-indexed, and apparently so are columns\n // check in parseRes for the leaf-most node containing charIndex\n let leafMost = parseRes\n\n if (!leafMost) {\n // this can happen if the parse totally fails\n if (!onfulfilled) {\n return {}\n }\n // onrejected is for real errors\n return onfulfilled(null)\n }\n\n let moved = true\n while (moved) {\n moved = false\n for (let j = 0; j < leafMost.children.length; j++) {\n const child = leafMost.children[j]\n if (\n child.entityCharacterStart <= charIndex &&\n child.entityCharacterEnd >= charIndex\n ) {\n leafMost = child\n moved = true\n break\n }\n }\n }\n\n function linePos(char: number) {\n let line = 0\n while (lineMap[line] <= char && line < lineMap.length) {\n line++\n }\n line--\n // lineMap[line] is the first character of the line'th line\n return [line, char - lineMap[line]]\n }\n const start = linePos(leafMost.entityCharacterStart)\n const end = linePos(leafMost.entityCharacterEnd)\n\n return onfulfilled({\n contents: fhc.getHoverMarkup(leafMost),\n range: new Range(\n start[0] + 1, // line numbers are 1-indexed\n start[1] + 1, // and so are column numbers (whyyyy...?)\n end[0] + 1,\n end[1] + 1\n ),\n })\n },\n (reason) => {\n if (!onrejected) {\n return {}\n }\n return onrejected(null)\n }\n )\n },\n }\n },\n })\n\n // autocomplete provider\n languages.registerCompletionItemProvider('featureHintLang', {\n provideCompletionItems(\n model: editor.ITextModel,\n position: Position,\n context: languages.CompletionContext,\n token: CancellationToken\n ): languages.ProviderResult {\n // special case: no suggestions for comments\n const line = model.getLineContent(position.lineNumber)\n const commentIndex = line.indexOf('//')\n if (commentIndex >= 0 && commentIndex < position.column - 1) {\n return { suggestions: [] }\n }\n\n // \"slight\" hack here\n const autocompleteModel = ((model).parentComponent).autocompleteModel\n const cursorIndex = model.getOffsetAt(position)\n const cursorPreImage = autocompleteModel.cursorFunc(cursorIndex)\n // the trimmed version ignores whitespace (is strictly a subset of cursorPreImage)\n const cursorPreImageTrimmed = [cursorPreImage[0], cursorPreImage[1]]\n while (\n autocompleteModel.lastSuccessfulParseText.charAt(cursorPreImageTrimmed[0]).match(/\\s/g) &&\n cursorPreImageTrimmed[0] < cursorPreImageTrimmed[1]\n ) {\n cursorPreImageTrimmed[0]++\n }\n while (\n autocompleteModel.lastSuccessfulParseText.charAt(cursorPreImageTrimmed[1] - 1).match(/\\s/g) &&\n cursorPreImageTrimmed[0] < cursorPreImageTrimmed[1]\n ) {\n cursorPreImageTrimmed[1]--\n }\n\n const word = model.getWordUntilPosition(position)\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn,\n }\n\n // basically, we're going to come up with a bunch of rules for what we want autocomplete to look like in certain\n // circumstances, and then call it a day\n\n function getLeafMostEntityAndParent(tree: SyntacticHintNode, charIndex: number) {\n let parent = null\n let working = tree\n while (working.children.length > 0) {\n let foundChild = false\n for (let child of working.children) {\n if (child.entityCharacterStart <= charIndex && charIndex <= child.entityCharacterEnd) {\n parent = working\n working = child\n foundChild = true\n break\n }\n }\n if (!foundChild) {\n return [parent, working]\n }\n }\n return [parent, working]\n }\n\n function prettyPrintEntityName(type: EntityType) {\n let s = '' + type\n s = s\n .replace('_', ' ')\n .split(' ')\n .map((x) => x.toLocaleUpperCase())\n .join(' ')\n return s\n }\n\n let suggestions = []\n let noCasesApplicable = true\n\n // replacing a string like \"transform from normal [POINT] [DIRECTION]\" with a string matching the pattern that compiles, so\n // perhaps \"transform from normal vertex front\" in this example.\n const replaceEntityStringWithExample = (template: string) =>\n template\n .split(/((?=\\[[A-Z_]+\\])|(?<=\\[[A-Z_]+\\]))/g)\n .map((s) =>\n s.match(/\\[[A-Z_]+\\]/g)\n ? fhc.featureLanguageSpec.entityDefinitions[\n EntityType[s.substring(1, s.length - 1) as keyof typeof EntityType]\n ].simplestExample\n : s\n )\n .join('')\n .replace(/\\[number\\]/g, '3.14') // \"number\" is not an entity, but still need to replace it with something that compiles\n\n // Case 1: we've deleted exactly one entity (and possibly surrounding white space)\n // Desired behavior: suggest alternative entity definitions that fit in the empty space\n const [entityParent, entityTarget] = getLeafMostEntityAndParent(\n autocompleteModel.lastParsedSyntacticTree,\n cursorPreImageTrimmed[0]\n )\n if (\n entityTarget &&\n entityTarget.entityCharacterStart <= cursorPreImageTrimmed[0] &&\n (entityTarget.completionHints.predicateCompletionHints.length === 0 ||\n cursorPreImageTrimmed[0] <= entityTarget.completionHints.predicateInsertionPt) &&\n cursorPreImageTrimmed[1] === entityTarget.entityCharacterEnd\n ) {\n noCasesApplicable = false\n // Suggest replacement entities. Most of the time, we will just look for alternative definitions of the same\n // entity. However, there are a few situations where we may allow different entities. For example, \"center of arc\" may be replaced by \"center of obround\".\n const entitySuggestionTypes = [entityTarget.entityType]\n if (entityParent && entityParent.treeNodeConstructionDocsIndex >= 0) {\n // get language spec entry for this entity\n const entityTemplate =\n fhc.featureLanguageSpec.entityDefinitions[entityParent.entityType].treeNodeOptions[\n entityParent.treeNodeConstructionDocsIndex\n ].template\n const entityReplacementIndex = entityParent.children.indexOf(entityTarget)\n // get other entities matching template format\n let searchRegexStr = entityTemplate\n .split(/\\s+/gm)\n .join('\\\\s+')\n .replace(/(\\(|\\)|\\[|\\])/gm, '\\\\$1')\n // we need to replace the (entityReplacementIndex)th instance of \\[ENTITY\\] with \\[[A-Z_]+\\]\n const s = /\\\\\\[[A-Z_]+\\\\\\]/gm\n let res\n let count = 0\n let index = 0\n let length = 0\n while ((res = s.exec(searchRegexStr)) !== null) {\n if (count === entityReplacementIndex) {\n index = res.index\n length = res[0].length\n }\n count++\n }\n searchRegexStr =\n searchRegexStr.substring(0, index) +\n '\\\\[[A-Z_]+\\\\]' +\n searchRegexStr.substring(index + length, searchRegexStr.length)\n const matches = fhc.getMatchingTreeNodeTemplates(\n fhc.featureLanguageSpec,\n entityParent.entityType,\n new RegExp(searchRegexStr)\n )\n for (let match of matches) {\n const targetType = match.args[entityReplacementIndex].type\n if (entitySuggestionTypes.indexOf(targetType) === -1) {\n entitySuggestionTypes.push(targetType)\n }\n }\n }\n\n // now go look for suggestions in languageSpec\n for (let suggestionType of entitySuggestionTypes) {\n const templates = []\n const docs = []\n for (let leafNode of fhc.featureLanguageSpec.entityDefinitions[suggestionType]\n .leafNodeOptions) {\n templates.push(leafNode.template)\n docs.push(leafNode.shortDescription)\n }\n for (let treeNode of fhc.featureLanguageSpec.entityDefinitions[suggestionType]\n .treeNodeOptions) {\n templates.push(treeNode.template)\n docs.push(treeNode.shortDescription)\n }\n\n for (let i = 0; i < templates.length; i++) {\n let template = templates[i]\n const finalTemplate = replaceEntityStringWithExample(template)\n suggestions.push({\n label: { label: finalTemplate, description: prettyPrintEntityName(suggestionType) },\n kind: languages.CompletionItemKind.Function,\n documentation: docs[i],\n insertText: finalTemplate,\n range: range, // will be redefined in a bit\n })\n }\n }\n }\n\n // case 2: The text is empty or close enough to it\n if (\n model.getValue().length === cursorIndex &&\n model\n .getValueInRange({\n startColumn: 1,\n startLineNumber: 1,\n endColumn: word.startColumn,\n endLineNumber: position.lineNumber,\n })\n .trim().length === 0\n ) {\n noCasesApplicable = false\n // add all entities as options\n const templates = []\n const docs = []\n const types = []\n for (let entityType in EntityType) {\n const t: EntityType = EntityType[entityType as keyof typeof EntityType]\n const def = fhc.featureLanguageSpec.entityDefinitions[t]\n for (let leaf of def.leafNodeOptions) {\n templates.push(leaf.template)\n docs.push(leaf.shortDescription)\n types.push(t)\n }\n for (let tree of def.treeNodeOptions) {\n templates.push(tree.template)\n docs.push(tree.shortDescription)\n types.push(t)\n }\n }\n suggestions = []\n for (let i = 0; i < templates.length; i++) {\n let template = templates[i]\n const finalTemplate = replaceEntityStringWithExample(template)\n suggestions.push({\n label: { label: finalTemplate, description: prettyPrintEntityName(types[i]) },\n kind: languages.CompletionItemKind.Function,\n documentation: docs[i],\n insertText: finalTemplate,\n range: range, // will be redefined in a bit\n })\n }\n }\n\n // case 3: the pre-image is contained within the predicates of an entity\n // In the case of \"arc \", that is after the end of the entity, which means we'll need special handling to find any entities separated\n // by only ignored tokens from the cursor pre-image.\n let leftIgnoredCursorPos = cursorIndex\n let leftToken = -1\n let index = 0\n while (\n index < autocompleteModel.lastParsedSyntaxInfo.tokenStartIndices.length &&\n autocompleteModel.lastParsedSyntaxInfo.tokenStartIndices[index] < leftIgnoredCursorPos\n ) {\n index++\n }\n leftToken = index - 1\n while (\n leftToken >= 0 &&\n autocompleteModel.lastParsedSyntaxInfo.tokenCategories[leftToken] === TokenCategory.IGNORED\n ) {\n leftToken--\n }\n const goalToken = leftToken + 1\n if (goalToken < autocompleteModel.lastParsedSyntaxInfo.tokens.length) {\n leftIgnoredCursorPos = Math.min(\n cursorIndex,\n autocompleteModel.lastParsedSyntaxInfo.tokenStartIndices[goalToken]\n )\n }\n\n const lCursorPITrimmed = autocompleteModel.cursorFunc(leftIgnoredCursorPos)\n while (\n autocompleteModel.lastSuccessfulParseText.charAt(lCursorPITrimmed[0]).match(/\\s/g) &&\n lCursorPITrimmed[0] < lCursorPITrimmed[1]\n ) {\n lCursorPITrimmed[0]++\n }\n while (\n autocompleteModel.lastSuccessfulParseText.charAt(lCursorPITrimmed[1] - 1).match(/\\s/g) &&\n lCursorPITrimmed[0] < lCursorPITrimmed[1]\n ) {\n lCursorPITrimmed[1]--\n }\n let [lEntityParent, lEntityTarget] = getLeafMostEntityAndParent(\n autocompleteModel.lastParsedSyntacticTree,\n lCursorPITrimmed[0]\n )\n if (\n lEntityTarget &&\n (lEntityTarget.completionHints.maximizerCompletionHints.length > 0 ||\n lEntityTarget.completionHints.predicateCompletionHints.length > 0)\n ) {\n // there are predicates possible, and we are at a leaf node\n // Check if the cursor pre image is contained within the predicate range.\n let containsConnective = false\n let connectiveIndex = -1\n let connectiveLength = -1\n // length - 1 because there is a look ahead below to skip to the next connective token\n for (let i = 0; i < autocompleteModel.lastParsedSyntaxInfo.tokens.length - 1; i++) {\n const index = autocompleteModel.lastParsedSyntaxInfo.tokenStartIndices[i]\n const token = autocompleteModel.lastParsedSyntaxInfo.tokens[i]\n let j = i + 1\n // skip to next connective token\n while (\n autocompleteModel.lastParsedSyntaxInfo.tokenCategories[j] != TokenCategory.CONNECTIVE &&\n j < autocompleteModel.lastParsedSyntaxInfo.tokens.length\n ) {\n j++\n }\n if (j >= autocompleteModel.lastParsedSyntaxInfo.tokens.length) {\n break\n }\n const nextIndex = autocompleteModel.lastParsedSyntaxInfo.tokenStartIndices[j]\n const nextToken = autocompleteModel.lastParsedSyntaxInfo.tokens[j]\n if (\n index >= lEntityTarget.entityCharacterStart &&\n nextIndex < lEntityTarget.entityCharacterEnd\n ) {\n // a token is either completely contained within an entity or completely outside\n const ntLower = nextToken.toLocaleLowerCase()\n if (token.toLocaleLowerCase() === 'that' && (ntLower === 'has' || ntLower == 'is')) {\n containsConnective = true\n connectiveIndex = index\n connectiveLength = ntLower === 'has' ? nextIndex - index + 3 : nextIndex - index + 2\n }\n }\n }\n\n let acceptableStart = lEntityTarget.completionHints.predicateInsertionPt\n let acceptableEnd = containsConnective ? connectiveIndex : lEntityTarget.entityCharacterEnd\n if (\n isFinite(lCursorPITrimmed[0]) &&\n lCursorPITrimmed[0] >= acceptableStart &&\n lCursorPITrimmed[1] <= acceptableEnd\n ) {\n noCasesApplicable = false\n // use predicate hints as suggestions\n for (let predicateHint of lEntityTarget.completionHints.predicateCompletionHints) {\n for (let option of predicateHint.possibleTemplates) {\n suggestions.push({\n label: {\n label: option,\n description: 'Predicate: ' + prettyPrintEntityName(lEntityTarget.entityType),\n },\n kind: languages.CompletionItemKind.Function,\n documentation: predicateHint.label,\n insertText: option,\n range: range, // will be redefined in a bit\n })\n }\n }\n // add \"that is\"/\"that has\" suggestion when applicable\n if (\n lCursorPITrimmed[1] === acceptableEnd &&\n !containsConnective &&\n lEntityTarget.completionHints.maximizerCompletionHints.length > 0\n ) {\n noCasesApplicable = false\n for (let connective of ['that is', 'that has']) {\n suggestions.push({\n label: {\n label: connective,\n description: 'Connective: ' + prettyPrintEntityName(lEntityTarget.entityType),\n },\n kind: languages.CompletionItemKind.Function,\n documentation: 'predicate/maximizer connective',\n insertText: connective,\n range: range, // will be redefined in a bit\n })\n }\n }\n }\n\n // case 4: maximizer completions\n if (containsConnective && lEntityTarget.completionHints.maximizerCompletionHints.length > 0) {\n acceptableStart = connectiveIndex + connectiveLength\n acceptableEnd = lEntityTarget.entityCharacterEnd\n if (\n isFinite(lCursorPITrimmed[0]) &&\n lCursorPITrimmed[0] >= acceptableStart &&\n lCursorPITrimmed[1] <= acceptableEnd\n ) {\n noCasesApplicable = false\n for (let maximizerHint of lEntityTarget.completionHints.maximizerCompletionHints) {\n for (let option of maximizerHint.possibleTemplates) {\n suggestions.push({\n label: {\n label: option,\n description:\n 'Maximizer: ' + prettyPrintEntityName(lEntityTarget.entityType),\n },\n kind: languages.CompletionItemKind.Function,\n documentation: maximizerHint.label,\n insertText: option,\n range: range, // will be redefined in a bit\n })\n }\n }\n }\n }\n }\n\n // case 5: we didn't come up with any suggestions, time to guess random entity definitions\n if (suggestions.length === 0 && noCasesApplicable) {\n const templates = []\n const docs = []\n const types = []\n for (let entityType in EntityType) {\n const t: EntityType = EntityType[entityType as keyof typeof EntityType]\n const def = fhc.featureLanguageSpec.entityDefinitions[t]\n for (let leaf of def.leafNodeOptions) {\n templates.push(leaf.template)\n docs.push(leaf.shortDescription)\n types.push(t)\n }\n for (let tree of def.treeNodeOptions) {\n templates.push(tree.template)\n docs.push(tree.shortDescription)\n types.push(t)\n }\n }\n for (let i = 0; i < templates.length; i++) {\n let template = templates[i]\n const finalTemplate = replaceEntityStringWithExample(template)\n suggestions.push({\n label: { label: finalTemplate, description: prettyPrintEntityName(types[i]) },\n kind: languages.CompletionItemKind.Function,\n documentation: docs[i],\n insertText: finalTemplate,\n range: range, // will be redefined in a bit\n })\n }\n }\n\n const textToCursor = model.getValueInRange({\n startColumn: 1,\n endColumn: position.column,\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n })\n for (let suggestion of suggestions) {\n // compute ideal range for suggestion (suggestions might be multiple words)\n const suggestionText = suggestion.insertText\n // We're looking for the position in the text editor which marks the beginning of the suggestion insertion range.\n // Example 1:\n // current text: bix box box\n // suggestion: box box box\n // best insertion: replace \"box box\" with \"box box box\"\n // Example 2:\n // current text: aaabbb\n // suggestion: bb\n // best insertion: replace last \"bb\" with \"bb\" (i.e. do nothing)\n // Example 3:\n // current text: the quick brown fox jum\n // suggestion: quickly jumped\n // best insertion: replace \"jum\" with \"quickly jumped\"\n // Thus we are looking for the largest i such that currentText.substring(currentText.length - i, currentText.length) is\n // a substring of suggestion, and that currentText.substring(currentText.length - i, currentText.length) does not start with whitespace!\n let workingPos = textToCursor.length - 1\n if (textToCursor.length == 0 || textToCursor.trim().length === 0) {\n continue // leave as default, the current line is empty\n }\n const insertArr = []\n for (let i = 0; i < suggestionText.length; i++) {\n if (suggestionText.charAt(i) === textToCursor.charAt(workingPos)) {\n insertArr.push([i, i])\n }\n }\n if (insertArr.length === 0) {\n continue // leave the range as the default, there are no matches in suggestion\n }\n let hasActiveInsertPt = true\n workingPos--\n while (hasActiveInsertPt && workingPos >= 0) {\n hasActiveInsertPt = false\n for (let i = 0; i < insertArr.length; i++) {\n const insertOption = insertArr[i]\n // this first condition makes sure to only extend options which are so far fully matching\n if (\n insertOption[0] === insertOption[1] - (textToCursor.length - 2 - workingPos) &&\n suggestionText.charAt(insertOption[0] - 1) === textToCursor.charAt(workingPos)\n ) {\n insertOption[0]--\n hasActiveInsertPt = true\n }\n }\n workingPos--\n }\n\n let maxLength = -1\n for (let i = 0; i < insertArr.length; i++) {\n // trim off any whitespace from the beginning of options\n while (suggestionText.charAt(insertArr[i][0]).match(/\\s/g)) {\n insertArr[i][0]++\n }\n maxLength = Math.max(maxLength, insertArr[i][1] - insertArr[i][0] + 1)\n }\n\n const startCol = Math.min(word.startColumn, position.column - maxLength)\n suggestion.range = {\n startColumn: startCol,\n endColumn: position.column,\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n }\n }\n\n return { suggestions: suggestions }\n },\n })\n\n // Semantic syntax highlighting\n languages.registerDocumentSemanticTokensProvider('featureHintLang', {\n getLegend(): languages.SemanticTokensLegend {\n const types: string[] = []\n for (const type in TokenCategory) {\n types.push(type)\n }\n return {\n tokenTypes: types, // these are the token categories that receive different colors\n tokenModifiers: [], // no necessary modifiers\n }\n },\n provideDocumentSemanticTokens(\n model: editor.ITextModel,\n lastResultId: string | null,\n token: CancellationToken\n ): languages.ProviderResult {\n const editorText = model.getValue()\n // parse the text\n const serverResult = FeatureHintInputComponent.parseFeatureHint(\n fhc.$http,\n editorText,\n fhc.assemblyKey,\n [-1, 0, 0],\n [0, 0, 1],\n '',\n true\n )\n const lineBreakPos: number[] = []\n for (let i = 0; i < editorText.length; i++) {\n if (editorText.charAt(i) === '\\n') {\n lineBreakPos.push(i)\n }\n }\n\n return {\n // There's some real promise hocus-pocus going on here.\n // So the monaco library will call this \"then\" function like so:\n // result = await provideDocumentSemanticTokens(model, lastResultId, token);\n // You can check out the source here: https://github.com/microsoft/vscode/blob/54dec24a4d1e67dc6cb7fae0e6119dc84e0fab92/src/vs/editor/common/services/getSemanticTokens.ts\n // Why is it that onfulfilled returns a promise? Great question... probably so we can do something like the following\n then: function (\n onfulfilled:\n | ((\n value: languages.SemanticTokens | languages.SemanticTokensEdits | undefined | null\n ) => PromiseLike | TResult1)\n | undefined\n | null,\n onrejected: ((reason: any) => PromiseLike | TResult2) | undefined | null\n ): PromiseLike {\n return serverResult.then(\n (value) => {\n const parseRes: SyntaxHighlightingNode = (value).data.syntaxHighlighting\n if (!onfulfilled) {\n // this will never happen\n return {}\n }\n\n // This is pretty much a bald hack... but it works!\n ;((model).parentComponent).onParseResult(\n (value).data.parseSuccessful,\n editorText,\n (value).data.syntacticStructure,\n (value).data.syntaxHighlighting\n )\n\n // this data contains packed 5-tuples of integers (a1, b1, c1, d1, e1, a2, b2, c2, d2, e2, ... )\n // such that\n // - ai is a line number, offset from a(i-1)\n // - bi is a column number, offset from b(i-1) (except when on new line, then offset from 0)\n // - ci is the token length\n // - di is the index in legend.tokenTypes of the token\n // - ei is the index in legend.tokenModifiers of the token\n // There are some examples here: https://authzed.com/blog/syntax-and-semantics/\n\n // Luckily, our parse data contained in parseRes is somewhat similar; we just need to figure out the line/column numbers from\n // the tokenStartIndices\n const data: number[] = []\n let prevTokenStartIndex = 0\n let nextLineBreakIndex = 0\n for (let i = 0; i < parseRes.tokens.length; i++) {\n // ignore tokens that are white space\n if (parseRes.tokens[i].trim().length === 0) {\n continue\n }\n const tokenStart = parseRes.tokenStartIndices[i]\n // determine how many line breaks are between the previous token and this token\n let lineBreakCount = 0\n while (lineBreakPos[nextLineBreakIndex] < tokenStart) {\n nextLineBreakIndex++\n lineBreakCount++\n }\n\n // now for column offset\n let colOffset = tokenStart - prevTokenStartIndex\n if (lineBreakCount > 0) {\n colOffset = tokenStart - lineBreakPos[nextLineBreakIndex - 1] - 1 // the line break is the last character of the previous line\n }\n const tokenLength = parseRes.tokens[i].length\n const tokenTypeIndex = typeMap[parseRes.tokenCategories[i]]\n const tokenModifierIndex = 0 // no modifiers\n\n data.push(\n lineBreakCount,\n colOffset,\n tokenLength,\n tokenTypeIndex,\n tokenModifierIndex\n )\n\n prevTokenStartIndex = tokenStart\n }\n\n return onfulfilled({\n data: new Uint32Array(data),\n resultId: '',\n })\n },\n (reason) => {\n if (!onrejected) {\n return {}\n }\n return onrejected(null)\n }\n )\n },\n }\n },\n releaseDocumentSemanticTokens(resultId: string | undefined): void {},\n })\n\n const tokenRules = []\n for (let tokenStr in TokenCategory) {\n const style = this.getCharStyle(TokenCategory[tokenStr as keyof typeof TokenCategory])\n tokenRules.push({\n token: tokenStr,\n foreground: style[0],\n fontStyle: style[1],\n })\n }\n // define theme for tokens\n editor.defineTheme('featureHintLangTheme', {\n base: 'vs',\n colors: {},\n inherit: true,\n rules: tokenRules,\n })\n }\n\n getHoverMarkup(syntacticNode: SyntacticHintNode) {\n let title = syntacticNode.entityType.toLocaleLowerCase()\n // make first letter uppercase, replace \"_\" with \" \"\n title = title\n .split('_')\n .map((x) => (x.length == 0 ? '' : x.charAt(0).toUpperCase() + x.substring(1, x.length)))\n .join(' ')\n\n const isLeaf = syntacticNode.children.length == 0\n let templateStr = ''\n let longDescriptionStr = ''\n let predicateList: any[] = []\n let maximizerList: any[] = []\n if (this.featureLanguageSpec) {\n // may not have loaded yet\n if (syntacticNode.leafNodeConstructionDocsIndex >= 0) {\n const index = syntacticNode.leafNodeConstructionDocsIndex\n if (index >= 0) {\n const infoNode =\n this.featureLanguageSpec.entityDefinitions[syntacticNode.entityType].leafNodeOptions[index]\n templateStr = infoNode.template\n longDescriptionStr = infoNode.longDescription\n }\n } else {\n const index = syntacticNode.treeNodeConstructionDocsIndex\n if (index >= 0) {\n const infoNode =\n this.featureLanguageSpec.entityDefinitions[syntacticNode.entityType].treeNodeOptions[index]\n templateStr = infoNode.template\n longDescriptionStr = infoNode.longDescription\n }\n }\n if (syntacticNode.predicateDocLabels && syntacticNode.predicateTexts) {\n for (let i = 0; i < syntacticNode.predicateDocLabels.length; i++) {\n const predText = syntacticNode.predicateTexts[i]\n const predDescr =\n this.featureLanguageSpec.entityDefinitions[syntacticNode.entityType].leafNodeOptions[\n syntacticNode.leafNodeConstructionDocsIndex\n ].predicateOptions[syntacticNode.predicateDocLabels[i]]\n if (predDescr) {\n // occasionally there can be valid predicates that are nonetheless not included in the documentation because they are redundant;\n // \"circle, arc length 360deg\" is one such example.\n predicateList.push({\n text: '*predicate:* **' + predText + '**',\n description: predDescr.longDescription,\n })\n }\n }\n }\n if (syntacticNode.maximizerDocLabels && syntacticNode.maximizerTexts) {\n for (let i = 0; i < syntacticNode.maximizerDocLabels.length; i++) {\n const maxText = syntacticNode.maximizerTexts[i]\n const maxDescr =\n this.featureLanguageSpec.entityDefinitions[syntacticNode.entityType].leafNodeOptions[\n syntacticNode.leafNodeConstructionDocsIndex\n ].maximizerOptions[syntacticNode.maximizerDocLabels[i]]\n maximizerList.push({\n text: '*maximizer:* **' + maxText + '**',\n description: maxDescr.longDescription,\n })\n }\n }\n }\n\n const resArr = []\n resArr.push({ value: '**' + title + '**' })\n resArr.push({ value: templateStr })\n resArr.push({ value: longDescriptionStr })\n for (const pred of predicateList) {\n resArr.push({ value: pred.text + '\\n\\n' + pred.description })\n }\n for (const max of maximizerList) {\n resArr.push({ value: max.text + '\\n\\n' + max.description })\n }\n return resArr\n }\n\n static calculatePreTransform(front: Array, up: Array) {\n // return front.concat(up);\n // Just return default values here (Front = +X, up = +Z), the pre-transform will be added in the assembly\n return [1, 0, 0, 0, 0, 1]\n }\n\n static parseFeatureHint(\n http: HttpClient,\n hint: string,\n assemblyKey: string,\n front: Array,\n up: Array,\n featureId: string,\n skipEvaluation: boolean,\n editorToUpdate?: FeatureHintInputComponent\n ) {\n let vm = this\n let preTransform = FeatureHintInputComponent.calculatePreTransform(front, up)\n let params = new HttpParams()\n .set('a', assemblyKey)\n .set('fx', preTransform[0])\n .set('fy', preTransform[1])\n .set('fz', preTransform[2])\n .set('ux', preTransform[3])\n .set('uy', preTransform[4])\n .set('uz', preTransform[5])\n .set('se', skipEvaluation)\n .set('n', featureId || '')\n const postPromise = http.post('/api/renderer/parse-features', hint, { params }).toPromise()\n return new Promise(function (resolve, reject) {\n postPromise.then(\n function (result) {\n // if editorToUpdate is defined, call its evaluation hook\n if (!skipEvaluation && editorToUpdate) {\n editorToUpdate.onEvaluationResult(hint, (result).data.logicalStructure)\n }\n resolve(result)\n },\n function (error) {\n reject(error)\n }\n )\n })\n }\n\n /*\n Syntax highlighting and code completion\n */\n\n initLanguageSpec() {\n let vm = this\n vm.$http\n .get('/api/renderer/feature-language-spec')\n .toPromise()\n .then(\n function (response: any) {\n vm.featureLanguageSpec = response.data\n },\n function (response: any) {\n console.error('Error getting feature language specification.')\n }\n )\n }\n\n // returns array [color, fontStyle]\n // color is hex string, 'aaaaaa' for example\n // font style is '', 'bold', 'italic' or 'bold italic'\n getCharStyle(tokenCategory: TokenCategory) {\n let s = '#0053D5'\n if (tokenCategory === TokenCategory.CONSTANT || tokenCategory === TokenCategory.NEGATIVE_SIGN_DASH) {\n return ['0053D5', '']\n }\n s = '#000000'\n if (tokenCategory === TokenCategory.RANGE_CONNECTOR) {\n return ['000000', '']\n }\n s = '#5B97FF'\n if (tokenCategory === TokenCategory.UNIT) {\n return ['5B97FF', '']\n }\n s = '#1FAD00'\n if (tokenCategory === TokenCategory.PREDICATE_DESCRIPTOR) {\n return ['1FAD00', '']\n }\n s = '#E7830C'\n if (tokenCategory === TokenCategory.ENTITY_DEF) {\n return ['E7830C', 'bold']\n }\n s = '#000000'\n if (tokenCategory === TokenCategory.CONNECTIVE) {\n return ['000000', 'italic']\n }\n s = '#7E3CE8'\n if (\n tokenCategory === TokenCategory.MAXIMIZER_DESCRIPTOR ||\n tokenCategory === TokenCategory.MAXIMIZER_QUANTIFIER\n ) {\n return ['7E3CE8', '']\n }\n s = '#000000'\n if (tokenCategory === TokenCategory.PAREN_BRACKET) {\n return ['000000', '']\n }\n s = '#C8C8C8'\n if (tokenCategory === TokenCategory.IGNORED) {\n return ['C8C8C8', '']\n }\n s = '#FF0000'\n if (tokenCategory === TokenCategory.UNKNOWN) {\n return ['FF0000', '']\n }\n return ['FF0000', '']\n }\n}\n","\n\n
\n
\n
\n
\n
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit } from '@angular/core'\n\n@Component({\n selector: 'app-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.less'],\n})\nexport class HomeComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport { AuthService } from '../../services/auth/auth.service'\nimport { Router } from '@angular/router'\nimport { FormlyFieldConfig } from '@ngx-formly/core'\nimport { FormGroup } from '@angular/forms'\n\n@Component({\n selector: 'app-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.less'],\n})\nexport class LoginComponent implements OnInit {\n constructor(private $http: HttpClient, private authService: AuthService, private router: Router) {}\n error: boolean = false\n credentials: any\n credentialFields: FormlyFieldConfig[] = []\n customError: string = ''\n message: string = ''\n form: any\n\n ngOnInit(): void {\n let vm = this\n\n vm.error = false\n\n this.authService.login_strategy = 'form'\n vm.$http\n .get('/api/home/login_strategy')\n .toPromise()\n .then(function (result: any) {\n // NOTE: Even if this is changed to 'form' from SAML, the server won't allow it...\n //AuthService.login_strategy = \"form\";\n //AuthService.login_strategy = \"saml\";\n vm.authService.login_strategy = result.login_strategy\n })\n\n this.form = new FormGroup({})\n\n this.credentials = {\n username: '',\n password: '',\n rememberMe: false,\n }\n\n this.credentialFields = [\n {\n key: 'username',\n type: 'input',\n // ngModelElAttrs: {\n // 'autocomplete': 'current-username'\n // },\n templateOptions: {\n type: 'text',\n label: 'Username',\n placeholder: 'Username',\n required: true,\n focus: function () {\n return true\n },\n },\n // expressionProperties: {\n // 'templateOptions.label': function() {\n // return $translate('LOGIN.USERNAME').then(function(translation) {\n // return translation;\n // });\n // }\n // }\n },\n {\n key: 'password',\n type: 'input',\n // ngModelElAttrs: {\n // 'autocomplete': 'current-password'\n // },\n templateOptions: {\n type: 'password',\n label: 'Password',\n placeholder: 'Password',\n required: true,\n },\n // expressionProperties: {\n // 'templateOptions.label': function() {\n // return $translate('LOGIN.PASSWORD').then(function(translation) {\n // return translation;\n // });\n // }\n // }\n },\n ]\n }\n\n login() {\n let vm = this\n console.log('S Login called: ' + vm.credentials.username)\n vm.customError = ''\n\n // Logout first.\n this.authService.login(vm.credentials.username, vm.credentials.password).then(\n function () {\n // Clear the password out\n vm.credentials.password = ''\n vm.error = false\n vm.message = ''\n if (vm.authService.authenticated()) {\n vm.router.navigate(['app/3d'])\n } else {\n vm.router.navigate(['app/login'])\n }\n },\n function (responseData) {\n // Clear the password out\n vm.credentials.password = ''\n vm.error = true\n vm.message = 'Login failed. Please try again'\n //$state.go('login');\n }\n )\n }\n}\n","\n\n
\n \n \n \n \n \n \n \n \n\n
\n
\n {{ customError }}\n \n Error: {{ message }}.\n \n
\n
\n
\n \n \n Submit\n \n \n
\n
\n
\n\n \n
\n","\n\n
\n
{{ title }}
\n
\n\n
\n
\n \n \n
\n\n
\n {{ error }}\n
\n
\n
\n {{ message }}\n
\n
\n\n
\n
\n\n\n \n\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, Input, OnInit } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n@Component({\n selector: 'app-busydialog',\n templateUrl: './busydialog.component.html',\n styleUrls: ['./busydialog.component.less'],\n})\nexport class BusydialogComponent implements OnInit {\n constructor(public activeModal: NgbActiveModal) {}\n\n @Input() resolve: any\n\n public completed = false\n public error = false\n public messages = []\n public title = ''\n\n ngOnInit(): void {\n let vm = this\n vm.resolve.value.then(\n function (result: any) {\n vm.messages = result.messages || []\n if (vm.resolve.successTitle) {\n vm.title = vm.resolve.successTitle\n }\n vm.completed = true\n\n if (!vm.resolve.acknowledgeCompletion) {\n // Close automatically after the user has had a chance\n // to see the \"success\" indicator\n setTimeout(function () {\n vm.activeModal.close({ $value: result })\n }, 1000)\n }\n },\n function (result: any) {\n vm.error = result.error\n vm.messages = result.messages || []\n vm.title = vm.resolve.errorTitle\n vm.completed = true\n }\n )\n }\n\n trackByIndex = (index: number): number => {\n return index\n }\n}\n","\n\n\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit } from '@angular/core'\nimport { UserSessionService } from '../../services/user-session.service'\nimport { Router } from '@angular/router'\nimport { AuthService } from '../../services/auth/auth.service'\n\n@Component({\n selector: 'app-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.less'],\n})\nexport class MenuComponent implements OnInit {\n constructor(private authService: AuthService, private Session: UserSessionService, private router: Router) {}\n\n ngOnInit(): void {}\n\n authenticated() {\n return this.authService.authenticated()\n }\n // Check to see if the user is authorized to do this thing...\n authorized(feature: any) {\n return this.authService.authorized(feature)\n }\n\n greeting() {\n if (this.Session.crmAccounts && 0 < this.Session.crmAccounts.length) {\n return ' Hello, '\n }\n return ''\n }\n subjectDisplayName() {\n if (this.Session.crmAccounts && 0 < this.Session.crmAccounts.length) {\n return this.Session.crmAccounts[0].subject.displayName || 'USER'\n }\n return 'USER'\n }\n\n logout() {\n let vm = this\n vm.authService.logout().then(function () {\n // Go back to the homepage after a logout.\n vm.router.navigate(['app/login'])\n })\n }\n}\n","\n\n
\n
\n \n
\n \n
\n\n
\n
    \n \n \n \n \n \n \n \n \n\n
  • \n \n Clik AI\n \n
  • \n
\n\n \n
\n
\n
\n\n
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit } from '@angular/core'\nimport { AuthService } from '../../services/auth/auth.service'\n\n@Component({\n selector: 'app-nav',\n templateUrl: './nav.component.html',\n styleUrls: ['./nav.component.less'],\n})\nexport class NavComponent implements OnInit {\n constructor(private authService: AuthService) {}\n\n ngOnInit(): void {}\n\n authenticated(): boolean {\n return this.authService.authenticated()\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport * as _ from 'lodash'\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core'\nimport { UserSessionService } from '../../services/user-session.service'\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.less'],\n})\nexport class ProfileComponent implements OnInit {\n constructor(private Session: UserSessionService) {}\n\n public accounts: string[] = []\n\n ngOnInit(): void {\n this.accounts = _.map(this.Session.crmAccounts, function (acc) {\n return JSON.stringify(acc, null, 4)\n })\n }\n}\n","\n\n
{{ account }}
\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Component, OnInit, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'\nimport * as _ from 'lodash'\nimport { MatrixFunctions } from '../../models/matrix-functions'\nimport * as math from 'mathjs'\nimport { resolveReferences } from '../../../JsonReferenceResolver'\nimport { NgbPanelChangeEvent } from '@ng-bootstrap/ng-bootstrap'\nimport { FeatureHintInputComponent } from '../feature-hint-input/feature-hint-input.component'\nimport { AuthService } from '../../services/auth/auth.service'\nimport { EntityType, HolePatternType, threedMode } from 'src/app/types/enums'\nimport { ClikProjectInfo } from '../../types/clik/ClikProjectInfo'\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: 'app-threed',\n templateUrl: './threed.component.html',\n styleUrls: ['./threed.component.less'],\n providers: [],\n})\nexport class ThreedComponent implements OnInit {\n constructor(private $http: HttpClient, private authService: AuthService, private sanitizer: DomSanitizer) {}\n\n public configuration: any = {}\n public rendererURL: SafeResourceUrl = this.trustURL('')\n public rawRendererURL: string = ''\n public initialized: boolean = false\n public entityType = EntityType\n public threedMode = threedMode\n public mode: threedMode = threedMode.DATA_MANAGER\n\n public assemblyKey = ''\n public assembly: any = ''\n\n public currentPart = ''\n public currentPartInput = ''\n public partsList: any[] = []\n public filteredPartsList: any[] = []\n public partFocused = false\n public partInfo: any = {\n preTransform: {\n up: '',\n front: '',\n },\n }\n public subcatInfo: any = {}\n public axes = ['', 'X', 'Y', 'Z']\n public preTransform: any = []\n public preTransformName: any = ''\n\n public currentSubcategory = ''\n public currentSubcategoryInput = ''\n public subcategoriesList: any[] = []\n public selectedSubcategories: String[] = []\n public subcatFocused = false\n public filteredSubcategoriesList: any[] = []\n\n public collapsed: boolean = false\n public transparent: boolean = false\n\n public activePanelDatum: any = null\n\n private NOOP_FEATURE = '\\nfront'\n private ROUND_PLACE: number = 3 // Default 3\n\n public featurePromise: any\n private featurePromiseStale: boolean = false\n private featureResolveFn: any\n\n public loading: boolean = false\n public partsLoading: boolean = false\n public subcategoriesLoading: boolean = false\n public disablePreTransform: boolean = false\n\n public dataManagerInfo: ClikProjectInfo = new ClikProjectInfo()\n\n @ViewChildren('featureInput')\n public featureInputs!: QueryList\n public featureInput!: FeatureHintInputComponent\n\n ngOnInit(): void {\n this.getFeatureRoundingPlaces()\n // Kick off the renderer init process\n this.activate()\n // Start by setting the mode\n this.updateMode(threedMode.DATA_MANAGER)\n }\n\n public ngAfterViewInit(): void {\n // triggers whenever the FeatureHintInputComponents view child(ren) changes\n this.featureInputs.changes.subscribe((comps: QueryList) => {\n this.featureInput = comps.first\n })\n }\n\n // We'll use this to trust our renderer URL (provided from the server)\n trustURL(url: string) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url)\n }\n\n private renderMessageListener = (ev: MessageEvent) => {\n let vm = this\n vm.rendererMessageReceived(ev, vm)\n }\n\n activate() {\n let vm = this\n // Listen for events from the 3d iframe\n window.addEventListener('message', this.renderMessageListener)\n\n this.getConfiguration()\n }\n\n deactivate() {\n let vm = this\n // Tear down our listener (in case it wasn't done earlier)\n window.removeEventListener('message', this.renderMessageListener)\n }\n\n // Clean up when the controller gets nuked\n ngOnDestroy() {\n this.deactivate()\n }\n\n changePart(part: string) {\n this.featurePromise = null\n this.currentPart = part\n this.currentPartInput = part\n this.partInfo = {\n preTransform: {\n up: '',\n front: '',\n },\n }\n this.updatePart()\n }\n\n updatePart() {\n this.getSubcategoriesList()\n if (this.currentPart) {\n // Skip if nothing is selected\n this.getDrawing()\n this.getAssembly()\n }\n }\n\n updatePartInput() {\n let vm = this\n vm.filteredPartsList = _.filter(vm.partsList, function (x) {\n return x.toLowerCase().includes(vm.currentPartInput.toLowerCase())\n })\n }\n\n updateSubcat(subcat: string) {\n let vm = this\n vm.currentPart = ''\n vm.currentPartInput = ''\n vm.partInfo = vm.createPartInfo()\n vm.currentSubcategory = subcat\n vm.currentSubcategoryInput = subcat\n vm.getSubcatInfo()\n vm.getPartList(vm.currentSubcategory)\n }\n\n updateSubcatInput() {\n let vm = this\n vm.filteredSubcategoriesList = _.filter(vm.subcategoriesList, function (x) {\n return x.toLowerCase().includes(vm.currentSubcategoryInput.toLowerCase())\n })\n }\n\n updateMode(mode: threedMode) {\n let vm = this\n // Set Mode\n vm.mode = mode\n vm.reset()\n // Fetch Data\n switch (mode) {\n case threedMode.VIEW:\n case threedMode.DATUM:\n vm.getPartList()\n break\n case threedMode.SUBCAT:\n vm.getSubcategoriesList()\n break\n case threedMode.DATA_MANAGER:\n break\n }\n }\n\n reset(full?: boolean) {\n let vm = this\n // Clear values\n vm.currentPart = ''\n vm.currentPartInput = ''\n vm.currentSubcategory = ''\n vm.currentSubcategoryInput = ''\n vm.preTransformName = ''\n vm.preTransform = []\n vm.partInfo = vm.createPartInfo()\n vm.clearScene()\n\n if (full) {\n vm.partsList = []\n vm.filteredPartsList = []\n vm.subcategoriesList = []\n vm.filteredSubcategoriesList = []\n }\n }\n\n dataManagerChange(info: ClikProjectInfo) {\n let vm = this\n if (null !== info && info.configurationName === 'clikruntime') {\n vm.dataManagerInfo = info\n vm.reset(true)\n }\n }\n\n /**\n * Renderer message calls\n */\n\n // Handle messages from the renderer iframe\n rendererMessageReceived(e: any, vm: any) {\n // vm scope of ThreedComponent passed in since the scope here is Window\n let message = e.data\n\n console.log('[Clik3DWeb] ' + e.data.event + ' event from ' + e.origin)\n\n if (message.event === 'visualization.ready') {\n // Go ahead and stop listening -- we can ignore the renderer now\n // window.removeEventListener('message', vm.renderMessageListener);\n\n // Set the ui style (switch this to a settings object someday,\n // instead of a single name string)\n let uiStyle = 'clik-3d-web'\n\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n if (iWindow) {\n // First style message sets the toolbar styles\n iWindow.postMessage(\n {\n event: 'ui.style.set',\n ui_style: uiStyle,\n },\n vm.rendererURL.changingThisBreaksApplicationSecurity\n )\n\n // Send in the assembly\n iWindow.postMessage(\n {\n event: 'assembly.load',\n assembly: vm.assembly,\n },\n vm.rawRendererURL\n )\n }\n }\n\n if (message.event === 'scene.initialized') {\n // Set the ui style (switch this to a settings object someday,\n // instead of a single name string)\n let uiStyle = 'clik-3d-web'\n\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n if (iWindow) {\n // Update style again on initialization to set camera settings\n iWindow.postMessage(\n {\n event: 'ui.style.set',\n ui_style: uiStyle,\n },\n vm.rendererURL.changingThisBreaksApplicationSecurity\n )\n }\n\n // Parse the hints from clik\n _.forEach(vm.partInfo.datumList, function (datum) {\n vm.updateDescription(datum, true)\n })\n vm.updateRenderedFeatures()\n }\n\n if (message.event === 'assembly.initialized') {\n // Grab the assembly key\n vm.assemblyKey = message.key\n }\n\n if (message.event === 'scene.feature.done') {\n Promise.resolve(vm.featurePromise).then(function () {\n vm.featurePromise = null\n vm.featureResolveFn = null\n if (vm.featurePromiseStale) {\n vm.featurePromiseStale = false\n vm.updateRenderedFeatures()\n }\n })\n\n // Call resolve on the promise\n if (vm.featureResolveFn) {\n vm.featureResolveFn()\n }\n }\n }\n\n updateRenderedFeatures: Function = _.debounce(() => {\n let vm = this\n\n if (!vm.partInfo.datumList || vm.partInfo.datumList.length == 0) {\n // Nothing to do\n return\n }\n\n if (vm.featurePromise) {\n // If there is an existing promise mark it stale\n vm.featurePromiseStale = true\n } else {\n vm.featurePromise = new Promise(function (resolve) {\n vm.updateRenderedFeaturesImpl()\n vm.featureResolveFn = resolve\n })\n }\n }, 1000)\n\n updateRenderedFeaturesImpl() {\n let vm = this\n\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n let featureDescriptionMap: any = {}\n _.forEach(vm.partInfo.datumList, function (datum, key: number) {\n datum.descriptionDirty(false)\n datum.transformDirty(false)\n\n let mapKey = datum.featureId || ''\n\n let line = '\\n'\n if (!featureDescriptionMap[mapKey]) {\n featureDescriptionMap[mapKey] = {\n description: '',\n colors: [],\n }\n line = ''\n }\n\n let saturatedColor = vm.saturate(vm.colorSet[key].rgb, 0.7)\n\n _.forEach(saturatedColor, function (val, idx) {\n // Adjustments to add transparency to planes.\n let alpha = 1.0\n // If the parsed state is a plane, or if there is no parsed state and the datum type is a plane.\n // If the parsed state is a plane we want to show it as transparent even if the datum type doesn't match.\n if (datum.getEntityType() === EntityType.PLANE) {\n alpha = 0.3\n }\n featureDescriptionMap[mapKey].colors.push((val / 255) * (idx === 3 ? alpha : 1))\n })\n\n if (datum.featureDescriptionOverride) {\n line = line + 'transform ' + JSON.stringify(datum.values)\n } else {\n line = line + datum.featureDescription\n }\n\n // If the line is empty, populate it with a dummy description to ensure the colors remain synced\n if (line.trim() === '' || datum.hidden) {\n line = vm.NOOP_FEATURE\n }\n\n featureDescriptionMap[mapKey].description = featureDescriptionMap[mapKey].description + line\n })\n\n let preTransform = FeatureHintInputComponent.calculatePreTransform(\n vm.createVectorFromAxis(vm.partInfo.preTransform.front),\n vm.createVectorFromAxis(vm.partInfo.preTransform.up)\n )\n\n _.forEach(featureDescriptionMap, function (value, key) {\n let colors = value.colors.length > 0 ? '[' + value.colors.join(',') + ']' : ''\n if (iWindow) {\n iWindow.postMessage(\n {\n event: 'scene.feature.update',\n params: {\n a: vm.assemblyKey,\n fx: preTransform[0],\n fy: preTransform[1],\n fz: preTransform[2],\n ux: preTransform[3],\n uy: preTransform[4],\n uz: preTransform[5],\n cs: colors,\n mf: 1000,\n n: key || '',\n featureHint: value.description,\n },\n },\n vm.rawRendererURL\n )\n }\n })\n }\n\n clearScene() {\n let vm = this\n vm.rendererURL = this.trustURL('')\n vm.rawRendererURL = ''\n vm.initialized = false\n }\n\n // Reprocess description for datum\n updateDescription(datum: any, suppressUpdate?: boolean) {\n let vm = this\n datum.loading++\n\n let hint = ''\n switch (vm.mode) {\n case threedMode.DATUM:\n case threedMode.SUBCAT:\n hint = datum.featureDescription\n break\n }\n\n return FeatureHintInputComponent.parseFeatureHint(\n this.$http,\n hint,\n this.assemblyKey,\n this.createVectorFromAxis(vm.partInfo.preTransform.front),\n this.createVectorFromAxis(vm.partInfo.preTransform.up),\n datum.featureId,\n false,\n vm.featureInput\n ).then(\n function (response: any) {\n datum.state = response.data\n // Update the status\n if (datum.state.parseSuccessful) {\n if (datum.state.logicalStructure.entityEvaluationDetails === 'OK') {\n datum.status = 'OK'\n } else {\n datum.status = 'WARNING'\n }\n } else {\n datum.status = 'ERROR'\n }\n\n // Update the transform if applicable\n let datumStateType = datum.getDetectedEntityType()\n datum.entityTypeMatch = datumStateType === datum.getDatumEntityType()\n\n if (datum?.state?.logicalStructure?.entityEvaluationSuccessful) {\n switch (datumStateType) {\n case EntityType.TRANSFORM:\n vm.updateDatumTransformFromMatrix(datum, datum.state.logicalStructure.entityData)\n break\n case EntityType.PLANE:\n vm.updateDatumTransformFromPlane(datum, datum.state.logicalStructure.entityData, true)\n break\n case EntityType.HOLE_PATTERN:\n case EntityType.ARC_PAIR:\n case EntityType.SLOT:\n vm.updateDatumTransformFromHolePattern(datum, datum.state.logicalStructure.entityData)\n break\n default:\n vm.clearDatumTransform(datum)\n }\n } else {\n // Clear out entityData, since it is referenced in the UI and we don't want endless rows of\n // arc or arc pair data crashing the client. If the entityData is to be used for something, do so before this\n if (datum?.state?.logicalStructure?.entityData) {\n datum.state.logicalStructure.entityData = []\n }\n vm.clearDatumTransform(datum)\n }\n\n if (!suppressUpdate) {\n vm.updateRenderedFeatures()\n }\n\n datum.loading--\n if (datum.loading < 0) {\n datum.loading = 0\n }\n },\n function (response: any) {\n console.error('Error parsing feature hint...')\n }\n )\n }\n\n /**\n * API Calls\n */\n\n // Load the renderer configuration (notably, the target URL)\n getConfiguration() {\n let vm = this\n vm.$http\n .get('/api/renderer/configuration')\n .toPromise()\n .then(\n function (response: any) {\n vm.handleGetRendererConfigurationSuccess(response.configuration)\n },\n function (response: any) {\n console.error('Error getting renderer configuration...')\n }\n )\n }\n\n // Get the rounding precision\n getFeatureRoundingPlaces() {\n let vm = this\n vm.$http\n .get('/api/clik-feature/feature-rounding-places/')\n .toPromise()\n .then(\n function (response: any) {\n vm.ROUND_PLACE = response\n },\n function (response: any) {\n console.error('Error getting rounding places...')\n }\n )\n }\n\n // Fetch the assembly from CLIK for the current object\n getAssembly() {\n let vm = this\n vm.$http\n .get('/api/clik-feature/feature-assembly/' + vm.currentPart)\n .toPromise()\n .then(\n function (response: any) {\n response = resolveReferences(response)\n vm.handleGetAssemblySuccess(response.assembleResult)\n },\n function (response: any) {\n console.error('Error getting assembly...')\n }\n )\n }\n\n // Fetch the drawing from CLIK for the current object\n getDrawing() {\n let vm = this\n vm.$http\n .get('/api/clik-feature/drawing/' + vm.currentPart)\n .toPromise()\n .then(\n function (response: any) {\n vm.handleGetDrawingSuccess(response)\n },\n function (response: any) {\n console.error('Error getting drawing...')\n }\n )\n vm.$http\n .get('/api/clik-feature/subcats-for-part/' + vm.currentPart)\n .toPromise()\n .then(\n function (response: any) {\n vm.handleGetSubcategoriesForPartSuccess(response)\n },\n function (response: any) {\n console.error('Error getting subcategories for part...')\n }\n )\n }\n\n // Fetch the partInfo from CLIK for the current object\n getPartInfo(saveOnSuccess?: boolean) {\n let vm = this\n vm.$http\n .get('/api/clik-feature/feature-info/' + vm.currentPart)\n .toPromise()\n .then(\n function (response: any) {\n vm.handleGetPartInfoSuccess(response, false, saveOnSuccess || false)\n vm.loading = false\n },\n function (response: any) {\n console.error('Error getting part info...')\n vm.loading = false\n }\n )\n }\n\n // Fetch the partInfo from CLIK for the current object\n getSubcatInfo() {\n let vm = this\n vm.$http\n .get('/api/clik-feature/subcat-info/' + vm.currentSubcategory)\n .toPromise()\n .then(\n function (response: any) {\n vm.handleGetSubcatInfoSuccess(response[0])\n },\n function (response: any) {\n console.error('Error getting part info...')\n }\n )\n }\n\n // Fetch the partList from CLIK\n getPartList(subcatName?: any) {\n let vm = this\n vm.partsLoading = true\n vm.$http\n .get('/api/clik-feature/parts-list', {\n params: { subcatName: subcatName || '' },\n })\n .toPromise()\n .then(\n function (response: any) {\n vm.partsLoading = false\n vm.handleGetPartsListSuccess(response)\n },\n function (response: any) {\n vm.partsLoading = false\n console.error('Error getting parts list...')\n }\n )\n }\n\n // Fetch the partList from CLIK\n getSubcategoriesList() {\n let vm = this\n vm.subcategoriesLoading = true\n vm.$http\n .get('/api/clik-feature/subcategories-list')\n .toPromise()\n .then(\n function (response: any) {\n vm.subcategoriesLoading = false\n vm.handleGetSubcategoriesListSuccess(response)\n },\n function (response: any) {\n vm.subcategoriesLoading = false\n console.error('Error getting subcategories list...')\n }\n )\n }\n\n // Generate the datum entries in Clik based on the part and the selected subcats\n generateDatum(regenerate: boolean, datumName?: string) {\n let vm = this\n vm.loading = true\n let url = regenerate ? '/api/clik-feature/regenerate-datum/' : '/api/clik-feature/generate-datum/'\n vm.$http\n .post(url + vm.currentPart, vm.selectedSubcategories, {\n params: { datumName: datumName || '' },\n })\n .toPromise()\n .then(\n function (response: any) {\n vm.getPartInfo(true)\n vm.loading = false\n },\n function (response: any) {\n vm.loading = false\n console.error('Error generating datum info...', response)\n }\n )\n }\n\n // Save datum changes\n saveDatum(datum?: any) {\n let vm = this\n // If no specific datum provided, save them all\n let toUpdate = datum ? [datum] : vm.partInfo.datumList\n\n vm.loading = true\n\n switch (this.mode) {\n case threedMode.DATUM:\n // Get the updated pre-transform without committing it yet\n let preTransform = vm.updatePreTransform(false)\n\n let payload = {\n datum: toUpdate,\n partName: vm.currentPart,\n transform: preTransform,\n }\n\n vm.$http\n .put('/api/clik-feature/update-features-with-pre-transform', payload)\n .toPromise()\n .then(\n function (response: any) {\n vm.getPartInfo()\n },\n function (response: any) {\n console.error('Error saving datum...', response)\n vm.loading = false\n }\n )\n break\n case threedMode.SUBCAT:\n // Make a map from the template values (list of named strings)\n let templateMap: any = {}\n _.forEach(vm.subcatInfo.featureDescriptionTemplateKeys, function (item, idx) {\n templateMap[item] = vm.subcatInfo.featureDescriptionTemplateValues[idx]\n })\n // Update values in map from datum descriptions\n _.forEach(toUpdate, function (datum) {\n templateMap[datum.datum.name] = datum.featureDescription\n })\n // Convert map back to list of named strings\n vm.subcatInfo.featureDescriptionTemplateKeys = []\n vm.subcatInfo.featureDescriptionTemplateValues = []\n _.forEach(templateMap, function (value, key) {\n vm.subcatInfo.featureDescriptionTemplateKeys.push(key)\n vm.subcatInfo.featureDescriptionTemplateValues.push(value)\n })\n\n vm.$http\n .put('/api/clik-feature/update-templates', [vm.subcatInfo])\n .toPromise()\n .then(\n function (response: any) {\n vm.getPartInfo()\n },\n function (response: any) {\n console.error('Error saving datum...', response)\n vm.loading = false\n }\n )\n break\n }\n }\n\n // Save datum changes\n savePreTransform(transform: any) {\n let vm = this\n vm.$http\n .put('/api/clik-feature/update-pre-transform/' + vm.currentPart, transform)\n .toPromise()\n .then(\n function (response: any) {\n vm.getPartInfo()\n },\n function (response: any) {\n console.error('Error saving pre-transform...', response)\n }\n )\n }\n\n /**\n * Success handlers\n */\n\n handleGetAssemblySuccess(assembly: any) {\n let vm = this\n this.assembly = assembly\n\n if (this.mode !== threedMode.VIEW) {\n this.getPartInfo()\n }\n\n // Now that we have the assembly, assign the renderer URL to tell the iframe\n // to load the renderer page -- note that the rendererURL variable is assigned\n // to the controller separately from the configuration value on purpose, as\n // otherwise the iframe will load too early\n if (!this.initialized) {\n // If this is the first initialization set the url\n this.rawRendererURL = this.configuration.rendererURL\n this.rendererURL = this.trustURL(this.configuration.rendererURL)\n this.initialized = true\n } else {\n // Otherwise just post the load message\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n if (iWindow) {\n // Send in the assembly\n iWindow.postMessage(\n {\n event: 'assembly.load',\n assembly: vm.assembly,\n },\n vm.rawRendererURL\n )\n }\n }\n }\n\n handleGetDrawingSuccess(drawing: any) {\n let vm = this\n let up = ''\n let front = ''\n\n if (drawing && drawing[0]) {\n let name = drawing[0].drawingTransform.name\n\n // Make sure the transform name is the right format (e.g. +X-Y)\n let matchesPattern = name.match(/([+\\-][X-Z]){2}/g)\n if (matchesPattern) {\n up = name.slice(0, 2)\n front = name.slice(2, 4)\n }\n let options = this.generatePreTransformAxesOptions('')\n vm.disablePreTransform = !matchesPattern || !(options.includes(up) && options.includes(front))\n\n vm.preTransformName = drawing[0].drawingTransform.name\n vm.preTransform = drawing[0].drawingTransform.values\n }\n vm.partInfo.preTransform = {\n up: up,\n front: front,\n }\n }\n\n handleGetSubcategoriesForPartSuccess(subcategories: any) {\n let vm = this\n vm.selectedSubcategories = _.map(subcategories, 'name')\n }\n\n handleGetPartInfoSuccess(partInfo: any, appending: boolean, save: boolean) {\n let vm = this\n\n partInfo = resolveReferences(partInfo, true)\n\n if (!this.partInfo) {\n this.partInfo = this.createPartInfo()\n }\n\n this.partInfo.name = vm.currentPart\n if (!this.partInfo.datumList || !appending) {\n this.partInfo.datumList = []\n }\n this.partInfo.datumList = this.partInfo.datumList.concat(\n _.map(\n _.filter(partInfo, function (datum) {\n // If we are in subcat mode, filter the datum list down based on the selected subcat\n return (\n vm.mode !== threedMode.SUBCAT ||\n _.some(datum.componentSubcategories, function (subcat) {\n return subcat.name === vm.currentSubcategory\n })\n )\n }),\n function (part) {\n let datum = vm.createDatum()\n datum.name = part.name\n datum.displayName = part.displayName\n datum.featureDescriptionOverride = part.featureDescriptionOverride\n datum.featureDescription = part.featureDescriptionOverride ? '' : part.featureDescription\n datum.featureId = part.featureId\n datum.datum = part.datum\n datum.componentSubcategories = part.componentSubcategories\n\n // Auto-populate the\n if (vm.mode === threedMode.SUBCAT) {\n datum.componentSubcategories = [vm.subcatInfo]\n\n // Find the matching template from the subcat\n let idx = -1\n _.forEach(vm.subcatInfo.featureDescriptionTemplateKeys, function (key, i) {\n if (datum.datum.name === key) {\n idx = parseInt(i)\n }\n })\n\n // If the template has a value, use that. Otherwise fall back on the datum value\n if (idx > -1) {\n datum.featureDescription = vm.subcatInfo.featureDescriptionTemplateValues[idx]\n } else if (datum.featureDescription) {\n datum.descriptionDirty(true)\n }\n }\n\n if (datum.getDatumEntityType() === EntityType.TRANSFORM) {\n vm.updateDatumTransformFromMatrix(datum, part.values)\n }\n if (datum.getDatumEntityType() === EntityType.PLANE) {\n vm.updateDatumTransformFromPlane(datum, part.values)\n }\n\n return datum\n }\n )\n )\n\n this.partInfo.datumList = _.sortBy(this.partInfo.datumList, 'name')\n\n if (this.partInfo.datumList.length > this.colorSet.length) {\n let diff = this.partInfo.datumList.length - this.colorSet.length\n for (let i = 0; i < diff; i++) {\n this.generateColor()\n }\n }\n\n if (!appending) {\n Promise.all(\n _.map(vm.partInfo.datumList, function (datum) {\n return vm.updateDescription(datum, true)\n })\n ).then(function () {\n if (save) {\n vm.saveDatum()\n }\n })\n vm.updateRenderedFeatures()\n }\n }\n\n handleGetSubcatInfoSuccess(subcatInfo: any) {\n let vm = this\n vm.subcatInfo = resolveReferences(subcatInfo, true)\n }\n\n handleGetPartsListSuccess(partsList: any) {\n let vm = this\n vm.partsList = _.sortBy(partsList)\n vm.filteredPartsList = _.sortBy(partsList)\n }\n\n handleGetSubcategoriesListSuccess(subcategoriesList: any) {\n let vm = this\n vm.subcategoriesList = _.sortBy(subcategoriesList)\n vm.filteredSubcategoriesList = _.sortBy(subcategoriesList)\n }\n\n handleGetRendererConfigurationSuccess(configuration: any) {\n let vm = this\n vm.configuration = configuration\n\n this.updatePart()\n }\n\n public onPanelChange($event: NgbPanelChangeEvent, vm: any) {}\n\n /**\n * Conversion functions\n */\n\n // Templates\n public infoTemplate = {\n name: '',\n preTransform: {\n up: '',\n front: '',\n },\n datumList: [],\n }\n public datumTemplate = {\n name: '',\n featureDescriptionOverride: false,\n featureDescription: '',\n status: 'OK',\n loading: 0,\n descriptionDirtyVal: false,\n transformDirtyVal: false,\n saveDirtyVal: false,\n values: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\n transformComponents: {\n rotations: [\n {\n axis: '',\n angle: 0.0,\n },\n ],\n translateX: 0,\n translateY: 0,\n translateZ: 0,\n },\n }\n\n createPartInfo() {\n let vm = this\n return JSON.parse(JSON.stringify(vm.infoTemplate))\n }\n\n createDatum() {\n let vm = this\n let datum = JSON.parse(JSON.stringify(vm.datumTemplate))\n datum.descriptionDirty = (val?: boolean) => {\n if (undefined !== val) {\n datum.descriptionDirtyVal = val\n if (val) {\n datum.saveDirty(val)\n }\n }\n return datum.descriptionDirtyVal\n }\n datum.transformDirty = (val?: boolean) => {\n if (undefined !== val) {\n datum.transformDirtyVal = val\n if (val) {\n datum.saveDirty(val)\n }\n }\n return datum.transformDirtyVal\n }\n datum.saveDirty = (val?: boolean) => {\n if (undefined !== val) {\n datum.saveDirtyVal = val\n }\n return datum.saveDirtyVal\n }\n datum.hidden = false\n datum.toggleHidden = () => {\n datum.hidden = !datum.hidden\n vm.updateRenderedFeatures()\n }\n datum.getEntityType = () => {\n // Get the most accurate type available\n return datum.getDetectedEntityType() || datum.getDatumEntityType()\n }\n datum.getDatumEntityType = () => {\n let type = datum.datum?.datumType?.name\n if (type) {\n if (type === 'CSYS') {\n return EntityType.TRANSFORM\n }\n if (type === 'HOLE') {\n return EntityType.ARC_PAIR\n }\n return type\n }\n return null\n }\n datum.getDetectedEntityType = () => {\n return datum.state?.logicalStructure?.entityType\n }\n datum.entityTypeMatch = true\n return datum\n }\n\n createSaveDatum(datum: any) {\n let saveDatum = {}\n\n return saveDatum\n }\n\n anySaveDirty() {\n return _.some(this.partInfo.datumList, function (d) {\n return d.saveDirty()\n })\n }\n\n clearDatumTransform(datum: any) {\n datum.values = []\n datum.transformComponents.rotations = []\n datum.transformComponents.translateX = null\n datum.transformComponents.translateY = null\n datum.transformComponents.translateZ = null\n }\n\n updateDatumTransformFromMatrix(datum: any, inMatrix: number[]) {\n let vm = this\n if (inMatrix != null && inMatrix.length > 0) {\n let matrix = _.map(inMatrix, (x) => vm.formatNumber(x))\n let mat = math.matrix(matrix)\n datum.values = matrix\n let components = MatrixFunctions.decomposeRotation(mat)\n datum.transformComponents.rotations = _.map(components, function (component, index) {\n return {\n axis: vm.axes[index + 1],\n angle: MatrixFunctions.radToDeg(component),\n }\n })\n datum.transformComponents.translateX = mat.get([3])\n datum.transformComponents.translateY = mat.get([7])\n datum.transformComponents.translateZ = mat.get([11])\n }\n }\n\n updateDatumTransformFromPlane(datum: any, matrix: number[], computeDot?: boolean) {\n let vm = this\n if (matrix != null && matrix.length > 0) {\n // Convert point/normal format into normal/distance format\n if (computeDot && matrix.length > 5) {\n let point = matrix.slice(0, 3)\n let norm = matrix.slice(3, 6)\n let dist = math.dot(point, norm)\n matrix = norm.concat([dist])\n }\n datum.values = _.map(matrix, (x) => vm.formatNumber(x))\n }\n }\n\n updateDatumTransformFromHolePattern(datum: any, data: any[]) {\n let vm = this\n // Clear values, updateDatumTransformFromSlot will append them\n datum.values = []\n _.forEach(data, function (entry) {\n return vm.updateDatumTransformFromHole(datum, entry, true)\n })\n }\n\n updateDatumTransformFromHole(datum: any, data: any, append?: boolean) {\n // x, y, z, // slot or hole center\n // dx1, dy1, dz1, // basis vec. 1, oriented in shorter axis direction (length gives radius)\n // dx2, dy2, dz2, // basis vec. 2 perpendicular to basis vector 1, has same length as basis vector 1 if hole\n // dx3, dy3, dz3, // basis vec. 3, perp to basis vectors 1 and 2, length gives half depth\n let center1 = [data.center1.x, data.center1.y, data.center1.z]\n let center2 = [data.center2.x, data.center2.y, data.center2.z]\n\n let center0: number[] = [\n (center2[0] + center1[0]) / 2,\n (center2[1] + center1[1]) / 2,\n (center2[2] + center1[2]) / 2,\n ]\n let d1: number[]\n let d2: number[]\n let d3: number[] = [center1[0] - center0[0], center1[1] - center0[1], center1[2] - center0[2]]\n\n // Intermediate vector for doing cross products\n let vec: number[] = []\n switch (data.type) {\n case HolePatternType.HOLE:\n // Find axis with min dot product\n let axes = [\n [1, 0, 0],\n [0, 1, 0],\n [0, 0, 1],\n ]\n vec = _.reduce(\n axes,\n function (axis, best) {\n if (Math.abs(math.dot(d3, best)) > Math.abs(math.dot(d3, axis))) {\n return axis\n }\n return best\n },\n d3\n )\n break\n case HolePatternType.SLOT:\n vec = [data.slotDir.x, data.slotDir.y, data.slotDir.z]\n break\n }\n\n // Cross product of d3 and vec, length is radius\n d1 = math.multiply(MatrixFunctions.normalize(math.cross(d3, vec) as number[]), data.radius)\n // Cross product of d3 and d1, length is radius + 1/2 width\n d2 = math.multiply(MatrixFunctions.normalize(math.cross(d3, d1) as number[]), data.width / 2 + data.radius)\n\n // Final format:\n // T = [[ dx1, dx2, dx3, x ],\n // [ dy1, dy2, dy3, y ],\n // [ dz1, dz2, dz3, z ],\n // [ 0, 0, 0, 1 ]]\n\n d1.push(0)\n d2.push(0)\n d3.push(0)\n center0.push(1)\n let tmp = math.transpose(math.matrix([d1, d2, d3, center0]))\n\n if (!append) {\n datum.values = []\n }\n\n datum.values.push(...math.flatten(tmp).toArray())\n }\n\n updateDatumTransformFromComponents(datum: any, componentIdx: number) {\n let vm = this\n\n // Process component updates\n if (componentIdx >= 0) {\n // Check if it's a rotation axis change\n // Truncate list\n datum.transformComponents.rotations.length = componentIdx + 1\n if (componentIdx < 2) {\n datum.transformComponents.rotations.push({\n axis: '',\n angle: 0.0,\n })\n }\n }\n\n let angles: number[] = _.map(datum.transformComponents.rotations, 'angle')\n let mat = MatrixFunctions.composeRotation(\n _.map(angles, MatrixFunctions.degToRad),\n _.map(datum.transformComponents.rotations, 'axis')\n )\n\n mat.set([3], datum.transformComponents.translateX)\n mat.set([7], datum.transformComponents.translateY)\n mat.set([11], datum.transformComponents.translateZ)\n\n datum.values = mat.toArray()\n datum.values = _.map(datum.valuies, (x) => vm.formatNumber(x))\n }\n\n updatePreTransform(commit: boolean = false) {\n let vm = this\n\n // If both components are not set just return\n if (vm.partInfo.preTransform.up === '' || vm.partInfo.preTransform.front === '') {\n return\n }\n\n // Compute transformation to align axes\n let up = this.createVectorFromAxis(vm.partInfo.preTransform.up)\n let front = this.createVectorFromAxis(vm.partInfo.preTransform.front)\n let transform: any[] = []\n let cross = math.cross(up, front) as number[]\n transform.push(up)\n transform.push(front)\n transform.push(cross)\n\n let defaultCoordinates = math.transpose([\n [0, 0, 1],\n [1, 0, 0],\n [0, 1, 0],\n ])\n\n transform = math.multiply(defaultCoordinates, transform)\n transform = MatrixFunctions.format(transform)\n\n vm.preTransformName = vm.partInfo.preTransform.up + vm.partInfo.preTransform.front\n vm.preTransform = transform\n\n _.forEach(vm.assembly.assembly.subAssemblies, function (sub) {\n if (sub.name === vm.currentPart) {\n sub.transform.values = transform\n }\n })\n\n let drawingTransform = {\n name: vm.partInfo.preTransform.up + vm.partInfo.preTransform.front, // Concatenation of axes (e.g. +Z+X)\n description:\n 'UP: ' +\n vm.partInfo.preTransform.up +\n ', FRONT: ' +\n vm.partInfo.preTransform.front +\n ' [Generated by ClikAI]',\n values: transform,\n }\n\n // Only save in datum mode if commit specified\n if (commit && vm.mode === threedMode.DATUM) {\n // Save\n vm.savePreTransform(drawingTransform)\n }\n\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n if (iWindow) {\n // Send in the assembly\n iWindow.postMessage(\n {\n event: 'assembly.update',\n assembly: vm.assembly,\n },\n vm.rawRendererURL\n )\n }\n\n return drawingTransform\n }\n\n toggleTransparency() {\n let vm = this\n\n vm.transparent = !vm.transparent\n\n _.forEach(vm.assembly.assembly.subAssemblies, function (sub) {\n if (sub.name === vm.currentPart) {\n sub.baseColor.r = 0.5\n sub.baseColor.g = 0.5\n sub.baseColor.b = 0.5\n sub.baseColor.a = 0.75\n sub.material.name = vm.transparent ? '#0,1,0,0,0.05,0' : 'predefined'\n }\n })\n\n let iframe = document.getElementById('render-container')\n let iWindow = (iframe).contentWindow\n\n if (iWindow) {\n // Send in the assembly\n iWindow.postMessage(\n {\n event: 'assembly.update',\n assembly: vm.assembly,\n },\n vm.rawRendererURL\n )\n }\n }\n\n /**\n * Helper functions\n */\n\n // Visually distinct colors for feature highlighting\n public colorSet = [\n // https://sashamaps.net/docs/resources/20-colors/\n { hex: '#e6194B', rgb: [230.0, 25.0, 25.0, 255.0] }, //Red\n { hex: '#3cb44b', rgb: [60.0, 180.0, 75.0, 255.0] }, //Green\n { hex: '#ffe119', rgb: [255.0, 225.0, 25.0, 255.0] }, //Yellow\n { hex: '#4363d8', rgb: [50.0, 80.0, 230.0, 255.0] }, //Blue\n { hex: '#f58231', rgb: [245.0, 130.0, 49.0, 255.0] }, //Orange\n { hex: '#911eb4', rgb: [145.0, 30.0, 180.0, 255.0] }, //Purple\n { hex: '#42d4f4', rgb: [66.0, 212.0, 244.0, 255.0] }, //Cyan\n { hex: '#bfef45', rgb: [191.0, 239.0, 69.0, 255.0] }, //Lime\n { hex: '#f032e6', rgb: [240.0, 50.0, 230.0, 255.0] }, //Magenta\n { hex: '#fabed4', rgb: [250.0, 190.0, 212.0, 255.0] }, //Pink\n { hex: '#469990', rgb: [70.0, 153.0, 144.0, 255.0] }, //Teal\n { hex: '#800000', rgb: [128.0, 0.0, 0.0, 255.0] }, //Maroon\n { hex: '#000075', rgb: [0.0, 0.0, 117.0, 255.0] }, //Navy\n { hex: '#9A6324', rgb: [154.0, 99.0, 36.0, 255.0] }, //Brown\n { hex: '#808000', rgb: [128.0, 128.0, 0.0, 255.0] }, //Olive\n { hex: '#aaffc3', rgb: [170.0, 255.0, 195.0, 255.0] }, //Mint\n { hex: '#dcbeff', rgb: [220.0, 190.0, 255.0, 255.0] }, //Lavender\n { hex: '#fffac8', rgb: [255.0, 250.0, 200.0, 255.0] }, //Beige\n { hex: '#ffd8b1', rgb: [255.0, 216.0, 177.0, 255.0] }, //Apricot\n { hex: '#a9a9a9', rgb: [169.0, 169.0, 169.0, 255.0] }, //Grey\n { hex: '#ffffff', rgb: [255.0, 255.0, 255.0, 255.0] }, //White\n { hex: '#000000', rgb: [0.0, 0.0, 0.0, 255.0] }, //Black\n ]\n\n //https://stackoverflow.com/questions/13806483/increase-or-decrease-color-saturation\n saturate(d: number[], value: number) {\n let r = d[0]\n let g = d[1]\n let b = d[2]\n let a = d[3]\n let gray = 0.2989 * r + 0.587 * g + 0.114 * b //weights from CCIR 601 spec\n r = -gray * value + r * (1 + value)\n g = -gray * value + g * (1 + value)\n b = -gray * value + b * (1 + value)\n //normalize over- and under-saturated values\n if (r > 255) r = 255\n if (g > 255) g = 255\n if (b > 255) b = 255\n if (r < 0) r = 0\n if (g < 0) g = 0\n if (b < 0) b = 0\n return [r, g, b, a]\n }\n\n // Generate a random color in case there are more than the predefined ones needed.\n generateColor() {\n let hex = Math.floor(Math.random() * 16777215)\n .toString(16)\n .padStart(6, '0')\n let rgbParse = hex.match(/.{1,2}/g)\n if (null != rgbParse) {\n let rgb = [parseInt(rgbParse[0], 16), parseInt(rgbParse[1], 16), parseInt(rgbParse[2], 16), 255.0]\n this.colorSet.push({\n hex: '#' + hex,\n rgb: rgb,\n })\n }\n }\n\n // Add subcat to selected list\n updateSubcategories(subcat: String) {\n this.selectedSubcategories.push(subcat)\n this.currentSubcategory = ''\n }\n\n // Remove subcat from selected list\n removeSubcategory(idx: number) {\n this.selectedSubcategories.splice(idx, 1)\n }\n\n // Generate list of subcat options, excluding ones that are already selected\n generateSubcatOptions() {\n let vm = this\n return [''].concat(\n _.filter(vm.subcategoriesList, function (subcat) {\n return !vm.selectedSubcategories.includes(subcat)\n })\n )\n }\n\n // Generate list of axis options, excluding ones that are already selected\n generateAxesOptions(datum: any, componentIdx: number) {\n let vm = this\n let usedAxes = _.map(datum.transformComponents.rotations, 'axis')\n usedAxes.length = componentIdx\n return _.filter(vm.axes, function (axis) {\n return !usedAxes.includes(axis)\n })\n }\n\n // Generate list of pre transform axis options, excluding ones that are already selected\n generatePreTransformAxesOptions(selected: string) {\n let vm = this\n let out: string[] = []\n _.forEach(vm.axes, function (axis) {\n // Include blank as an option if the value is currently unset\n if (axis === '' && (vm.partInfo.preTransform.front === '' || vm.partInfo.preTransform.up === '')) {\n out.push(axis)\n } else if (!selected.includes(axis)) {\n out.push('+' + axis)\n out.push('-' + axis)\n }\n })\n\n return out\n }\n\n createVectorFromAxis(signedAxis: string) {\n let sign = signedAxis[0] === '-' ? -1 : 1\n let axis = signedAxis[1]\n return [axis === 'X' ? sign : 0, axis === 'Y' ? sign : 0, axis === 'Z' ? sign : 0]\n }\n\n entityTitle(entityType: string) {\n switch (entityType) {\n case EntityType.TRANSFORM:\n return 'Matrix Transform'\n case EntityType.PLANE:\n return 'Plane Coordinates'\n case EntityType.HOLE_PATTERN:\n case EntityType.ARC_PAIR:\n case EntityType.SLOT:\n return 'Hole Info'\n default:\n return 'Entity Info'\n }\n }\n\n formatNumber(num: number, places: number = this.ROUND_PLACE) {\n let pow = Math.pow(10, places)\n return Math.round(num * pow) / pow\n }\n}\n","\n\n\n\n \n
\n Data Manager\n {{\n 'Project: ' + (dataManagerInfo.projectName ? dataManagerInfo.projectName : 'Default')\n }}\n {{\n 'Tag: ' + (dataManagerInfo.tagName ? dataManagerInfo.tagName : 'None')\n }}\n
\n\n\n\n
\n \n \n \n \n\n \n
\n
\n \n \n
\n
\n\n
\n \n \n\n \n \n \n \n
\n
\n \n \n \n
\n
    \n \n {{ subcat }}\n \n
\n
\n
\n
\n \n \n \n
\n
    \n \n {{ part }}\n \n
\n
\n
\n
\n
\n \n *\n Save All\n \n \n
\n \n Currently Editing:\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PropertyInstance NameType Name
Pre-Transform{{ currentPart }}AAE:ComponentDrawing
Datum Descriptions{{ currentPart }}AAE:ComponentDatumTransform
Datum Templates{{ currentSubcategory }}AAE:ComponentSubcategory
\n
\n \n \n\n \n \n \n \n
\n \n \n Save\n \n
\n
\n \n
\n \n \n \n {{ axis }}\n \n \n \n \n \n {{ axis }}\n \n \n 0\"\n >\n *Warning: Updating Pre-Transform may affect datum specifications\n \n \n *Warning: Existing Pre-Transform value not recognized\n \n\n
0\" [disabled]=\"true\" id=\"pre-transform-matrix\">\n \n {{ preTransformName }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n\n \n \n \n \n
\n \n \n \n \n 0\"\n title=\"Regenerate from subcategory-level descriptions (overwrite all)\"\n >\n \n \n \n
\n
\n \n
\n 0\"\n class=\"subcategory-content\"\n >\n
\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n\n \n \n \n
\n \n 0\">\n
\n \n \n \n \n
\n
\n
\n \n
\n
\n \n \n \n \n \n
\n Description Override\n \n \n \n \n \n \n \n *\n \n \n \n *\n \n
\n
\n \n \n \n *Error: Failed to parse feature description.\n \n \n *Warning: Description did not detect a unique feature.\n \n \n *Warning: Detected feature {{ datum.getDetectedEntityType() }} does not\n match datum type {{ datum.getDatumEntityType() }}.\n \n \n
\n\n \n \n \n \n
\n \n *\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Normal: \n \n \n \n \n \n
Distance: \n \n
\n Translation along Normal from Origin.\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ item.type }}
Radius: \n \n Depth: \n \n
Center 1: \n \n \n \n \n \n
Center 2: \n \n \n \n \n \n
Direction: \n \n \n \n \n \n
Width: \n \n
\n \n
\n
\n\n \n \n \n \n \n \n
\n
\n \n \n \n \n {{ axis }}\n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n
\n
\n \n
\n \n \n \n
\n
\n \n \n \n \n\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http'\nimport { Observable, throwError } from 'rxjs'\nimport { catchError } from 'rxjs/operators'\nimport { Router } from '@angular/router'\nimport { AuthService } from '../services/auth/auth.service'\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n constructor(private authService: AuthService, private router: Router) {}\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n let vm = this\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 401 && request.url !== '/api/auth/logout') {\n // Check for unauthorized\n this.authService.logout()\n vm.router.navigate(['app/login'])\n }\n return throwError(error.message)\n })\n )\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport * as _ from 'lodash'\nimport { toLower } from 'lodash'\nimport * as math from 'mathjs'\nimport { Matrix } from 'mathjs'\n\nexport class MatrixFunctions {\n /*\n Transform component composition/decomposition\n http://nghiaho.com/uploads/code/rotation_matrix_demo.m\n */\n\n static composeRotation(components: number[], axes: string[] = ['x', 'y', 'z'], intrinsic: boolean = false) {\n axes = _.map(axes, toLower)\n let matrices = []\n\n for (let i = 0; i < components.length; i++) {\n let mat = math.identity(4, 4) as Matrix\n switch (axes[i]) {\n case 'x':\n mat.set([5], Math.cos(components[i]))\n mat.set([6], -Math.sin(components[i]))\n mat.set([9], Math.sin(components[i]))\n mat.set([10], Math.cos(components[i]))\n break\n case 'y':\n mat.set([0], Math.cos(components[i]))\n mat.set([2], Math.sin(components[i]))\n mat.set([8], -Math.sin(components[i]))\n mat.set([10], Math.cos(components[i]))\n break\n case 'z':\n mat.set([0], Math.cos(components[i]))\n mat.set([1], -Math.sin(components[i]))\n mat.set([4], Math.sin(components[i]))\n mat.set([5], Math.cos(components[i]))\n break\n }\n matrices.push(mat)\n }\n\n if (intrinsic) {\n return _.reduce(\n matrices,\n function (result, mat) {\n return math.multiply(result, mat)\n },\n math.identity(4) as Matrix\n )\n }\n\n return _.reduceRight(\n matrices,\n function (result, mat) {\n return math.multiply(result, mat)\n },\n math.identity(4) as Matrix\n )\n }\n\n static decomposeRotation(matrix: Matrix, intrinsic: boolean = false) {\n let components: number[] = []\n if (intrinsic) {\n // Intrinsic\n components[0] = Math.atan2(matrix.get([9]), matrix.get([10]))\n components[1] = -Math.asin(matrix.get([8]))\n components[2] = Math.atan2(matrix.get([4]), matrix.get([0]))\n } else {\n // Extrinsic\n components[0] = Math.atan2(-matrix.get([6]), matrix.get([10]))\n components[1] = Math.asin(matrix.get([2]))\n components[2] = Math.atan2(-matrix.get([1]), matrix.get([0]))\n }\n return components\n }\n\n // Flatten matrix and pad to 4x4\n static format(v: any[][]): any[] {\n _.forEach(v, function (row) {\n row.push(0)\n })\n v.push([0, 0, 0, 1])\n return v.flat()\n }\n\n /*\n Helpers\n */\n\n static radToDeg(rad: number) {\n return rad * (180 / Math.PI)\n }\n\n static degToRad(deg: number) {\n return deg * (Math.PI / 180)\n }\n\n static clamp(num: number, min: number, max: number) {\n return Math.min(Math.max(num, min), max)\n }\n\n static normalize(vec: number[]): number[] {\n let len = Math.sqrt(\n _.reduce(\n vec,\n function (acc, x) {\n return acc + x * x\n },\n 0\n )\n )\n return len == 0 ? vec : (math.multiply(vec, 1 / len) as number[])\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport * as _ from 'lodash'\nimport { Directive, ElementRef, Input } from '@angular/core'\nimport { AuthService } from './auth.service'\nimport { PermissionService } from './permission.service'\n\n@Directive({\n selector: '[ifAuthorized]',\n})\nexport class AuthDirective {\n @Input() ifAuthorized = ''\n\n constructor(\n private element: ElementRef,\n private authService: AuthService,\n private permissionService: PermissionService\n ) {}\n\n ngOnInit() {\n let vm = this\n\n var validationResult = null\n if (vm.ifAuthorized && _.includes(vm.ifAuthorized, ':')) {\n var perm = '' + vm.ifAuthorized\n var useNot = false\n if (perm.indexOf('!') === 0) {\n useNot = true\n }\n var allow = vm.authService.authorized(perm)\n if (useNot) {\n allow = !allow\n }\n\n validationResult = {\n name: vm.ifAuthorized,\n enabled: allow,\n visible: allow,\n }\n } else {\n validationResult = vm.permissionService.findByActionName(vm.ifAuthorized)\n }\n\n // If the validation result indicates this should not be visible, hide it. Otherwise don't modify\n if (!validationResult.visible) {\n vm.element.nativeElement.style.display = 'none'\n }\n\n // If the validation result indicates this should not be enabled, disable it. Otherwise don't modify\n if (!validationResult.enabled) {\n vm.element.nativeElement.disabled = true\n }\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport * as _ from 'lodash'\nimport { Role } from '../../models/clikcrm/RBAC'\nimport { PermissionService } from './permission.service'\nimport { UserSessionService } from '../user-session.service'\nimport { HttpClient } from '@angular/common/http'\nimport * as uuid from 'uuid'\nimport { CanActivate } from '@angular/router'\nimport { ClikCRMService } from './clikCRM.service'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService implements CanActivate {\n constructor(\n private $http: HttpClient,\n private permissionService: PermissionService,\n private Session: UserSessionService,\n private clikCRMService: ClikCRMService\n ) {}\n\n public login_strategy: string = ''\n private logoutPromise: Promise | null = null\n\n getUserRoles(): Array {\n console.debug('Getting Roles for ' + JSON.stringify(this.Session))\n if (sessionStorage.getItem('tdw.auth.authed') && this.Session.userRoles) {\n // return a copy.\n return this.Session.userRoles.slice()\n }\n return []\n }\n\n isLoginStrategySet(): boolean {\n return null !== this.login_strategy\n }\n useSAMLAuthentication(): boolean {\n console.debug('UseSAMLAuthentication: ' + this.login_strategy)\n // TODO: Retrieve this value from the server.\n return 'saml' === this.login_strategy\n }\n\n authenticated() {\n return 'true' === sessionStorage.getItem('tdw.auth.authed')\n }\n\n // Check to see if the given application feature is authorized to this user.\n // Caution, this is a client side check only currently.\n // The server will also check on that side if an action is invoked.\n authorized(checkPermission: string, useServerCheck: boolean = false): boolean {\n let vm = this\n\n // Don't allow anything if the user isn't logged in...\n if (!sessionStorage.getItem('tdw.auth.authed')) {\n return false\n }\n //console.debug('Check Authorization for ' + checkPermission);\n if (useServerCheck) {\n // return false;\n }\n\n let perms: Array = _.map(_.flatten(_.map(this.Session.userRoles, 'permissions')), 'name')\n\n // If one permission is true, this is allowed.\n let allow: boolean = _.some(perms, function (perm: string) {\n return vm.permissionService.implies(perm, checkPermission)\n })\n //console.debug('Check Authorization Allow ' + checkPermission + \" -> \" + allow);\n\n return allow\n }\n\n logout() {\n let vm = this\n\n console.debug('Logout called...')\n\n // Clear $http cache\n // $cacheFactory.get('$http').removeAll();\n\n // Clear session storage\n sessionStorage.clear()\n\n // Dispose any and all dialogs. This will still call the reject function for all promises attached\n // to open dialogs, but those shouldn't be able to cause much trouble at this point\n // $uibModalStack.dismissAll();\n\n // When the logout API request comes back, clear out any remaining local state\n let clearLocalState = function () {\n sessionStorage.setItem('tdw.auth.authed', '')\n vm.Session.destroy()\n vm.permissionService.clearCache()\n }\n\n // If a solution is still open, close it now, then let the server know we're logging out...\n let url = '/api/auth/logout'\n if (!vm.logoutPromise) {\n // Cache the promise so we don't kick off multiple logouts.\n vm.logoutPromise = vm.$http\n .get(url)\n .toPromise()\n .then(\n function (response: any) {\n console.debug('Log out success... status=' + response.status)\n clearLocalState()\n vm.logoutPromise = null\n },\n function (response: any) {\n console.debug('Log out failed ... status=' + response.status)\n clearLocalState()\n vm.logoutPromise = null\n }\n )\n }\n return vm.logoutPromise\n }\n\n login(username: string, password: string) {\n let vm = this\n console.debug('Login called... username=' + username)\n vm.Session.destroy()\n let url = '/api/auth/login'\n console.debug('URL: ' + url)\n return vm.$http\n .post(url, null, {\n headers: {\n Authorization: 'Basic ' + btoa(username + ':' + password),\n 'No-Auth-Challenge': 'true',\n },\n })\n .toPromise()\n .then(\n function (response: any) {\n //Load the Role information from the server...\n // Should be a list of roles with permissions attached.\n vm.Session.create(response.session_id, response.subject_name, response.roles, null)\n sessionStorage.setItem('tdw.auth.authed', 'true')\n sessionStorage.setItem('tdw.auth.tabToken', uuid.v1())\n\n vm.clikCRMService.getAccount().then(function (acct) {\n vm.Session.crmAccounts = acct\n })\n\n console.debug('Log in success... data=' + JSON.stringify(response))\n return response\n },\n function (response) {\n console.debug('Log in failed ... data=' + JSON.stringify(response))\n vm.Session.destroy()\n return new Promise(function (accept, reject) {\n reject(response)\n })\n }\n )\n }\n\n // Logout redirect\n canActivate(): boolean {\n if (this.authenticated()) {\n return true\n }\n this.logout()\n return false\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport { HttpClient, HttpHeaders } from '@angular/common/http'\nimport { Account } from '../../models/clikcrm/CRM'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClikCRMService {\n constructor(private $http: HttpClient) {}\n\n getAccount(): Promise> {\n let vm = this\n let promise = vm.$http\n .get('/api/clikcrm/account')\n .toPromise()\n .then(\n function (result: any) {\n console.debug('Got Good response for getAccount' + JSON.stringify(result))\n return result\n },\n function (result) {\n console.error('Got Bad Result for getAccount', result)\n }\n )\n return promise\n }\n\n getAccountById(subjectId: string): Promise> {\n let vm = this\n let promise = vm.$http\n .get('/api/clikcrm/account/' + subjectId)\n .toPromise()\n .then(\n function (result: any) {\n console.debug('Got Good response for getAccount' + JSON.stringify(result))\n return result\n },\n function (result) {\n console.error('Got Bad Result for getAccount', result)\n }\n )\n return promise\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport * as _ from 'lodash'\nimport { HttpClient } from '@angular/common/http'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PermissionService {\n constructor(private $http: HttpClient) {}\n\n private authorizableActionCache: any\n private permissionCache: any\n private cachedUrls: any\n\n private handleFetchPermissionsSuccess(response: any) {\n let permissions = response.permissions\n let namespace = response.permissionNamespace\n this.cacheResponse(response)\n this.cachePermissions(permissions, namespace)\n return permissions\n }\n\n private handleFetchPermissionsError(response: any) {\n // do nothing for now\n }\n\n private cachePermission(permission: any, namespace: string) {\n let actionName = namespace + '.' + permission.actionName\n this.authorizableActionCache[actionName] = permission\n }\n\n private cachePermissions(permissions: any, namespace: string) {\n let vm = this\n let cacheablePermissions = _.filter(permissions, function (permission) {\n return permission.cacheable\n })\n _.each(cacheablePermissions, function (permission) {\n vm.cachePermission(permission, namespace)\n })\n }\n\n private cacheResponse(response: any) {\n let url = response.config.url\n if (!this.isCached(url)) {\n this.cachedUrls.push(url)\n }\n }\n\n private isCached(url: string) {\n return _.includes(this.cachedUrls, url)\n }\n\n findByActionName(namespacedActionName: string) {\n let authorizableAction = this.authorizableActionCache[namespacedActionName]\n return authorizableAction\n }\n fetchPermissions(permissionsPath: string) {\n let promise\n\n if ('true' === sessionStorage.getItem('tdw.auth.authed') && !this.isCached(permissionsPath)) {\n promise = this.$http\n .get(permissionsPath, {})\n .toPromise()\n .then(this.handleFetchPermissionsSuccess, this.handleFetchPermissionsError)\n } else {\n promise = new Promise(function (accept, reject) {\n accept([])\n })\n }\n\n return promise\n }\n isAuthorized(namespacedActionName: string) {\n let action = this.findByActionName(namespacedActionName)\n return action && action.visible && action.enabled\n }\n _getCache() {\n return this.authorizableActionCache\n }\n /**\n * Check to see if the permission string permission1 implies permission2.\n *\n * e.g., implies(\"foo:bar:*\", \"foo:bar:baz\") is true\n * e.g., implies(\"foo:bar:*\", \"foo:quux:baz\") is false\n *\n * @param permission1\n * @param permission2\n * @returns {boolean}\n */\n implies(permission1: string, permission2: string) {\n let parts = permission1.split(':')\n let otherParts = permission2.split(':')\n\n let partCount = parts.length\n let otherPartCount = otherParts.length\n let i = 0\n for (; i < otherPartCount; i++) {\n // If this permission has less parts than the other permission, everything after the number of parts contained\n // in this permission is automatically implied, so return true\n if (partCount - 1 < i) {\n return true\n }\n let part = parts[i]\n let otherPart = otherParts[i]\n\n let partSet = part.split(',')\n let otherPartSet = otherPart.split(',')\n if (!_.includes(partSet, '*')) {\n let opCount = otherPartSet.length\n for (let j = 0; j < opCount; j++) {\n let segment = otherPartSet[j]\n if (!_.includes(partSet, segment)) {\n return false\n }\n }\n }\n }\n // If this permission has more parts than the other parts, only imply it if all of the other parts are wildcards\n for (; i < partCount; i = i + 1) {\n let part = parts[i]\n let partSet = part.split(',')\n if (!_.includes(partSet, '*')) {\n return false\n }\n }\n return true\n }\n\n clearCache() {\n this.cachedUrls = []\n this.authorizableActionCache = {}\n this.permissionCache = {}\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport * as uuid from 'uuid'\nimport { AuthService } from './auth/auth.service'\nimport { UserSessionService } from './user-session.service'\nimport { ClikCRMService } from './auth/clikCRM.service'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InitService {\n constructor(\n private $http: HttpClient,\n private Session: UserSessionService,\n private authService: AuthService,\n private clikCRMService: ClikCRMService\n ) {}\n\n recoverSession() {\n let vm = this\n\n return new Promise(function (accept, reject) {\n vm.Session.destroy()\n\n let urlParams = new URLSearchParams(window.location.search)\n let jwt = urlParams.get('jwt')\n let callSuffix = jwt ? '?jwt=' + encodeURIComponent(jwt) : ''\n vm.$http\n .get('/api/auth/current' + callSuffix)\n .toPromise()\n .then(\n function (data: any) {\n if (data) {\n vm.Session.create(data.session_id, data.subject_name, data.roles, null)\n\n sessionStorage.setItem('tdw.auth.authed', 'true')\n if (!sessionStorage.getItem('tdw.auth.tabToken')) {\n sessionStorage.setItem('tdw.auth.tabToken', uuid.v1())\n }\n\n vm.clikCRMService.getAccount().then(function (acct: any) {\n vm.Session.crmAccounts = acct\n accept()\n })\n } else {\n vm.authService.logout()\n accept()\n }\n },\n function (response: any) {\n accept()\n }\n )\n })\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { Injectable } from '@angular/core'\nimport { Role } from '../models/clikcrm/RBAC'\nimport * as _ from 'lodash'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserSessionService {\n constructor() {}\n public id: string = ''\n public userId: string = ''\n public userRoles: Array = []\n public salesPersonModel: any = {}\n public selectedDealer: any = {}\n public sessionExpiration: number = -1\n public crmAccounts: Array = []\n\n create(sessionId: string, userId: string, userRoles: Array, sessionExpiration: number | null) {\n this.id = sessionId\n this.userId = userId\n this.userRoles = userRoles\n this.sessionExpiration = sessionExpiration || Date.now() + 8 * 60 * 60 * 1000\n }\n\n hasRole(roleName: string) {\n let self = this\n let userRoles: Array = self.userRoles\n //_.map(userRoles, 'name').includes(roleName);\n _.includes(_.map(userRoles, 'name'), roleName)\n }\n destroy() {\n let self = this\n self.id = ''\n self.userId = ''\n self.userRoles = []\n self.crmAccounts = []\n self.sessionExpiration = 0\n }\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nexport class ClikProjectInfo {\n configurationName: string = ''\n projectName: string = ''\n tagName: string | null = ''\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nexport enum EntityType {\n HOLE_PATTERN = 'HOLE_PATTERN',\n SLOT = 'SLOT',\n ARC = 'ARC',\n ARC_PAIR = 'ARC_PAIR',\n OBROUND = 'OBROUND',\n POINT = 'POINT',\n LINE = 'LINE',\n DIRECTION = 'DIRECTION',\n FACE = 'FACE',\n PLANE = 'PLANE',\n TRANSFORM = 'TRANSFORM',\n}\n\nexport enum HolePatternType {\n SLOT = 'SLOT',\n HOLE = 'HOLE',\n}\n\nexport enum EntityEvalDetails {\n OK = 'OK',\n CHILD_FAILURE = 'CHILD_FAILURE',\n MULTIPLE_MATCHES = 'MULTIPLE_MATCHES',\n NO_MATCHES = 'NO_MATCHES',\n GEOMETRIC_DEGENERACY = 'GEOMETRIC_DEGENERACY',\n}\n\nexport enum TokenCategory {\n CONSTANT = 'CONSTANT',\n RANGE_CONNECTOR = 'RANGE_CONNECTOR',\n NEGATIVE_SIGN_DASH = 'NEGATIVE_SIGN_DASH',\n UNIT = 'UNIT',\n PREDICATE_DESCRIPTOR = 'PREDICATE_DESCRIPTOR',\n ENTITY_DEF = 'ENTITY_DEF',\n CONNECTIVE = 'CONNECTIVE',\n MAXIMIZER_DESCRIPTOR = 'MAXIMIZER_DESCRIPTOR',\n MAXIMIZER_QUANTIFIER = 'MAXIMIZER_QUANTIFIER',\n PAREN_BRACKET = 'PAREN_BRACKET',\n IGNORED = 'IGNORED',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport enum threedMode {\n VIEW,\n DATUM,\n SUBCAT,\n RULE,\n DATA_MANAGER,\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nexport const environment = {\n production: true,\n}\n","/*\n * Copyright (c) 2022 Certusoft, Inc. All Rights Reserved.\n *\n * This SOURCE CODE FILE, which has been provided by Certusoft as part\n * of a Certusoft product for use ONLY by licensed users of the product,\n * includes CONFIDENTIAL and PROPRIETARY information of Certusoft.\n *\n * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS\n * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH\n * THE PRODUCT.\n */\n\nimport { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .catch((err) => console.error(err));\n","/* (ignored) */"],"sourceRoot":"webpack:///"}