renusify 2.5.2 → 3.0.1

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 +207 -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 +93 -49
  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 +332 -168
  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 +250 -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 +3 -3
  85. package/components/infinite/index.vue +290 -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 +206 -94
  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 +319 -156
  100. package/components/swiper/index.vue +237 -108
  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 +272 -24
  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 +11 -19
  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 +155 -178
  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 +7 -2
  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,11 +1,17 @@
1
1
  <template>
2
2
  <div :class="`${$r.prefix}swiper`"
3
- ref="swiper"
3
+ ref="swiperRef"
4
4
  >
5
- <slot name="left" :left="left"></slot>
6
- <slot name="right" :right="right"></slot>
5
+ <!-- @slot Previous navigation slot
6
+ @binding {Function} previous - Function to navigate previous -->
7
+ <slot name="previous" :previous="previous"></slot>
8
+
9
+ <!-- @slot Next navigation slot
10
+ @binding {Function} next - Function to navigate next -->
11
+ <slot name="next" :next="next"></slot>
12
+
7
13
  <div class="swiper-container"
8
- ref="container"
14
+ ref="containerRef"
9
15
  :class="{
10
16
  'in-move':inMove
11
17
  }"
@@ -18,6 +24,9 @@
18
24
  draggable="false"
19
25
  :style="{'min-width':itemWidth&&itemWidth+'px','width':itemWidth&&itemWidth+'px'}"
20
26
  v-for="(item,i) in items" :key="i">
27
+ <!-- @slot Default slot for swiper item content
28
+ @binding {*} item - Current item data
29
+ @binding {Number} index - Item index -->
21
30
  <slot :item="item" :index="i">{{ item }}</slot>
22
31
  </div>
23
32
  </div>
@@ -27,6 +36,9 @@
27
36
  :key="n"
28
37
  class="swiper-dot"
29
38
  v-for="n in slides">
39
+ <!-- @slot Slot for custom dots rendering
40
+ @binding {Function} go - Function to go to a specific slide
41
+ @binding {Number} index - Slide index -->
30
42
  <slot name="dots" :go="goToSlide" :index="n">
31
43
  <button @click.prevent="goToSlide(n)" type="button">{{ n }}</button>
32
44
  </slot>
@@ -36,122 +48,239 @@
36
48
  </div>
37
49
  </template>
38
50
 
