renusify 2.5.2 → 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 (212) hide show
  1. package/components/app/index.vue +74 -22
  2. package/components/app/toast/index.vue +76 -71
  3. package/components/app/toast/toast.vue +62 -44
  4. package/components/avatar/index.vue +208 -84
  5. package/components/button/buttonConfirm.vue +53 -26
  6. package/components/button/buttonGroup.js +0 -2
  7. package/components/button/buttonGroup.vue +310 -62
  8. package/components/button/index.vue +584 -100
  9. package/components/calendar/index.js +0 -2
  10. package/components/calendar/index.vue +326 -262
  11. package/components/calendar/month.vue +64 -55
  12. package/components/calendar/year.vue +30 -25
  13. package/components/card/index.vue +139 -59
  14. package/components/codeEditor/highlightCss.vue +38 -39
  15. package/components/codeEditor/highlightHtml.vue +64 -64
  16. package/components/codeEditor/highlightJs.vue +37 -38
  17. package/components/codeEditor/index.vue +129 -79
  18. package/components/codeEditor/run.vue +225 -39
  19. package/components/codeEditor/useCodeFormatter.js +150 -0
  20. package/components/confirm/index.vue +139 -80
  21. package/components/container/col.vue +5 -4
  22. package/components/container/divider.vue +28 -19
  23. package/components/container/index.vue +34 -15
  24. package/components/container/row.vue +26 -9
  25. package/components/container/spacer.vue +2 -4
  26. package/components/container/style.scss +3 -0
  27. package/components/content/index.vue +49 -32
  28. package/components/cropper/index.vue +401 -244
  29. package/components/float/index.vue +542 -415
  30. package/components/form/addressInput/index.vue +184 -109
  31. package/components/form/camInput/index.vue +370 -244
  32. package/components/form/checkInput/index.vue +138 -71
  33. package/components/form/checkboxInput/index.vue +87 -47
  34. package/components/form/colorInput/Alpha.vue +81 -83
  35. package/components/form/colorInput/Hue.vue +91 -68
  36. package/components/form/colorInput/Preview.vue +43 -47
  37. package/components/form/colorInput/Saturation.vue +101 -86
  38. package/components/form/colorInput/index.vue +71 -39
  39. package/components/form/colorInput/picker.vue +111 -106
  40. package/components/form/colorInput/useColor.js +153 -0
  41. package/components/form/dateInput/index.vue +691 -356
  42. package/components/form/dateInput/month.vue +63 -54
  43. package/components/form/dateInput/year.vue +35 -25
  44. package/components/form/fileInput/index.js +0 -1
  45. package/components/form/fileInput/index.vue +263 -106
  46. package/components/form/fileInput/single.vue +323 -164
  47. package/components/form/groupInput/index.vue +199 -101
  48. package/components/form/index.vue +189 -83
  49. package/components/form/input/index.vue +416 -377
  50. package/components/form/jsonInput/JsonView.vue +54 -56
  51. package/components/form/jsonInput/index.vue +247 -165
  52. package/components/form/maskInput/index.vue +252 -132
  53. package/components/form/numberInput/index.js +0 -1
  54. package/components/form/numberInput/index.vue +226 -117
  55. package/components/form/passwordInput/index.js +2 -1
  56. package/components/form/passwordInput/index.vue +269 -102
  57. package/components/form/radioInput/index.vue +143 -72
  58. package/components/form/rangeInput/index.vue +280 -167
  59. package/components/form/ratingInput/index.vue +57 -57
  60. package/components/form/selectInput/index.js +1 -3
  61. package/components/form/selectInput/index.vue +584 -296
  62. package/components/form/switchInput/index.vue +73 -59
  63. package/components/form/telInput/index.js +0 -1
  64. package/components/form/telInput/index.vue +238 -135
  65. package/components/form/textArea/index.vue +72 -35
  66. package/components/form/textEditor/index.vue +739 -0
  67. package/components/form/{text-editor → textEditor}/style.scss +8 -16
  68. package/components/form/textInput/index.vue +54 -32
  69. package/components/form/timeInput/index.vue +82 -55
  70. package/components/form/timeInput/range.vue +115 -94
  71. package/components/form/timeInput/timepicker.vue +382 -449
  72. package/components/form/uniqueInput/index.vue +105 -48
  73. package/components/form/unitInput/index.vue +139 -84
  74. package/components/formCreator/index.js +0 -1
  75. package/components/formCreator/index.vue +314 -148
  76. package/components/highlight/index.vue +41 -25
  77. package/components/highlight/style.scss +2 -2
  78. package/components/highlight/{mixin.js → useHighlight.js} +181 -160
  79. package/components/icon/index.vue +79 -33
  80. package/components/img/index.vue +249 -147
  81. package/components/img/preview.vue +180 -198
  82. package/components/img/svgImg.vue +42 -39
  83. package/components/index.js +5 -20
  84. package/components/infinite/index.js +1 -2
  85. package/components/infinite/index.vue +248 -66
  86. package/components/map/index.vue +428 -261
  87. package/components/map/route.vue +794 -487
  88. package/components/map/select.vue +118 -58
  89. package/components/menu/index.vue +201 -91
  90. package/components/meta/meta.js +26 -3
  91. package/components/modal/index.vue +382 -156
  92. package/components/notify/index.vue +204 -86
  93. package/components/notify/notification.vue +38 -55
  94. package/components/progress/circle.vue +189 -70
  95. package/components/progress/line.vue +266 -46
  96. package/components/searchBox/index.js +1 -3
  97. package/components/searchBox/index.vue +194 -101
  98. package/components/skeleton/index.vue +45 -20
  99. package/components/slider/index.vue +318 -156
  100. package/components/swiper/index.vue +254 -106
  101. package/components/table/crud/footer.vue +77 -53
  102. package/components/table/crud/header.vue +71 -72
  103. package/components/table/crud/index.vue +629 -399
  104. package/components/table/index.vue +721 -278
  105. package/components/timeAgo/index.vue +145 -96
  106. package/components/tour/index.vue +338 -235
  107. package/components/tree/index.vue +235 -89
  108. package/components/tree/tree-element.vue +106 -106
  109. package/directive/animate/index.js +77 -0
  110. package/directive/clickOutSide/index.js +98 -0
  111. package/directive/drag/index.js +153 -0
  112. package/directive/index.js +11 -13
  113. package/directive/intersect/index.js +263 -0
  114. package/directive/mask/index.js +67 -0
  115. package/directive/parallax/index.js +78 -0
  116. package/directive/ripple/index.js +14 -0
  117. package/directive/scroll/index.js +244 -0
  118. package/directive/sortable/index.js +274 -0
  119. package/directive/title/index.js +75 -0
  120. package/directive/touch/index.js +268 -0
  121. package/index.js +10 -8
  122. package/package.json +5 -2
  123. package/plugins/validation/Validate.js +88 -79
  124. package/scripts/generate-docs.mjs +226 -0
  125. package/scripts/menu.mjs +240 -0
  126. package/scripts/parser.mjs +1086 -0
  127. package/style/_index.scss +7 -0
  128. package/style/app.scss +13 -65
  129. package/style/colors.scss +5 -22
  130. package/style/functions/index.scss +8 -0
  131. package/style/mixins/index.scss +17 -5
  132. package/style/variables/base.scss +154 -175
  133. package/style/variables/color.scss +0 -12
  134. package/style/variables/utilities.scss +0 -180
  135. package/tools/helper.js +0 -8
  136. package/tools/icons.js +6 -1
  137. package/tools/root.js +71 -0
  138. package/components/app/style.scss +0 -41
  139. package/components/app/toast/style.scss +0 -20
  140. package/components/avatar/style.scss +0 -32
  141. package/components/bar/bottomNav.js +0 -1
  142. package/components/bar/bottomNav.vue +0 -28
  143. package/components/bar/bottomNavigationCircle.js +0 -2
  144. package/components/bar/bottomNavigationCircle.vue +0 -99
  145. package/components/bar/scss/bottomNav.scss +0 -67
  146. package/components/bar/scss/toolbar.scss +0 -174
  147. package/components/bar/toolbar/index.js +0 -8
  148. package/components/bar/toolbar/index.vue +0 -35
  149. package/components/bar/toolbar/laptop.vue +0 -33
  150. package/components/bar/toolbar/menuChilds.vue +0 -41
  151. package/components/bar/toolbar/menuLaptop.vue +0 -41
  152. package/components/bar/toolbar/menuMob.vue +0 -39
  153. package/components/bar/toolbar/mixin.js +0 -43
  154. package/components/bar/toolbar/mobile.vue +0 -34
  155. package/components/breadcrumb/bredcrumbItem.vue +0 -39
  156. package/components/breadcrumb/index.js +0 -3
  157. package/components/breadcrumb/index.vue +0 -71
  158. package/components/breadcrumb/style.scss +0 -51
  159. package/components/button/style.scss +0 -411
  160. package/components/card/style.scss +0 -86
  161. package/components/chart/chart.js +0 -1
  162. package/components/chart/chart.vue +0 -69
  163. package/components/chart/worldMap.js +0 -2
  164. package/components/chart/worldMap.vue +0 -1112
  165. package/components/chat/MessageList.vue +0 -163
  166. package/components/chat/chatInput.vue +0 -150
  167. package/components/chat/chatMsg.vue +0 -276
  168. package/components/chat/index.js +0 -11
  169. package/components/chat/index.vue +0 -113
  170. package/components/chip/index.js +0 -3
  171. package/components/chip/index.vue +0 -77
  172. package/components/chip/style.scss +0 -199
  173. package/components/codeEditor/mixin.js +0 -145
  174. package/components/countdown/index.js +0 -1
  175. package/components/countdown/index.vue +0 -105
  176. package/components/form/colorInput/mixin.js +0 -132
  177. package/components/form/fileInput/file.js +0 -148
  178. package/components/form/telInput/assets/flags.png +0 -0
  179. package/components/form/telInput/assets/flags@2x.png +0 -0
  180. package/components/form/text-editor/index.vue +0 -705
  181. package/components/icon/style.scss +0 -17
  182. package/components/infinite/div.js +0 -6
  183. package/components/infinite/div.vue +0 -193
  184. package/components/infinite/page.js +0 -3
  185. package/components/infinite/page.vue +0 -105
  186. package/components/list/index.js +0 -3
  187. package/components/list/index.vue +0 -122
  188. package/components/list/style.scss +0 -66
  189. package/components/message/index.js +0 -4
  190. package/components/message/index.vue +0 -40
  191. package/components/modal/style.scss +0 -146
  192. package/components/nestable/NestableItem.vue +0 -307
  193. package/components/nestable/editable.js +0 -44
  194. package/components/nestable/index.js +0 -1
  195. package/components/nestable/index.vue +0 -226
  196. package/components/nestable/methods.js +0 -416
  197. package/components/progress/style.scss +0 -229
  198. package/components/table/style.scss +0 -338
  199. package/components/tabs/index.js +0 -3
  200. package/components/tabs/index.vue +0 -151
  201. package/components/timeline/index.js +0 -6
  202. package/components/timeline/index.vue +0 -76
  203. package/directive/resize/index.js +0 -30
  204. package/directive/skeleton/index.js +0 -27
  205. package/directive/skeleton/style.scss +0 -37
  206. package/plugins/request/Request.js +0 -68
  207. package/style/animation.scss +0 -94
  208. package/style/style.scss +0 -8
  209. package/tools/rootable.js +0 -75
  210. /package/components/form/{text-editor → textEditor}/index.js +0 -0
  211. /package/components/form/{text-editor → textEditor}/preview.js +0 -0
  212. /package/components/form/{text-editor → textEditor}/preview.vue +0 -0
