@ditojs/admin 2.71.1 → 2.73.0
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/dist/dito-admin.css +1 -1
- package/dist/dito-admin.es.js +2647 -2495
- package/dist/dito-admin.umd.js +5 -5
- package/package.json +33 -33
- package/src/DitoContext.js +8 -0
- package/src/components/DitoAccount.vue +1 -1
- package/src/components/DitoAffix.vue +56 -0
- package/src/components/DitoAffixes.vue +82 -0
- package/src/components/DitoClipboard.vue +3 -3
- package/src/components/DitoContainer.vue +24 -16
- package/src/components/DitoCreateButton.vue +7 -12
- package/src/components/DitoDialog.vue +1 -1
- package/src/components/DitoEditButtons.vue +3 -3
- package/src/components/DitoForm.vue +3 -6
- package/src/components/DitoHeader.vue +0 -13
- package/src/components/DitoLabel.vue +24 -42
- package/src/components/DitoMenu.vue +30 -34
- package/src/components/DitoPagination.vue +1 -1
- package/src/components/DitoPane.vue +10 -8
- package/src/components/DitoPanel.vue +2 -2
- package/src/components/DitoSchema.vue +5 -2
- package/src/components/DitoSchemaInlined.vue +1 -1
- package/src/components/DitoScopes.vue +1 -1
- package/src/components/DitoTableHead.vue +3 -3
- package/src/components/DitoTabs.vue +5 -5
- package/src/components/DitoTrail.vue +23 -18
- package/src/components/DitoTreeItem.vue +8 -8
- package/src/components/index.js +2 -1
- package/src/mixins/DitoMixin.js +1 -1
- package/src/mixins/EmitterMixin.js +13 -7
- package/src/mixins/SortableMixin.js +1 -1
- package/src/styles/_button.scss +99 -98
- package/src/styles/_layout.scss +14 -12
- package/src/styles/_pulldown.scss +17 -15
- package/src/styles/_table.scss +23 -22
- package/src/types/DitoTypeButton.vue +62 -19
- package/src/types/DitoTypeCheckboxes.vue +1 -1
- package/src/types/DitoTypeColor.vue +16 -10
- package/src/types/DitoTypeDate.vue +21 -7
- package/src/types/DitoTypeList.vue +9 -9
- package/src/types/DitoTypeMarkup.vue +8 -7
- package/src/types/DitoTypeMultiselect.vue +2 -2
- package/src/types/DitoTypeNumber.vue +15 -5
- package/src/types/DitoTypeRadio.vue +1 -1
- package/src/types/DitoTypeSelect.vue +7 -7
- package/src/types/DitoTypeSlider.vue +3 -3
- package/src/types/DitoTypeSwitch.vue +3 -3
- package/src/types/DitoTypeText.vue +15 -5
- package/src/types/DitoTypeTextarea.vue +2 -2
- package/src/types/DitoTypeUpload.vue +7 -7
- package/src/utils/schema.js +4 -1
- package/src/components/DitoElement.vue +0 -68
|
@@ -3,20 +3,19 @@ ul.dito-menu(
|
|
|
3
3
|
v-resize="onResize"
|
|
4
4
|
:style="{ '--width': width ? `${width}px` : null }"
|
|
5
5
|
)
|
|
6
|
-
li(
|
|
6
|
+
li.dito-menu__item(
|
|
7
7
|
v-for="item in items"
|
|
8
8
|
)
|
|
9
9
|
template(
|
|
10
10
|
v-if="shouldShowItem(item)"
|
|
11
11
|
)
|
|
12
|
-
a.dito-
|
|
12
|
+
a.dito-menu__link(
|
|
13
13
|
:href="getItemHref(item)"
|
|
14
|
-
:class="
|
|
14
|
+
:class="{ 'dito-menu__link--active': isActiveItem(item) }"
|
|
15
15
|
@click.prevent.stop="onClickItem(item)"
|
|
16
16
|
) {{ getLabel(item) }}
|
|
17
|
-
DitoMenu(
|
|
17
|
+
DitoMenu.dito-menu__sub(
|
|
18
18
|
v-if="item.items"
|
|
19
|
-
:class="getItemClass(item, 'dito-sub-menu')"
|
|
20
19
|
:items="item.items"
|
|
21
20
|
:path="getItemPath(item, false)"
|
|
22
21
|
)
|
|
@@ -60,13 +59,6 @@ export default DitoComponent.component('DitoMenu', {
|
|
|
60
59
|
}
|
|
61
60
|
},
|
|
62
61
|
|
|
63
|
-
getItemClass(item, subMenuClass) {
|
|
64
|
-
return {
|
|
65
|
-
[subMenuClass]: !!item.items,
|
|
66
|
-
'dito-active': this.isActiveItem(item)
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
|
|
70
62
|
getItemPath(item, firstChild) {
|
|
71
63
|
const path = item.path ? `${this.path}/${item.path}` : null
|
|
72
64
|
return firstChild && path && item.items
|
|
@@ -101,20 +93,24 @@ export default DitoComponent.component('DitoMenu', {
|
|
|
101
93
|
@import '../styles/_imports';
|
|
102
94
|
|
|
103
95
|
.dito-menu {
|
|
96
|
+
$self: &;
|
|
104
97
|
$item-height: $menu-font-size + 2 * $menu-padding-ver;
|
|
105
98
|
|
|
99
|
+
--menu-active-color: #{$color-white};
|
|
100
|
+
--menu-active-background: #{$color-active};
|
|
101
|
+
|
|
106
102
|
border-right: $border-style;
|
|
107
103
|
padding: 0 $menu-spacing;
|
|
108
104
|
|
|
109
|
-
|
|
110
|
-
&:has(
|
|
105
|
+
&__item {
|
|
106
|
+
&:has(#{$self}__sub):not(:has(#{$self}__link--active)) {
|
|
111
107
|
// Pop-out sub-menus on hover:
|
|
112
108
|
&:hover {
|
|
113
|
-
|
|
109
|
+
> #{$self}__link {
|
|
114
110
|
background: $color-lightest;
|
|
115
111
|
}
|
|
116
112
|
|
|
117
|
-
|
|
113
|
+
#{$self}__sub {
|
|
118
114
|
display: block;
|
|
119
115
|
position: absolute;
|
|
120
116
|
width: var(--width);
|
|
@@ -122,8 +118,8 @@ export default DitoComponent.component('DitoMenu', {
|
|
|
122
118
|
transform: translateX(calc(var(--width) + 2 * $menu-spacing))
|
|
123
119
|
translateY(-$item-height);
|
|
124
120
|
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
#{$self}__item:first-child {
|
|
122
|
+
#{$self}__link {
|
|
127
123
|
margin-top: 0;
|
|
128
124
|
}
|
|
129
125
|
}
|
|
@@ -140,22 +136,21 @@ export default DitoComponent.component('DitoMenu', {
|
|
|
140
136
|
}
|
|
141
137
|
}
|
|
142
138
|
|
|
143
|
-
|
|
144
|
-
.dito-sub-menu {
|
|
139
|
+
#{$self}__sub {
|
|
145
140
|
box-shadow: $shadow-window;
|
|
146
141
|
}
|
|
147
142
|
}
|
|
148
143
|
}
|
|
149
144
|
}
|
|
150
145
|
|
|
151
|
-
|
|
146
|
+
&__link {
|
|
152
147
|
display: block;
|
|
153
148
|
padding: $menu-padding;
|
|
154
149
|
line-height: $menu-line-height;
|
|
155
150
|
border-radius: $border-radius;
|
|
156
151
|
margin-top: $menu-spacing;
|
|
157
152
|
|
|
158
|
-
&:focus:not(:active,
|
|
153
|
+
&:focus:not(:active, &--active) {
|
|
159
154
|
box-shadow: $shadow-focus;
|
|
160
155
|
}
|
|
161
156
|
|
|
@@ -163,28 +158,29 @@ export default DitoComponent.component('DitoMenu', {
|
|
|
163
158
|
background: rgb(255, 255, 255, 0.5);
|
|
164
159
|
}
|
|
165
160
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
&--active {
|
|
162
|
+
&,
|
|
163
|
+
&:hover {
|
|
164
|
+
color: var(--menu-active-color);
|
|
165
|
+
background: var(--menu-active-background);
|
|
166
|
+
}
|
|
171
167
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
168
|
+
&:has(+ #{$self}__sub) {
|
|
169
|
+
--menu-active-background: #{color.adjust($color-active, $alpha: -0.3)};
|
|
170
|
+
}
|
|
175
171
|
}
|
|
176
172
|
}
|
|
177
173
|
|
|
178
|
-
|
|
174
|
+
&__sub {
|
|
179
175
|
display: none;
|
|
180
176
|
border-right: 0;
|
|
181
177
|
padding: 0;
|
|
182
178
|
border-radius: $border-radius;
|
|
183
179
|
background: $color-lightest;
|
|
180
|
+
}
|
|
184
181
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
182
|
+
&__link--active + &__sub {
|
|
183
|
+
display: block;
|
|
188
184
|
}
|
|
189
185
|
}
|
|
190
186
|
</style>
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
store
|
|
15
15
|
}, index in componentSchemas`
|
|
16
16
|
)
|
|
17
|
-
//- Use <span> for .dito-
|
|
18
|
-
//- selector.
|
|
19
|
-
span.dito-
|
|
17
|
+
//- Use <span> for .dito-pane__break so we can use the
|
|
18
|
+
//- `.dito-container:first-of-type` selector.
|
|
19
|
+
span.dito-pane__break(
|
|
20
20
|
v-if="['before', 'both'].includes(schema.break)"
|
|
21
21
|
)
|
|
22
22
|
DitoContainer(
|
|
@@ -32,11 +32,12 @@
|
|
|
32
32
|
:single="isSingleComponent"
|
|
33
33
|
:nested="nested"
|
|
34
34
|
:disabled="disabled"
|
|
35
|
+
:compact="compact"
|
|
35
36
|
:generateLabels="generateLabels"
|
|
36
37
|
:verticalLabels="isInLabeledRow(index)"
|
|
37
38
|
:accumulatedBasis="accumulatedBasis"
|
|
38
39
|
)
|
|
39
|
-
span.dito-
|
|
40
|
+
span.dito-pane__break(
|
|
40
41
|
v-if="['after', 'both'].includes(schema.break)"
|
|
41
42
|
)
|
|
42
43
|
</template>
|
|
@@ -67,6 +68,7 @@ export default DitoComponent.component('DitoPane', {
|
|
|
67
68
|
padding: { type: String, default: null },
|
|
68
69
|
single: { type: Boolean, default: false },
|
|
69
70
|
disabled: { type: Boolean, default: false },
|
|
71
|
+
compact: { type: Boolean, default: false },
|
|
70
72
|
generateLabels: { type: Boolean, default: false },
|
|
71
73
|
accumulatedBasis: { type: Number, default: null }
|
|
72
74
|
},
|
|
@@ -261,7 +263,7 @@ export default DitoComponent.component('DitoPane', {
|
|
|
261
263
|
margin: -$form-spacing-half;
|
|
262
264
|
padding: var(--pane-padding);
|
|
263
265
|
// Use `flex: 0%` for all `.dito-pane` except `.dito-pane__main`,
|
|
264
|
-
// so that the `.dito-buttons
|
|
266
|
+
// so that the `.dito-buttons--main` can be moved all the way to the bottom.
|
|
265
267
|
flex: 0%;
|
|
266
268
|
|
|
267
269
|
&__main {
|
|
@@ -299,7 +301,7 @@ export default DitoComponent.component('DitoPane', {
|
|
|
299
301
|
}
|
|
300
302
|
}
|
|
301
303
|
|
|
302
|
-
&__main + .dito-buttons
|
|
304
|
+
&__main + .dito-buttons--main {
|
|
303
305
|
// Needed forms with sticky main buttons.
|
|
304
306
|
margin: $content-padding;
|
|
305
307
|
margin-bottom: 0;
|
|
@@ -319,8 +321,8 @@ export default DitoComponent.component('DitoPane', {
|
|
|
319
321
|
}
|
|
320
322
|
}
|
|
321
323
|
|
|
322
|
-
|
|
323
|
-
//
|
|
324
|
+
&__break {
|
|
325
|
+
// `&_break` is rendered as <span> so we can use the
|
|
324
326
|
// `.dito-container:first-of-type` selector to match the first container
|
|
325
327
|
// even if it has a break before it.
|
|
326
328
|
display: block;
|
|
@@ -18,10 +18,10 @@ component.dito-panel(
|
|
|
18
18
|
:hasOwnData="hasOwnData"
|
|
19
19
|
generateLabels
|
|
20
20
|
)
|
|
21
|
-
template(#
|
|
21
|
+
template(#prepend)
|
|
22
22
|
h2.dito-panel__header(:class="{ 'dito-panel__header--sticky': sticky }")
|
|
23
23
|
span {{ getLabel(schema) }}
|
|
24
|
-
DitoButtons.dito-buttons
|
|
24
|
+
DitoButtons.dito-buttons--small(
|
|
25
25
|
:buttons="panelButtonSchemas"
|
|
26
26
|
:dataPath="panelDataPath"
|
|
27
27
|
:data="panelData"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
|
-
slot(name="
|
|
2
|
+
slot(name="prepend")
|
|
3
3
|
.dito-schema(
|
|
4
4
|
:class="{ 'dito-scroll-parent': scrollable, 'dito-schema--open': opened }"
|
|
5
5
|
v-bind="$attrs"
|
|
@@ -74,6 +74,7 @@ slot(name="before")
|
|
|
74
74
|
:padding="padding"
|
|
75
75
|
:single="!inlined && !hasMainPane"
|
|
76
76
|
:disabled="disabled"
|
|
77
|
+
:compact="compact"
|
|
77
78
|
:generateLabels="generateLabels"
|
|
78
79
|
:accumulatedBasis="accumulatedBasis"
|
|
79
80
|
)
|
|
@@ -88,6 +89,7 @@ slot(name="before")
|
|
|
88
89
|
:padding="padding"
|
|
89
90
|
:single="!inlined && !hasTabs"
|
|
90
91
|
:disabled="disabled"
|
|
92
|
+
:compact="compact"
|
|
91
93
|
:generateLabels="generateLabels"
|
|
92
94
|
:accumulatedBasis="accumulatedBasis"
|
|
93
95
|
)
|
|
@@ -99,7 +101,7 @@ slot(name="before")
|
|
|
99
101
|
v-if="inlined && !hasHeader"
|
|
100
102
|
name="edit-buttons"
|
|
101
103
|
)
|
|
102
|
-
slot(name="
|
|
104
|
+
slot(name="append")
|
|
103
105
|
</template>
|
|
104
106
|
|
|
105
107
|
<script>
|
|
@@ -158,6 +160,7 @@ export default DitoComponent.component('DitoSchema', {
|
|
|
158
160
|
active: { type: Boolean, default: true },
|
|
159
161
|
inlined: { type: Boolean, default: false },
|
|
160
162
|
disabled: { type: Boolean, default: false },
|
|
163
|
+
compact: { type: Boolean, default: false },
|
|
161
164
|
collapsed: { type: Boolean, default: false },
|
|
162
165
|
collapsible: { type: Boolean, default: false },
|
|
163
166
|
scrollable: { type: Boolean, default: false },
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<template lang="pug">
|
|
2
2
|
DitoSchema.dito-schema-inlined(
|
|
3
|
-
:class="{ 'dito-schema-compact': isCompact }"
|
|
4
3
|
:schema="schema"
|
|
5
4
|
:dataPath="dataPath"
|
|
6
5
|
:data="data"
|
|
@@ -10,6 +9,7 @@ DitoSchema.dito-schema-inlined(
|
|
|
10
9
|
:padding="padding ?? 'inlined'"
|
|
11
10
|
:inlined="true"
|
|
12
11
|
:disabled="disabled"
|
|
12
|
+
:compact="isCompact"
|
|
13
13
|
:collapsed="collapsed"
|
|
14
14
|
:collapsible="collapsible"
|
|
15
15
|
:generateLabels="!isCompact"
|
|
@@ -19,7 +19,7 @@ thead.dito-table-head
|
|
|
19
19
|
:class="getSortClass(column)"
|
|
20
20
|
@click="navigate"
|
|
21
21
|
)
|
|
22
|
-
.dito-
|
|
22
|
+
.dito-button__order-arrows
|
|
23
23
|
span {{ getLabel(column) }}
|
|
24
24
|
span(
|
|
25
25
|
v-else
|
|
@@ -55,12 +55,12 @@ export default DitoComponent.component('DitoTableHead', {
|
|
|
55
55
|
|
|
56
56
|
methods: {
|
|
57
57
|
getColumnClass(column) {
|
|
58
|
-
return `dito-column
|
|
58
|
+
return `dito-column--${hyphenate(column.name)}`
|
|
59
59
|
},
|
|
60
60
|
|
|
61
61
|
getSortClass(column) {
|
|
62
62
|
return this.sort.name === column.name
|
|
63
|
-
? `dito-selected dito-order-${this.sort.order}`
|
|
63
|
+
? `dito-button--selected dito-button--order-${this.sort.order}`
|
|
64
64
|
: null
|
|
65
65
|
},
|
|
66
66
|
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
template(
|
|
4
4
|
v-for="(tabSchema, key) in tabs"
|
|
5
5
|
)
|
|
6
|
-
a.dito-
|
|
6
|
+
a.dito-tabs__link(
|
|
7
7
|
v-if="shouldRenderSchema(tabSchema)"
|
|
8
8
|
:key="key"
|
|
9
|
-
:class="{ 'dito-active': modelValue === key }"
|
|
9
|
+
:class="{ 'dito-tabs__link--active': modelValue === key }"
|
|
10
10
|
@click="$emit('update:modelValue', key)"
|
|
11
11
|
) {{ getLabel(tabSchema, key) }}
|
|
12
12
|
</template>
|
|
@@ -31,7 +31,7 @@ export default DitoComponent.component('DitoTabs', {
|
|
|
31
31
|
.dito-tabs {
|
|
32
32
|
display: flex;
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
&__link {
|
|
35
35
|
@include user-select(none);
|
|
36
36
|
|
|
37
37
|
display: block;
|
|
@@ -53,7 +53,7 @@ export default DitoComponent.component('DitoTabs', {
|
|
|
53
53
|
background: $color-lightest;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
&--active {
|
|
57
57
|
background: $color-lightest;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -81,7 +81,7 @@ export default DitoComponent.component('DitoTabs', {
|
|
|
81
81
|
background: $color-lighter;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
&--active {
|
|
85
85
|
background: $color-active;
|
|
86
86
|
border-color: color.adjust($color-active, $lightness: -10%);
|
|
87
87
|
color: $color-white;
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
li(
|
|
5
5
|
v-for="component in trail"
|
|
6
6
|
)
|
|
7
|
-
a.dito-
|
|
8
|
-
:class="
|
|
7
|
+
a.dito-trail__link(
|
|
8
|
+
:class="{ 'dito-trail__link--active': component.path === $route.path }"
|
|
9
9
|
:href="getComponentHref(component)"
|
|
10
10
|
@click.prevent.stop="onClickComponent(component)"
|
|
11
11
|
)
|
|
12
|
-
span(
|
|
12
|
+
span.dito-trail__text(
|
|
13
|
+
:class="{ 'dito-trail__text--dirty': component.isDirty }"
|
|
14
|
+
)
|
|
13
15
|
| {{ component.breadcrumb }}
|
|
14
16
|
slot
|
|
15
17
|
</template>
|
|
@@ -45,18 +47,6 @@ export default DitoComponent.component('DitoTrail', {
|
|
|
45
47
|
path: this.getComponentPath(component),
|
|
46
48
|
force: true
|
|
47
49
|
})
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
getLinkClass(component) {
|
|
51
|
-
return {
|
|
52
|
-
'dito-active': component.path === this.$route.path
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
getSpanClass(component) {
|
|
57
|
-
return {
|
|
58
|
-
'dito-dirty': component.isDirty
|
|
59
|
-
}
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
52
|
})
|
|
@@ -66,6 +56,8 @@ export default DitoComponent.component('DitoTrail', {
|
|
|
66
56
|
@import '../styles/_imports';
|
|
67
57
|
|
|
68
58
|
.dito-trail {
|
|
59
|
+
$self: &;
|
|
60
|
+
|
|
69
61
|
display: flex;
|
|
70
62
|
box-sizing: border-box;
|
|
71
63
|
height: 3em;
|
|
@@ -78,18 +70,31 @@ export default DitoComponent.component('DitoTrail', {
|
|
|
78
70
|
white-space: nowrap;
|
|
79
71
|
}
|
|
80
72
|
|
|
81
|
-
|
|
73
|
+
&__link {
|
|
82
74
|
position: relative;
|
|
83
75
|
display: block;
|
|
84
76
|
|
|
85
77
|
&:hover {
|
|
86
|
-
|
|
78
|
+
#{$self}__text {
|
|
87
79
|
color: $color-light;
|
|
88
80
|
}
|
|
89
81
|
}
|
|
90
82
|
}
|
|
91
83
|
|
|
92
|
-
|
|
84
|
+
&__text--dirty {
|
|
85
|
+
&::after {
|
|
86
|
+
content: '';
|
|
87
|
+
display: inline-block;
|
|
88
|
+
background-color: $color-white;
|
|
89
|
+
width: 8px;
|
|
90
|
+
height: 8px;
|
|
91
|
+
margin: 2px;
|
|
92
|
+
margin-left: 0.5em;
|
|
93
|
+
border-radius: 100%;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
li:not(:last-child) &__link {
|
|
93
98
|
$angle: 33deg;
|
|
94
99
|
|
|
95
100
|
&::before,
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
.dito-tree-item(
|
|
3
3
|
:id="dataPath"
|
|
4
4
|
:class=`{
|
|
5
|
-
'dito-dragging': isDragging,
|
|
6
|
-
'dito-active': active
|
|
5
|
+
'dito-tree-item--dragging': isDragging,
|
|
6
|
+
'dito-tree-item--active': active
|
|
7
7
|
}`
|
|
8
8
|
:style="level > 0 && { '--level': level }"
|
|
9
9
|
:data-path="path"
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
)
|
|
18
18
|
.dito-chevron(
|
|
19
19
|
v-if="numEntries"
|
|
20
|
-
:class="{ 'dito-open': opened }"
|
|
20
|
+
:class="{ 'dito-chevron--open': opened }"
|
|
21
21
|
)
|
|
22
22
|
.dito-tree-label(
|
|
23
23
|
v-html="label"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
.dito-tree-label(
|
|
32
32
|
v-html="label"
|
|
33
33
|
)
|
|
34
|
-
.dito-buttons.dito-buttons
|
|
34
|
+
.dito-buttons.dito-buttons--small(
|
|
35
35
|
v-if="hasEditButtons"
|
|
36
36
|
)
|
|
37
37
|
//- Firefox doesn't like <button> here, so use <a> instead:
|
|
@@ -294,7 +294,7 @@ export default DitoComponent.component('DitoTreeItem', {
|
|
|
294
294
|
SortableMixin.methods.onEndDrag.call(this, event)
|
|
295
295
|
const { item } = event
|
|
296
296
|
// Preserve active state of edited sub-items, by editing their new path.
|
|
297
|
-
if (item.classList.contains('dito-active')) {
|
|
297
|
+
if (item.classList.contains('dito-tree-item--active')) {
|
|
298
298
|
this.$nextTick(() => {
|
|
299
299
|
this.editPath(event.item.dataset.path)
|
|
300
300
|
})
|
|
@@ -315,7 +315,7 @@ export default DitoComponent.component('DitoTreeItem', {
|
|
|
315
315
|
> .dito-tree-leaf {
|
|
316
316
|
// Use `--level` CSS variable to calculated the accumulated indent
|
|
317
317
|
// padding directly instead of having it accumulate in nested CSS.
|
|
318
|
-
// This way, we can keep the
|
|
318
|
+
// This way, we can keep the &--active area cover the full width:
|
|
319
319
|
padding-left: calc(var(--chevron-indent) * (var(--level, 1) - 1));
|
|
320
320
|
}
|
|
321
321
|
}
|
|
@@ -361,7 +361,7 @@ export default DitoComponent.component('DitoTreeItem', {
|
|
|
361
361
|
} // Hide buttons during dragging
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
|
|
364
|
+
&--dragging {
|
|
365
365
|
.dito-tree-header {
|
|
366
366
|
> .dito-buttons {
|
|
367
367
|
visibility: hidden;
|
|
@@ -369,7 +369,7 @@ export default DitoComponent.component('DitoTreeItem', {
|
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
|
|
372
|
-
|
|
372
|
+
&--active {
|
|
373
373
|
> .dito-tree-header {
|
|
374
374
|
background: $color-active;
|
|
375
375
|
padding: 0 $input-padding-hor;
|
package/src/components/index.js
CHANGED
|
@@ -12,7 +12,6 @@ export { default as DitoNotifications } from './DitoNotifications.vue'
|
|
|
12
12
|
export { default as DitoSidebar } from './DitoSidebar.vue'
|
|
13
13
|
export { default as DitoAccount } from './DitoAccount.vue'
|
|
14
14
|
export { default as DitoDialog } from './DitoDialog.vue'
|
|
15
|
-
export { default as DitoElement } from './DitoElement.vue'
|
|
16
15
|
export { default as DitoLabel } from './DitoLabel.vue'
|
|
17
16
|
export { default as DitoSchema } from './DitoSchema.vue'
|
|
18
17
|
export { default as DitoSchemaInlined } from './DitoSchemaInlined.vue'
|
|
@@ -38,4 +37,6 @@ export { default as DitoTableCell } from './DitoTableCell.vue'
|
|
|
38
37
|
export { default as DitoUploadFile } from './DitoUploadFile.vue'
|
|
39
38
|
export { default as DitoDraggable } from './DitoDraggable.vue'
|
|
40
39
|
export { default as DitoSpinner } from './DitoSpinner.vue'
|
|
40
|
+
export { default as DitoAffix } from './DitoAffix.vue'
|
|
41
|
+
export { default as DitoAffixes } from './DitoAffixes.vue'
|
|
41
42
|
export { default as DitoVNode } from './DitoVNode.vue'
|
package/src/mixins/DitoMixin.js
CHANGED
|
@@ -91,6 +91,7 @@ export default {
|
|
|
91
91
|
const entry = queue.shift()
|
|
92
92
|
if (entry) {
|
|
93
93
|
let result
|
|
94
|
+
const errors = []
|
|
94
95
|
for (const callback of callbacks) {
|
|
95
96
|
try {
|
|
96
97
|
const res = await callback.apply(this, entry.args)
|
|
@@ -98,15 +99,20 @@ export default {
|
|
|
98
99
|
result = res
|
|
99
100
|
}
|
|
100
101
|
} catch (error) {
|
|
101
|
-
|
|
102
|
-
`Error during event handler for '${event}':`,
|
|
103
|
-
error
|
|
104
|
-
)
|
|
102
|
+
errors.push(error)
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
if (errors.length > 0) {
|
|
106
|
+
const error = new AggregateError(
|
|
107
|
+
errors,
|
|
108
|
+
`Errors during event handler for '${event}'`
|
|
109
|
+
)
|
|
110
|
+
entry.resolve(Promise.reject(error))
|
|
111
|
+
} else {
|
|
112
|
+
// Resolve the promise that was added to the queue for the event
|
|
113
|
+
// that was just completed by the wrapper that called `next()`
|
|
114
|
+
entry.resolve(result)
|
|
115
|
+
}
|
|
110
116
|
next()
|
|
111
117
|
}
|
|
112
118
|
}
|