39
- <script>
40
-
41
- export default {
42
- name: 'r-swiper',
43
- props: {
44
- items: Array,
45
- widthItem: Number,
46
- dots: Boolean,
47
- numShow: [Number, Object]
48
- },
49
- data() {
50
- return {
51
- timer: null,
52
- inMove: false,
53
- x: 0,
54
- prePosition: 0,
55
- width: null,
56
- slides: 0,
57
- currentSlide: 1
58
- }
59
- },
60
- mounted() {
61
- if (this.numShow && this.$refs.swiper) {
62
- if (typeof this.numShow === 'object') {
63
- for (let name in this.numShow) {
64
- if (this.$r.breakpoint[name]) {
65
- this.width = this.$refs.swiper.getBoundingClientRect().width / this.numShow[name]
66
- break
67
- }
68
- }
69
- } else {
70
- this.width = this.$refs.swiper.getBoundingClientRect().width / this.numShow
71
- }
51
+ <script setup>
52
+ import { ref, computed, onMounted, onUnmounted, inject, nextTick, watch } from 'vue'
53
+
54
+ /**
55
+ * @example // Swiper usage
56
+ * <template>
57
+ * <r-swiper
58
+ * :items="items"
59
+ * :width-Item="widthItem"
60
+ * :dots="dots"
61
+ * :num-Show="numShow"
62
+ * >
63
+ * <template v-slot="{ item }">
64
+ * <r-card class="d-flex h-center v-center ma-2" style="height: 200px">
65
+ * {{ item.name }}
66
+ * </r-card>
67
+ * </template>
68
+ * </r-swiper>
69
+ * </template>
70
+ *
71
+ * <script>
72
+ * import { ref } from 'vue'
73
+ *
74
+ * const items = ref([
75
+ * { name: 'One' },
76
+ * { name: 'Two' },
77
+ * { name: 'Three' },
78
+ * { name: 'Four' },
79
+ * { name: 'Five' },
80
+ * { name: 'Six' },
81
+ * { name: 'Seven' },
82
+ * { name: 'Eight' },
83
+ * { name: 'Nine' },
84
+ * { name: 'Ten' }
85
+ * ])
86
+ *
87
+ * const widthItem = ref(null)
88
+ * const dots = ref(true)
89
+ * const numShow = ref(5)
90
+ * <//script>
91
+ *
92
+ *
93
+ * */
94
+ const props = defineProps({
95
+ /**
96
+ * Array of items to display in the swiper
97
+ * @type {Array}
98
+ */
99
+ items: Array,
100
+ /**
101
+ * Fixed width for each swiper item in pixels
102
+ * @type {Number}
103
+ */
104
+ widthItem: Number,
105
+ /**
106
+ * Shows navigation dots
107
+ * @type {Boolean}
108
+ */
109
+ dots: Boolean,
110
+ /**
111
+ * Number of items to show simultaneously, or responsive object
112
+ * @type {Number|Object}
113
+ */
114
+ numShow: [Number, Object]
115
+ })
116
+
117
+ const { $r } = inject('renusify')
118
+
119
+ const timer = ref(null)
120
+ const inMove = ref(false)
121
+ const x = ref(0)
122
+ const prePosition = ref(0)
123
+ const width = ref(null)
124
+ const slides = ref(0)
125
+ const currentSlide = ref(1)
126
+
127
+ const swiperRef = ref(null)
128
+ const containerRef = ref(null)
129
+
130
+ const itemWidth = computed(() => {
131
+ if (width.value) {
132
+ return width.value
133
+ }
134
+ if (props.widthItem) {
135
+ return props.widthItem
136
+ }
137
+ return false
138
+ })
139
+
140
+
141
+ /**
142
+ * Navigates to a specific slide
143
+ * @param {Number} n - Slide number (1-indexed)
144
+ */
145
+ const goToSlide = (n) => {
146
+ if (!swiperRef.value) return
147
+
148
+ inMove.value = false
149
+ const s = $r.rtl ? 1 : -1
150
+ x.value = swiperRef.value.offsetWidth * (n - 1) * s
151
+ prePosition.value = 0
152
+ end(n)
153
+ }
154
+
155
+ /**
156
+ * Navigates to the next slide
157
+ */
158
+ const next = () => {
159
+ if(currentSlide.value+1>slides.value)return
160
+ goToSlide(currentSlide.value+1)
161
+ }
162
+
163
+ /**
164
+ * Navigates to the previous slide
165
+ */
166
+ const previous = () => {
167
+ if(currentSlide.value===1)return
168
+ goToSlide(currentSlide.value-1)
169
+ }
170
+
171
+ /**
172
+ * Handles touch/mouse move events
173
+ * @param {Object} e - Move event object with goX property
174
+ */
175
+ const move = (e) => {
176
+ if (inMove.value || !e?.goX) return
177
+
178
+ inMove.value = true
179
+ clearTimeout(timer.value)
180
+
181
+ timer.value = setTimeout(() => {
182
+ x.value = prePosition.value + e.goX
183
+ inMove.value = false
184
+ }, 50)
185
+ }
186
+
187
+ /**
188
+ * Handles touch/mouse end events
189
+ * @param {Number|null} current - Current slide number for direct navigation
190
+ */
191
+ const end = (current = null) => {
192
+ setTimeout(() => {
193
+ inMove.value = false
194
+
195
+ if (!swiperRef.value || !containerRef.value) return
196
+
197
+ const r = $r.rtl ? 1 : -1
198
+ const swiperWidth = swiperRef.value.offsetWidth
199
+ const containerWidth = containerRef.value.scrollWidth
200
+
201
+ if (x.value * r + swiperWidth >= containerWidth) {
202
+ x.value = (containerWidth - swiperWidth) / r
203
+ } else if (itemWidth.value) {
204
+ const diff = x.value - prePosition.value
205
+ const snapSteps = Math.round(diff / itemWidth.value)
206
+ x.value = prePosition.value + (snapSteps * itemWidth.value)
72
207
  }
73
- setTimeout(() => {
74
- this.slides = Math.ceil(this.$refs.container.scrollWidth / this.$refs.swiper.offsetWidth)
75
- }, 1000)
76
- },
77
- computed: {
78
- itemWidth() {
79
- if (this.width) {
80
- return this.width
81
- }
82
- if (this.widthItem) {
83
- return this.widthItem
84
- }
85
208
 
86
- return false
209
+ if (x.value * r < 0) {
210
+ x.value = 0
87
211
  }
88
- },
89
- methods: {
90
- goToSlide(n) {
91
- this.inMove = false
92
- let s = -1
93
- if (this.$r.rtl) {
94
- s = 1
95
- }
96
- this.x = this.$refs.swiper.offsetWidth * (n - 1) * s
97
- this.end()
98
- },
99
- right(x = null) {
100
- if (x === null) {
101
- x = this.itemWidth || 200
102
- }
103
- this.timer = setTimeout(() => {
104
- this.inMove = true
105
- this.x = this.prePosition - x
106
- this.end()
107
- clearTimeout(this.timer)
108
- }, 50)
109
- }, left(x = null) {
110
- if (x === null) {
111
- x = this.itemWidth || 200
112
- }
113
- this.timer = setTimeout(() => {
114
- this.inMove = true
115
- this.x = this.prePosition + x
116
- this.end()
117
- clearTimeout(this.timer)
118
- }, 50)
119
- }, move(e) {
120
- if (this.inMove) {
121
- return
122
- }
123
- this.inMove = true
124
- this.timer = setTimeout(() => {
125
- this.x = this.prePosition + e.goX
126
- this.inMove = false
127
- }, 50)
128
- },
129
- end(e) {
130
- setTimeout(() => {
131
- this.inMove = false
132
- const r = this.$r.rtl ? 1 : -1
133
- if (this.x * r + this.$refs.swiper.offsetWidth >= this.$refs.container.scrollWidth) {
134
- this.x = (this.$refs.container.scrollWidth - this.$refs.swiper.offsetWidth) / r
135
- } else if (this.itemWidth) {
136
- this.x = this.prePosition + Math.round((this.x - this.prePosition) / this.itemWidth) * this.itemWidth
137
- }
138
212
 
139
- if (this.x * r < 0) {
140
- this.x = 0
141
- }
142
- this.prePosition = this.x
213
+ prePosition.value = x.value
214
+ if (typeof current === 'number') {
215
+ currentSlide.value = current
216
+ } else if (swiperWidth > 0) {
217
+ currentSlide.value = Math.ceil(x.value / swiperWidth * r) + 1
218
+ }
219
+ }, 60)
220
+ }
143
221
 
144
- this.currentSlide = Math.ceil(this.x / this.$refs.swiper.offsetWidth * r) + 1
145
- }, 60)
222
+ const handleResize = () => {
223
+ if (!swiperRef.value) return
146
224
 
225
+ if (props.numShow) {
226
+ if (typeof props.numShow === 'object') {
227
+ for (let name in props.numShow) {
228
+ if ($r.breakpoint && $r.breakpoint[name]) {
229
+ width.value = swiperRef.value.getBoundingClientRect().width / props.numShow[name]
230
+ break
231
+ }
232
+ }
233
+ } else {
234
+ width.value = swiperRef.value.getBoundingClientRect().width / props.numShow
147
235
  }
148
236
  }
237
+
238
+ nextTick(() => {
239
+ if (containerRef.value) {
240
+ slides.value = Math.ceil(containerRef.value.scrollWidth / swiperRef.value.offsetWidth)
241
+ }
242
+ })
243
+
149
244
  }
245
+
246
+
247
+ onMounted(() => {
248
+ handleResize()
249
+ })
250
+
251
+ onUnmounted(() => {
252
+ clearTimeout(timer.value)
253
+ })
254
+
255
+
256
+ watch(() => props.items, () => {
257
+ x.value = 0
258
+ prePosition.value = 0
259
+ currentSlide.value = 1
260
+
261
+ handleResize()
262
+ }, { deep: true })
263
+
264
+ defineExpose({
265
+ /**
266
+ * Navigates to the previous slide
267
+ */
268
+ previous,
269
+ /**
270
+ * Navigates to the next slide
271
+ */
272
+ next,
273
+ /**
274
+ * Return Current Slide
275
+ */
276
+ currentSlide
277
+ })
150
278
  </script>
279
+
151
280
  <style lang="scss">
152
- @use "../../style/variables/base";
281
+ @use "../../style" as *;
153
282
 
154
- .#{base.$prefix}swiper {
283
+ .#{$prefix}swiper {
155
284
  width: 100%;
156
285
  max-width: 100%;
157
286
  height: 100%;
@@ -20,14 +20,14 @@
20
20
  <r-btn :disabled="page===1" @click.prevent="pageBtn('prev')" class="btn-shaped"
21
21
  icon
22
22
  text>
23
- <r-icon v-html="this.$r.icons.chevron_left"></r-icon>
23
+ <r-icon v-html="$r.icons.chevron_left"></r-icon>
24
24
 
25
25
  </r-btn>
26
26
  <input name="input-page" type="text" :value="page" @input="pageN" class="input-page text-center">
27
27
  <r-btn :disabled="endPage" @click.prevent="pageBtn('next')" class="btn-shaped"
28
28
  icon
29
29
  text>
30
- <r-icon v-html="this.$r.icons.chevron_right"></r-icon>
30
+ <r-icon v-html="$r.icons.chevron_right"></r-icon>
31
31
 
32
32
  </r-btn>
33
33
  </div>
@@ -36,55 +36,79 @@
36
36
  </r-container>
37
37
  </div>
38
38
  </template>
39
- <script>
40
- export default {
41
- name: 'manageFooter',
42
- props: {
43
- page: {type: Number, default: 1},
44
- total: {},
45
- perPage: {
46
- type: Object, default: () => {
47
- return {name: '10', value: 10}
48
- }
49
- }
50
- },
51
- emits: ['update:per-page', 'update:page'],
52
- computed: {
53
- totalSetup() {
54
- let to = this.page * this.perPage.value
55
- const from = to - this.perPage.value
56
- if (to > this.total) {
57
- to = this.total
58
- }
59
- return this.$t(['from_to_manage', [from, to, this.total]], 'renusify')
60
- },
61
- endPage() {
62
- let to = this.page * this.perPage.value
63
- if (to > this.total) {
64
- to = this.total
65
- }
66
-
67
- return to === this.total
68
- }
69
- },
70
- methods: {
71
- perPageE(e) {
72
- this.$emit('update:per-page', e)
73
- },
74
- pageN(e) {
75
- e = parseInt(e.target.value)
76
- if (e < 1) {
77
- e = 1
78
- }
79
- this.$emit('update:page', e)
80
- },
81
- pageBtn(v) {
82
- if (v === 'prev') {
83
- this.$emit('update:page', this.page - 1)
84
- } else {
85
- this.$emit('update:page', this.page + 1)
86
- }
87
- },
88
- }
89
- }
39
+ <script setup>
40
+ import {computed, inject} from 'vue'
41
+
42
+ const props = defineProps({
43
+ page: {type: Number, default: 1},
44
+ total: {},
45
+ perPage: {
46
+ type: Object,
47
+ default: () => ({name: '10', value: 10})
48
+ }
49
+ })
50
+
51
+ const emit = defineEmits(['update:per-page', 'update:page'])
52
+
53
+ const {$t} = inject('renusify')
54
+
55
+ const totalSetup = computed(() => {
56
+ let to = props.page * props.perPage.value
57
+ const from = to - props.perPage.value
58
+
59
+ if (to > props.total) {
60
+ to = props.total
61
+ }
62
+
63
+ return $t(['from_to_manage', [from, to, props.total]], 'renusify')
64
+ })
65
+
66
+ const endPage = computed(() => {
67
+ let to = props.page * props.perPage.value
68
+ if (to > props.total) {
69
+ to = props.total
70
+ }
71
+
72
+ return to === props.total
73
+ })
74
+
75
+
76
+ const totalPages = computed(() => {
77
+ if (!props.total || !props.perPage.value) return 1
78
+ return Math.ceil(props.total / props.perPage.value)
79
+ })
80
+
81
+ const perPageE = (e) => {
82
+ emit('update:per-page', e)
83
+ }
84
+
85
+ const pageN = (e) => {
86
+ let value = parseInt(e.target.value)
87
+
88
+ if (isNaN(value) || value < 1) {
89
+ value = 1
90
+ }
91
+
92
+ if (value > totalPages.value) {
93
+ value = totalPages.value
94
+ }
95
+
96
+ emit('update:page', value)
97
+ }
98
+
99
+ const pageBtn = (direction) => {
100
+ let newPage = props.page
101
+
102
+ if (direction === 'prev') {
103
+ newPage = Math.max(1, props.page - 1)
104
+ } else if (direction === 'next') {
105
+ newPage = Math.min(totalPages.value, props.page + 1)
106
+ } else if (direction === 'first') {
107
+ newPage = 1
108
+ } else if (direction === 'last') {
109
+ newPage = totalPages.value
110
+ }
111
+
112
+ emit('update:page', newPage)
113
+ }
90
114
  </script>
@@ -60,7 +60,7 @@
60
60
  :label="$t('search','renusify')"
61
61
  v-bind="headers[1][info.key].props"></component>
62
62
  </div>
63
- <r-btn :rounded="!$r.inputs.tile" class="ms-1 color-success" @click.prevent="added(info,add)">
63
+ <r-btn class="ms-1 color-success" @click.prevent="added(info,add)">
64
64
  {{ $t('add', 'renusify') }}
65
65
  </r-btn>
66
66
  </template>
@@ -82,79 +82,78 @@
82
82
  />
83
83
  </div>
84
84
  </template>
85
- <script>
86
- export default {
87
- name: 'manageHeader',
88
- props: {
89
- headerTable: Object,
90
- loading: Boolean,
91
- disableAdd: Boolean,
92
- advanceSearch: Boolean,
93
- mcud: Boolean,
94
- newItem: Function,
95
- modelValue: String
96
- },
97
- emits: ['update:modelValue', 'copy', 'edit', 'delete', 'a-search'],
98
- data() {
99
- return {
100
- show: false,
101
- showConfirm: false,
102
- advance: null
85
+
86
+ <script setup>
87
+ import {ref, computed, inject} from 'vue'
88
+
89
+ const props = defineProps({
90
+ headerTable: Object,
91
+ loading: Boolean,
92
+ disableAdd: Boolean,
93
+ advanceSearch: Boolean,
94
+ mcud: Boolean,
95
+ newItem: Function,
96
+ modelValue: String
97
+ })
98
+
99
+ const emit = defineEmits(['update:modelValue', 'copy', 'edit', 'delete', 'a-search'])
100
+
101
+ const {$t} = inject('renusify')
102
+
103
+ const show = ref(false)
104
+ const showConfirm = ref(false)
105
+ const advance = ref({})
106
+
107
+ const headers = computed(() => {
108
+ let r = []
109
+ let r2 = {}
110
+ for (let i = 0; i < props.headerTable.length; i++) {
111
+ r.push({'name': $t(props.headerTable[i].text), 'value': props.headerTable[i].value})
112
+ r2[props.headerTable[i].value] = props.headerTable[i].option
113
+ if (props.headerTable[i].option.type === 'r-date-input' || props.headerTable[i].option.type === 'r-time-ago') {
114
+ r2[props.headerTable[i].value]['withTime'] = true
103
115
  }
104
- },
105
- computed: {
106
- headers() {
107
- let r = []
108
- let r2 = {}
109
- for (let i = 0; i < this.headerTable.length; i++) {
110
- r.push({'name': this.$t(this.headerTable[i].text), 'value': this.headerTable[i].value})
111
- r2[this.headerTable[i].value] = this.headerTable[i].option
112
- if (this.headerTable[i].option.type === 'r-date-input' || this.headerTable[i].option.type === 'r-time-ago') {
113
- r2[this.headerTable[i].value]['withTime'] = true
114
- }
115
- }
116
- return [r, r2]
116
+ }
117
+ return [r, r2]
118
+ })
119
+
120
+ const added = (info, add) => {
121
+ let item = headers[1][info.key]
122
+ if (info.key === '_id' || item.is_object_id === true) {
123
+ info.value = {'$oid': info.value}
124
+ } else if (item.is_object_id) {
125
+ info.value[item.is_object_id] = {'$oid': info.value[item.is_object_id]}
126
+ } else if (item.type === 'r-date-input' || item.type === 'r-time-ago') {
127
+ if (info.action === 'eq') {
128
+ info.value = {'$date': info.value}
129
+ } else if (info.action === 'ne') {
130
+ info.value = {'$ne': {'$date': info.value}}
131
+ } else if (info.action === 'gt') {
132
+ info.value = {'$gt': {'$date': info.value}}
133
+ } else if (info.action === 'lt') {
134
+ info.value = {'$lt': {'$date': info.value}}
135
+ }
136
+ } else {
137
+ if (info.action === 'ne') {
138
+ info.value = {'$ne': info.value}
139
+ } else if (info.action === 'gt') {
140
+ info.value = {'$gt': info.value}
141
+ } else if (info.action === 'lt') {
142
+ info.value = {'$lt': info.value}
117
143
  }
118
- },
119
- methods: {
120
- added(info, add) {
121
- let item = this.headers[1][info.key]
122
- if (info.key === '_id' || item.is_object_id === true) {
123
- info.value = {'$oid': info.value}
124
- } else if (item.is_object_id) {
125
- info.value[item.is_object_id] = {'$oid': info.value[item.is_object_id]}
126
- } else if (item.type === 'r-date-input' || item.type === 'r-time-ago') {
127
- if (info.action === 'eq') {
128
- info.value = {'$date': info.value}
129
- } else if (info.action === 'ne') {
130
- info.value = {'$ne': {'$date': info.value}}
131
- } else if (info.action === 'gt') {
132
- info.value = {'$gt': {'$date': info.value}}
133
- } else if (info.action === 'lt') {
134
- info.value = {'$lt': {'$date': info.value}}
135
- }
136
- } else {
137
- if (info.action === 'ne') {
138
- info.value = {'$ne': info.value}
139
- } else if (info.action === 'gt') {
140
- info.value = {'$gt': info.value}
141
- } else if (info.action === 'lt') {
142
- info.value = {'$lt': info.value}
143
- }
144
- }
145
- add()
146
- },
147
- accept() {
148
- this.$emit('delete', true)
149
- this.showConfirm = false
150
- },
151
- send() {
152
- this.$emit('update:modelValue', '')
153
- this.$emit('a-search', this.advance)
154
- },
155
- open() {
156
- this.show = !this.show
157
- },
158
144
  }
145
+ add()
146
+ }
147
+ const accept = () => {
148
+ emit('delete', true)
149
+ showConfirm.value = false
159
150
  }
151
+ const send = () => {
152
+ emit('update:modelValue', '')
153
+ emit('a-search', advance.value)
154
+ }
155
+ const open = () => {
156
+ show.value = !show.value
157
+ }
158
+
160
159
  </script>