@vcmap/ui 6.0.0-rc.1 → 6.0.0-rc.2
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/config/base.config.json +4 -4
- package/dist/assets/cesium/Assets/approximateTerrainHeights.json +1 -1
- package/dist/assets/cesium/ThirdParty/Workers/z-worker-pako.js +1 -1
- package/dist/assets/cesium/Workers/{chunk-ZA25DG4Y.js → chunk-3DRPXHZ4.js} +11 -11
- package/dist/assets/cesium/Workers/{chunk-OAVNIRB4.js → chunk-3GI7DWF7.js} +5 -7
- package/dist/assets/cesium/Workers/{chunk-TFC6TZ3S.js → chunk-4EW3HFFI.js} +33 -22
- package/dist/assets/cesium/Workers/{chunk-LLUNNUJV.js → chunk-4OX4RYLB.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-66QLLS45.js → chunk-4RJH3H6D.js} +11 -9
- package/dist/assets/cesium/Workers/{chunk-MPAZH4BF.js → chunk-5OUTANXX.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-WXTV4ATB.js → chunk-6DH5PLFD.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-A4JVFBQ3.js → chunk-6DXIYFX3.js} +2 -2
- package/dist/assets/cesium/Workers/chunk-A5C2A5O5.js +963 -0
- package/dist/assets/cesium/Workers/{chunk-HQF437NJ.js → chunk-AGTH5JMJ.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-RP2A7BR5.js → chunk-AVFIYUKX.js} +12 -14
- package/dist/assets/cesium/Workers/{chunk-227AJNOA.js → chunk-BAJAVGUF.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-N3JIFFX2.js → chunk-BPY4HDAK.js} +5 -6
- package/dist/assets/cesium/Workers/{chunk-ABADGKYE.js → chunk-D6PDWQXW.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-34YUDLRP.js → chunk-DR7LK6PG.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-OYFCF4PL.js → chunk-DTACCQDR.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-C3SXRKRW.js → chunk-EVU2UNBD.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-6BTKZDRG.js → chunk-F7IEM66T.js} +3 -5
- package/dist/assets/cesium/Workers/{chunk-QT3MPEMI.js → chunk-FSXNF76Y.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-PCJWUS4M.js → chunk-FYYT5EVH.js} +830 -14
- package/dist/assets/cesium/Workers/{chunk-QMEMZIJI.js → chunk-FZDKIUDT.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-XTY7B2N6.js → chunk-G6346EDR.js} +16 -16
- package/dist/assets/cesium/Workers/{chunk-CHHNOC2C.js → chunk-H7PSTL64.js} +95 -155
- package/dist/assets/cesium/Workers/{chunk-2R5O53JW.js → chunk-I67V66MN.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-JS3AW5BK.js → chunk-IALQGTA2.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-K36FEYS7.js → chunk-KNMGSIIN.js} +16 -12
- package/dist/assets/cesium/Workers/{chunk-J3JY6I2C.js → chunk-L4XQPD6P.js} +49 -88
- package/dist/assets/cesium/Workers/{chunk-X4SU25DT.js → chunk-LMTN7R7M.js} +10 -12
- package/dist/assets/cesium/Workers/{chunk-JB2LWGH4.js → chunk-LUYI3XCB.js} +14 -14
- package/dist/assets/cesium/Workers/{chunk-AFFLIKOH.js → chunk-N5MIFVXJ.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-MYZB7C4T.js → chunk-O7OUBDMZ.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-VLGOATD6.js → chunk-P24I5VUS.js} +22 -22
- package/dist/assets/cesium/Workers/{chunk-KD4Y7CZL.js → chunk-PIOKSAZH.js} +15 -17
- package/dist/assets/cesium/Workers/{chunk-3W63OHNJ.js → chunk-PRKEY4QK.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-O5AMBQ36.js → chunk-Q7PM4W34.js} +8 -8
- package/dist/assets/cesium/Workers/{chunk-GLZBE3ML.js → chunk-QLC66ZRL.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-OZJDGN5F.js → chunk-RRLGJV3Q.js} +16 -16
- package/dist/assets/cesium/Workers/{chunk-CCFQRR6D.js → chunk-S2UEXF6T.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-QIKODV5G.js → chunk-S4VTLNAJ.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-EW2GWJYB.js → chunk-SJC5PRDX.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-KTJSNCK4.js → chunk-T6TZXGG5.js} +230 -20
- package/dist/assets/cesium/Workers/{chunk-RW6LU2CJ.js → chunk-TLGODPEV.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-CTELOFLA.js → chunk-UC566ISB.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-ZFOBYDGF.js → chunk-UMX265HW.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-Z24VKNDO.js → chunk-V7WJDCPA.js} +12 -12
- package/dist/assets/cesium/Workers/{chunk-4MFFIWUA.js → chunk-VD6G7UPU.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-XY7MGBKC.js → chunk-WMVCLETM.js} +14 -16
- package/dist/assets/cesium/Workers/{chunk-IPA4EACJ.js → chunk-WOA6WSHH.js} +12 -12
- package/dist/assets/cesium/Workers/{chunk-PFQBCKBM.js → chunk-X67EJ6X6.js} +4398 -2722
- package/dist/assets/cesium/Workers/{chunk-V3NGATMV.js → chunk-XGI4FRXF.js} +11 -13
- package/dist/assets/cesium/Workers/{chunk-AHKEZ2OE.js → chunk-YFVI4SQI.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-HARLBUOL.js → chunk-YFYPR4MW.js} +11 -8
- package/dist/assets/cesium/Workers/combineGeometry.js +22 -23
- package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -17
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -15
- package/dist/assets/cesium/Workers/createCircleGeometry.js +29 -26
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -18
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +35 -36
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -30
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +29 -30
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +27 -28
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -19
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +17 -19
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -25
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -18
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -18
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -17
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -17
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +18 -18
- package/dist/assets/cesium/Workers/createGeometry.js +52 -33
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +28 -29
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -15
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -14
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +451 -176
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +29 -30
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +24 -25
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +31 -33
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +27 -29
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +30 -31
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +21 -24
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +22 -23
- package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -18
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -17
- package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
- package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +14 -16
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -23
- package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -21
- package/dist/assets/cesium/Workers/createVectorTilePolylines.js +14 -16
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +24 -25
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +25 -26
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -21
- package/dist/assets/cesium/Workers/createWallGeometry.js +23 -24
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +22 -23
- package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
- package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +12 -19
- package/dist/assets/cesium/Workers/decodeI3S.js +600 -92
- package/dist/assets/cesium/Workers/transcodeKTX2.js +46 -82
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +21 -22
- package/dist/assets/{cesium.6b12b4.js → cesium.0b750d.js} +151166 -145641
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.074b78.js → core.cbf44a.js} +1944 -1902
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-8eGauqjA.js +1 -0
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.7c276c.css +1 -0
- package/dist/assets/{ui.715986.js → ui.7c276c.js} +13826 -12887
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify.28d881.js → vuetify.4d18fe.js} +1 -1
- package/dist/assets/vuetify.js +1 -1
- package/dist/index.html +1 -1
- package/index.d.ts +2 -0
- package/index.js +1 -0
- package/package.json +7 -6
- package/plugins/@vcmap-show-case/list-example/src/ListExample.vue +24 -86
- package/plugins/@vcmap-show-case/vector-properties-example/src/VectorPropertiesExample.vue +35 -10
- package/plugins/@vcmap-show-case/wizard-example/src/WizardExample.vue +40 -54
- package/src/application/VcsApp.vue +1 -2
- package/src/application/VcsCustomScreen.vue +4 -4
- package/src/application/VcsCustomScreen.vue.d.ts +1 -1
- package/src/application/VcsNavbar.vue.d.ts +1 -1
- package/src/application/VcsSplashScreen.vue +18 -21
- package/src/application/VcsSplashScreen.vue.d.ts +5 -5
- package/src/application/VcsTextPage.vue +4 -4
- package/src/application/VcsTextPage.vue.d.ts +1 -1
- package/src/application/markdownHelper.js +2 -17
- package/src/components/buttons/VcsButton.vue +1 -1
- package/src/components/buttons/VcsButton.vue.d.ts +3 -3
- package/src/components/buttons/VcsFormButton.vue +1 -1
- package/src/components/buttons/VcsFormButton.vue.d.ts +2 -2
- package/src/components/buttons/VcsToolButton.vue +1 -1
- package/src/components/buttons/VcsToolButton.vue.d.ts +4 -4
- package/src/components/composables.d.ts +7 -0
- package/src/components/composables.js +35 -1
- package/src/components/form-inputs-controls/VcsCheckbox.vue +12 -8
- package/src/components/form-inputs-controls/VcsCheckbox.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsChipArrayInput.vue +1 -1
- package/src/components/form-inputs-controls/VcsDatePicker.vue.d.ts +1 -1
- package/src/components/form-inputs-controls/VcsFileInput.vue +2 -2
- package/src/components/form-inputs-controls/VcsFormSection.vue.d.ts +1 -1
- package/src/components/form-inputs-controls/VcsLabel.vue +31 -1
- package/src/components/form-inputs-controls/VcsLabel.vue.d.ts +21 -1
- package/src/components/form-inputs-controls/VcsRadio.vue +2 -2
- package/src/components/form-inputs-controls/VcsSelect.vue +7 -16
- package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +2 -2
- package/src/components/form-inputs-controls/VcsSlider.vue +36 -10
- package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +25 -2
- package/src/components/form-inputs-controls/VcsTextArea.vue +35 -20
- package/src/components/form-inputs-controls/VcsTextField.vue +17 -12
- package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsWizard.vue +89 -112
- package/src/components/form-inputs-controls/VcsWizard.vue.d.ts +3 -13
- package/src/components/form-inputs-controls/VcsWizardStep.vue +75 -57
- package/src/components/form-inputs-controls/VcsWizardStep.vue.d.ts +24 -11
- package/src/components/form-inputs-controls/vcsTextField.scss +5 -0
- package/src/components/form-output/VcsFormattedNumber.vue +25 -9
- package/src/components/form-output/VcsFormattedNumber.vue.d.ts +18 -0
- package/src/components/form-output/VcsMarkdown.vue +53 -0
- package/src/components/form-output/VcsMarkdown.vue.d.ts +16 -0
- package/src/components/lists/VcsActionList.vue +43 -27
- package/src/components/lists/VcsActionList.vue.d.ts +3 -1
- package/src/components/lists/VcsList.vue +82 -151
- package/src/components/lists/VcsList.vue.d.ts +5 -8
- package/src/components/lists/VcsListItem.vue +154 -0
- package/src/components/lists/VcsListItem.vue.d.ts +21 -0
- package/src/components/lists/VcsTreeviewLeaf.vue +1 -1
- package/src/components/modelHelper.d.ts +11 -0
- package/src/components/modelHelper.js +42 -2
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue +14 -6
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +3 -3
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +474 -585
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +193 -22
- package/src/manager/window/windowManager.d.ts +4 -4
- package/src/manager/window/windowManager.js +2 -2
- package/src/navigation/MapNavigation.vue +6 -3
- package/src/navigation/OrientationToolsButton.vue +39 -26
- package/src/navigation/OrientationToolsButton.vue.d.ts +5 -1
- package/src/navigation/TiltSlider.vue +83 -88
- package/src/navigation/TiltSlider.vue.d.ts +10 -7
- package/src/navigation/VcsCompass.vue +17 -11
- package/src/navigation/VcsCompass.vue.d.ts +2 -0
- package/src/styles/_typography.scss +1 -0
- package/src/vcsUiApp.d.ts +11 -17
- package/src/vcsUiApp.js +10 -3
- package/src/vuePlugins/i18n.js +7 -0
- package/src/vuePlugins/vuetify.js +4 -0
- package/dist/assets/cesium/Workers/chunk-DUHWWBQQ.js +0 -3273
- package/dist/assets/cesium/Workers/chunk-QJ3DFBH3.js +0 -73
- package/dist/assets/index-ca7EmZ3d.js +0 -1
- package/dist/assets/ui.715986.css +0 -1
- package/src/components/vector-properties/composables.d.ts +0 -33
- package/src/components/vector-properties/composables.js +0 -100
- /package/dist/assets/{ol.8b2e3a.js → ol.86e93c.js} +0 -0
- /package/dist/assets/{vue.0f2c53.js → vue.a3cd64.js} +0 -0
- /package/dist/assets/{vuetify.28d881.css → vuetify.4d18fe.css} +0 -0
@@ -1,26 +1,25 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="d-contents">
|
2
|
+
<div class="d-contents vcs-list">
|
3
3
|
<vcs-treeview-searchbar
|
4
4
|
v-if="searchable"
|
5
5
|
:placeholder="searchbarPlaceholder"
|
6
6
|
v-model="query"
|
7
7
|
/>
|
8
|
-
<v-list
|
9
|
-
<v-list-item v-if="showTitle
|
8
|
+
<v-list :class="{ 'vcs-list__selectable': selectable }">
|
9
|
+
<v-list-item v-if="showTitle && title">
|
10
10
|
<template #prepend>
|
11
11
|
<v-icon v-if="icon">
|
12
12
|
{{ icon }}
|
13
13
|
</v-icon>
|
14
14
|
</template>
|
15
|
-
<v-list-item-title>
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
<span v-if="selectable && selected.length > 0">
|
15
|
+
<v-list-item-title class="font-weight-bold" ref="listHeader">
|
16
|
+
<span :class="{ 'vcs-list-title__selected': selected.length > 0 }">
|
17
|
+
{{ $st(title) }}
|
18
|
+
</span>
|
19
|
+
<v-tooltip v-if="listHeaderTooltip" activator="parent">
|
20
|
+
{{ $st(listHeaderTooltip) }}
|
21
|
+
</v-tooltip>
|
22
|
+
<span v-if="selectable && selected.length > 0" class="ml-1">
|
24
23
|
{{ `(${selected.length})` }}
|
25
24
|
</span>
|
26
25
|
</v-list-item-title>
|
@@ -32,90 +31,49 @@
|
|
32
31
|
/>
|
33
32
|
</template>
|
34
33
|
</v-list-item>
|
35
|
-
<
|
36
|
-
<
|
34
|
+
<template v-for="(item, index) in renderingItems">
|
35
|
+
<VcsListItem
|
36
|
+
v-if="item"
|
37
|
+
:dragging="dragging === index"
|
38
|
+
:item="item"
|
39
|
+
:key="`item-${index}`"
|
37
40
|
:active="selected.includes(item)"
|
38
|
-
:disabled="item.disabled"
|
39
41
|
@mousedown.shift="$event.preventDefault()"
|
40
42
|
@mouseover="hovering = index"
|
41
43
|
@mouseout="hovering = undefined"
|
42
44
|
:draggable="isDraggable"
|
43
45
|
@dragstart="drag($event, item, index)"
|
44
46
|
@mouseup="drop($event, index)"
|
45
|
-
color="primary"
|
46
47
|
:class="{
|
47
48
|
'v-list-item__selected': selected.includes(item),
|
48
49
|
'v-list-item__lighten_even': lightenEven,
|
49
50
|
'v-list-item__lighten_odd': !lightenEven,
|
50
51
|
'vcs-draggable-item': isDraggable,
|
51
52
|
'v-list-item__dragged': dragging === index,
|
53
|
+
'v-list-item__dragged_over': dragging !== undefined,
|
52
54
|
'border-bottom': borderBottom(index),
|
53
55
|
'border-top': borderTop(index),
|
54
56
|
'cursor-pointer': selectable && !isDraggable,
|
55
57
|
}"
|
56
58
|
@click="select(item, $event)"
|
59
|
+
@item-renamed="$emit('item-renamed', $event)"
|
57
60
|
>
|
58
|
-
<template #prepend>
|
59
|
-
<
|
60
|
-
|
61
|
-
|
61
|
+
<template #prepend-title>
|
62
|
+
<slot name="item.prepend-title" :item="item" :index="index" />
|
63
|
+
</template>
|
64
|
+
<template #title>
|
65
|
+
<slot name="item.title" :item="item" :index="index"></slot>
|
62
66
|
</template>
|
63
|
-
<
|
64
|
-
:
|
65
|
-
dragging !== undefined
|
66
|
-
? undefined
|
67
|
-
: $st(item.tooltip || overflowTitle(index, item.title))
|
68
|
-
"
|
69
|
-
>
|
70
|
-
<template #activator="{ props }">
|
71
|
-
<v-list-item-title
|
72
|
-
v-bind="props"
|
73
|
-
ref="titles"
|
74
|
-
class="d-flex gc-2"
|
75
|
-
>
|
76
|
-
<slot name="item.prepend-title" :item="item" :index="index" />
|
77
|
-
<slot name="item.title" :item="item" :index="index">
|
78
|
-
<VcsTextField
|
79
|
-
v-if="item.rename"
|
80
|
-
:model-value="item.title"
|
81
|
-
autofocus
|
82
|
-
:no-padding="true"
|
83
|
-
@update:model-value="(value) => rename(item, value)"
|
84
|
-
@click.stop
|
85
|
-
@keydown.enter="item.rename = false"
|
86
|
-
@blur="item.rename = false"
|
87
|
-
:rules="[(v) => !!v || 'components.validation.required']"
|
88
|
-
/>
|
89
|
-
<span v-else>
|
90
|
-
{{ $st(item.title) }}
|
91
|
-
</span>
|
92
|
-
</slot>
|
93
|
-
<slot
|
94
|
-
name="item.append-title"
|
95
|
-
:item="item"
|
96
|
-
:index="index"
|
97
|
-
class="ml-auto"
|
98
|
-
/>
|
99
|
-
</v-list-item-title>
|
100
|
-
</template>
|
101
|
-
</VcsTooltip>
|
102
|
-
<template #append>
|
103
|
-
<VcsBadge v-if="item.hasUpdate" :color="'warning'" />
|
104
|
-
<vcs-action-button-list
|
105
|
-
v-if="item.actions?.length > 0"
|
106
|
-
:actions="item.actions"
|
107
|
-
:disabled="item.disabled"
|
108
|
-
:block-overflow="true"
|
109
|
-
:overflow-count="actionButtonListOverflowCount"
|
110
|
-
/>
|
67
|
+
<template #append-title>
|
68
|
+
<slot name="item.append-title" :item="item" :index="index" />
|
111
69
|
</template>
|
112
|
-
</
|
70
|
+
</VcsListItem>
|
113
71
|
<slot name="item.intermediate" :item="item" :index="index" />
|
114
72
|
<div
|
115
73
|
v-if="hasIntermediateSlot"
|
116
74
|
:key="`item-intermediate-child-balance-${index}`"
|
117
75
|
/>
|
118
|
-
</
|
76
|
+
</template>
|
119
77
|
</v-list>
|
120
78
|
</div>
|
121
79
|
</template>
|
@@ -130,12 +88,17 @@
|
|
130
88
|
shallowRef,
|
131
89
|
watch,
|
132
90
|
} from 'vue';
|
133
|
-
import {
|
91
|
+
import {
|
92
|
+
VList,
|
93
|
+
VListItem,
|
94
|
+
VIcon,
|
95
|
+
VListItemTitle,
|
96
|
+
VTooltip,
|
97
|
+
} from 'vuetify/components';
|
134
98
|
import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
|
135
|
-
import VcsTooltip from '../notification/VcsTooltip.vue';
|
136
99
|
import VcsTreeviewSearchbar from './VcsTreeviewSearchbar.vue';
|
137
|
-
import
|
138
|
-
import
|
100
|
+
import VcsListItem from './VcsListItem.vue';
|
101
|
+
import { createEllipseTooltip } from '../composables.js';
|
139
102
|
|
140
103
|
/**
|
141
104
|
* @param {import("vue").Ref<VcsListItem[]>} items
|
@@ -181,7 +144,7 @@
|
|
181
144
|
* @property {string} name
|
182
145
|
* @property {boolean} [visible] - Whether to display this item or not.
|
183
146
|
* @property {boolean} [disabled] - Whether this item should be displayed as disabled.
|
184
|
-
* @property {boolean} [rename] - Whether the title of
|
147
|
+
* @property {boolean} [rename] - Whether the title of can be edited. will add a rename action to the end of the action list
|
185
148
|
* @property {string} title - The title to be displayed
|
186
149
|
* @property {string} [tooltip]
|
187
150
|
* @property {string|HTMLCanvasElement|HTMLImageElement|undefined} [icon] - An optional icon to display with this item. Can be a URL or HTMLElement.
|
@@ -239,15 +202,14 @@
|
|
239
202
|
export default {
|
240
203
|
name: 'VcsList',
|
241
204
|
components: {
|
242
|
-
|
205
|
+
VcsListItem,
|
243
206
|
VcsTreeviewSearchbar,
|
244
207
|
VcsActionButtonList,
|
245
|
-
|
208
|
+
VTooltip,
|
246
209
|
VList,
|
247
210
|
VListItem,
|
248
211
|
VIcon,
|
249
212
|
VListItemTitle,
|
250
|
-
VcsTextField,
|
251
213
|
},
|
252
214
|
props: {
|
253
215
|
items: {
|
@@ -335,8 +297,7 @@
|
|
335
297
|
return !(!props.searchable && !props.showTitle);
|
336
298
|
});
|
337
299
|
let firstSelected = null;
|
338
|
-
const
|
339
|
-
const listHeader = ref(null);
|
300
|
+
const listHeader = ref();
|
340
301
|
|
341
302
|
watch(
|
342
303
|
props,
|
@@ -383,7 +344,7 @@
|
|
383
344
|
let draggedItem = null;
|
384
345
|
|
385
346
|
const isDraggable = computed(() => {
|
386
|
-
return query.value
|
347
|
+
return !query.value && props.draggable;
|
387
348
|
});
|
388
349
|
|
389
350
|
/**
|
@@ -587,31 +548,12 @@
|
|
587
548
|
},
|
588
549
|
drag,
|
589
550
|
drop,
|
590
|
-
titles,
|
591
|
-
overflowTitle(index, alternative) {
|
592
|
-
const elem = titles.value[index];
|
593
|
-
if (elem && elem.offsetWidth < elem.scrollWidth) {
|
594
|
-
return alternative;
|
595
|
-
}
|
596
|
-
return '';
|
597
|
-
},
|
598
551
|
listHeader,
|
599
|
-
listHeaderTooltip:
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
if (elem && elem.offsetWidth < elem.scrollWidth) {
|
605
|
-
return props.title;
|
606
|
-
}
|
607
|
-
return '';
|
608
|
-
}),
|
609
|
-
rename(item, newTitle) {
|
610
|
-
if (newTitle) {
|
611
|
-
emit('item-renamed', { item, newTitle });
|
612
|
-
item.titleChanged?.(newTitle);
|
613
|
-
}
|
614
|
-
},
|
552
|
+
listHeaderTooltip: createEllipseTooltip(
|
553
|
+
computed(() => listHeader.value?.$el),
|
554
|
+
computed(() => props.tooltip),
|
555
|
+
computed(() => props.title),
|
556
|
+
),
|
615
557
|
hasIntermediateSlot: computed(() => !!slots['item.intermediate']),
|
616
558
|
};
|
617
559
|
},
|
@@ -620,67 +562,56 @@
|
|
620
562
|
|
621
563
|
<style lang="scss" scoped>
|
622
564
|
:deep(.v-list) {
|
623
|
-
.v-list-item__lighten_even {
|
624
|
-
|
625
|
-
background-color: var(--v-base-lighten4);
|
626
|
-
}
|
565
|
+
.v-list-item__lighten_even:nth-child(even) {
|
566
|
+
background-color: rgb(var(--v-theme-base-lighten-4));
|
627
567
|
}
|
628
|
-
.v-list-item__lighten_odd {
|
629
|
-
|
630
|
-
background-color: var(--v-base-lighten4);
|
631
|
-
}
|
568
|
+
.v-list-item__lighten_odd:nth-child(odd) {
|
569
|
+
background-color: rgb(var(--v-theme-base-lighten-4));
|
632
570
|
}
|
633
571
|
.v-list-item__dragged {
|
634
|
-
background-color: var(--v-base-
|
572
|
+
background-color: rgb(var(--v-theme-base-lighten-2)) !important;
|
573
|
+
}
|
574
|
+
.v-list-item__dragged_over:hover {
|
575
|
+
background-color: rgb(var(--v-theme-base-lighten-1)) !important;
|
635
576
|
}
|
636
577
|
.v-list-item__selected {
|
637
578
|
border-left: solid 4px;
|
638
|
-
border-left-color: var(--v-primary
|
639
|
-
padding-left:
|
579
|
+
border-left-color: rgb(var(--v-theme-primary));
|
580
|
+
padding-left: 13px !important;
|
581
|
+
}
|
582
|
+
.v-list-item--active {
|
583
|
+
.v-list-item__append {
|
584
|
+
color: rgb(var(--v-theme-on-surface));
|
585
|
+
}
|
640
586
|
}
|
641
587
|
.v-list-item {
|
642
|
-
padding: 4px 8px 4px 16px;
|
643
588
|
&.vcs-draggable-item:hover {
|
644
589
|
cursor: grab;
|
645
590
|
user-select: none;
|
646
591
|
}
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
}
|
651
|
-
&.border-top {
|
652
|
-
border-top: solid;
|
653
|
-
border-top-color: var(--v-base-lighten2);
|
654
|
-
}
|
655
|
-
&:after {
|
656
|
-
display: none;
|
657
|
-
}
|
658
|
-
&.font-weight-bold {
|
659
|
-
.v-list-item__title {
|
660
|
-
font-weight: 700;
|
592
|
+
&:hover {
|
593
|
+
.v-list-item__overlay {
|
594
|
+
background-color: rgb(var(--v-theme-base));
|
661
595
|
}
|
662
596
|
}
|
663
|
-
.
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
}
|
597
|
+
.vcs-list-title__selected {
|
598
|
+
width: 90%;
|
599
|
+
display: inline-block;
|
600
|
+
overflow: hidden;
|
601
|
+
text-overflow: ellipsis;
|
602
|
+
vertical-align: bottom;
|
670
603
|
}
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
height: 16px;
|
683
|
-
}
|
604
|
+
}
|
605
|
+
|
606
|
+
&:not(.vcs-list__selectable) {
|
607
|
+
.v-list-item--link {
|
608
|
+
cursor: auto;
|
609
|
+
}
|
610
|
+
cursor: auto;
|
611
|
+
|
612
|
+
&:hover {
|
613
|
+
.v-list-item__overlay {
|
614
|
+
background-color: transparent;
|
684
615
|
}
|
685
616
|
}
|
686
617
|
}
|
@@ -97,11 +97,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
97
97
|
clear(): void;
|
98
98
|
drag: (e: MouseEvent, item: VcsListItem, index: number) => void;
|
99
99
|
drop: (e: MouseEvent, targetIndex: number) => void;
|
100
|
-
|
101
|
-
overflowTitle(index: any, alternative: any): any;
|
102
|
-
listHeader: import("vue").Ref<null>;
|
100
|
+
listHeader: import("vue").Ref<any>;
|
103
101
|
listHeaderTooltip: import("vue").ComputedRef<string>;
|
104
|
-
rename(item: any, newTitle: any): void;
|
105
102
|
hasIntermediateSlot: import("vue").ComputedRef<boolean>;
|
106
103
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
107
104
|
items: {
|
@@ -163,17 +160,17 @@ declare const _default: import("vue").DefineComponent<{
|
|
163
160
|
};
|
164
161
|
}>>, {
|
165
162
|
title: string;
|
166
|
-
modelValue: unknown[];
|
167
|
-
tooltip: string;
|
168
163
|
icon: string;
|
164
|
+
modelValue: unknown[];
|
169
165
|
draggable: boolean;
|
166
|
+
tooltip: string;
|
170
167
|
selectable: boolean;
|
171
168
|
actions: unknown[];
|
172
169
|
searchbarPlaceholder: string;
|
170
|
+
actionButtonListOverflowCount: number;
|
173
171
|
singleSelect: boolean;
|
174
172
|
searchable: boolean;
|
175
173
|
showTitle: boolean;
|
176
|
-
actionButtonListOverflowCount: number;
|
177
174
|
}, {}>;
|
178
175
|
export default _default;
|
179
176
|
export type VcsListItem = {
|
@@ -187,7 +184,7 @@ export type VcsListItem = {
|
|
187
184
|
*/
|
188
185
|
disabled?: boolean | undefined;
|
189
186
|
/**
|
190
|
-
* - Whether the title of
|
187
|
+
* - Whether the title of can be edited. will add a rename action to the end of the action list
|
191
188
|
*/
|
192
189
|
rename?: boolean | undefined;
|
193
190
|
/**
|
@@ -0,0 +1,154 @@
|
|
1
|
+
<script setup>
|
2
|
+
import {
|
3
|
+
VListItem,
|
4
|
+
VIcon,
|
5
|
+
VListItemTitle,
|
6
|
+
VTooltip,
|
7
|
+
} from 'vuetify/components';
|
8
|
+
import { computed, ref } from 'vue';
|
9
|
+
import VcsBadge from '../notification/VcsBadge.vue';
|
10
|
+
import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
|
11
|
+
import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
|
12
|
+
import { createEllipseTooltip } from '../composables.js';
|
13
|
+
|
14
|
+
const props = defineProps({
|
15
|
+
/** @type {import("./VcsList.vue").VcsListItem} */
|
16
|
+
item: {
|
17
|
+
type: Object,
|
18
|
+
required: true,
|
19
|
+
},
|
20
|
+
actionButtonListOverflowCount: {
|
21
|
+
type: Number,
|
22
|
+
default: undefined,
|
23
|
+
},
|
24
|
+
dragging: {
|
25
|
+
type: Boolean,
|
26
|
+
default: false,
|
27
|
+
},
|
28
|
+
});
|
29
|
+
|
30
|
+
const emits = defineEmits(['item-renamed']);
|
31
|
+
|
32
|
+
function renameOff() {
|
33
|
+
// eslint-disable-next-line vue/no-mutating-props
|
34
|
+
props.item.rename = false;
|
35
|
+
}
|
36
|
+
|
37
|
+
const title = ref();
|
38
|
+
const tooltip = createEllipseTooltip(
|
39
|
+
computed(() => {
|
40
|
+
if (props.item?.rename) {
|
41
|
+
return undefined;
|
42
|
+
}
|
43
|
+
return title.value?.$el;
|
44
|
+
}),
|
45
|
+
computed(() => props.item?.tooltip),
|
46
|
+
computed(() => props.item?.title),
|
47
|
+
);
|
48
|
+
|
49
|
+
function rename(item, newTitle) {
|
50
|
+
if (newTitle) {
|
51
|
+
emits('item-renamed', { item, newTitle });
|
52
|
+
item.titleChanged?.(newTitle);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
</script>
|
56
|
+
|
57
|
+
<template>
|
58
|
+
<v-list-item :disabled="item.disabled" v-bind="$attrs">
|
59
|
+
<template #prepend>
|
60
|
+
<v-icon v-if="item.icon">
|
61
|
+
{{ item.icon }}
|
62
|
+
</v-icon>
|
63
|
+
</template>
|
64
|
+
<template #default>
|
65
|
+
<v-list-item-title ref="title">
|
66
|
+
<slot name="prepend-title" :item="item" />
|
67
|
+
<slot name="title" :item="item">
|
68
|
+
<vcs-text-field
|
69
|
+
v-if="item.rename"
|
70
|
+
:model-value="item.title"
|
71
|
+
autofocus
|
72
|
+
@update:model-value="(value) => rename(item, value)"
|
73
|
+
@click.stop
|
74
|
+
@keydown.enter="renameOff"
|
75
|
+
@blur="renameOff"
|
76
|
+
:rules="[(v) => !!v || 'components.validation.required']"
|
77
|
+
class="pa-0"
|
78
|
+
/>
|
79
|
+
<template v-else>
|
80
|
+
{{ $st(item.title) }}
|
81
|
+
</template>
|
82
|
+
</slot>
|
83
|
+
<slot name="append-title" :item="item" class="ml-auto" />
|
84
|
+
<v-tooltip v-if="dragging === false && tooltip" activator="parent">
|
85
|
+
{{ $st(tooltip) }}
|
86
|
+
</v-tooltip>
|
87
|
+
</v-list-item-title>
|
88
|
+
</template>
|
89
|
+
<template #append>
|
90
|
+
<vcs-badge v-if="item.hasUpdate" class="mr-1" />
|
91
|
+
<vcs-action-button-list
|
92
|
+
v-if="item.actions?.length > 0"
|
93
|
+
:actions="item.actions"
|
94
|
+
:disabled="item.disabled"
|
95
|
+
:block-overflow="true"
|
96
|
+
:overflow-count="actionButtonListOverflowCount"
|
97
|
+
class="ml-2"
|
98
|
+
/>
|
99
|
+
</template>
|
100
|
+
</v-list-item>
|
101
|
+
</template>
|
102
|
+
|
103
|
+
<style lang="scss" scoped>
|
104
|
+
.v-list-item {
|
105
|
+
padding: 4px 8px 4px 16px;
|
106
|
+
&.border-bottom {
|
107
|
+
border-bottom: solid;
|
108
|
+
border-bottom-color: rgb(var(--v-theme-base-lighten-2));
|
109
|
+
}
|
110
|
+
&.border-top {
|
111
|
+
border-top: solid;
|
112
|
+
border-top-color: rgb(var(--v-theme-base-lighten-2));
|
113
|
+
}
|
114
|
+
&:after {
|
115
|
+
display: none;
|
116
|
+
}
|
117
|
+
&.font-weight-bold {
|
118
|
+
.v-list-item__title {
|
119
|
+
font-weight: 700;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
:deep(.v-list-item__action) {
|
123
|
+
.v-icon {
|
124
|
+
font-size: 16px;
|
125
|
+
}
|
126
|
+
&:last-child {
|
127
|
+
min-width: auto;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
:deep(.v-list-item__content) {
|
131
|
+
flex-wrap: nowrap;
|
132
|
+
column-gap: 4px;
|
133
|
+
.v-icon,
|
134
|
+
.action-btn-wrap {
|
135
|
+
flex: 1 1 auto;
|
136
|
+
}
|
137
|
+
.v-icon {
|
138
|
+
font-size: 16px;
|
139
|
+
.v-icon__component {
|
140
|
+
width: 16px;
|
141
|
+
height: 16px;
|
142
|
+
}
|
143
|
+
}
|
144
|
+
}
|
145
|
+
:deep(.v-list-item__prepend > .v-badge ~ .v-list-item__spacer),
|
146
|
+
:deep(.v-list-item__prepend > .v-icon ~ .v-list-item__spacer),
|
147
|
+
:deep(.v-list-item__prepend > .v-tooltip ~ .v-list-item__spacer) {
|
148
|
+
width: 8px;
|
149
|
+
}
|
150
|
+
:deep(.v-list-item__overlay) {
|
151
|
+
background-color: transparent;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
</style>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {
|
2
|
+
$emit: (event: "item-renamed", ...args: any[]) => void;
|
3
|
+
$props: {
|
4
|
+
readonly [x: string]: any;
|
5
|
+
};
|
6
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
|
7
|
+
"prepend-title"?(_: {
|
8
|
+
item: any;
|
9
|
+
}): any;
|
10
|
+
title?(_: {
|
11
|
+
item: any;
|
12
|
+
}): any;
|
13
|
+
"append-title"?(_: {
|
14
|
+
item: any;
|
15
|
+
class: string;
|
16
|
+
}): any;
|
17
|
+
}>;
|
18
|
+
export default _default;
|
19
|
+
type __VLS_WithTemplateSlots<T, S> = T & (new () => {
|
20
|
+
$slots: S;
|
21
|
+
});
|
@@ -23,3 +23,14 @@ export function useProxiedAtomicModel<T>(props: Object, prop: string, emit: (eve
|
|
23
23
|
* @template T
|
24
24
|
*/
|
25
25
|
export function useProxiedComplexModel<T>(props: Object, prop: string, emit: (event: string, value: T) => void): import("vue").Ref<import("vue").UnwrapRef<T>>;
|
26
|
+
/**
|
27
|
+
* Helper function that returns a modelValue for VcsCheckbox depending on the availability of a specific property within a model object
|
28
|
+
* Getter returns true, if property is available, otherwise false.
|
29
|
+
* Setter applies provided defaultValue on the model object, if checked (true) and undefined, if unchecked (false)
|
30
|
+
* @param {import("vue").Ref<Object>} localValue The model object, e.g. provided by `useProxiedComplexModel` or a local ref object.
|
31
|
+
* @param {string} key The key of the localValue that should be return on get and updated on set.
|
32
|
+
* @param {D} defaultValue The default value that is set on checked (true)
|
33
|
+
* @returns {import('vue').WritableComputedRef<boolean>}
|
34
|
+
* @template D
|
35
|
+
*/
|
36
|
+
export function useModelHasProperty<D>(localValue: import("vue").Ref<Object>, key: string, defaultValue: D): import('vue').WritableComputedRef<boolean>;
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { computed, ref, toRaw, watch } from 'vue';
|
2
2
|
import deepEqual from 'fast-deep-equal';
|
3
|
+
import { getLogger } from '@vcsuite/logger';
|
3
4
|
|
4
5
|
/**
|
5
6
|
* Can only be used in setup of Vue components!
|
@@ -59,7 +60,14 @@ export function useProxiedComplexModel(props, prop, emit) {
|
|
59
60
|
if (deepEqual(internal.value, newValue)) {
|
60
61
|
return;
|
61
62
|
}
|
62
|
-
|
63
|
+
try {
|
64
|
+
internal.value = structuredClone(newValue);
|
65
|
+
} catch (e) {
|
66
|
+
getLogger('modelHelper').error(
|
67
|
+
'Failed to update internal value. You may have a provided a deeply nested ref, which caused',
|
68
|
+
e,
|
69
|
+
);
|
70
|
+
}
|
63
71
|
},
|
64
72
|
{
|
65
73
|
deep: true,
|
@@ -77,7 +85,14 @@ export function useProxiedComplexModel(props, prop, emit) {
|
|
77
85
|
if (deepEqual(value, newValue)) {
|
78
86
|
return;
|
79
87
|
}
|
80
|
-
|
88
|
+
try {
|
89
|
+
emit(`update:${prop}`, structuredClone(newValue));
|
90
|
+
} catch (e) {
|
91
|
+
getLogger('modelHelper').error(
|
92
|
+
'Failed to emit value. You may have a provided a deeply nested ref, which caused',
|
93
|
+
e,
|
94
|
+
);
|
95
|
+
}
|
81
96
|
},
|
82
97
|
{
|
83
98
|
deep: true,
|
@@ -86,3 +101,28 @@ export function useProxiedComplexModel(props, prop, emit) {
|
|
86
101
|
|
87
102
|
return internal;
|
88
103
|
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Helper function that returns a modelValue for VcsCheckbox depending on the availability of a specific property within a model object
|
107
|
+
* Getter returns true, if property is available, otherwise false.
|
108
|
+
* Setter applies provided defaultValue on the model object, if checked (true) and undefined, if unchecked (false)
|
109
|
+
* @param {import("vue").Ref<Object>} localValue The model object, e.g. provided by `useProxiedComplexModel` or a local ref object.
|
110
|
+
* @param {string} key The key of the localValue that should be return on get and updated on set.
|
111
|
+
* @param {D} defaultValue The default value that is set on checked (true)
|
112
|
+
* @returns {import('vue').WritableComputedRef<boolean>}
|
113
|
+
* @template D
|
114
|
+
*/
|
115
|
+
export function useModelHasProperty(localValue, key, defaultValue) {
|
116
|
+
const model = () => localValue.value;
|
117
|
+
return computed({
|
118
|
+
get() {
|
119
|
+
return model()[key] !== undefined;
|
120
|
+
},
|
121
|
+
set(value) {
|
122
|
+
const v = value ? defaultValue : undefined;
|
123
|
+
if (localValue.value[key] !== v) {
|
124
|
+
localValue.value[key] = v;
|
125
|
+
}
|
126
|
+
},
|
127
|
+
});
|
128
|
+
}
|