@afeefa/vue-app 0.0.64 → 0.0.65

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- 0.0.64
1
+ 0.0.65
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@afeefa/vue-app",
3
- "version": "0.0.64",
3
+ "version": "0.0.65",
4
4
  "description": "",
5
5
  "author": "Afeefa Kollektiv <kollektiv@afeefa.de>",
6
6
  "license": "MIT",
@@ -106,9 +106,10 @@ export default class ABreadcrumbs extends Vue {
106
106
  getItemTitle (title) {
107
107
  // title = title.concat(title).concat(title)
108
108
  if (title.length > 20) {
109
- title = title.slice(0, 10).trim() + '...' + title.slice(-10).trim()
109
+ // title = title.slice(0, 10).trim() + '...' + title.slice(-10).trim()
110
110
  }
111
- return title.toUpperCase()
111
+ return title
112
+ // return title.toUpperCase()
112
113
  }
113
114
  }
114
115
  </script>
@@ -4,85 +4,84 @@
4
4
  v-if="editor"
5
5
  class="menu-bar"
6
6
  >
7
- <v-btn
8
- small
9
- :class="['menu-button', {'is-active': focus && editor.isActive('bold')}]"
10
- @click="editor.chain().focus().toggleBold().run()"
11
- >
12
- <v-icon>{{ boldIcon }}</v-icon>
13
- </v-btn>
14
-
15
- <v-btn
16
- small
17
- :class="['menu-button', {'is-active': focus && editor.isActive('italic')}]"
18
- @click="editor.chain().focus().toggleItalic().run()"
19
- >
20
- <v-icon>{{ italicIcon }}</v-icon>
21
- </v-btn>
22
-
23
- <v-btn
24
- small
25
- :class="['menu-button', 'strike', {'is-active': focus && editor.isActive('strike')}]"
26
- @click="editor.chain().focus().toggleStrike().run()"
27
- >
28
- <v-icon>{{ strikeIcon }}</v-icon>
29
- </v-btn>
30
-
31
- <v-btn
32
- small
33
- :class="['menu-button', {'is-active': focus && editor.isActive('heading', {level: 1})}]"
34
- @click="editor.chain().focus().toggleHeading({level: 1}).run()"
35
- >
36
- <v-icon>{{ h1Icon }}</v-icon>
37
- </v-btn>
38
-
39
- <v-btn
40
- small
41
- :class="['menu-button', {'is-active': focus && editor.isActive('heading', {level: 2})}]"
42
- @click="editor.chain().focus().toggleHeading({level: 2}).run()"
43
- >
44
- <v-icon>{{ h2Icon }}</v-icon>
45
- </v-btn>
46
-
47
- <v-btn
48
- small
49
- :class="['menu-button', {'is-active': focus && editor.isActive('bulletList')}]"
50
- @click="editor.chain().focus().toggleBulletList().run()"
51
- >
52
- <v-icon>{{ ulIcon }}</v-icon>
53
- </v-btn>
54
-
55
- <v-btn
56
- small
57
- :class="['menu-button', {'is-active': focus && editor.isActive('orderedList')}]"
58
- @click="editor.chain().focus().toggleOrderedList().run()"
59
- >
60
- <v-icon>{{ olIcon }}</v-icon>
61
- </v-btn>
62
-
63
- <v-btn
64
- small
65
- :class="['menu-button', {'is-active': focus && editor.isActive('blockquote')}]"
66
- @click="editor.chain().focus().toggleBlockquote().run()"
67
- >
68
- <v-icon>{{ commentIcon }}</v-icon>
69
- </v-btn>
70
-
71
- <v-btn
72
- small
73
- class="menu-button"
74
- @click="editor.chain().focus().undo().run()"
75
- >
76
- <v-icon>{{ undoIcon }}</v-icon>
77
- </v-btn>
78
-
79
- <v-btn
80
- small
81
- class="menu-button"
82
- @click="editor.chain().focus().redo().run()"
83
- >
84
- <v-icon>{{ redoIcon }}</v-icon>
85
- </v-btn>
7
+ <div>
8
+ <v-btn
9
+ small
10
+ :class="['menu-button', {'is-active': focus && editor.isActive('bold')}]"
11
+ @click="editor.chain().focus().toggleBold().run()"
12
+ >
13
+ <v-icon>{{ boldIcon }}</v-icon>
14
+ </v-btn>
15
+
16
+ <v-btn
17
+ small
18
+ :class="['menu-button', {'is-active': focus && editor.isActive('italic')}]"
19
+ @click="editor.chain().focus().toggleItalic().run()"
20
+ >
21
+ <v-icon>{{ italicIcon }}</v-icon>
22
+ </v-btn>
23
+
24
+ <v-btn
25
+ small
26
+ :class="['menu-button', 'strike', {'is-active': focus && editor.isActive('strike')}]"
27
+ @click="editor.chain().focus().toggleStrike().run()"
28
+ >
29
+ <v-icon>{{ strikeIcon }}</v-icon>
30
+ </v-btn>
31
+
32
+ <v-btn
33
+ small
34
+ :class="['menu-button', {'is-active': focus && editor.isActive('heading', {level: 1})}]"
35
+ @click="editor.chain().focus().toggleHeading({level: 1}).run()"
36
+ >
37
+ <v-icon>{{ h1Icon }}</v-icon>
38
+ </v-btn>
39
+
40
+ <v-btn
41
+ small
42
+ :class="['menu-button', {'is-active': focus && editor.isActive('heading', {level: 2})}]"
43
+ @click="editor.chain().focus().toggleHeading({level: 2}).run()"
44
+ >
45
+ <v-icon>{{ h2Icon }}</v-icon>
46
+ </v-btn>
47
+
48
+ <v-btn
49
+ small
50
+ :class="['menu-button', {'is-active': focus && editor.isActive('bulletList')}]"
51
+ @click="editor.chain().focus().toggleBulletList().run()"
52
+ >
53
+ <v-icon>{{ ulIcon }}</v-icon>
54
+ </v-btn>
55
+
56
+ <v-btn
57
+ small
58
+ :class="['menu-button', {'is-active': focus && editor.isActive('orderedList')}]"
59
+ @click="editor.chain().focus().toggleOrderedList().run()"
60
+ >
61
+ <v-icon>{{ olIcon }}</v-icon>
62
+ </v-btn>
63
+
64
+ <v-btn
65
+ small
66
+ :class="['menu-button', {'is-active': focus && editor.isActive('blockquote')}]"
67
+ @click="editor.chain().focus().toggleBlockquote().run()"
68
+ >
69
+ <v-icon>{{ commentIcon }}</v-icon>
70
+ </v-btn>
71
+
72
+ <v-btn
73
+ small
74
+ class="menu-button"
75
+ :disabled="initialValue === editor.getHTML()"
76
+ @click="editor.chain().focus().undo().run()"
77
+ >
78
+ <v-icon>{{ undoIcon }}</v-icon>
79
+ </v-btn>
80
+ </div>
81
+
82
+ <div>
83
+ <slot name="buttons" />
84
+ </div>
86
85
  </div>
