@christianriedl/utils 1.0.145 → 1.0.147

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/utils",
3
- "version": "1.0.145",
3
+ "version": "1.0.147",
4
4
  "description": "Interfaces, local storage, service worker, configuration, application state",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -154,11 +154,13 @@
154
154
  return '';
155
155
  }
156
156
  }
157
- function setFilter(newFilter: IOpenAIFilter) {
157
+ function setFilter(newFilter: IOpenAIFilter, newTools: string[]) {
158
158
  filter.value = newFilter;
159
+ tools.value = newTools;
159
160
  showFilter.value = false;
160
161
  }
161
162
  async function showConfigDialog() {
163
+ showFilter.value = false;
162
164
  if (await openAI.initializeModelNames())
163
165
  showConfig.value = true;
164
166
  }
@@ -182,9 +184,6 @@
182
184
  <v-btn variant="tonal" class="bg-office aibutton" @click="isUpload=true;replyLines=[]">
183
185
  <v-icon size="large" icon="$image" color="primary"></v-icon>
184
186
  </v-btn>
185
- <v-btn variant="tonal" class="bg-office aibutton" @click="showConfigDialog">
186
- <v-icon size="large" icon="$settings" color="primary"></v-icon>
187
- </v-btn>
188
187
  </v-col>
189
188
  </v-row>
190
189
  <v-row v-if="isCamera" dense align="center">
@@ -218,7 +217,8 @@
218
217
  <OpenAIConfig :tools="tools" :ismobile="isMobile" @use="onUse" @back="showConfig=false"></OpenAIConfig>
219
218
  </v-dialog>
220
219
  <v-dialog v-model="showFilter" :fullscreen="isMobile">
221
- <OpenAIFilter :vsmetadata="openAI.vsMetadata" :fileattributes="openAI.fileAttributes" :filter="filter" @back="setFilter"></OpenAIFilter>
220
+ <OpenAIFilter :vsmetadata="openAI.vsMetadata" :fileattributes="openAI.fileAttributes" :alltools="openAI.aiTools"
221
+ :tools="tools" :filter="filter" @back="setFilter" @config="showConfigDialog"></OpenAIFilter>
222
222
  </v-dialog>
223
223
  </v-container>
224
224
  </template>
@@ -36,6 +36,7 @@
36
36
  const metadata = ref<IDataItem[]>([]);
37
37
  const toolName = ref('');
38
38
  const toolFunctions = reactive<IFunction[]>([]);
39
+ const canClear = !props.ismobile;
39
40
  let fileHandle: FileSystemFileHandle | null = null;
40
41
  let vsSelected = false;
41
42
 
@@ -364,13 +365,13 @@
364
365
  </v-select>
365
366
  </v-col>
366
367
  <v-col cols="2">
367
- <v-number-input v-model="options.max_output_tokens" control-variant="hidden" hide-details clearable label="Max Token" density="compact" @change="onOptionChange"></v-number-input>
368
+ <v-number-input v-model="options.max_output_tokens" control-variant="hidden" hide-details :clearable="canClear" label="Max Token" density="compact" @change="onOptionChange"></v-number-input>
368
369
  </v-col>
369
370
  <v-col cols="1">
370
- <v-number-input v-model="options.temperature" control-variant="hidden" :precision="2" hide-details clearable label="Temperature" density="compact" @change="onOptionChange"></v-number-input>
371
+ <v-number-input v-model="options.temperature" control-variant="hidden" :precision="2" hide-details :clearable="canClear" label="Temperature" density="compact" @change="onOptionChange"></v-number-input>
371
372
  </v-col>
372
373
  <v-col cols="1">
373
- <v-number-input v-model="options.top_p" control-variant="hidden" :precision="2" hide-details clearable label="Top P" density="compact" @change="onOptionChange"></v-number-input>
374
+ <v-number-input v-model="options.top_p" control-variant="hidden" :precision="2" hide-details :clearable="canClear" label="Top P" density="compact" @change="onOptionChange"></v-number-input>
374
375
  </v-col>
375
376
  <v-col cols="1">
376
377
  <v-checkbox v-model="options.store" label="Store" hide-details density="compact" @change="onOptionChange"></v-checkbox>
@@ -378,7 +379,7 @@
378
379
  </v-row>
379
380
  <v-row dense align="center">
380
381
  <v-col cols="12">
381
- <v-text-field v-model="options.instructions" type="string" hide-details clearable label="System Message" density="compact" @change="onOptionChange"></v-text-field>
382
+ <v-text-field v-model="options.instructions" type="string" hide-details :clearable="canClear" label="System Message" density="compact" @change="onOptionChange"></v-text-field>
382
383
  </v-col>
383
384
  </v-row>
384
385
  <template v-for="(tool, key) in tools">
@@ -387,17 +388,17 @@
387
388
  <v-text-field v-model="tool.server_label" type="string " hide-details disabled label="mcp" density="compact" @change="onToolChange"></v-text-field>
388
389
  </v-col>
389
390
  <v-col cols="3">
390
- <v-text-field v-model="tool.server_url" type="string" hide-details clearable label="Url" density="compact" @change="onToolChange"></v-text-field>
391
+ <v-text-field v-model="tool.server_url" type="string" hide-details :clearable="canClear" label="Url" density="compact" @change="onToolChange"></v-text-field>
391
392
  </v-col>
392
393
  <v-col cols="2">
393
- <v-text-field v-model="tool.connector_id" type="string" hide-details clearable label="Connector Id" density="compact" @change="onToolChange"></v-text-field>
394
+ <v-text-field v-model="tool.connector_id" type="string" hide-details :clearable="canClear" label="Connector Id" density="compact" @change="onToolChange"></v-text-field>
394
395
  </v-col>
395
396
  <v-col cols="2">
396
- <v-text-field v-model="tool.server_description" type="string" hide-details clearable label="Description" density="compact" @change="onToolChange"></v-text-field>
397
+ <v-text-field v-model="tool.server_description" type="string" hide-details :clearable="canClear" label="Description" density="compact" @change="onToolChange"></v-text-field>
397
398
  </v-col>
398
399
  <v-col cols="props.isMobile ? 2 : 1">
399
400
  <v-select v-model="tool.require_approval" :items="mcpApprovals" hide-details
400
- density="compact" label="Approval" @update:modelValue="onToolChange">
401
+ density="compact" label="Approval" @update:modelValue="onToolChange">
401
402
  </v-select>
402
403
  </v-col>
403
404
  <v-col v-if="!props.ismobile" cols="1">
@@ -419,7 +420,7 @@
419
420
  </v-select>
420
421
  </v-col>
421
422
  <v-col cols="2">
422
- <v-number-input v-model="tool.max_num_results" control-variant="hidden" hide-details clearable label="Max Results" density="compact" @change="onToolChange"></v-number-input>
423
+ <v-number-input v-model="tool.max_num_results" control-variant="hidden" hide-details :clearable="canClear" label="Max Results" density="compact" @change="onToolChange"></v-number-input>
423
424
  </v-col>
424
425
  <v-col cols="1">
425
426
  <v-btn icon="$delete" variant="tonal" @click.stop.prevent="onDelete(key)"></v-btn>
@@ -433,13 +434,13 @@
433
434
  <v-text-field :model-value="key" type="string" hide-details disabled label="file_search" density="compact" @change="onToolChange"></v-text-field>
434
435
  </v-col>
435
436
  <v-col cols="2">
436
- <v-text-field v-model="tool.user_location.country" type="string" hide-details clearable label="Country" density="compact" @change="onToolChange"></v-text-field>
437
+ <v-text-field v-model="tool.user_location.country" type="string" hide-details :clearable="canClear" label="Country" density="compact" @change="onToolChange"></v-text-field>
437
438
  </v-col>
438
439
  <v-col cols="3">
439
- <v-text-field v-model="tool.user_location.city" type="string" hide-details clearable label="City" density="compact" @change="onToolChange"></v-text-field>
440
+ <v-text-field v-model="tool.user_location.city" type="string" hide-details :clearable="canClear" label="City" density="compact" @change="onToolChange"></v-text-field>
440
441
  </v-col>
441
442
  <v-col cols="4">
442
- <v-text-field v-model="tool.user_location.region" type="string" hide-details clearable label="Region" density="compact" @change="onToolChange"></v-text-field>
443
+ <v-text-field v-model="tool.user_location.region" type="string" hide-details :clearable="canClear" label="Region" density="compact" @change="onToolChange"></v-text-field>
443
444
  </v-col>
444
445
  <v-col cols="1">
445
446
  <v-btn icon="$delete" variant="tonal" @click.stop.prevent="onDelete(key)"></v-btn>
@@ -449,6 +450,32 @@
449
450
  </v-col>
450
451
  </v-row>
451
452
  </template>
453
+ <template v-if="!props.ismobile && openAI.vectorStore">
454
+ <v-divider></v-divider>
455
+ <h4> </h4>
456
+ <h4>Vector Store</h4>
457
+ <v-row dense align="center">
458
+ <v-col cols="2">
459
+ <v-combobox v-model="selectedVectorStoreName" :items="vectorStoreNames" hide-details density="compact" @update:modelValue="vectorStoreSelected()"></v-combobox>
460
+ </v-col>
461
+ <v-col cols="2">
462
+ <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$delete" @click="deleteVectorStore">VS</v-btn>
463
+ <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$plus" @click="addVectorStore">VS</v-btn>
464
+ <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$pencil" @click="editVectorStore">VS</v-btn>
465
+ </v-col>
466
+ <v-col cols="5">
467
+ <v-combobox v-model="selectedVectorStoreFile" :items="vectorStoreFiles" hide-details density="compact"></v-combobox>
468
+ </v-col>
469
+ <v-col cols="1">
470
+ <v-btn variant="text" prepend-icon="$search" @click="searchFile">FILE</v-btn>
471
+ </v-col>
472
+ <v-col cols="2">
473
+ <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$delete" @click="deleteFile">FILE</v-btn>
474
+ <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$plus" @click="addFile">FILE</v-btn>
475
+ <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$pencil" @click="editFile">FILE</v-btn>
476
+ </v-col>
477
+ </v-row>
478
+ </template>
452
479
  <v-row dense align="center">
453
480
  <v-col cols="2">
454
481
  <v-btn class="bg-office" @click="emits('back')">
@@ -481,32 +508,6 @@
481
508
  </v-btn>
482
509
  </v-col>
483
510
  </v-row>
484
- <template v-if="!props.ismobile && openAI.vectorStore">
485
- <v-divider></v-divider>
486
- <h4> </h4>
487
- <h4>Vector Store</h4>
488
- <v-row dense align="center">
489
- <v-col cols="2">
490
- <v-combobox v-model="selectedVectorStoreName" :items="vectorStoreNames" hide-details density="compact" @update:modelValue="vectorStoreSelected()"></v-combobox>
491
- </v-col>
492
- <v-col cols="2">
493
- <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$delete" @click="deleteVectorStore">VS</v-btn>
494
- <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$plus" @click="addVectorStore">VS</v-btn>
495
- <v-btn :disabled="!selectedVectorStoreName" variant="text" prepend-icon="$pencil" @click="editVectorStore">VS</v-btn>
496
- </v-col>
497
- <v-col cols="5">
498
- <v-combobox v-model="selectedVectorStoreFile" :items="vectorStoreFiles" hide-details density="compact"></v-combobox>
499
- </v-col>
500
- <v-col cols="1">
501
- <v-btn variant="text" prepend-icon="$search" @click="searchFile">FILE</v-btn>
502
- </v-col>
503
- <v-col cols="2">
504
- <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$delete" @click="deleteFile">FILE</v-btn>
505
- <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$plus" @click="addFile">FILE</v-btn>
506
- <v-btn :disabled="!selectedVectorStoreFile" variant="text" prepend-icon="$pencil" @click="editFile">FILE</v-btn>
507
- </v-col>
508
- </v-row>
509
- </template>
510
511
  <v-dialog v-model="showMetaData">
511
512
  <OpenAIMetaData :items="metadata" :vectorstore="editVectorStoreMetaData" @back="saveMetaData"></OpenAIMetaData>
512
513
  </v-dialog>
@@ -1,16 +1,20 @@
1
1
  <script setup lang="ts">
2
- import { inject, computed, ref, StyleValue } from 'vue';
3
- import { IDataItem, Dictionary, IComparisonFilter, ICompoundFilter, IOpenAIFilter } from '@christianriedl/utils'
2
+ import { inject, reactive, computed, ref, StyleValue } from 'vue';
3
+ import { IDataItem, Dictionary, IComparisonFilter, ICompoundFilter, IOpenAIFilter, ITool } from '@christianriedl/utils'
4
4
  import SettingsLine from '../components/SettingsLine.vue';
5
5
 
6
- const props = defineProps<{ vsmetadata: IDataItem[], fileattributes: IDataItem[], filter?: IOpenAIFilter }>();
7
- const emits = defineEmits<{ (e: 'back', filter: IOpenAIFilter): void }>();
6
+ const props = defineProps<{ vsmetadata: IDataItem[], fileattributes: IDataItem[], alltools: Dictionary<ITool>, tools?: string[], filter?: IOpenAIFilter }>();
7
+ const emits = defineEmits<{ (e: 'back', filter: IOpenAIFilter, tools: string[]): void, (e: 'config'): void }>();
8
8
  const items: IDataItem[] = [];
9
9
  const opsvs = ['', 'eq'];
10
10
  const opsfile = ['', 'eq', 'ne', 'gt', 'gte', 'lt', 'lte'];
11
11
  const operators: Dictionary<string> = {};;
12
12
  const numvs = props.vsmetadata.length;
13
+ const tools = reactive<Dictionary<boolean>>({});
13
14
 
15
+ for (const key in props.alltools) {
16
+ tools[key] = props.tools ? props.tools.indexOf(key) >= 0 : false;
17
+ }
14
18
  for (const it of props.vsmetadata) {
15
19
  items.push(Object.assign({}, it));
16
20
  operators[it.name] = '';
@@ -60,7 +64,12 @@
60
64
  }
61
65
  }
