glib-web 2.6.7 → 3.0.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 (110) hide show
  1. package/action.js +39 -17
  2. package/actions/analytics/logEvent.js +2 -2
  3. package/actions/auth/saveCsrfToken.js +6 -0
  4. package/actions/cables/push.js +4 -4
  5. package/actions/commands/enqueue.js +17 -0
  6. package/actions/fields/reset.js +2 -2
  7. package/actions/http/get.js +15 -27
  8. package/actions/panels/scrollTo.js +1 -1
  9. package/actions/panels/scrollToBottom.js +1 -1
  10. package/actions/popovers/close.js +5 -0
  11. package/actions/popovers/open.js +9 -0
  12. package/actions/windows/closeWithReload.js +1 -1
  13. package/actions/windows/refreshState.js +3 -1
  14. package/actions/ws/push.js +5 -3
  15. package/app.vue +59 -27
  16. package/components/_badge.vue +1 -6
  17. package/components/_button.vue +30 -30
  18. package/components/_chip.vue +27 -29
  19. package/components/_dropdownMenu.vue +10 -23
  20. package/components/_icon.vue +5 -5
  21. package/components/_responsive.vue +7 -21
  22. package/components/avatar.vue +11 -15
  23. package/components/banners/alert.vue +2 -7
  24. package/components/banners/select.vue +18 -30
  25. package/components/button.vue +4 -5
  26. package/components/component.vue +112 -133
  27. package/components/datetime.vue +2 -0
  28. package/components/fields/_patternText.vue +8 -19
  29. package/components/fields/_select.vue +9 -27
  30. package/components/fields/autocomplete.vue +8 -21
  31. package/components/fields/check.vue +5 -12
  32. package/components/fields/checkGroup.vue +3 -13
  33. package/components/fields/country/field.vue +9 -27
  34. package/components/fields/date.vue +5 -5
  35. package/components/fields/datetime.vue +6 -11
  36. package/components/fields/dynamicSelect.vue +8 -29
  37. package/components/fields/file.vue +10 -29
  38. package/components/fields/newRichText.vue +67 -54
  39. package/components/fields/otpField.vue +11 -31
  40. package/components/fields/phone/field.vue +60 -78
  41. package/components/fields/radio.vue +8 -44
  42. package/components/fields/radioGroup.vue +17 -19
  43. package/components/fields/rating.vue +9 -16
  44. package/components/fields/richText.vue +27 -45
  45. package/components/fields/select.vue +10 -7
  46. package/components/fields/stripe/stripeFields.vue +9 -2
  47. package/components/fields/stripe/stripeIndividualFields.vue +9 -7
  48. package/components/fields/stripeExternalAccount.vue +10 -24
  49. package/components/fields/text.vue +26 -50
  50. package/components/fields/textarea.vue +14 -27
  51. package/components/fields/timeZone.vue +9 -6
  52. package/components/fields/timer.vue +5 -11
  53. package/components/image.vue +12 -23
  54. package/components/label.vue +10 -18
  55. package/components/markdown.vue +45 -23
  56. package/components/mixins/events.js +24 -25
  57. package/components/mixins/generic.js +7 -4
  58. package/components/mixins/inputVariant.js +16 -0
  59. package/components/mixins/list/autoload.js +7 -5
  60. package/components/mixins/styles.js +16 -16
  61. package/components/mixins/table/autoload.js +6 -4
  62. package/components/mixins/ws/actionCable.js +6 -5
  63. package/components/mixins/ws/phoenixSocket.js +11 -9
  64. package/components/p.vue +10 -0
  65. package/components/panels/column.vue +8 -19
  66. package/components/panels/custom.vue +9 -13
  67. package/components/panels/flow.vue +19 -13
  68. package/components/panels/form.vue +26 -34
  69. package/components/panels/grid.vue +15 -9
  70. package/components/panels/horizontal.vue +58 -54
  71. package/components/panels/list.vue +37 -72
  72. package/components/panels/responsive.vue +2 -33
  73. package/components/panels/scroll.vue +3 -0
  74. package/components/panels/split.vue +2 -2
  75. package/components/panels/table.vue +32 -63
  76. package/components/panels/timeline.vue +20 -30
  77. package/components/panels/vertical.vue +8 -13
  78. package/components/popover.vue +39 -0
  79. package/components/progressCircle.vue +2 -8
  80. package/components/progressbar.vue +4 -14
  81. package/components/shareButton.vue +24 -30
  82. package/components/tabBar.vue +29 -28
  83. package/index.js +60 -94
  84. package/nav/appbar.vue +8 -6
  85. package/nav/dialog.vue +30 -49
  86. package/nav/drawer.vue +39 -51
  87. package/nav/drawerButton.vue +5 -7
  88. package/nav/drawerLabel.vue +2 -3
  89. package/nav/sheet.vue +21 -22
  90. package/nav/snackbar.vue +19 -30
  91. package/package.json +13 -16
  92. package/plugins/driverCustomBehavior.js +1 -1
  93. package/plugins/updatableComponent.js +2 -2
  94. package/plugins/vuetify.js +26 -0
  95. package/store.js +16 -0
  96. package/templates/comment.vue +42 -19
  97. package/templates/featured.vue +8 -9
  98. package/templates/thumbnail-old.vue +188 -0
  99. package/templates/thumbnail.vue +3 -208
  100. package/tsconfig.json +1 -1
  101. package/utils/component.js +18 -18
  102. package/utils/constant.js +4 -0
  103. package/utils/eventBus.js +9 -2
  104. package/utils/history.js +12 -8
  105. package/utils/http.js +29 -71
  106. package/utils/launch.js +89 -52
  107. package/utils/private/ws.js +5 -3
  108. package/utils/public.js +6 -0
  109. package/utils/queue.js +102 -0
  110. package/utils/settings.js +3 -9