@@ -1,262 +1,365 @@
1
1
  <template>
2
- <teleport v-if="show" :to="`.${$r.prefix}app`">
3
- <div :style="style" class="tour-layer"></div>
4
- <transition name="slide-up" mode="out-in">
5
- <div v-if="msg" ref="tourMsg" :style="style_msg" class="tour-msg headline-1">
6
- <r-container>
7
- <div v-html="$helper.cleanXss(steps[run].msg)"></div>
8
- <div class="d-flex">
9
- <div><span
10
- class="title-2 color-success br-lg py-1 px-2 ltr">{{ steps.length }} / {{ run + 1 }}</span>
11
- </div>
12
- <r-spacer></r-spacer>
13
- <r-btn v-if="has_prev" :disabled="disable_prev" class="color-info tour-clickable"
14
- @click.prevent="prev">
15
- {{ $t('prev', 'renusify') }}
16
- </r-btn>
17
- <r-btn v-if="has_next" :disabled="disable_next" class="color-info mx-1 tour-clickable"
18
- @click.prevent="next">
19
- {{ $t('next', 'renusify') }}
20
- </r-btn>
21
- <r-btn v-if="steps.length===run+1||canFinish" :disabled="disable_finish"
22
- class="color-success mx-1 tour-clickable"
23
- @click.prevent="finish">{{ $t('finish', 'renusify') }}
24
- </r-btn>
25
- </div>
26
- </r-container>
2
+ <teleport v-if="show" :to="`.${$r.prefix}app`">
3
+ <div :class="`${$r.prefix}tour-layer`" :style="style"></div>
4
+ <transition name="slide-up" mode="out-in">
5
+ <div v-if="msg" ref="tourMsgRef" :class="`${$r.prefix}tour-msg headline-1`" :style="style_msg">
6
+ <r-container>
7
+ <div v-html="$helper.cleanXss(steps[run].msg)"></div>
8
+ <div class="d-flex">
9
+ <div><span
10
+ class="title-2 color-success br-lg py-1 px-2 ltr">{{ steps.length }} / {{ run + 1 }}</span>
27
11
  </div>
28
- </transition>
29
- </teleport>
12
+ <r-spacer></r-spacer>
13
+ <r-btn v-if="has_prev" :class="`color-info ${$r.prefix}tour-clickable`" :disabled="disable_prev"
14
+ @click.prevent="prev">
15
+ {{ $t('prev', 'renusify') }}
16
+ </r-btn>
17
+ <r-btn v-if="has_next" :class="`color-info mx-1 ${$r.prefix}tour-clickable`"
18
+ :disabled="disable_next"
19
+ @click.prevent="next">
20
+ {{ $t('next', 'renusify') }}
21
+ </r-btn>
22
+ <r-btn v-if="steps.length===run+1||canFinish" :disabled="disable_finish"
23
+ :class="`color-success mx-1 ${$r.prefix}tour-clickable`"
24
+ @click.prevent="finish">{{ $t('finish', 'renusify') }}
25
+ </r-btn>
26
+ </div>
27
+ </r-container>
28
+ </div>
29
+ </transition>
30
+ </teleport>
30
31
  </template>
31
- <script>
32
- export default {
33
- name: 'r-tour',
34
- props: {
35
- steps: {
36
- type: Array, default: () => {
37
- return []
38
- }
39
- },
40
- canFinish: Boolean,
41
- abortOnNotFound: Boolean,
42
- delay: {type: Number, default: 2000}
43
- },
44
- data() {
45
- return {
46
- show: false,
47
- finished: false,
48
- disable_next: false,
49
- disable_prev: false,
50
- disable_finish: false,
51
- all: {},
52
- style: {},
53
- style_msg: {},
54
- msg: null,
55
- run: 0
56
- }
57
- },
58
- mounted() {
59
- setTimeout(() => {
60
- this.show = true;
61
- setTimeout(() => {
62
- this._show()
63
- }, this.delay)
64
- }, 10)
65
- },
66
- watch: {
67
- '$r.breakpoint.height': function () {
68
- this._show()
69
- }
70
- },
71
- computed: {
72
- has_next() {
73
- if (this.finished) {
74
- console.log('tour finished has_next:' + this.run)
75
- this.reset()
76
- return false
77
- }
78
- return this.$helper.ifHas(this.steps, false, this.run + 1, 'key')
79
- },
80
- has_prev() {
81
- if (this.finished) {
82
- console.log('tour finished has_prev:' + this.run)
83
- this.reset()
84
- return false
85
- }
86
- return this.$helper.ifHas(this.steps, false, this.run - 1, 'key')
87
- },
88
- elm() {
89
- if (this.finished) {
90
- console.log('tour finished step:' + this.run)
91
- this.reset()
92
- return null
93
- }
94
- const key = this.$helper.ifHas(this.steps, false, this.run, 'key')
95
- if (key) {
96
- return document.querySelector(key)
97
- }
98
- console.log(key + ': key not found in step:' + this.run)
99
- return null
100
- }
101
- },
102
- methods: {
103
- elm_next() {
104
- return document.querySelector(this.has_next)
105
- },
106
- elm_prev() {
107
- return document.querySelector(this.has_prev)
108
- },
109
- _getOffsetLeft(elem) {
110
- let box = elem.getBoundingClientRect();
32
+ <script setup>
33
+ import {ref, computed, onMounted, watch, inject} from 'vue'
34
+
35
+ /**
36
+ * @example // Tour usage
37
+ * <template>
38
+ * <div>
39
+ * <div class="header1 py-4">header1</div>
40
+ * <div class="header2 py-4">header2</div>
41
+ * <div>
42
+ * <r-btn id="one" @click="checkCode('click btn')">Click</r-btn>
43
+ * </div>
44
+ * <r-tour
45
+ * abort-on-not-found
46
+ * ref="tour"
47
+ * :steps="[
48
+ * { msg: 'Item One is on', key: '.header1' },
49
+ * {
50
+ * msg: 'this is Btn',
51
+ * key: '#one',
52
+ * options: {
53
+ * clickable: true,
54
+ * disable_next: true,
55
+ * },
56
+ * },
57
+ * { msg: 'Item Two', key: '.header2' },
58
+ * ]"
59
+ * ></r-tour>
60
+ * </div>
61
+ * </template>
62
+ *
63
+ * <script>
64
+ * import { ref } from 'vue'
65
+ *
66
+ * // Template ref
67
+ * const tour = ref(null)
68
+ *
69
+ * // Methods
70
+ * const checkCode = (e) => {
71
+ * console.log(e)
72
+ * if (tour.value) {
73
+ * tour.value.next()
74
+ * }
75
+ * }
76
+ * <//script>
77
+ *
78
+ *
79
+ * */
80
+ const props = defineProps({
81
+ /**
82
+ * Array of step configurations for the tour
83
+ * @type {Array}
84
+ * @default () => []
85
+ */
86
+ steps: {
87
+ type: Array, default: () => {
88
+ return []
89
+ }
90
+ },
91
+ /**
92
+ * Allows finishing the tour (shows finish button)
93
+ * @type {Boolean}
94
+ */
95
+ canFinish: Boolean,
96
+ /**
97
+ * Aborts the tour when a step element is not found
98
+ * @type {Boolean}
99
+ */
100
+ abortOnNotFound: Boolean,
101
+ /**
102
+ * Delay in milliseconds before starting the tour
103
+ * @type {Number}
104
+ * @default 2000
105
+ */
106
+ delay: {type: Number, default: 2000}
107
+ })
108
+
109
+ const {$helper, $storage, $r} = inject('renusify')
110
+
111
+ const show = ref(false)
112
+ const finished = ref(false)
113
+ const disable_next = ref(false)
114
+ const disable_prev = ref(false)
115
+ const disable_finish = ref(false)
116
+ const style = ref({})
117
+ const style_msg = ref({})
118
+ const msg = ref(null)
119
+ const run = ref(0)
120
+ const tourMsgRef = ref(null)
111
121
 
112
- let body = document.body;
113
- let docEl = document.documentElement;
122
+ const has_next = computed(() => {
123
+ if (finished.value) {
124
+ console.log('tour finished has_next:' + run.value)
125
+ reset()
126
+ return false
127
+ }
128
+ return $helper.ifHas(props.steps, false, run.value + 1, 'key')
129
+ })
114
130
 
115
- let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
116
- let scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
131
+ const has_prev = computed(() => {
132
+ if (finished.value) {
133
+ console.log('tour finished has_prev:' + run.value)
134
+ reset()
135
+ return false
136
+ }
137
+ return $helper.ifHas(props.steps, false, run.value - 1, 'key')
138
+ })
117
139
 
118
- let clientTop = docEl.clientTop || body.clientTop || 0;
119
- let clientLeft = docEl.clientLeft || body.clientLeft || 0;
140
+ const elm = computed(() => {
141
+ if (finished.value) {
142
+ console.log('tour finished step:' + run.value)
143
+ reset()
144
+ return null
145
+ }
146
+ const key = $helper.ifHas(props.steps, false, run.value, 'key')
147
+ if (key) {
148
+ return document.querySelector(key)
149
+ }
150
+ console.log(key + ': key not found in step:' + run.value)
151
+ return null
152
+ })
120
153
 
121
- let top = box.top + scrollTop - clientTop;
122
- let left = box.left + scrollLeft - clientLeft;
154
+ const _getOffsetLeft = (elem) => {
155
+ let box = elem.getBoundingClientRect();
156
+
157
+ let body = document.body;
158
+ let docEl = document.documentElement;
159
+
160
+ let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
161
+ let scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
162
+
163
+ let clientTop = docEl.clientTop || body.clientTop || 0;
164
+ let clientLeft = docEl.clientLeft || body.clientLeft || 0;
165
+
166
+ let top = box.top + scrollTop - clientTop;
167
+ let left = box.left + scrollLeft - clientLeft;
168
+
169
+ return {top: Math.round(top), left: Math.round(left)};
170
+ }
123
171
 
124
- return {top: Math.round(top), left: Math.round(left)};
125
- },
126
- reset() {
127
- this.style = {}
128
- this.style_msg = {}
129
- this.msg = null
130
- this.disable_next = false
131
- this.disable_prev = false
132
- this.disable_finish = false
133
- },
134
- finish() {
135
- document.documentElement.classList.remove('disable-event')
136
- document.documentElement.style.overflow = 'auto';
137
- const item = this.steps[this.run]
138
- if (item.onFinish) {
139
- item.onFinish()
140
- }
141
- this.finished = true
142
- this.run = 0
143
- this.reset()
144
- this.$storage.set("tour_finish", true);
145
- },
146
- prev() {
147
- this.reset()
148
- const item = this.steps[this.run]
149
- if (item.onPrev) {
150
- item.onPrev()
151
- }
152
- this.run--
153
- const s = this._show()
154
- if (!s && this.run > 0) {
155
- this.prev()
156
- }
157
- },
158
- next() {
159
- this.reset()
160
- const item = this.steps[this.run]
161
- if (item.onNext) {
162
- item.onNext()
163
- }
164
- this.run++
165
- const s = this._show()
166
- if (!s && this.run < this.steps.length - 1) {
167
- this.next()
168
- }
169
- },
170
- _show() {
171
- this.msg = null
172
- if (this.elm && !this.finished) {
173
- const item = this.steps[this.run]
172
+ /**
173
+ * Resets all tour styling and state
174
+ */
175
+ const reset = () => {
176
+ style.value = {}
177
+ style_msg.value = {}
178
+ msg.value = null
179
+ disable_next.value = false
180
+ disable_prev.value = false
181
+ disable_finish.value = false
182
+ }
174
183
 
175
- if (item.before) {
176
- item.before()
177
- }
178
- if (item.options) {
179
- if (item.options.clickable) {
180
- this.elm.classList.add('tour-clickable')
181
- }
182
- for (let key in item.options) {
183
- if (this.$helper.hasKey(item.options, key)) {
184
- this[key] = item.options[key]
185
- }
186
- }
187
- }
188
- this.msg = item['msg']
189
- setTimeout(() => {
190
- this.elm.scrollIntoView()
191
- let msgDiv = this.$refs.tourMsg.getBoundingClientRect()
192
- document.documentElement.classList.add('disable-event')
193
- document.documentElement.style.overflow = 'hidden';
194
- const b = this.elm.getBoundingClientRect()
195
- const s = window.getComputedStyle(this.elm)
196
- const p = this._getOffsetLeft(this.elm)
197
- this.style.width = b.width + 'px'
198
- this.style.height = b.height + 'px'
199
- this.style.top = p.top + 'px'
200
- this.style.left = p.left + 'px'
184
+ /**
185
+ * Finishes the tour and cleans up
186
+ */
187
+ const finish = () => {
188
+ document.documentElement.classList.remove($r.prefix + 'disable-event')
189
+ document.documentElement.style.overflow = 'auto';
190
+ const item = props.steps[run.value]
191
+ if (item.onFinish) {
192
+ item.onFinish()
193
+ }
194
+ finished.value = true
195
+ run.value = 0
196
+ reset()
197
+ $storage.set("tour_finish", true);
198
+ }
201
199
 
202
- this.style['border-radius'] = s['border-radius']
203
- this.style.opacity = 1
200
+ /**
201
+ * Moves to the previous step in the tour
202
+ */
203
+ const prev = () => {
204
+ reset()
205
+ const item = props.steps[run.value]
206
+ if (item.onPrev) {
207
+ item.onPrev()
208
+ }
209
+ run.value--
210
+ const s = _show()
211
+ if (!s && run.value > 0) {
212
+ prev()
213
+ }
214
+ }
204
215
 
205
- let scroll = p.top
206
- if (msgDiv.height < p.top) {
207
- scroll = p.top - msgDiv.height
208
- this.style_msg.top = scroll + 'px'
209
- } else {
210
- this.style_msg.top = scroll + b.height + 'px'
211
- }
216
+ /**
217
+ * Moves to the next step in the tour
218
+ */
219
+ const next = () => {
220
+ reset()
221
+ const item = props.steps[run.value]
222
+ if (item.onNext) {
223
+ item.onNext()
224
+ }
225
+ run.value++
226
+ const s = _show()
227
+ if (!s && run.value < props.steps.length - 1) {
228
+ next()
229
+ }
230
+ }
212
231
 
232
+ const _show = () => {
233
+ msg.value = null
234
+ if (elm.value && !finished.value) {
235
+ const item = props.steps[run.value]
213
236
 
214
- window.scroll({
215
- top: scroll,
216
- behavior: 'smooth'
217
- });
218
- if (item.after) {
219
- item.after()
220
- }
221
- }, 1)
222
- return true
223
- } else if (this.abortOnNotFound) {
224
- console.log('abort on not found tour')
225
- this.finish()
226
- }
227
- return false
237
+ if (item.before) {
238
+ item.before()
239
+ }
240
+ if (item.options) {
241
+ if (item.options.clickable) {
242
+ elm.value.classList.add($r.prefix + 'tour-clickable')
243
+ }
244
+ for (let key in item.options) {
245
+ if ($helper.hasKey(item.options, key)) {
246
+ // This part needs adjustment since we can't set computed property
247
+ if (key === 'disable_next') disable_next.value = item.options[key]
248
+ if (key === 'disable_prev') disable_prev.value = item.options[key]
249
+ if (key === 'disable_finish') disable_finish.value = item.options[key]
228
250
  }
251
+ }
229
252
  }
253
+ msg.value = item['msg']
254
+ setTimeout(() => {
255
+ elm.value.scrollIntoView()
256
+ let msgDiv = tourMsgRef.value.getBoundingClientRect()
257
+ document.documentElement.classList.add($r.prefix + 'disable-event')
258
+ document.documentElement.style.overflow = 'hidden';
259
+ const b = elm.value.getBoundingClientRect()
260
+ const s = window.getComputedStyle(elm.value)
261
+ const p = _getOffsetLeft(elm.value)
262
+ style.value.width = b.width + 'px'
263
+ style.value.height = b.height + 'px'
264
+ style.value.top = p.top + 'px'
265
+ style.value.left = p.left + 'px'
266
+
267
+ style.value['border-radius'] = s['border-radius']
268
+ style.value.opacity = 1
269
+
270
+ let scroll = p.top
271
+ if (msgDiv.height < p.top) {
272
+ scroll = p.top - msgDiv.height
273
+ style_msg.value.top = scroll + 'px'
274
+ } else {
275
+ style_msg.value.top = scroll + b.height + 'px'
276
+ }
277
+
278
+ window.scroll({
279
+ top: scroll,
280
+ behavior: 'smooth'
281
+ });
282
+ if (item.after) {
283
+ item.after()
284
+ }
285
+ }, 1)
286
+ return true
287
+ } else if (props.abortOnNotFound) {
288
+ console.log('abort on not found tour')
289
+ finish()
290
+ }
291
+ return false
230
292
  }
293
+
294
+ // Lifecycle hooks
295
+ onMounted(() => {
296
+ setTimeout(() => {
297
+ show.value = true;
298
+ setTimeout(() => {
299
+ _show()
300
+ }, props.delay)
301
+ }, 10)
302
+ })
303
+
304
+ watch(() => $r.breakpoint.height, () => {
305
+ _show()
306
+ })
307
+
308
+ defineExpose({
309
+ /**
310
+ * Moves to the next step
311
+ */
312
+ next,
313
+ /**
314
+ * Moves to the previous step
315
+ */
316
+ prev,
317
+ /**
318
+ * Resets tour styling and state
319
+ */
320
+ reset,
321
+ /**
322
+ * Finishes the tour
323
+ */
324
+ finish,
325
+ /**
326
+ * Current step index
327
+ * @type {Number}
328
+ */
329
+ step: run
330
+ })
331
+
231
332
  </script>
232
333
  <style lang="scss">
233
- .disable-event {
234
- pointer-events: none !important;
334
+ @use "../../style" as *;
335
+
336
+ .#{$prefix}disable-event {
337
+ pointer-events: none !important;
235
338
  }
236
339
 
237
- .tour-layer {
238
- transition: all .7s ease-in-out;
239
- position: absolute;
240
- box-shadow: #444444 0px 0px 1px 2px, rgba(160, 10, 255, 0.8) 0px 0px 0px 5000px;
241
- z-index: 1000;
242
- opacity: 0;
243
- width: 1px;
244
- height: 1px;
245
- left: 0;
246
- top: 0;
340
+ .#{$prefix}tour-layer {
341
+ transition: all .7s ease-in-out;
342
+ position: absolute;
343
+ box-shadow: #444444 0px 0px 1px 2px, rgba(160, 10, 255, 0.8) 0px 0px 0px 5000px;
344
+ z-index: 1000;
345
+ opacity: 0;
346
+ width: 1px;
347
+ height: 1px;
348
+ left: 0;
349
+ top: 0;
247
350
 
248
351
  }
249
352
 
250
- .tour-clickable {
251
- pointer-events: auto !important;
353
+ .#{$prefix}tour-clickable {
354
+ pointer-events: auto !important;
252
355
  }
253
356
 
254
- .tour-msg {
255
- transition: all 1s ease-in-out;
256
- color: white !important;
257
- position: absolute;
258
- width: 100%;
259
- z-index: 1001;
260
- top: 0
357
+ .#{$prefix}tour-msg {
358
+ transition: all 1s ease-in-out;
359
+ color: white !important;
360
+ position: absolute;
361
+ width: 100%;
362
+ z-index: 1001;
363
+ top: 0
261
364
  }
262
365
  </style>