62
66
  }
63
- emits('back', filter);
67
+ const selectedTools: string[] = [];
68
+ for (const key in tools) {
69
+ if (tools[key])
70
+ selectedTools.push(key);
71
+ }
72
+ emits('back', filter, selectedTools);
64
73
  }
65
74
  function onOperation(item: IDataItem, op: string) {
66
75
  operators[item.name] = op;
@@ -69,31 +78,71 @@
69
78
 
70
79
  <template>
71
80
  <v-container fluid class="bg-office">
72
- <h4>FileSearch filter</h4>
73
- <v-table>
74
- <thead>
75
- <tr>
76
- <th class="font-weight-bold" style="width:40%">Name</th>
77
- <th class="font-weight-bold" style="width:40%">Value</th>
78
- <th class="font-weight-bold" style="width:20%">Op</th>
79
- </tr>
80
- </thead>
81
- <tbody>
82
- <settings-line v-for="(item, index) in items" :key="item.name" :item="item" :op="operators[item.name]"
83
- :operations="index < numvs ? opsvs : opsfile" clearable @change="onChange(item, true)"
84
- @clear="onChange(item, false)" @operation="(op) => onOperation(item, op)">
81
+ <h4>Tools and FileSearch filter</h4>
82
+ <v-row dense>
83
+ <v-col cols="4">
84
+ <!--
85
+ <v-table density="compact">
86
+ <thead>
87
+ <tr>
88
+ <th class="font-weight-bold">Tool use</th>
89
+ </tr>
90
+ </thead>
91
+ <tbody>
92
+ <tr v-for="(tool,key) in tools" :key="key">
93
+ <td>
94
+ <v-checkbox density="compact" hide-details v-model="tools[key]" :label="key.toString()"></v-checkbox>
95
+ </td>
96
+ </tr>
97
+ </tbody>
98
+ </v-table>
99
+ -->
100
+ <v-row dense class="font-weight-bold">
101
+ <v-col cols="4">Tool Use</v-col>
102
+ </v-row>
103
+ <v-divider></v-divider>
104
+ <v-row dense v-for="(tool,key) in tools" :key="key">
105
+ <v-col cols="12">
106
+ <v-checkbox density="compact" hide-details v-model="tools[key]" :label="key.toString()"></v-checkbox>
107
+ </v-col>
108
+ </v-row>
109
+ </v-col>
110
+ <v-col cols="8">
111
+ <!--
112
+ <v-table density="compact">
113
+ <thead>
114
+ <tr>
115
+ <th class="font-weight-bold" style="width:35%">Name</th>
116
+ <th class="font-weight-bold" style="width:35%">Value</th>
117
+ <th class="font-weight-bold" style="width:30%">Op</th>
118
+ </tr>
119
+ </thead>
120
+ <tbody>
121
+ <settings-line v-for="(item, index) in items" :key="item.name" :item="item" :op="operators[item.name]"
122
+ :operations="index < numvs ? opsvs : opsfile" @change="onChange(item, true)"
123
+ @clear="onChange(item, false)" @operation="(op) => onOperation(item, op)">
124
+ </settings-line>
125
+ </tbody>
126
+ </v-table>
127
+ -->
128
+ <v-row dense class="font-weight-bold">
129
+ <v-col cols="6">Name</v-col>
130
+ <v-col cols="4">Value</v-col>
131
+ <v-col cols="2">Op</v-col>
132
+ </v-row>
133
+ <v-divider></v-divider>
134
+ <settings-line v-for="(item, index) in items" :key="item.name" :item="item" :op="operators[item.name]"
135
+ :operations="index < numvs ? opsvs : opsfile" @change="onChange(item, true)"
136
+ @clear="onChange(item, false)" @operation="(op) => onOperation(item, op)">
85
137
  </settings-line>
86
- <tr>
87
- <td>
88
- <v-btn @click="onBack()">
89
- BACK
90
- <v-icon icon="$back"></v-icon>
91
- </v-btn>
92
- </td>
93
- <td></td>
94
- <td></td>
95
- </tr>
96
- </tbody>
97
- </v-table>
138
+ </v-col>
139
+ </v-row>
140
+ <v-row dense>
141
+ <v-col cols="12">
142
+ <v-btn @click="onBack()">BACK<v-icon icon="$back"></v-icon></v-btn>
143
+ <v-btn @click="emits('config')">CONFIG<v-icon icon="$settings"></v-icon></v-btn>
144
+ </v-col>
145
+ </v-row>
98
146
  </v-container>
99
147
  </template>
148
+
@@ -33,22 +33,35 @@
33
33
  <template>
34
34
  <v-container fluid class="bg-office">
35
35
  <h4>{{header}}</h4>
36
- <v-table>
37
- <thead>
38
- <tr>
39
- <th class="font-weight-bold" style="width:50%">Name</th>
40
- <th class="font-weight-bold" style="width:50%">Value</th>
41
- </tr>
42
- </thead>
43
- <tbody>
44
- <settings-line v-for="item in items" :key="item.name" :item="item" @change="onChange(item, true)" clearable @clear="onChange(item, false)"></settings-line>
45
- <tr>
46
- <td>
47
- <v-btn @click="onBack">BACK</v-btn>
48
- </td>
49
- <td></td>
50
- </tr>
51
- </tbody>
52
- </v-table>
36
+ <!--
37
+ <v-table>
38
+ <thead>
39
+ <tr>
40
+ <th class="font-weight-bold" style="width:50%">Name</th>
41
+ <th class="font-weight-bold" style="width:50%">Value</th>
42
+ </tr>
43
+ </thead>
44
+ <tbody>
45
+ <settings-line v-for="item in items" :key="item.name" :item="item" @change="onChange(item, true)" clearable @clear="onChange(item, false)"></settings-line>
46
+ <tr>
47
+ <td>
48
+ <v-btn @click="onBack">BACK</v-btn>
49
+ </td>
50
+ <td></td>
51
+ </tr>
52
+ </tbody>
53
+ </v-table>
54
+ -->
55
+ <v-row dense class="font-weight-bold">
56
+ <v-col cols="6">Topic</v-col>
57
+ <v-col cols="6">Parameter</v-col>
58
+ </v-row>
59
+ <v-divider></v-divider>
60
+ <settings-line v-for="item in items" :key="item.name" :item="item" @change="onChange(item, true)" clearable @clear="onChange(item, false)"></settings-line>
61
+ <v-row dense>
62
+ <v-col cols="3">
63
+ <v-btn @click="onBack">BACK</v-btn>
64
+ </v-col>
65
+ </v-row>
53
66
  </v-container>
54
67
  </template>
@@ -29,14 +29,15 @@
29
29
  </script>
30
30
 
31
31
  <template>
32
+ <!--
32
33
  <tr v-if="isVisible" class="settingsline">
33
34
  <td >{{description}}</td>
34
35
  <td>
35
- <v-switch v-if="isBoolean" v-model="item.value" :disabled="isDisabled" density="compact" hide-details color="primary"
36
+ <v-switch v-if="isBoolean" v-model="item.value" :disabled="isDisabled" density="compact" hide-details color="primary"
36
37
  :append-icon="props.clearable ? '$clear' : undefined" @update:modelValue="onChange" @click:append="onClear"></v-switch>
37
- <v-text-field v-if="isString" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
38
+ <v-text-field v-if="isString" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
38
39
  hide-details type="string" @update:modelValue="onChange" @click:clear="onClear"></v-text-field>
39
- <v-text-field v-if="isNumber" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
40
+ <v-text-field v-if="isNumber" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
40
41
  hide-details type="number" @update:modelValue="onChange" @click:clear="onClear"></v-text-field>
41
42
  <v-select v-if="isEnum" name="enum" density="compact" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable"
42
43
  :items="enumValues" persistent-hint @update:modelValue="onChange" @click:clear="onClear" dense solo hide-details single-line>
@@ -47,6 +48,26 @@
47
48
  </v-select>
48
49
  </td>
49
50
  </tr>
51
+ -->
52
+ <v-row dense v-if="isVisible">
53
+ <v-col cols="6">{{description}}</v-col>
54
+ <v-col cols="props.operations ? 4 : 6">
55
+ <v-switch v-if="isBoolean" v-model="item.value" :disabled="isDisabled" density="compact" hide-details color="primary"
56
+ :append-icon="props.clearable ? '$clear' : undefined" @update:modelValue="onChange" @click:append="onClear"></v-switch>
57
+ <v-text-field v-if="isString" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
58
+ hide-details type="string" @update:modelValue="onChange" @click:clear="onClear"></v-text-field>
59
+ <v-text-field v-if="isNumber" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable" density="compact"
60
+ hide-details type="number" @update:modelValue="onChange" @click:clear="onClear"></v-text-field>
61
+ <v-select v-if="isEnum" name="enum" density="compact" v-model="item.value" :disabled="isDisabled" :clearable="props.clearable"
62
+ :items="enumValues" persistent-hint @update:modelValue="onChange" @click:clear="onClear" dense solo hide-details single-line>
63
+ </v-select>
64
+ </v-col>
65
+ <v-col v-if="props.operations">
66
+ <v-select density="compact" v-model="operation" :items="props.operations" persistent-hint @update:modelValue="onChangeOperation" dense solo hide-details single-line>
67
+ </v-select>
68
+ </v-col>
69
+ </v-row>
70
+ <v-divider></v-divider>
50
71
  </template>
51
72
 
52
73
 
@@ -60,18 +60,26 @@
60
60
  </script>
61
61
 
62
62
  <template>
63
- <v-container fluid :style="heightStyle">
63
+ <v-container fluid :style="heightStyle">
64
64
  <h2>Settings</h2>
65
- <v-table>
66
- <thead>
67
- <tr>
68
- <th class="font-weight-bold" style="width:50%">Topic</th>
69
- <th class="font-weight-bold" style="width:50%">Parameter</th>
70
- </tr>
71
- </thead>
72
- <tbody>
73
- <settings-line v-for="config in appConfig.items" :key="config.name" :item="config" :scopes="scopes" @change="onChange(config)"></settings-line>
74
- </tbody>
75
- </v-table>
65
+ <!--
66
+ <v-table>
67
+ <thead>
68
+ <tr>
69
+ <th class="font-weight-bold" style="width:50%">Topic</th>
70
+ <th class="font-weight-bold" style="width:50%">Parameter</th>
71
+ </tr>
72
+ </thead>
73
+ <tbody>
74
+ <settings-line v-for="config in appConfig.items" :key="config.name" :item="config" :scopes="scopes" @change="onChange(config)"></settings-line>
75
+ </tbody>
76
+ </v-table>
77
+ -->
78
+ <v-row dense class="font-weight-bold">
79
+ <v-col cols="6">Topic</v-col>
80
+ <v-col cols="6">Parameter</v-col>
81
+ </v-row>
82
+ <v-divider></v-divider>
83
+ <settings-line v-for="config in appConfig.items" :key="config.name" :item="config" :scopes="scopes" @change="onChange(config)"></settings-line>
76
84
  </v-container>
77
85
  </template>