package/nav/dialog.vue CHANGED
@@ -1,25 +1,10 @@
1
1
  <template>
2
- <v-dialog
3
- v-model="model"
4
- :width="spec.width || 600"
5
- :dark="false"
6
- :fullscreen="fullscreen"
7
- :sm-and-down="false"
8
- :persistent="true"
9
- >
10
- <v-card :style="hamburgerStyles" class="hamburger">
11
- <!-- <v-card-title v-if="title || showClose" class="text-h5" primary-title> -->
12
- <div>
13
- <panels-responsive v-if="header" :spec="header" />
14
- <div v-if="title" class="dialogs-title theme--light v-subheader">
15
- {{ title }}
16
- </div>
17
-
18
- <v-btn v-if="showClose" text icon class="dialog-close" @click="close">
19
- <v-icon>close</v-icon>
20
- </v-btn>
21
- </div>
22
- <!-- </v-card-title> -->
2
+ <v-dialog :width="spec.width || 600" v-model="model" :fullscreen="fullscreen" :persistent="true">
3
+ <v-card>
4
+ <v-card-title v-if="title || showClose" class="text-h5" primary-title>
5
+ {{ title }}
6
+ <v-btn v-if="showClose" icon="close" size="small" :flat="true" class="dialog-close" @click.native="close" />
7
+ </v-card-title>
23
8
 
24
9
  <div class="dialogs-body">
25
10
  <component :is="containerComponent" :spec="formSpec">
@@ -37,13 +22,7 @@
37
22
 
38
23
  <v-spacer></v-spacer>
39
24
 
40
- <v-btn
41
- v-for="(button, index) in spec.buttons"
42
- :key="index"
43
- color="primary"
44
- text
45
- @click="click(button, $event)"
46
- >
25
+ <v-btn v-for="(button, index) in spec.buttons" :key="index" color="primary" text @click="click(button, $event)">
47
26
  {{ button.text }}
48
27
  </v-btn>
49
28
  </v-card-actions>
@@ -54,18 +33,19 @@
54
33
  <script>
55
34
  import Http from "../utils/http";
56
35
  import Action from "../action";
57
- import FormPanel from "../components/panels/form";
36
+ import FormPanel from "../components/panels/form.vue";
37
+ import { vueApp } from "../store";
38
+
58
39
 