87
86
 
88
87
  <editor-content
@@ -119,6 +118,7 @@ import {
119
118
  export default class ARichTextArea extends Vue {
120
119
  editor = null
121
120
  internalValue = null
121
+ initialValue = null
122
122
  focus = false
123
123
 
124
124
  boldIcon = mdiFormatBold
@@ -133,6 +133,7 @@ export default class ARichTextArea extends Vue {
133
133
  redoIcon = mdiRotateRight
134
134
 
135
135
  created () {
136
+ this.initialValue = this.value
136
137
  this.internalValue = this.value
137
138
  }
138
139
 
@@ -158,14 +159,20 @@ export default class ARichTextArea extends Vue {
158
159
  this.$emit('blur')
159
160
  }
160
161
  })
161
-
162
- this.editor.commands.setContent(this.internalValue, false)
163
162
  }
164
163
 
165
164
  beforeDestroy () {
166
165
  this.editor.destroy()
167
166
  }
168
167
 
168
+ /**
169
+ * reset the text area to disable the undo button
170
+ * e.g. after saving the form while keeping it open
171
+ */
172
+ reset () {
173
+ this.initialValue = this.value
174
+ }
175
+
169
176
  @Watch('value')
170
177
  valueChanged () {
171
178
  this.internalValue = this.value
@@ -192,10 +199,6 @@ export default class ARichTextArea extends Vue {
192
199
 
193
200
 
194
201
  <style lang="scss" scoped>
195
- .v-input:not(.v-input--is-focused) ::v-deep .v-counter {
196
- display: none;
197
- }
198
-
199
202
  .a-rich-text-editor {
200
203
  ::v-deep .ProseMirror {
201
204
  &-focused {
@@ -205,9 +208,12 @@ export default class ARichTextArea extends Vue {
205
208
  }
206
209
 
207
210
  .menu-bar {
211
+ display: flex;
212
+ justify-content: space-between;
208
213
  margin: -.2rem 0 .5rem -.2rem;
209
214
  }
210
215
 
216
+ .menu-bar .v-btn,
211
217
  .menu-button {
212
218
  padding: 0 !important;
213
219
  width: 30px !important;
@@ -239,6 +245,10 @@ export default class ARichTextArea extends Vue {
239
245
  &.is-active {
240
246
  background: #ECECEC !important;
241
247
  }
248
+
249
+ &[disabled] {
250
+ background: none !important;
251
+ }
242
252
  }
243
253
 
244
254
  ::v-deep .ProseMirror {
@@ -28,11 +28,17 @@ export default class EditForm extends Vue {
28
28
  modelToEdit = null
29
29
  valid = false
30
30
  lastJson = null
31
+ forcedUnchange = false
31
32
 
32
33
  created () {
33
34
  this.reset()
34
35
  }
35
36
 
37
+ forceUnchanged () {
38
+ this.forcedUnchange = true
39
+ this.$emit('update:changed', false)
40
+ }
41
+
36
42
  reset () {
37
43
  if (this.createModelToEdit) {
38
44
  this.modelToEdit = this.createModelToEdit(this.model)
@@ -66,6 +72,9 @@ export default class EditForm extends Vue {
66
72
  }
67
73
 
68
74
  get changed () {
75
+ if (this.forcedUnchange) {
76
+ return false
77
+ }
69
78
  // console.log(this.json)
70
79
  // console.log(this.lastJson)
71
80
  return this.json !== this.lastJson
@@ -125,6 +125,8 @@ export default class EditModal extends Vue {
125
125
  * hook to allow to leave a just created (saved) model
126
126
  */
127
127
  ignoreChangesOnClose () {
128
+ // this.$refs.form.forceUnchanged()
129
+ console.info('TODO switch form to forceUnchanged')
128
130
  this.ignoreChangesOnClose_ = true
129
131
  }
130
132
  }
@@ -1,7 +1,9 @@
1
1
  <template>
2
- <a-rich-text-area
3
- v-model="model[name]"
4
- />
2
+ <a-rich-text-area v-model="model[name]">
3
+ <template #buttons>
4
+ <slot name="buttons" />
5
+ </template>
6
+ </a-rich-text-area>
5
7
  </template>
6
8
 
7
9
  <script>
@@ -64,9 +64,16 @@ export class ListViewMixin extends Vue {
64
64
  .on('change', this.filtersChanged) // listen to change
65
65
 
66
66
  this._filtersInitialized()
67
+ this.$emit('update:filters', this.filters)
68
+ this.$emit('update:listViewModel', this.listViewModel)
67
69
 
68
70
  if (this.models) {
69
71
  this.$emit('update:count', this.meta_.count_search)
72
+
73
+ this.$emit('onLoad', {
74
+ models: this.models_,
75
+ meta: this.meta_
76
+ })
70
77
  } else {
71
78
  this.load()
72
79
  }
@@ -132,7 +139,7 @@ export class ListViewMixin extends Vue {
132
139
 
133
140
  if (!models) { // error happened
134
141
  this.isLoading = false
135
- this.$emit('update:isLoading', this.isLoading)
142
+ this.$emit('update:isLoading', false)
136
143
  return
137
144
  }
138
145
 
@@ -144,8 +151,13 @@ export class ListViewMixin extends Vue {
144
151
  }
145
152
 
146
153
  this.isLoading = false
147
- this.$emit('update:isLoading', this.isLoading)
154
+ this.$emit('update:isLoading', false)
148
155
 
149
156
  this.$emit('update:count', this.meta_.count_search)
157
+
158
+ this.$emit('onLoad', {
159
+ models,
160
+ meta
161
+ })
150
162
  }
151
163
  }
@@ -67,7 +67,6 @@ export default class SearchSelectList extends Mixins(ListViewMixin) {
67
67
  if (this.q) {
68
68
  this.filters.q.value = this.q
69
69
  }
70
- this.$emit('update:filters', this.filters)
71
70
  }
72
71
  }
73
72
  </script>
@@ -32,9 +32,16 @@ function propsWithDefaults (props) {
32
32
  // property: { some object }, should be a normal vue props object
33
33
  } else if (value && typeof value === 'object' && value.constructor === Object) {
34
34
  normalizedProps[subProp] = value
35
- // property: true, null, ...
35
+ // property: true, false, null, ...
36
36
  } else {
37
- normalizedProps[subProp] = { default: value }
37
+ if (typeof value === 'boolean') {
38
+ normalizedProps[subProp] = {
39
+ type: Boolean,
40
+ default: value
41
+ }
42
+ } else {
43
+ normalizedProps[subProp] = { default: value }
44
+ }
38
45
  }
39
46
  })
40
47
  } else {
package/src/events.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { BaseEvent } from './plugins/event-bus/BaseEvent'
1
2
  export { LoadingEvent } from './components/loading-indicator/LoadingEvent'
2
3
  export { SaveEvent } from './components/save-indicator/SaveEvent'
3
4
  export { AlertEvent } from './components/alert/AlertEvent'
@@ -3,8 +3,9 @@
3
3
  <v-navigation-drawer
4
4
  v-model="drawer"
5
5
  app
6
- fixeds
7
6
  left
7
+ width="280"
8
+ class="menubar"
8
9
  >
9
10
  <v-container
10
11
  flex-column
@@ -91,9 +92,8 @@
91
92
  </v-list>
92
93
  </v-navigation-drawer>
93
94
 
94
- <flying-context-container />
95
-
96
95
  <v-app-bar
96
+ v-if="false"
97
97
  app
98
98
  flat
99
99
  dense
@@ -117,23 +117,35 @@
117
117
  />
118
118
  </v-app-bar>
119
119
 
120
- <v-main>
120
+ <v-main id="v-main">
121
+ <a-row class="topbar">
122
+ <v-app-bar-nav-icon
123
+ class="sidebarToggleButton mr-2 ml-n1"
124
+ @click="toggleDrawer"
125
+ />
126
+ <a-breadcrumbs />
127
+ </a-row>
128
+
121
129
  <v-container
122
130
  fluid
123
131
  class="pa-4"
124
132
  >
125
- <div class="d-flex align-center">
126
- <app-bar-title-container class="flex-grow-1 mb-4" />
127
- <app-bar-buttons class="mr-2 mb-4" />
133
+ <div class="sticky-app-bar d-flex align-center">
134
+ <app-bar-title-container class="flex-grow-1" />
135
+ <app-bar-buttons class="mr-2" />
128
136
  </div>
129
137
 
130
138
  <router-view :class="{isLoading}" />
131
139
  </v-container>
140
+
141
+ <sticky-footer-container v-if="true" />
132
142
  </v-main>
133
143
 
134
144
  <a-dialog id="app" />
135
145
 
136
146
  <a-save-indicator />
147
+
148
+ <flying-context-container />
137
149
  </div>
138
150
  </template>
139
151
 
@@ -145,13 +157,15 @@ import { sleep } from '@a-vue/utils/timeout'
145
157
  import AppBarButtons from './app/AppBarButtons'
146
158
  import AppBarTitleContainer from './app/AppBarTitleContainer'
147
159
  import FlyingContextContainer from './FlyingContextContainer'
160
+ import StickyFooterContainer from './StickyFooterContainer'
148
161
  import '../styles.scss'
149
162
 
150
163
  @Component({
151
164
  components: {
152
165
  AppBarButtons,
153
166
  AppBarTitleContainer,
154
- FlyingContextContainer
167
+ FlyingContextContainer,
168
+ StickyFooterContainer
155
169
  }
156
170
  })
157
171
  export default class App extends Vue {
@@ -171,6 +185,17 @@ export default class App extends Vue {
171
185
  this.$emit('appLoaded')
172
186
  }
173
187
 
188
+ mounted () {
189
+ const el = document.querySelector('.sticky-app-bar')
190
+ const observer = new IntersectionObserver(
191
+ ([e]) => {
192
+ e.target.classList.toggle('is-pinned', e.intersectionRatio < 1)
193
+ },
194
+ { threshold: [1] }
195
+ )
196
+ observer.observe(el)
197
+ }
198
+
174
199
  get SidebarMenu () {
175
200
  return appConfig.components.SidebarMenu
176
201
  }
@@ -248,4 +273,24 @@ export default class App extends Vue {
248
273
  height: 36px !important;
249
274
  margin-top: 1px;
250
275
  }
276
+
277
+ .topbar {
278
+ position: relative;
279
+ width: 100%;
280
+ left: 0;
281
+ top: 0;
282
+ padding: .2rem 1rem;
283
+ }
284
+ .sticky-app-bar {
285
+ position: sticky;
286
+ top: -1px;
287
+ margin: -1rem -1rem 0;
288
+ padding: 1rem;
289
+
290
+ &.is-pinned {
291
+ background: white;
292
+ z-index: 2;
293
+ box-shadow: 0 4px 7px -4px #00000033;
294
+ }
295
+ }
251
296
  </style>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div class="stickyFooter">
3
+ <div :class="contextId">
4
+ <slot />
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <script>
10
+ import { Component, Vue } from '@a-vue'
11
+ import { randomCssClass } from '@a-vue/utils/random'
12
+
13
+ @Component
14
+ export default class StickyFooter extends Vue {
15
+ contextId = randomCssClass(10)
16
+
17
+ mounted () {
18
+ const container = this.getFooterContainer()
19
+ container.appendChild(this.getContent())
20
+ }
21
+
22
+ destroyed () {
23
+ const container = this.getFooterContainer()
24
+ const el = this.getContent()
25
+ if (container.contains(el)) {
26
+ container.removeChild(el)
27
+ }
28
+ }
29
+
30
+ getContent () {
31
+ return document.querySelector('.' + this.contextId)
32
+ }
33
+
34
+ getFooterContainer () {
35
+ return document.getElementById('stickyFooterContainer__children')
36
+ }
37
+ }
38
+ </script>
39
+
40
+
41
+ <style lang="scss" scoped>
42
+ </style>
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <v-footer
3
+ id="stickyFooterContainer"
4
+ fixed
5
+ app
6
+ inset
7
+ :class="{visible}"
8
+ >
9
+ <div id="stickyFooterContainer__children" />
10
+ </v-footer>
11
+ </template>
12
+
13
+ <script>
14
+ import { Component, Vue } from '@a-vue'
15
+
16
+ @Component({
17
+ props: []
18
+ })
19
+ export default class StickyFooterContainer extends Vue {
20
+ visible = false
21
+
22
+ mounted () {
23
+ this.mutationWatcher = new MutationObserver(this.domChanged)
24
+ this.mutationWatcher.observe(this.getChildrenContainer(), { childList: true })
25
+ }
26
+
27
+ domChanged () {
28
+ const container = this.getChildrenContainer()
29
+ this.visible = !!container.children.length
30
+
31
+ this.$nextTick(() => {
32
+ const mainStyle = document.getElementById('v-main').style
33
+ if (this.visible) {
34
+ mainStyle.paddingBottom = this.$el.offsetHeight + 'px'
35
+ } else {
36
+ mainStyle.paddingBottom = '0px'
37
+ }
38
+ })
39
+ }
40
+
41
+ getChildrenContainer () {
42
+ return this.$el.querySelector('#stickyFooterContainer__children')
43
+ }
44
+ }
45
+ </script>
46
+
47
+
48
+ <style lang="scss" scoped>
49
+ #stickyFooterContainer {
50
+ background: white;
51
+ padding: 0;
52
+
53
+ &:not(.visible) {
54
+ display: none;
55
+ }
56
+
57
+ &__children {
58
+ width: 100%;
59
+ }
60
+ }
61
+
62
+ #stickyFooterContainer__children {
63
+ background: #F5F5F5;
64
+ padding: 1rem;
65
+ }
66
+ </style>
@@ -1,5 +1,8 @@
1
1
  <template>
2
- <a-row gap="2">
2
+ <a-row
3
+ gap="2"
4
+ v-bind="$attrs"
5
+ >
3
6
  <v-btn
4
7
  :small="small"
5
8
  :disabled="($has.reset && !changed) || !valid"
@@ -20,6 +20,7 @@ import ModelCount from './model/ModelCount'
20
20
  import ModelIcon from './model/ModelIcon'
21
21
  import EditPage from './pages/EditPage'
22
22
  import Start from './Start.vue'
23
+ import StickyFooter from './StickyFooter.vue'
23
24
 
24
25
  Vue.component('ListCard', ListCard)
25
26
  Vue.component('ListColumnHeader', ListColumnHeader)
@@ -46,3 +47,4 @@ Vue.component('AppBarTitle', AppBarTitle)
46
47
 
47
48
  Vue.component('Start', Start)
48
49
  Vue.component('FlyingContext', FlyingContext)
50
+ Vue.component('StickyFooter', StickyFooter)
@@ -8,12 +8,16 @@
8
8
  />
9
9
  </div>
10
10
 
11
+ <slot
12
+ v-if="$scopedSlots.models"
13
+ name="before-models"
14
+ />
15
+
11
16
  <template v-if="models_.length">
12
17
  <template v-if="$scopedSlots.models">
13
18
  <slot
14
19
  name="models"
15
20
  :models="models_"
16
- :setFilter="setFilter"
17
21
  />
18
22
  </template>
19
23
 
@@ -44,7 +48,6 @@
44
48
  <slot
45
49
  name="model-table"
46
50
  :model="model"
47
- :setFilter="setFilter"
48
51
  />
49
52
  </a-table-row>
50
53
  </a-table>
@@ -110,10 +113,6 @@ export default class ListView extends Mixins(ListViewMixin) {
110
113
  get hasFlyingContext () {
111
114
  return !!this.$listeners.flyingContext
112
115
  }
113
-
114
- setFilter (name, value) {
115
- this.filters[name].value = value
116
- }
117
116
  }
118
117
  </script>
119
118
 
@@ -12,13 +12,15 @@
12
12
  :valid="valid"
13
13
  />
14
14
 
15
- <edit-form-buttons
16
- :changed="changed"
17
- :valid="valid"
18
- :has="{reset: !!modelToEdit.id}"
19
- @save="$emit('save', modelToEdit, ignoreChangesOnRouteChange)"
20
- @reset="$refs.form.reset()"
21
- />
15
+ <sticky-footer>
16
+ <edit-form-buttons
17
+ :changed="changed"
18
+ :valid="valid"
19
+ :has="{reset: !!modelToEdit.id}"
20
+ @save="$emit('save', modelToEdit, ignoreChangesOnRouteChange)"
21
+ @reset="$refs.form.reset()"
22
+ />
23
+ </sticky-footer>
22
24
  </template>
23
25
  </edit-form>
24
26
  </template>
@@ -59,6 +61,8 @@ export default class EditPage extends Vue {
59
61
  * hook to allow to leave a just created (saved) model
60
62
  */
61
63
  ignoreChangesOnRouteChange () {
64
+ // this.$refs.form.forceUnchanged()
65
+ console.info('TODO switch form to forceUnchanged')
62
66
  this.ignoreChangesOnRouteChange_ = true
63
67
  }
64
68
  }
@@ -1,4 +1,4 @@
1
- import { Component, Vue, Watch } from '@a-vue'
1
+ import { Component, Vue } from '@a-vue'
2
2
 
3
3
  Component.registerHooks([
4
4
  'beforeRouteEnter',
@@ -1,8 +1,11 @@
1
1
  import {
2
2
  mdiAlarmLightOutline,
3
3
  mdiCalendar,
4
+ mdiCheck,
5
+ mdiCheckBold,
4
6
  mdiChevronRight,
5
7
  mdiClose,
8
+ mdiCloseThick,
6
9
  mdiDelete,
7
10
  mdiDotsHorizontal,
8
11
  mdiDotsVertical,
@@ -26,6 +29,7 @@ export default new Vuetify({
26
29
  thumbsUpIcon: mdiThumbUpOutline,
27
30
  alarmIcon: mdiAlarmLightOutline,
28
31
  closeIcon: mdiClose,
32
+ closeBoldIcon: mdiCloseThick,
29
33
  dotsVerticalIcon: mdiDotsVertical,
30
34
  dotsHorizontalIcon: mdiDotsHorizontal,
31
35
  logoutIcon: mdiLogoutVariant,
@@ -34,7 +38,9 @@ export default new Vuetify({
34
38
  trashCanIcon: mdiDelete,
35
39
  calendarIcon: mdiCalendar,
36
40
  searchIcon: mdiMagnify,
37
- lockIcon: mdiLock
41
+ lockIcon: mdiLock,
42
+ checkIcon: mdiCheck,
43
+ checkBoldIcon: mdiCheckBold
38
44
  }
39
45
  },
40
46
  breakpoint: {
@@ -15,6 +15,7 @@
15
15
  .contextButton {
16
16
  color: #AAAAAA !important;
17
17
  cursor: pointer;
18
+
18
19
  &:hover {
19
20
  color: #333333 !important;
20
21
  }
@@ -27,10 +28,6 @@
27
28
  }
28
29
  }
29
30
 
30
- .v-main {
31
- margin-bottom: 2rem;
32
- }
33
-
34
31
  .theme--light.v-btn.v-btn--has-bg {
35
32
  background-color: #E9E9E9;
36
33
  }