@mixd-id/web-scaffold 0.2.250801014 → 0.2.260801002
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/README.md +25 -1
- package/docs/components/AIDashboard.md +117 -32
- package/docs/components/Alert.md +3 -1
- package/docs/components/Card.md +5 -0
- package/docs/components/PivotList.md +207 -0
- package/docs/components/Textbox.md +20 -1
- package/docs/components/Tooltip.md +148 -0
- package/package.json +17 -61
- package/src/components/AIChat.vue +14 -5
- package/src/components/AIChatItem.vue +34 -3
- package/src/components/AIDashboard.vue +144 -98
- package/src/components/Alert.vue +58 -35
- package/src/components/Card.vue +55 -6
- package/src/components/Carousel.vue +1 -1
- package/src/{widgets → components}/CartSetting.vue +1 -0
- package/src/components/Chart.vue +2 -2
- package/src/components/Checkbox.vue +22 -24
- package/src/components/CodeEditor.vue +2 -0
- package/src/{widgets → components}/CollapsiblePanelSetting.vue +1 -0
- package/src/components/ColorPicker.vue +2 -2
- package/src/{widgets → components}/ComponentSetting2.vue +1 -1
- package/src/components/Confirm.vue +2 -0
- package/src/{widgets → components}/ContactForm.vue +1 -1
- package/src/components/CopyToClipboard.vue +0 -1
- package/src/components/Datepicker.vue +2 -0
- package/src/components/Datetimepicker.vue +1 -1
- package/src/components/Dropdown.vue +1 -1
- package/src/{widgets → components}/FeatureList.vue +1 -1
- package/src/components/Gmaps.vue +1 -1
- package/src/{widgets → components}/IconList.vue +1 -1
- package/src/components/Image.vue +1 -1
- package/src/components/ImagePreview.vue +32 -51
- package/src/components/List.vue +45 -8
- package/src/components/MarkdownEdit.vue +1 -1
- package/src/components/MarkdownPreview.vue +4 -1
- package/src/{widgets → components}/MenuItem1Setting.vue +1 -0
- package/src/components/Metric.vue +30 -7
- package/src/components/MultiDropdown.vue +3 -1
- package/src/{widgets → components}/MultiValueSetting.vue +2 -2
- package/src/{widgets → components}/MultiValueSetting2.vue +2 -2
- package/src/components/OTPField.vue +3 -1
- package/src/components/PivotList.vue +1239 -0
- package/src/{widgets → components}/PresetBar.vue +1 -1
- package/src/components/PresetSelectorFilterItem.vue +1 -1
- package/src/components/Radio.vue +1 -1
- package/src/{widgets → components}/Share.vue +1 -1
- package/src/components/SvgEditor.vue +1 -1
- package/src/components/Switch.vue +1 -1
- package/src/components/TextWithTag.vue +2 -2
- package/src/components/Textbox.vue +63 -5
- package/src/components/Toast.vue +2 -1
- package/src/components/Tooltip.vue +626 -0
- package/src/components/VirtualGrid.vue +2 -2
- package/src/components/VirtualTable.vue +4 -3
- package/src/{widgets → components}/WebDatasourceSelector.vue +2 -0
- package/src/{widgets → components}/WebLayoutSelector.vue +1 -1
- package/src/directives/tooltip.js +131 -0
- package/src/index.js +11 -235
- package/src/themes/default/index.js +16 -0
- package/src/utils/ai-dashboard.js +163 -38
- package/src/utils/helpers.mjs +52 -5
- package/src/utils/list.mjs +4 -1
- package/src/utils/pivot-formula.mjs +358 -0
- package/src/utils/pivot-list.mjs +557 -0
- package/src/utils/tooltip.mjs +243 -0
- package/src/utils/wss.js +26 -6
- package/src/utils/wss.mjs +29 -2
- /package/src/{widgets → components}/AhrefSetting.vue +0 -0
- /package/src/{widgets → components}/ArticleSetting.vue +0 -0
- /package/src/{widgets → components}/BackgroundColorSetting.vue +0 -0
- /package/src/{widgets → components}/BlockSetting.vue +0 -0
- /package/src/{widgets → components}/BorderColorSetting.vue +0 -0
- /package/src/{widgets → components}/ButtonSetting.vue +0 -0
- /package/src/{widgets → components}/CarouselSetting.vue +0 -0
- /package/src/{widgets → components}/ColumnSelector.vue +0 -0
- /package/src/{widgets → components}/ComponentSetting.vue +0 -0
- /package/src/{widgets → components}/ContactFormSetting.vue +0 -0
- /package/src/{widgets → components}/CountdownSetting.vue +0 -0
- /package/src/{widgets → components}/DataListSetting.vue +0 -0
- /package/src/{widgets → components}/EmbeddedVideo.vue +0 -0
- /package/src/{widgets → components}/EmbeddedVideoSetting.vue +0 -0
- /package/src/{widgets → components}/FAQ.vue +0 -0
- /package/src/{widgets → components}/FAQSetting.vue +0 -0
- /package/src/{widgets → components}/FeatureListSetting.vue +0 -0
- /package/src/{widgets → components}/FlexSetting.vue +0 -0
- /package/src/{widgets → components}/GridSetting.vue +0 -0
- /package/src/{widgets → components}/Header2.vue +0 -0
- /package/src/{widgets → components}/Header2Setting.vue +0 -0
- /package/src/{widgets → components}/IconListSetting.vue +0 -0
- /package/src/{widgets → components}/ImageSetting.vue +0 -0
- /package/src/{widgets → components}/LLMChat.vue +0 -0
- /package/src/{widgets → components}/LinkSetting.vue +0 -0
- /package/src/{widgets → components}/LinkSettingModal.vue +0 -0
- /package/src/{widgets → components}/ModalSetting.vue +0 -0
- /package/src/{widgets → components}/OGSettingModal.vue +0 -0
- /package/src/{widgets → components}/ParagraphSetting.vue +0 -0
- /package/src/{widgets → components}/PositionSetting.vue +0 -0
- /package/src/{widgets → components}/PresetBarPivot.vue +0 -0
- /package/src/{widgets → components}/PresetBarPivotColumnEdit.vue +0 -0
- /package/src/{widgets → components}/PresetBarPivotValueEdit.vue +0 -0
- /package/src/{widgets → components}/PresetSelector.vue +0 -0
- /package/src/{widgets → components}/Review.vue +0 -0
- /package/src/{widgets → components}/ReviewSetting.vue +0 -0
- /package/src/{widgets → components}/SearchModalSetting.vue +0 -0
- /package/src/{widgets → components}/ShareSetting.vue +0 -0
- /package/src/{widgets → components}/SvgSetting.vue +0 -0
- /package/src/{widgets → components}/TableSetting.vue +0 -0
- /package/src/{widgets → components}/TestimonialSetting.vue +0 -0
- /package/src/{widgets → components}/TextBlockSetting.vue +0 -0
- /package/src/{widgets → components}/ThumbnailSetting.vue +0 -0
- /package/src/{widgets → components}/WebComponentSelector.vue +0 -0
- /package/src/{widgets → components}/WebPageBuilder.vue +0 -0
- /package/src/{widgets → components}/YoutubeVideoSetting.vue +0 -0
|
@@ -1,80 +1,61 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<Card
|
|
2
|
+
<Card ref="card" :float="true" width="400" height="400" :class="$style.previewModal">
|
|
3
3
|
<div class="flex-1 flex flex-col gap-3">
|
|
4
4
|
<div class="flex flex-row gap-4 justify-end items-center p-3 pr-6">
|
|
5
5
|
<slot name="moreButtons"></slot>
|
|
6
6
|
<a v-if="canDownload" :href="imageUrl" target="_blank" download>
|
|
7
7
|
<svg xmlns="http://www.w3.org/2000/svg" width="19" height="19" class="fill-text" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.0.0-alpha3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M480 352h-133.5l-45.25 45.25C289.2 409.3 273.1 416 256 416s-33.16-6.656-45.25-18.75L165.5 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96C512 366.3 497.7 352 480 352zM432 456c-13.2 0-24-10.8-24-24c0-13.2 10.8-24 24-24s24 10.8 24 24C456 445.2 445.2 456 432 456zM233.4 374.6C239.6 380.9 247.8 384 256 384s16.38-3.125 22.62-9.375l128-128c12.49-12.5 12.49-32.75 0-45.25c-12.5-12.5-32.76-12.5-45.25 0L288 274.8V32c0-17.67-14.33-32-32-32C238.3 0 224 14.33 224 32v242.8L150.6 201.4c-12.49-12.5-32.75-12.5-45.25 0c-12.49 12.5-12.49 32.75 0 45.25L233.4 374.6z"/></svg>
|
|
8
8
|
</a>
|
|
9
|
-
<button @click="close">
|
|
10
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" class="fill-text" viewBox="0 0 320 512"><!--! Font Awesome Pro 6.0.0-alpha3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
|
|
11
|
-
</button>
|
|
12
9
|
</div>
|
|
13
10
|
<div class="flex items-center justify-center">
|
|
14
|
-
<img :src="imageUrl" class="max-h-[75vh]"/>
|
|
11
|
+
<img v-if="imageUrl" :src="imageUrl" class="max-h-[75vh]"/>
|
|
15
12
|
</div>
|
|
16
13
|
</div>
|
|
17
14
|
</Card>
|
|
18
15
|
</template>
|
|
19
16
|
|
|
20
|
-
<script>
|
|
17
|
+
<script setup>
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
import {computed, ref, useTemplateRef} from "vue";
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
const props = defineProps({
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
computed: {
|
|
36
|
-
|
|
37
|
-
canDownload(){
|
|
38
|
-
return this.download || this.downloadable
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
},
|
|
23
|
+
download: {
|
|
24
|
+
type: [ Boolean, String ],
|
|
25
|
+
default: false
|
|
26
|
+
}
|
|
42
27
|
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
downloadable: false,
|
|
46
|
-
isOpen: false,
|
|
47
|
-
imageUrl: null
|
|
48
|
-
}
|
|
49
|
-
},
|
|
28
|
+
})
|
|
50
29
|
|
|
51
|
-
|
|
30
|
+
const card = useTemplateRef('card')
|
|
31
|
+
const imageUrl = ref(null)
|
|
32
|
+
const downloadable = ref(false)
|
|
52
33
|
|
|
53
|
-
|
|
54
|
-
this.imageUrl = imageUrl
|
|
55
|
-
this.isOpen = true
|
|
56
|
-
this.downloadable = opt.download || this.downloadable
|
|
57
|
-
window.addEventListener('keyup', this.onKeyUp)
|
|
58
|
-
},
|
|
34
|
+
const canDownload = computed(() => props.download || downloadable.value)
|
|
59
35
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.imageUrl = null
|
|
63
|
-
window.removeEventListener('keyup', this.onKeyUp)
|
|
64
|
-
},
|
|
36
|
+
function onKeyUp(e){
|
|
37
|
+
if(e.key !== 'Escape') return
|
|
65
38
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.close()
|
|
71
|
-
}
|
|
72
|
-
}
|
|
39
|
+
e.preventDefault()
|
|
40
|
+
e.stopPropagation()
|
|
41
|
+
close()
|
|
42
|
+
}
|
|
73
43
|
|
|
74
|
-
|
|
44
|
+
function open(url, opt = {}){
|
|
45
|
+
imageUrl.value = url
|
|
46
|
+
downloadable.value = opt.download || downloadable.value
|
|
47
|
+
card.value.open()
|
|
48
|
+
window.addEventListener('keyup', onKeyUp)
|
|
49
|
+
}
|
|
75
50
|
|
|
51
|
+
function close(){
|
|
52
|
+
card.value.close()
|
|
53
|
+
imageUrl.value = null
|
|
54
|
+
window.removeEventListener('keyup', onKeyUp)
|
|
76
55
|
}
|
|
77
56
|
|
|
57
|
+
defineExpose({ open, close })
|
|
58
|
+
|
|
78
59
|
</script>
|
|
79
60
|
|
|
80
61
|
<style module>
|
package/src/components/List.vue
CHANGED
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
<slot name="right-toolbar">
|
|
96
96
|
<div class="hidden md:flex flex-row gap-2" v-if="Boolean(toolbar)">
|
|
97
97
|
<Textbox v-if="canSearch"
|
|
98
|
-
class="flex-1 md:w-[240px]"
|
|
98
|
+
class="flex-1 md:w-[240px] bg-base-500"
|
|
99
99
|
placeholder="Search..."
|
|
100
100
|
clearable="1"
|
|
101
101
|
maxlength="100"
|
|
@@ -108,6 +108,22 @@
|
|
|
108
108
|
</div>
|
|
109
109
|
</template>
|
|
110
110
|
</Textbox>
|
|
111
|
+
|
|
112
|
+
<div v-if="canToggleView" :class="$style.viewToggle">
|
|
113
|
+
<button type="button"
|
|
114
|
+
title="Grid view"
|
|
115
|
+
:class="presetView === 'grid' ? $style.viewOn : $style.viewOff"
|
|
116
|
+
@click="setView('grid')">
|
|
117
|
+
<svg width="14" height="14" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.0.0-alpha3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M96 0H32C14.33 0 0 14.33 0 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V32C128 14.33 113.7 0 96 0zM288 0H224C206.3 0 192 14.33 192 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V32C320 14.33 305.7 0 288 0zM480 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V32C512 14.33 497.7 0 480 0zM96 384H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64C128 398.3 113.7 384 96 384zM288 384H224c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64C320 398.3 305.7 384 288 384zM480 384h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64C512 398.3 497.7 384 480 384zM96 192H32C14.33 192 0 206.3 0 224v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V224C128 206.3 113.7 192 96 192zM288 192H224C206.3 192 192 206.3 192 224v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V224C320 206.3 305.7 192 288 192zM480 192h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V224C512 206.3 497.7 192 480 192z"/></svg>
|
|
118
|
+
</button>
|
|
119
|
+
<button type="button"
|
|
120
|
+
title="Table view"
|
|
121
|
+
:class="presetView === 'table' ? $style.viewOn : $style.viewOff"
|
|
122
|
+
@click="setView('table')">
|
|
123
|
+
<svg width="14" height="14" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.0.0-alpha3 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) --><path d="M448 32H64.05C28.7 32 .0492 60.65 .0492 96v320c0 35.35 28.65 64 64 64h383.1c35.35 0 64-28.65 64-64V96C512 60.65 483.4 32 448 32zM224 416H64v-96h160V416zM224 256H64V160h160V256zM448 416h-160v-96h160V416zM448 256h-160V160h160V256z"/></svg>
|
|
124
|
+
</button>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
111
127
|
<button v-if="presetView === 'table' && canAssist"
|
|
112
128
|
type="button" class="p-1"
|
|
113
129
|
:title="assistant.open ? 'Hide AI Assistant' : 'Show AI Assistant'"
|
|
@@ -151,7 +167,7 @@
|
|
|
151
167
|
<VirtualTable
|
|
152
168
|
ref="table"
|
|
153
169
|
:columns="columns"
|
|
154
|
-
class="flex-1
|
|
170
|
+
class="flex-1"
|
|
155
171
|
:items="dataItems"
|
|
156
172
|
:enumCache="enumCache"
|
|
157
173
|
:freeze-left="freezeLeft"
|
|
@@ -309,11 +325,11 @@
|
|
|
309
325
|
|
|
310
326
|
import VirtualTable from "./VirtualTable.vue";
|
|
311
327
|
import VirtualGrid from "./VirtualGrid.vue";
|
|
312
|
-
import PresetSelector from "
|
|
328
|
+
import PresetSelector from "./PresetSelector.vue";
|
|
313
329
|
import {generatePivotColumns, generateTotalColumns, getPresetUid, parsePivotKey, pickColumns, setupConfig, sortsFn} from "../utils/preset-selector.mjs";
|
|
314
|
-
import PresetBar from "
|
|
330
|
+
import PresetBar from "./PresetBar.vue";
|
|
315
331
|
import {invokeAfterIdle, queueForLater} from "../utils/helpers.mjs";
|
|
316
|
-
import LLMChat from "
|
|
332
|
+
import LLMChat from "./LLMChat.vue";
|
|
317
333
|
|
|
318
334
|
export default{
|
|
319
335
|
|
|
@@ -367,11 +383,11 @@ export default{
|
|
|
367
383
|
itemsFn: Function,
|
|
368
384
|
onSignalFn: Function,
|
|
369
385
|
searchable: {
|
|
370
|
-
type:
|
|
386
|
+
type: [ Boolean, String ],
|
|
371
387
|
default: true
|
|
372
388
|
},
|
|
373
389
|
useAssistant: {
|
|
374
|
-
type:
|
|
390
|
+
type: [ Boolean, String ],
|
|
375
391
|
default: false
|
|
376
392
|
}
|
|
377
393
|
},
|
|
@@ -711,6 +727,11 @@ export default{
|
|
|
711
727
|
}
|
|
712
728
|
},
|
|
713
729
|
|
|
730
|
+
setView(value){
|
|
731
|
+
if(this.preset)
|
|
732
|
+
this.preset.view = value
|
|
733
|
+
},
|
|
734
|
+
|
|
714
735
|
savePreset: invokeAfterIdle(function() {
|
|
715
736
|
if(this.presetKey) {
|
|
716
737
|
this.useSocket().send(this.presetSrc,
|
|
@@ -812,7 +833,7 @@ export default{
|
|
|
812
833
|
if(!this._pivotReload){
|
|
813
834
|
this._pivotReload = invokeAfterIdle(() => {
|
|
814
835
|
if(this.pivotEnabled) this.load()
|
|
815
|
-
}, { delay: 800 })
|
|
836
|
+
}, { delay: 800, flushOnExit: false })
|
|
816
837
|
}
|
|
817
838
|
this._pivotReload()
|
|
818
839
|
this.$emit('signal', event, items)
|
|
@@ -1165,6 +1186,10 @@ export default{
|
|
|
1165
1186
|
(this.view ?? this.preset.view)
|
|
1166
1187
|
},
|
|
1167
1188
|
|
|
1189
|
+
canToggleView(){
|
|
1190
|
+
return !this.view && !this.pivotEnabled
|
|
1191
|
+
},
|
|
1192
|
+
|
|
1168
1193
|
configParams(){
|
|
1169
1194
|
if(!this.cConfig.params)
|
|
1170
1195
|
this.cConfig.params = {}
|
|
@@ -1313,6 +1338,18 @@ export default{
|
|
|
1313
1338
|
|
|
1314
1339
|
<style module>
|
|
1315
1340
|
|
|
1341
|
+
.viewToggle{
|
|
1342
|
+
@apply flex flex-row items-center rounded-md overflow-hidden border-[1px] border-border-50 px-1;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
.viewOn{
|
|
1346
|
+
@apply p-2 px-3 bg-primary fill-white rounded-md;
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.viewOff{
|
|
1350
|
+
@apply p-2 px-3 bg-base-400 fill-text-300 hover:fill-primary;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1316
1353
|
.resize1{
|
|
1317
1354
|
@apply w-[3px] cursor-ew-resize absolute top-0 right-0 bottom-0;
|
|
1318
1355
|
}
|
|
@@ -314,7 +314,7 @@ export default{
|
|
|
314
314
|
|
|
315
315
|
.comp{
|
|
316
316
|
@apply flex flex-col divide-y divide-border-50 relative;
|
|
317
|
-
@apply border-[1px] border-border-200 bg-base-
|
|
317
|
+
@apply border-[1px] border-border-200 bg-base-200 hover:border-border-300 rounded-lg;
|
|
318
318
|
}
|
|
319
319
|
|
|
320
320
|
.toolbar{
|
|
@@ -93,7 +93,10 @@ const markedText = computed(() => {
|
|
|
93
93
|
@apply rounded-2xl overflow-hidden;
|
|
94
94
|
}
|
|
95
95
|
.comp code{
|
|
96
|
-
@apply
|
|
96
|
+
@apply p-1 text-sm;
|
|
97
|
+
white-space: pre-wrap;
|
|
98
|
+
overflow-wrap: anywhere;
|
|
99
|
+
word-break: break-word;
|
|
97
100
|
}
|
|
98
101
|
.comp code *{
|
|
99
102
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div :class="$style.comp">
|
|
2
|
+
<div :class="[ $style.comp, compact ? $style.compact : '' ]">
|
|
3
3
|
|
|
4
4
|
<div :class="$style.header">
|
|
5
|
-
<span :class="$style.label">{{ label || 'Metric' }}</span>
|
|
5
|
+
<span :class="$style.label" :title="label || 'Metric'">{{ label || 'Metric' }}</span>
|
|
6
6
|
<div v-if="icon" :class="$style.iconWrap" v-html="icon"></div>
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<div :class="$style.valueWrap">
|
|
10
|
-
<span :class="$style.prefix">{{ prefix }}</span>
|
|
10
|
+
<span v-if="prefix" :class="$style.prefix">{{ prefix }}</span>
|
|
11
11
|
<span :class="$style.value">{{ formattedValue }}</span>
|
|
12
|
-
<span :class="$style.suffix">{{ suffix }}</span>
|
|
12
|
+
<span v-if="suffix" :class="$style.suffix">{{ suffix }}</span>
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
</div>
|
|
@@ -31,6 +31,9 @@ export default {
|
|
|
31
31
|
suffix: { type: String, default: '' },
|
|
32
32
|
decimals: { type: Number, default: 0 },
|
|
33
33
|
icon: { type: String, default: '' },
|
|
34
|
+
// tighter padding and type, for dense rows where the tile is a detail
|
|
35
|
+
// rather than the headline
|
|
36
|
+
compact: { type: Boolean, default: false },
|
|
34
37
|
},
|
|
35
38
|
|
|
36
39
|
computed: {
|
|
@@ -78,7 +81,9 @@ export default {
|
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
.label {
|
|
81
|
-
@apply text-
|
|
84
|
+
@apply text-xs text-text-400 leading-tight;
|
|
85
|
+
/* tiles sit in a grid — a wrapping label would make one row taller than the rest */
|
|
86
|
+
@apply min-w-0 text-ellipsis-nowrap;
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
.iconWrap {
|
|
@@ -86,7 +91,7 @@ export default {
|
|
|
86
91
|
}
|
|
87
92
|
|
|
88
93
|
.valueWrap {
|
|
89
|
-
@apply flex items-baseline gap-1 flex-
|
|
94
|
+
@apply flex items-baseline gap-1 flex-wrap;
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
.prefix {
|
|
@@ -98,8 +103,26 @@ export default {
|
|
|
98
103
|
}
|
|
99
104
|
|
|
100
105
|
.suffix {
|
|
101
|
-
@apply text-
|
|
106
|
+
@apply text-xs text-text-400 relative top-[-1px] ml-[1px];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.compact {
|
|
110
|
+
@apply p-2 px-3 gap-0.5 min-h-0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.compact .label {
|
|
114
|
+
@apply text-xs;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* not `text-base` — this theme has a `base` colour family, so that utility also
|
|
118
|
+
sets color: var(--base-500) and paints the value in the surface colour */
|
|
119
|
+
.compact .value {
|
|
120
|
+
@apply text-lg;
|
|
102
121
|
}
|
|
103
122
|
|
|
123
|
+
.compact .prefix,
|
|
124
|
+
.compact .suffix {
|
|
125
|
+
@apply text-xs;
|
|
126
|
+
}
|
|
104
127
|
|
|
105
128
|
</style>
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
|
|
38
38
|
export default{
|
|
39
39
|
|
|
40
|
+
emits: [ 'update:modelValue' ],
|
|
41
|
+
|
|
40
42
|
props: {
|
|
41
43
|
containerClass: String,
|
|
42
44
|
|
|
@@ -112,7 +114,7 @@ export default{
|
|
|
112
114
|
|
|
113
115
|
.dropdown{
|
|
114
116
|
@apply flex items-center rounded-lg overflow-hidden cursor-pointer relative;
|
|
115
|
-
@apply border-[1px] border-border-200 bg-base-
|
|
117
|
+
@apply border-[1px] border-border-200 bg-base-200;
|
|
116
118
|
}
|
|
117
119
|
.dropdown:not(.readonly){
|
|
118
120
|
@apply hover:border-border-300;
|
|
@@ -40,7 +40,7 @@ export default{
|
|
|
40
40
|
|
|
41
41
|
keys: {
|
|
42
42
|
type: Array,
|
|
43
|
-
default: [
|
|
43
|
+
default: () => [
|
|
44
44
|
[ 'p-' ],
|
|
45
45
|
[ 'px-', 'py-' ],
|
|
46
46
|
[ 'pl-', 'pt-', 'pr-', 'pb-' ]
|
|
@@ -49,7 +49,7 @@ export default{
|
|
|
49
49
|
|
|
50
50
|
values: {
|
|
51
51
|
type: Array,
|
|
52
|
-
default: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
|
|
52
|
+
default: () => [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
|
|
53
53
|
},
|
|
54
54
|
|
|
55
55
|
viewType: String,
|
|
@@ -53,7 +53,7 @@ export default{
|
|
|
53
53
|
|
|
54
54
|
keys: {
|
|
55
55
|
type: Array,
|
|
56
|
-
default: [
|
|
56
|
+
default: () => [
|
|
57
57
|
[ 'p-' ],
|
|
58
58
|
[ 'px-', 'py-' ],
|
|
59
59
|
[ 'pl-', 'pt-', 'pr-', 'pb-' ]
|
|
@@ -62,7 +62,7 @@ export default{
|
|
|
62
62
|
|
|
63
63
|
values: {
|
|
64
64
|
type: Array,
|
|
65
|
-
default: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'auto' ]
|
|
65
|
+
default: () => [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'auto' ]
|
|
66
66
|
},
|
|
67
67
|
|
|
68
68
|
viewType: String,
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
|
|
20
20
|
export default{
|
|
21
21
|
|
|
22
|
+
emits: [ 'update:modelValue' ],
|
|
23
|
+
|
|
22
24
|
props: {
|
|
23
25
|
|
|
24
26
|
modelValue: String,
|
|
@@ -115,7 +117,7 @@ export default{
|
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
.input{
|
|
118
|
-
@apply outline-none text-center bg-base-
|
|
120
|
+
@apply outline-none text-center bg-base-200 text-lg;
|
|
119
121
|
@apply border-[1px] border-border-200 rounded-lg p-3;
|
|
120
122
|
}
|
|
121
123
|
.input:focus{
|