Commit 950584ee authored by XieXiaohan's avatar XieXiaohan

first commit

parents
Pipeline #70 failed with stages
> 1%
last 2 versions
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
<p align="center">
<img width="320" src="https://s1.ax1x.com/2020/09/17/wRLUFH.png">
</p>
<p align="center">
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.11-green" alt="vue">
</a>
<img src="https://img.shields.io/badge/typescript-3.7.5-yellowgreen" alt="vue">
<img src="https://img.shields.io/badge/buefy-0.8.12-blueviolet" alt="vue">
<img src="https://img.shields.io/badge/vue--grid--layout-2.3.7-informational" alt="vue">
</p>
##
---
## What's CFET WidgetUI?
>CFET WidgetUI is a Vue-based project that is developed and maintained full-time by FeiYang Wu and XiaoHan Xie;
is also the front-end component framework software of CFET.
## What's new?
* Compared with the previous version, we have updated our component library, replacing Bootstrap with Bulma
(a open source CSS framework)
* Separate the function **EDIT** from the original widget SPA. And the entire project consists of two SPA(single page application),
one implements the basic functions of the Widget and other one is the EDIT Windows
``If you want to use the old version , switch repository to WidgetUI, which does not rely on Bulma``
* Also some changes in details
NOTE: The function is still incomplete and under development
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Run your tests
```
npm run test
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
### dist生成路径
```
在vue.config.js中将outputDir更改为本地路径
```
# WidgetUI设计文档
WidgetUI是为CFET控制框架设计的网页界面显示。
![结构框架](2019-09-30-14-46-14.png)
## Widget
widget是WidgetUI的显示控件,是CFET中的resource在网页界面的一种显示形式。每个WidgetUI界面是数个Widget加导航栏的组成。
### Widget Base
每个Widge都有共同的性质,这些性质被描述在Widget基类中,被每个Widget继承。
这些性质具体如下:
![Widget基类属性](2019-09-27-16-32-02.png)
1. 每个Widget的类型名称(WidgetComponentName)
> 目前的类型按功能逻辑分类主要有Status,Method,Config,Thing,WaveView。按照显示样式的不同有State。之后根据需求还会陆续添加。
2. 保存和加载自身配置(getConfig,setConfig)
> getConfig:每个widget需要将自身的内容以给定的格式保存起来提供给Parent。
setConfig:根据Parent提供的数据填充自己的路径和输入框中的值,同时更新界面。
给定格式:
![WidgetConfig格式](2019-09-27-17-41-30.png)
3. 刷新自身界面(updateUI)
> 根据当前的URL生成对应输入框等显示。
4. 刷新自身值(refresh)
> refresh:根据当前URL和输入框变量值向后台通过axios发出请求,根据返回值刷新显示值。
5. 根据给定路径自动填充返回完整路径(samplePoke,pathPoke)
![poke流程图](2019-09-30-15-01-53.png)
> samplePoke是根据sample中的参数信息将变量补充在URL后生成一个完整的URL。
路径的来源有两种。
一个是Parent向widget提供sample,调用每个widget的samplePoke 。
二对应pathPoke,是根据用户在输入框中输入的URL去向后台请求sample,然后自身调用自己的samplepoke从而对URL进行填充。
除了基类里的一些共有性质,每个widget也有共有的2个组件。
![公共组件](2019-09-29-15-22-37.png)
1. 变量输入框组(WidgetParams)
> 每个widget都需要一个输入框组提供给用户用来接收变量值,从而填补完全路径来和后台交互数据。
WidgetParams主要有4个方法:
setVariableList: 父组件将URL中后缀的参数信息传进来,WidgetParams根据参数信息生成对应的输入框。
setVariableInput: 这个方法用于加载保存配置时,setconfig时获取WidgetConfig中的参数信息来填写对应参数的输入框的值。
getVariableValues: 获取参数输入框中的值,返回一个以变量名为key,值为value的map
update: 刷新当前输入框显示
2. 父子路径导航(Navigation)
> 显示当前widget的父子属性的路径,便于进行跳转。
具体实现是通过获取父组件的URL信息,直接axios请求sample,取出其中的parentPath和childrenPath信息来显示。
## Parent
Parent是对所有widget进行管理的部分,是所有widget的父组件。
主要功能分为两部分,一是对Widget的管理,二是支持根据当前URL生成对应widget或者customview。
### 对Widget的管理
1. 添加并显示各widget(addWidget)
> 将选中widget添加进一个WidgetRef List,名字叫widgetList,同时为它分配一个唯一的ref。后期对Widget Component的调用都将通过ref。
在template中用v-for遍历widgetList,将其中所有存下的widget显示出来。
WidgetRef的结构如下:
![WidgetRef结构](2019-09-27-17-46-59.png)
2. 对widget进行拖拽放缩
> 这个功能引用了vue-grid-layout,将每个widget包含在一个GridItem里,便可对每个widget进行拖拽放缩
3. 保存以及加载configfile(saveWidgetList,loadTextFromFile)
> saveWidgetList: 调用widgetList中各widget的getconfig。并将它们对应的ref也保存下来以及拖拽功能所需要的坐标信息存下来。将所有widget的信息存在widgetConfigList中,具体结构如下:
![widgetConfigList结构](2019-09-30-14-05-00.png)
然后把widgetConfigList保存为json文件。
loadTextFromFile: 从文件中导出widgetConfigList,调用widgetConfigList中widgetList的各widget的setconfig方法,将信息传给每个widget让它们自行处理。
### 根据fragment生成对应界面
具体流程图:
![customview流程图](2019-09-30-15-05-53.png)
这个处理过程发生在vue的生命周期函数mounted中。
# WidgetUI使用说明
1. 初始界面
![初始界面](2019-09-27-17-00-52.png)
2. 添加Widget
> 点击Add Widget添加Widget
![Add Widget](2019-09-27-17-01-28.png)
3. Widget使用,以Config为例
> 按住蓝边可以进行拖动,按住右下角直角符号可以进行放缩
> 点击右上角设置按钮出现Path输入框
![设置按钮](2019-09-27-17-13-08.png)
> 输入路径,想要显示的参数名用$$括起来
![路径输入框](2019-09-27-17-15-18.png)
> 点击OK生成对应输入框,同时路径输入框会被隐藏,想要显示再次点击右上设置按钮即可。
![变量输入框](2019-09-27-17-16-42.png)
> 当不确定参数信息时,输入路径后点击Poke
![Poke](2019-09-27-17-19-12.png)
> 会将该属性所需要的所有参数显示出来
![poke后的参数输入框显示](2019-09-27-17-19-59.png)
> 想要获取或设置值时,在输入框中输入参数值,点击下箭头按钮
![获取设置按钮](2019-09-27-17-24-34.png)
> Navigation会显示其父子属性链接,点击后即可跳转
![Navigation](2019-09-27-17-25-41.png)
4. 设好各信息后,点击save按钮将当前界面保存下来。
5. 加载保存界面时,点击Browse按钮选择文件加载。
6. 在浏览器栏直接输入属性路径也可以访问对应界面。
![浏览器输入路径直接访问](2019-09-27-17-28-03.png)
\ No newline at end of file
module.exports = {
presets: [
'@vue/app'
]
}
This diff is collapsed.
module.exports = {
plugins: {
autoprefixer: {}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title></title>
</head>
<body>
<noscript>
<strong>We're sorry but vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app">
</div>
<!-- built files will be auto injected -->
</body>
</html>
\ No newline at end of file
This diff is collapsed.
.smallFont{
font-size: 15px;
}
.largeFont{
font-size: 25px;
}
.largeFont span{
float: left;
}
.valueFont{
font-size: 100px;
}
.valueFont span{
float: left;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<template>
<div>111111111</div>
</template>
<script lang="ts">
import Router from 'vue-router'
import { Prop, Vue, Watch, Emit } from 'vue-property-decorator';
import { WidgetConfig } from "@/models/WidgetConfig";
import { UpdatePayload } from "@/models/UpdatePayload";
import { Widget } from "@/models/widget";
import { ResourceInfo } from "@/models/Customview";
import { WidgetRef } from "@/models/WidgetRef";
import Status from "@/components/Status/Status.vue";
import Component from "vue-class-component";
import WidgetParams from "@/components/Common/WidgetParams.vue";
import PathProcessor from "@/models/PathProcessor";
import axios from "axios";
@Component({
components: {
WidgetParams,
}
})
export default class Windows extends Vue{
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template id="Navigation">
<div>
<div style="width:100%;margin:5px">
<!--<b-button size="lg" @click="showNavigation" style="float:right">Navigation</b-button>-->
<button class="button is-dark" @click="showNavigation" style="float:right">Navigation</button>
</div>
<div v-show="isShowNavigation&&isShowParentPath" style="width:100%;height:25px">
<b-link :href="parentPath" class="smallFont" style="float:left">parentPath:{{ parentPath }}</b-link>
<!-- <a class="smallFont" :href="parentPath" style="float:left">parentPath:{{ parentPath }}</a> -->
</div>
<div
v-show="isShowNavigation"
v-for="(path, index) in childrenPath"
:key="index"
style="width:100%;height:25px"
>
<b-link :href="path" class="smallFont" style="float:left">childrenPath:{{path}}</b-link>
<!-- <a class="smallFont" :href= "path" style="float:left">childrenPath:{{path}}</a> -->
</div>
</div>
</template>
<script lang="ts">
import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import axios from "axios";
import Plotly from "plotly.js";
import global_ from "@/components/Common/global.vue";
import { WidgetConfig } from "@/models/WidgetConfig";
import { UpdatePayload } from "@/models/UpdatePayload";
import PathProcessor from "@/models/PathProcessor";
import { forEach } from "typescript-collections/dist/lib/arrays";
import { map } from "d3";
import WidgetParams from "@/components/Common/WidgetParams.vue";
@Component({
components: {
WidgetParams
}
})
export default class Navigation extends Vue {
@Prop() url!: string;
parentPath!: string;
childrenPath!: string[];
isShowParentPath: boolean = false;
isShowNavigation: boolean = false;
@Watch("url")
onUrlChanged() {
this.getPath();
}
async getPath() {
this.isShowParentPath = false;
var apiLoad = this.url;
await axios.get(apiLoad).then(response => {
this.parentPath = response.data.ParentPath as string;
this.childrenPath = response.data.ChildrenPath as string[];
});
if (this.parentPath != "") {
this.isShowParentPath = true;
}
this.$forceUpdate();
}
showNavigation() {
this.isShowNavigation = !this.isShowNavigation;
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div style="width:100%">
<!--<div v-for="(label, index) in userInputData.keys()" :key="index">
<b-input-group size="lg" style="margin:5px">
<b-input-group-text class="smallFont">{{label}}</b-input-group-text>
<b-form-input v-model="tempUserInputData[label]" ></b-form-input>
</b-input-group>
</div>-->
<div v-for="(label, index) in userInputData.keys()" :key="index">
<div class="field is-horizontal" style="margin:5px">
<div class="field-label is-normal">
<label class="label">{{label}}</label>
</div>
<div class="field-body">
<div class="field">
<div class="control">
<input class="input" type="text" v-model="tempUserInputData[label]">
</div>
</div>
</div>
</div>
</div>
<!--<div style="width:100%;margin:5px">
<b-button variant="primary" size="lg" @click="update" style="float:right">
<b>{{ action }}</b>
<span class="glyphicon glyphicon-save"></span>
</b-button>
</div>-->
<div class="columns" style="width:100%;margin:5px" v-if="isShowGet">
<!--<button class="button is-info column is-offset-11-desktop" @click="update" style="padding-top: 6px;">{{action}}</button>-->
<button class="button column is-offset-9 is-2" @click="update" style="background-color: #216dec;padding-top: 6px; ">{{action}}
<i class="fa fa-download" aria-hidden="true"></i>
</button>
</div>
</div>
</template>
<script lang="ts">
import { Component, Prop, Vue, Watch, Emit } from 'vue-property-decorator';
import { UpdatePayload } from '../../models/UpdatePayload';
import { values, keys } from 'd3';
import { forEach } from "typescript-collections/dist/lib/arrays";
@Component
export default class WidgetParams extends Vue{
@Prop() action!: string;
userInputData= new Map<string, string>();
tempUserInputData:{[key: string]: string} = {};
isShowGet:boolean = false;
/*testv = 1;
test(){
console.log(test);
}*/
showGet(isShowGet:boolean){
this.isShowGet = isShowGet;
}
setVariableList(path: string[]) {
console.log(path);
this.userInputData.clear();
path.forEach(element => {
this.userInputData.set(element, '');
console.log("afterpathextract");
console.log(this.userInputData);
});
console.log(this.userInputData);
this.$forceUpdate();
}
setVariableInput(parentUserInputData:Map<string, string>)
{
for (var key of parentUserInputData.keys()) {
this.tempUserInputData[key] = parentUserInputData.get(key) as string;
}
}
getVariableValues(): Map<string, string> {
for(var key of this.userInputData.keys()) {
this.userInputData.set(key, this.tempUserInputData[key]);
}
console.log(this.tempUserInputData[key]);
return this.userInputData;
}
update(){
var Args:UpdatePayload = {
action: this.action,
variables: this.getVariableValues(),
target:['self']
}
console.log(Args);
this.$emit('updataVariables', Args)
}
}
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<div class="largeFont" style="float:left width:100%">
<span>Basic Path :&nbsp;{{ basePathId }}</span><br>
<span> Rate: {{ sampleId }}</span><br>
<span>length: {{ lengthId }}</span>
<b-button variant="primary" style="float:right">
<span class="glyphicon glyphicon-cog" @click="showPathIdConfig"></span>
</b-button>
<br>
<hr />
</div>
</template>
<script lang="ts">
import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
import axios from 'axios';
@Component
export default class showViewInfo extends Vue {
@Prop() pathId!:string;
basePathId: string = '';
sampleId: string = '';
lengthId: string = '';
@Watch('pathId')
onPathIdChanged(val:any, oldVal:any) {
this.show(val);
}
showPathIdConfig(){
this.$emit("showPathIdConfig");
}
async show(pathId:string) {
this.getBasePath(pathId);
this.getSamplerate(pathId);
this.getLength(pathId);
}
async getBasePath(pathId:any) {
var apiLoad = pathId.thingPath + '/basepath';
await axios.get(apiLoad)
.then((response) => {
this.basePathId = response.data.CFET2CORE_SAMPLE_VAL;
})
}
async getSamplerate(pathId:any) {
var apiLoad = pathId.thingPath + '/samplerate/' + pathId.path;
await axios.get(apiLoad)
.then((response) => {
this.sampleId = response.data.CFET2CORE_SAMPLE_VAL;
})
}
async getLength(pathId:any) {
var apiLoad = pathId.thingPath + '/length/' + pathId.path;
await axios.get(apiLoad)
.then((response) => {
this.lengthId = response.data.CFET2CORE_SAMPLE_VAL;
})
}
}
</script>
\ No newline at end of file
import Vue from 'vue';
import App from './App.vue';
import Buefy from 'buefy';
import 'buefy/dist/buefy.css';
import 'font-awesome/css/font-awesome.min.css';
//import hscmap from '@hscmap/vue-window'
import * as VueWindow from '@hscmap/vue-window';
import 'babel-polyfill';
import VideoPlayer from 'vue-video-player';
import 'vue-video-player/src/custom-theme.css';
import 'video.js/dist/video-js.css';
Vue.config.productionTip = false;
//Vue.use(BootstrapVue)
Vue.use(Buefy);
Vue.use(VueWindow);
Vue.use(VideoPlayer);
// Vue.use(VueRouter);
// const routes = [
// { path: '/', meta: {
// title: 'MdsplusWave'
// }
// }
// ];
// const router = new VueRouter({
// routes
// });
// router.beforeEach((to, from, next) => {
// document.title = 'MdsplusWave'
// next()
// })
new Vue({
render: (h) => h(App),
}).$mount('#app');
//# sourceMappingURL=main.js.map
\ No newline at end of file
{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,GAAG,MAAM,WAAW,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,sBAAsB,CAAA;AAC7B,OAAO,uCAAuC,CAAA;AAC9C,yCAAyC;AACzC,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAQ/C,OAAO,gBAAgB,CAAA;AAEvB,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,uCAAuC,CAAA;AAC9C,OAAO,4BAA4B,CAAA;AAGnC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;AAEjC,uBAAuB;AACvB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACd,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAElB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AAIpB,sBAAsB;AAEtB,mBAAmB;AACnB,0BAA0B;AAC1B,2BAA2B;AAC3B,MAAM;AACN,IAAI;AACJ,KAAK;AAEL,iCAAiC;AACjC,WAAW;AACX,MAAM;AAEN,0CAA0C;AAC1C,mCAAmC;AACnC,WAAW;AACX,KAAK;AAGL,IAAI,GAAG,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;CAEtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
{"version":3,"file":"PathProcessor.js","sourceRoot":"","sources":["PathProcessor.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,aAAa;IACvB,eAAe,CAAC,SAA8B,EAAE,IAAY;QAC/D,qCAAqC;QACrC,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACtC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,UAAU;YACV,SAAS,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,GAAW,EAAE,EAAE;gBAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACrB,yCAAyC;oBACzC,IAAI,KAAK,IAAI,GAAG,EAAE;wBACd,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;wBAC1B,oCAAoC;wBACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;qBACnC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,kBAAkB,CAAC,IAAY;QAClC,IAAI,UAAoB,CAAC;QACzB,UAAU,GAAG,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,MAAM,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBACnC,IAAG,OAAO,IAAI,EAAE,EAChB;oBACI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B;YACD,CAAC,CAAC,CAAC;SACN;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAC,UAAU,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ"}
\ No newline at end of file
This diff is collapsed.
export default class StrMapObjChange {
strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k, v] of strMap) {
// We don’t escape the key '__proto__'
// which can cause problems on older engines
obj[k] = v;
}
return obj;
}
objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
}
//# sourceMappingURL=StrMapObjChange.js.map
\ No newline at end of file
{"version":3,"file":"StrMapObjChange.js","sourceRoot":"","sources":["StrMapObjChange.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,eAAe;IAC3B,WAAW,CAAC,MAA2B;QAC5C,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE;YACzB,sCAAsC;YACtC,4CAA4C;YAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACZ;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,WAAW,CAAC,GAAQ;QACzB,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
{"version":3,"file":"UpdatePayload.js","sourceRoot":"","sources":["UpdatePayload.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,iCAAG,CAAA;IACH,iCAAG,CAAA;IACH,uCAAM,CAAA;IACN,6CAAS,CAAA;IACT,iEAAmB,CAAA;AACrB,CAAC,EANW,MAAM,KAAN,MAAM,QAMjB"}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
{"version":3,"file":"WidgetConfig.js","sourceRoot":"","sources":["WidgetConfig.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,eAAe;IAA5B;QAES,eAAU,GAAgB,EAAE,CAAC;IACtC,CAAC;CAAA"}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
{"version":3,"file":"WidgetRef.js","sourceRoot":"","sources":["WidgetRef.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IAAtB;QACE,iFAAiF;QACjF,qEAAqE;QAC9D,wBAAmB,GAAW,EAAE,CAAC;QACjC,QAAG,GAAW,EAAE,CAAC;QAExB,0BAA0B;QACnB,MAAC,GAAQ,CAAC,CAAC;QACX,MAAC,GAAQ,CAAC,CAAC;QACX,MAAC,GAAQ,CAAC,CAAC;QACX,MAAC,GAAQ,CAAC,CAAC;QACX,MAAC,GAAQ,CAAC,CAAC;IACpB,CAAC;CAAA"}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment