@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.
Files changed (52) hide show
  1. package/dist/dito-admin.css +1 -1
  2. package/dist/dito-admin.es.js +2647 -2495
  3. package/dist/dito-admin.umd.js +5 -5
  4. package/package.json +33 -33
  5. package/src/DitoContext.js +8 -0
  6. package/src/components/DitoAccount.vue +1 -1
  7. package/src/components/DitoAffix.vue +56 -0
  8. package/src/components/DitoAffixes.vue +82 -0
  9. package/src/components/DitoClipboard.vue +3 -3
  10. package/src/components/DitoContainer.vue +24 -16
  11. package/src/components/DitoCreateButton.vue +7 -12
  12. package/src/components/DitoDialog.vue +1 -1
  13. package/src/components/DitoEditButtons.vue +3 -3
  14. package/src/components/DitoForm.vue +3 -6
  15. package/src/components/DitoHeader.vue +0 -13
  16. package/src/components/DitoLabel.vue +24 -42
  17. package/src/components/DitoMenu.vue +30 -34
  18. package/src/components/DitoPagination.vue +1 -1
  19. package/src/components/DitoPane.vue +10 -8
  20. package/src/components/DitoPanel.vue +2 -2
  21. package/src/components/DitoSchema.vue +5 -2
  22. package/src/components/DitoSchemaInlined.vue +1 -1
  23. package/src/components/DitoScopes.vue +1 -1
  24. package/src/components/DitoTableHead.vue +3 -3
  25. package/src/components/DitoTabs.vue +5 -5
  26. package/src/components/DitoTrail.vue +23 -18
  27. package/src/components/DitoTreeItem.vue +8 -8
  28. package/src/components/index.js +2 -1
  29. package/src/mixins/DitoMixin.js +1 -1
  30. package/src/mixins/EmitterMixin.js +13 -7
  31. package/src/mixins/SortableMixin.js +1 -1
  32. package/src/styles/_button.scss +99 -98
  33. package/src/styles/_layout.scss +14 -12
  34. package/src/styles/_pulldown.scss +17 -15
  35. package/src/styles/_table.scss +23 -22
  36. package/src/types/DitoTypeButton.vue +62 -19
  37. package/src/types/DitoTypeCheckboxes.vue +1 -1
  38. package/src/types/DitoTypeColor.vue +16 -10
  39. package/src/types/DitoTypeDate.vue +21 -7
  40. package/src/types/DitoTypeList.vue +9 -9
  41. package/src/types/DitoTypeMarkup.vue +8 -7
  42. package/src/types/DitoTypeMultiselect.vue +2 -2
  43. package/src/types/DitoTypeNumber.vue +15 -5
  44. package/src/types/DitoTypeRadio.vue +1 -1
  45. package/src/types/DitoTypeSelect.vue +7 -7
  46. package/src/types/DitoTypeSlider.vue +3 -3
  47. package/src/types/DitoTypeSwitch.vue +3 -3
  48. package/src/types/DitoTypeText.vue +15 -5
  49. package/src/types/DitoTypeTextarea.vue +2 -2
  50. package/src/types/DitoTypeUpload.vue +7 -7
  51. package/src/utils/schema.js +4 -1
  52. 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-link(
12
+ a.dito-menu__link(
13
13
  :href="getItemHref(item)"
14
- :class="getItemClass(item, 'dito-sub-menu-link')"
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
- li {
110
- &:has(.dito-sub-menu:not(.dito-active)) {
105
+ &__item {
106
+ &:has(#{$self}__sub):not(:has(#{$self}__link--active)) {
111
107
  // Pop-out sub-menus on hover:
112
108
  &:hover {
113
- .dito-sub-menu-link {
109
+ > #{$self}__link {
114
110
  background: $color-lightest;
115
111
  }
116
112
 
117
- .dito-sub-menu {
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
- li:first-child {
126
- .dito-link {
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
- // .dito-sub-menu-link,
144
- .dito-sub-menu {
139
+ #{$self}__sub {
145
140
  box-shadow: $shadow-window;
146
141
  }
147
142
  }
148
143
  }
149
144
  }
150
145
 
151
- .dito-link {
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, .dito-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
- &.dito-active {
167
- color: $color-white;
168
- background: $color-active;
169
- }
170
- }
161
+ &--active {
162
+ &,
163
+ &:hover {
164
+ color: var(--menu-active-color);
165
+ background: var(--menu-active-background);
166
+ }
171
167
 
172
- .dito-sub-menu-link {
173
- &.dito-active {
174
- background: color.adjust($color-active, $alpha: -0.3);
168
+ &:has(+ #{$self}__sub) {
169
+ --menu-active-background: #{color.adjust($color-active, $alpha: -0.3)};
170
+ }
175
171
  }
176
172
  }
177
173
 
178
- .dito-sub-menu {
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
- &.dito-active {
186
- display: block;
187
- }
182
+ &__link--active + &__sub {
183
+ display: block;
188
184
  }
189
185
  }
190
186
  </style>
@@ -7,7 +7,7 @@ Pagination(
7
7
  </template>
8
8
 
9
9
  <script>
10
- import { Pagination } from '@ditojs/ui/src'
10
+ import { DitoPagination as Pagination } from '@ditojs/ui/src'
11
11
  import DitoComponent from '../DitoComponent.js'
12
12
 
13
13
  // @vue/component
@@ -14,9 +14,9 @@
14
14
  store
15
15
  }, index in componentSchemas`
16
16
  )
17
- //- Use <span> for .dito-break so we can use `.dito-container:first-of-type`
18
- //- selector.
19
- span.dito-break(
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-break(
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-main` can be moved all the way to the bottom.
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-main {
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
- .dito-break {
323
- // `.dito-break` is rendered as <span> so we can use the
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(#before)
21
+ template(#prepend)
22
22
  h2.dito-panel__header(:class="{ 'dito-panel__header--sticky': sticky }")
23
23
  span {{ getLabel(schema) }}
24
- DitoButtons.dito-buttons-small(
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="before")
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="after")
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"
@@ -9,7 +9,7 @@
9
9
  )
10
10
  button.dito-button(
11
11
  type="button"
12
- :class="{ 'dito-selected': scope.name === query.scope }"
12
+ :class="{ 'dito-button--selected': scope.name === query.scope }"
13
13
  :title="scope.hint || getLabel(scope)"
14
14
  @click="navigate"
15
15
  ) {{ getLabel(scope) }}
@@ -19,7 +19,7 @@ thead.dito-table-head
19
19
  :class="getSortClass(column)"
20
20
  @click="navigate"
21
21
  )
22
- .dito-order-arrows
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-${hyphenate(column.name)}`
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-link(
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
- .dito-link {
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
- &.dito-active {
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
- &.dito-active {
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-link(
8
- :class="getLinkClass(component)"
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(:class="getSpanClass(component)")
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
- a {
73
+ &__link {
82
74
  position: relative;
83
75
  display: block;
84
76
 
85
77
  &:hover {
86
- span {
78
+ #{$self}__text {
87
79
  color: $color-light;
88
80
  }
89
81
  }
90
82
  }
91
83
 
92
- li:not(:last-child) a {
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-small(
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 .dito-active area cover the full width:
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
- &.dito-dragging {
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
- &.dito-active {
372
+ &--active {
373
373
  > .dito-tree-header {
374
374
  background: $color-active;
375
375
  padding: 0 $input-padding-hor;
@@ -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'
@@ -278,7 +278,7 @@ export default {
278
278
 
279
279
  getButtonAttributes(verb) {
280
280
  return {
281
- class: `dito-button-${verb}`,
281
+ class: `dito-button--${verb}`,
282
282
  title: labelize(verb)
283
283
  }
284
284
  },
@@ -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
- console.error(
102
- `Error during event handler for '${event}':`,
103
- error
104
- )
102
+ errors.push(error)
105
103
  }
106
104
  }
107
- // Resolve the promise that was added to the queue for the event
108
- // that was just completed by the wrapper that called `next()`
109
- entry.resolve(result)
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
  }
@@ -11,7 +11,7 @@ export default {
11
11
  const prefix = 'dito-draggable'
12
12
  return {
13
13
  animation: 150,
14
- handle: '.dito-button-drag',
14
+ handle: '.dito-button--drag',
15
15
  dragClass: `${prefix}__drag`,
16
16
  chosenClass: `${prefix}__chosen`,
17
17
  ghostClass: `${prefix}__ghost`,