59
40
  export default {
60
41
  components: {
61
- "panels-form": FormPanel
42
+ "panels-form": FormPanel,
62
43
  },
63
44
  props: {
64
45
  spec: { type: Object, required: true }, // Original spec. It might be different from the latest spec (after reloading).
65
46
  stack: { type: Array, required: true },
66
- vueApp: { type: Object, required: true }
67
47
  },
68
- data: function() {
48
+ data: function () {
69
49
  return {
70
50
  mainHeight: 0,
71
51
  title: null,
@@ -80,7 +60,7 @@ export default {
80
60
  isFormDirty: false,
81
61
  isFormSubmitted: false,
82
62
  isMobile: false,
83
- formSpec: null
63
+ formSpec: null,
84
64
  };
85
65
  },
86
66
  computed: {
@@ -99,20 +79,15 @@ export default {
99
79
  return false;
100
80
  }
101
81
  },
102
- hamburgerStyles() {
103
- if (this.spec.height == "matchParent") {
104
- return `height: ${this.mainHeight}px;`;
105
- }
106
- return null;
107
- }
108
- },
109
- watch: {
110
- model: function(val, oldVal) {
111
- if (!val) {
112
- this.$destroy();
113
- }
114
- }
115
82
  },
83
+ // watch: {
84
+ // model: function (val, oldVal) {
85
+ // if (!val) {
86
+ // // this.$destroy();
87
+ // this.$.appContext.app.unmount()
88
+ // }
89
+ // },
90
+ // },
116
91
  methods: {
117
92
  $mounted() {
118
93
  window.addEventListener(
@@ -124,7 +99,6 @@ export default {
124
99
  );
125
100
  },
126
101
  $ready() {
127
- this.$root.vueApp = this.vueApp;
128
102
  this.onResize();
129
103
  this.show(false);
130
104
  this.stack.push(this);
@@ -134,7 +108,7 @@ export default {
134
108
  });
135
109
  },
136
110
  $tearDown() {
137
- console.debug("Dialog destroyed");
111
+ console.log("Dialog destroyed");
138
112
  this.stack.remove(this);
139
113
  },
140
114
  close() {
@@ -168,7 +142,7 @@ export default {
168
142
  this.message = "Loading...";
169
143
  }
170
144
  const url = Utils.url.appendParams(this.url, { _dialog: "v1" });
171
- Http.execute({ url: url }, "GET", this, response => {
145
+ Http.execute({ url: url }, "GET", this, (response) => {
172
146
  Utils.http.forceComponentUpdate(() => {
173
147
  this.urlLoaded = true;
174
148
  this.title = response.title;
@@ -192,6 +166,7 @@ export default {
192
166
  this.model = true;
193
167
  },
194
168
  updateMainHeight() {
169
+ console.debug("Setting body height");
195
170
  this.mainHeight = window.innerHeight - 140;
196
171
  }
197
172
  }
@@ -202,18 +177,22 @@ export default {
202
177
  .dialogs-title {
203
178
  padding: 16px 16px 0px 16px;
204
179
  }
180
+
205
181
  .dialog-message {
206
182
  padding: 16px 16px 20px 16px;
207
183
  /* white-space: pre-wrap; */
208
184
  }
185
+
209
186
  .dialog-close {
210
187
  right: 16px;
211
188
  top: 12px;
212
189
  position: absolute;
213
190
  }
191
+
214
192
  .v-card__text {
215
193
  padding: 0 !important;
216
194
  }
195
+
217
196
  .hamburger {
218
197
  display: flex;
219
198
  flex-direction: column;
@@ -221,6 +200,7 @@ export default {
221
200
  height: 100%;
222
201
  padding: 0;
223
202
  }
203
+
224
204
  .dialogs-body {
225
205
  // height: 100%;
226
206
  // overflow-y: overlay;
@@ -232,6 +212,7 @@ export default {
232
212
  .v-dialog {
233
213
  // Hide superfluous scrollbar (Edge)
234
214
  -ms-overflow-style: none;
215
+
235
216
  * {
236
217
  -ms-overflow-style: initial;
237
218
  }
package/nav/drawer.vue CHANGED
@@ -2,75 +2,62 @@
2
2
  <!-- <v-navigation-drawer app fixed v-model="state" @input="updateState"> -->
3
3
  <!-- <v-navigation-drawer mini-variant app v-model="state" @input="updateState"> -->
4
4
 
5
- <v-navigation-drawer
6
- v-model="state"
7
- app
8
- :class="cssClasses"
9
- :dark="cssClasses.includes('dark')"
10
- :permanent="cssClasses.includes('permanent')"
11
- :style="style"
12
- :expand-on-hover="expandOnHover()"
13
- :mini-variant.sync="shrunk"
14
- @input="updateState"
15
- >
16
- <template v-if="mini" v-slot:prepend>
17
- <v-list-item>
18
- <v-list-item-icon>
19
- <v-icon v-if="!shrunk">mdi-chevron-left</v-icon>
20
- <v-icon v-if="shrunk">mdi-chevron-right</v-icon>
21
- </v-list-item-icon>
22
- </v-list-item>
23
- </template>
5
+ <div :class="cssClasses" :style="style">
6
+ <v-navigation-drawer v-model="state" app :dark="cssClasses.includes('dark') || null"
7
+ :permanent="cssClasses.includes('permanent')" :expand-on-hover="expandOnHover()" v-model:mini-variant="shrunk"
8
+ @input="updateState">
24
9
 
25
- <template v-if="spec.header">
26
- <panels-responsive :spec="spec.header" />
27
- </template>
10
+ <template v-if="spec.header">
11
+ <panels-responsive :spec="spec.header" />
12
+ </template>
28
13
 
29
- <glib-component v-if="spec.body" :spec="spec.body" />
14
+ <glib-component v-if="spec.body" :spec="spec.body" />
30
15
 
31
- <v-list dense class="pt-0">
32
- <div v-for="(item, index) in spec.rows" :key="index" class="nav-item">
33
- <div v-if="item.type == 'button'" class="indicator"></div>
34
- <v-divider v-if="item.type == 'divider'" />
35
- <nav-drawerLabel v-else-if="item.type == 'label'" :spec="item" />
36
- <nav-drawerButton v-else :spec="item" />
37
- </div>
38
- </v-list>
16
+ <v-list :dense="true" class="pt-0">
17
+ <div v-for="(item, index) in spec.rows" :key="index" class="nav-item">
18
+ <div v-if="item.type == 'button'" class="indicator"></div>
19
+ <v-divider v-if="item.type == 'divider'" />
20
+ <nav-drawerLabel v-else-if="item.type == 'label'" :spec="item" />
21
+ <nav-drawerButton v-else :spec="item" />
22
+ </div>
23
+ </v-list>
39
24
 
40
- <template v-if="spec.footer" v-slot:append>
41
- <v-list-item>
42
- <!-- Display the first line when the drawer is shrunk. Display the second line when the drawer is expanded -->
43
- <div style="display: none">Show if expand</div>
44
- <panels-responsive v-if="!shrunk" :spec="spec.footer" />
45
- </v-list-item>
46
- </template>
47
- </v-navigation-drawer>
25
+ <template v-if="spec.footer" v-slot:append>
26
+ <v-list-item>
27
+ <!-- Display the first line when the drawer is shrunk. Display the second line when the drawer is expanded -->
28
+ <div style="display: none">Show if expand</div>
29
+ <panels-responsive v-if="!shrunk" :spec="spec.footer" />
30
+ </v-list-item>
31
+ </template>
32
+ </v-navigation-drawer>
33
+ </div>
48
34
  </template>
49
35
 
36
+
50
37
  <script>
51
38
  // import UrlUtils from "../utils/url";
52
- import NavDrawerButton from "./drawerButton";
53
- import NavDrawerLabel from "./drawerLabel";
39
+ import NavDrawerButton from "./drawerButton.vue";
40
+ import NavDrawerLabel from "./drawerLabel.vue";
54
41
  import bus from "../utils/eventBus";
55
42
 
56
43
  export default {
57
44
  components: {
58
45
  "nav-drawerButton": NavDrawerButton,
59
- "nav-drawerLabel": NavDrawerLabel
46
+ "nav-drawerLabel": NavDrawerLabel,
60
47
  },
61
48
  // props: ["spec", "trigger", "permanent"],
62
49
  props: {
63
50
  spec: { type: Object, required: true },
64
51
  trigger: { type: [Object, Date], default: null },
65
- permanent: { type: Boolean, required: true }
52
+ permanent: { type: Boolean, required: true },
66
53
  },
67
- data: function() {
54
+ data: function () {
68
55
  return {
69
56
  // Using null as the starting value for its v-model will initialize the drawer as closed on mobile and as open on desktop.
70
57
  // See https://vuetifyjs.com/en/components/navigation-drawers
71
58
  state: null,
72
59
  mini: true,
73
- shrunk: true
60
+ shrunk: true,
74
61
  };
75
62
  },
76
63
  computed: {
@@ -87,7 +74,7 @@ export default {
87
74
  return this.$styles();
88
75
  },
89
76
  lgAndAbove() {
90
- switch (this.$vuetify.breakpoint.name) {
77
+ switch (this.$vuetify.display.name) {
91
78
  case "xs":
92
79
  case "sm":
93
80
  case "md":
@@ -95,12 +82,12 @@ export default {
95
82
  default:
96
83
  return true;
97
84
  }
98
- }
85
+ },
99
86
  },
100
87
  watch: {
101
- trigger: function(val, oldVal) {
88
+ trigger: function (val, oldVal) {
102
89
  this.state = !this.state;
103
- }
90
+ },
104
91
  },
105
92
  methods: {
106
93
  $ready() {
@@ -116,8 +103,8 @@ export default {
116
103
  },
117
104
  expandOnHover() {
118
105
  return this.mini;
119
- }
120
- }
106
+ },
107
+ },
121
108
  };
122
109
  </script>
123
110
 
@@ -125,6 +112,7 @@ export default {
125
112
  .nav-item {
126
113
  position: relative;
127
114
  }
115
+
128
116
  .nav-item:hover .indicator,
129
117
  .nav-item .indicator.active {
130
118
  display: flex;
@@ -4,13 +4,11 @@
4
4
  <common-icon :spec="spec.icon" />
5
5
  </v-list-item-action>
6
6
 
7
- <v-list-item-content>
8
- <v-list-item-title>
9
- <common-badge :spec="spec">
10
- {{ spec.text }}
11
- </common-badge>
12
- </v-list-item-title>
13
- </v-list-item-content>
7
+ <v-list-item-title>
8
+ <!-- <common-badge :spec="spec"> -->
9
+ {{ spec.text }}
10
+ <!-- </common-badge> -->
11
+ </v-list-item-title>
14
12
  </v-list-item>
15
13
  </template>
16
14
 
@@ -1,8 +1,7 @@
1
1
  <template>
2
2
  <v-list-item>
3
- <v-list-item-content>
4
- <v-list-item-title>{{ spec.text }}</v-list-item-title>
5
- </v-list-item-content>
3
+ <v-list-item-title>{{ spec.text }}</v-list-item-title>
4
+
6
5
  </v-list-item>
7
6
  </template>
8
7
 
package/nav/sheet.vue CHANGED
@@ -1,51 +1,50 @@
1
1
  <template>
2
2
  <v-bottom-sheet v-model="model" inset>
3
3
  <v-list>
4
- <v-subheader v-if="spec.message">{{ spec.message }}</v-subheader>
5
- <template v-for="(button, index) of spec.buttons">
6
- <v-list-item
7
- :key="index"
8
- color="primary"
9
- @click="onClick(button, $event)"
10
- >
4
+ <v-list-subheader v-if="spec.message">{{ spec.message }}</v-list-subheader>
5
+ <template v-for="(button, index) of spec.buttons" :key="index">
6
+ <v-list-item color="primary" @click="onClick(button, $event)">
11
7
  <v-list-item-action v-if="button.icon">
12
8
  <common-icon :spec="button.icon" />
13
9
  </v-list-item-action>
14
10
 
15
- <v-list-item-content>
16
- <v-list-item-title>{{ button.text }}</v-list-item-title>
17
- </v-list-item-content>
11
+
12
+ <v-list-item-title>{{ button.text }}</v-list-item-title>
13
+
18
14
  <!-- <v-list-item-title>{{ button.text }}</v-list-item-title> -->
19
15
  </v-list-item>
20
16
  </template>
21
17
  </v-list>
22
-
23
- <v-sheet height="60px"></v-sheet>
24
18
  </v-bottom-sheet>
25
19
  </template>
26
20
 
27
21
  <script>
22
+ import { VBottomSheet } from 'vuetify/labs/VBottomSheet'
23
+
28
24
  export default {
25
+ components: {
26
+ 'v-bottom-sheet': VBottomSheet
27
+ },
29
28
  props: {
30
29
  spec: { type: Object, required: true }
31
30
  },
32
- data: function() {
31
+ data: function () {
33
32
  return {
34
- model: null
33
+ model: true
35
34
  };
36
35
  },
37
- watch: {
38
- model: function(val, oldVal) {
39
- if (!val) {
40
- this.$destroy();
41
- }
42
- }
43
- },
36
+ // watch: {
37
+ // model: function (val, oldVal) {
38
+ // if (!val) {
39
+ // this.$destroy();
40
+ // }
41
+ // }
42
+ // },
44
43
  methods: {
45
44
  $ready() {
46
45
  this.model = true;
47
46
  },
48
- onClick: function(spec, event) {
47
+ onClick: function (spec, event) {
49
48
  this.model = false;
50
49
 
51
50
  Utils.type.ifFunction(spec.onClickFunction, f => f());
package/nav/snackbar.vue CHANGED
@@ -1,22 +1,9 @@
1
1
  <template>
2
- <v-snackbar
3
- v-model="show"
4
- :top="spec.verticalPosition == 'top'"
5
- :bottom="spec.verticalPosition == 'bottom'"
6
- :left="spec.horizontalPosition == 'left'"
7
- :right="spec.horizontalPosition == 'right'"
8
- :color="color"
9
- :timeout="spec.timeout"
10
- >
2
+ <v-snackbar v-model="show" :location="spec.location" :color="color" :timeout="spec.timeout">
11
3
  <common-message :spec="spec" />
12
4
 
13
- <v-btn
14
- v-for="(button, index) in spec.buttons"
15
- :key="index"
16
- text
17
- @click="click(button, $event)"
18
- >
19
- {{ button.text }}
5
+ <v-btn v-for="(button, index) in spec.buttons" variant="text" @click="click(button, $event)">
6
+ <span style="color: whitesmoke">{{ button.text }}</span>
20
7
  </v-btn>
21
8
 
22
9
  <!-- <v-btn
@@ -29,37 +16,39 @@
29
16
  </template>
30
17
 
31
18
  <script>
19
+ import { colors } from '../utils/constant';
20
+
32
21
  export default {
33
22
  props: {
34
- spec: { type: Object, required: true },
35
- vueApp: { type: Object, required: true }
23
+ spec: { type: Object, required: true }
36
24
  },
37
- data: function() {
25
+ data: function () {
38
26
  return {
39
- show: false,
27
+ show: true,
40
28
  color: null,
41
29
  indicator: false
42
30
  };
43
31
  },
44
- watch: {
45
- "vueApp.indicator": function(val, oldVal) {
46
- if (this.indicator) {
47
- this.show = val;
48
- }
49
- }
50
- },
32
+ // watch: {
33
+ // model: function (val, oldVal) {
34
+ // if (!val) {
35
+ // // this.$destroy();
36
+ // this.$.appContext.app.unmount()
37
+ // }
38
+ // },
39
+ // },
51
40
  methods: {
52
41
  $ready() {
53
42
  const vm = this;
54
43
  this.$type.ifArray(this.spec.styleClasses, val => {
55
- ["success", "info", "error", "warning"].forEach(color => {
44
+ colors.forEach(color => {
56
45
  if (val.includes(color)) {
57
- vm.color = vm.$vuetify.theme.currentTheme[color];
46
+ vm.color = color;
58
47
  }
59
48
  });
60
49
  });
61
50
  },
62
- click: function(spec) {
51
+ click: function (spec) {
63
52
  const onClick = spec["onClick"];
64
53
  this.show = false;
65
54
  GLib.action.execute(onClick, this);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glib-web",
3
- "version": "2.6.7",
3
+ "version": "3.0.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -9,42 +9,39 @@
9
9
  "author": "",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@fortawesome/fontawesome-free": "^5.0.0",
13
- "@mdi/font": "^4.5.95",
12
+ "@floating-ui/dom": "^1.2.8",
14
13
  "@rails/actioncable": "^6.0.0",
15
14
  "@rails/activestorage": "^6.0.0-alpha",
15
+ "@vueup/vue-quill": "^1.2.0",
16
16
  "awesome-phonenumber": "2.15.0",
17
17
  "chart.js": "^2.8.0",
18
18
  "chartjs-plugin-annotation": "^0.5.7",
19
19
  "driver.js": "^0.9.8",
20
20
  "json-logic-js": "^2.0.0",
21
+ "lodash.merge": "^4.6.2",
21
22
  "marked": "^4.0.0",
22
23
  "phoenix": "^1.5.3",
23
24
  "push.js": "^1.0.12",
24
25
  "quill-image-drop-and-paste": "^1.2.14",
26
+ "tiny-emitter": "^2.1.0",
25
27
  "turndown": "^7.1.1",
26
28
  "turndown-plugin-gfm": "^1.0.2",
27
- "vue": "2.6.14",
29
+ "vue": "3.2.47",
28
30
  "vue-chartkick": "^0.6.1",
29
- "vue-gtag": "^1.1.2",
30
- "vue-social-sharing": "^3.0.9",
31
- "vue-youtube": "^1.4.0",
32
- "vue2-editor": "^2.9.1",
31
+ "vue-social-sharing": "^4.0.0-alpha4",
33
32
  "vue2-gmap-custom-marker": "^6.1.1",
34
33
  "vue2-google-maps": "^0.10.6",
35
- "vuedraggable": "^2.24.1",
36
- "vuetify": "2.3.9"
34
+ "vuetify": "^3.3.2"
37
35
  },
38
36
  "devDependencies": {
39
37
  "@types/chart.js": "^2.9.34",
40
- "babel-eslint": "^10.0.3",
41
- "eslint": "^6.4.0",
38
+ "eslint": "^8.36.0",
42
39
  "eslint-config-prettier": "^6.3.0",
43
- "eslint-loader": "^3.0.0",
44
40
  "eslint-plugin-prettier": "^3.1.1",
45
- "eslint-plugin-vue": "^5.2.3",
46
- "eslint-plugin-vuetify": "^1.0.0-beta.3",
41
+ "eslint-plugin-vue": "^9.9.0",
42
+ "eslint-plugin-vuetify": "^2.0.0-beta.2",
43
+ "material-design-icons-iconfont": "^6.7.0",
47
44
  "prettier": "^1.18.2",
48
45
  "typescript": "^4.9.5"
49
46
  }
50
- }
47
+ }
@@ -8,6 +8,6 @@ export default {
8
8
  element.addEventListener("focus", () => driver.moveNext());
9
9
  };
10
10
 
11
- Vue.prototype.driverCustomBehavior = driverCustomBehavior;
11
+ Vue.config.globalProperties.driverCustomBehavior = driverCustomBehavior;
12
12
  }
13
13
  };
@@ -1,13 +1,13 @@
1
1
  export default {
2
2
  install: (Vue, options) => {
3
3
  Vue.mixin({
4
- mounted: function() {
4
+ mounted: function () {
5
5
  let spec = this.spec;
6
6
  if (spec && spec.id && this.$registryEnabled()) {
7
7
  GLib.component.register(spec.id, this);
8
8
  }
9
9
  },
10
- destroyed: function() {
10
+ destroyed: function () {
11
11
  let spec = this.spec;
12
12
  if (spec && spec.id && this.$registryEnabled()) {
13
13
  GLib.component.deregister(spec.id);
@@ -0,0 +1,26 @@
1
+ import { createVuetify } from "vuetify";
2
+ import 'material-design-icons-iconfont/dist/material-design-icons.css'
3
+ import { aliases, md } from 'vuetify/iconsets/md'
4
+ import 'vuetify/styles'
5
+ import * as components from 'vuetify/components'
6
+ import * as directives from 'vuetify/directives'
7
+
8
+ const opts = {
9
+ components,
10
+ directives,
11
+ icons: {
12
+ defaultSet: 'md',
13
+ aliases,
14
+ sets: {
15
+ md,
16
+ },
17
+ },
18
+ theme: {
19
+ themes: {}
20
+ },
21
+ display: {
22
+ smAndDown: true
23
+ }
24
+ }
25
+
26
+ export default new createVuetify(opts)
package/store.js ADDED
@@ -0,0 +1,16 @@
1
+ import { reactive } from 'vue'
2
+
3
+ export const vueApp = reactive({
4
+ page: window.__page,
5
+ indicator: false,
6
+ // Rename to isPageStale
7
+ isStale: false,
8
+ /// Dirty form handling
9
+ isFormSubmitted: false,
10
+ isFormDirty: false,
11
+ stateUpdatedAt: null,
12
+ webSocket: { channels: {}, header: {} },
13
+ actionCable: { channels: {} },
14
+ registeredComponents: [],
15
+ temp: {}
16
+ })