@kigi/components 1.41.0-alpha.8 → 1.41.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kigi/components",
3
- "version": "1.41.0-alpha.8",
3
+ "version": "1.41.0",
4
4
  "description": "@kigi/components",
5
5
  "main": "src/components/index.ts",
6
6
  "scripts": {
@@ -57,7 +57,7 @@
57
57
  "firebase": "7.16.0",
58
58
  "fuse.js": "^3.4.6",
59
59
  "grpc": "1.20.2",
60
- "highcharts": "^11.0.0",
60
+ "highcharts": "^6.2.0",
61
61
  "highcharts-more": "^0.1.7",
62
62
  "imports-loader": "^0.8.0",
63
63
  "jodit": "^3.6.11",
@@ -1,3 +1,21 @@
1
- <div>
2
- aaaaaaaaaaaaaa
1
+ <div class="average-customer-time-wrapper">
2
+ <figure class="highcharts-figure">
3
+ <div class="description-container-dash">
4
+ <div class="mbg-h-c-tone-s-icon-dash"
5
+ ng-click="$ctrl.toggleShowValuesReturnCustomer(false)">
6
+ <i class="fa fa-lock lock-dash-store"
7
+ aria-hidden="true"
8
+ uib-tooltip="Sem permissão para visualizar"
9
+ tooltip-placement="left"
10
+ ng-if="$ctrl.isBlockValuesDashboarReturnCustomer && !$ctrl.hideValue"></i>
11
+ <i ng-if="!$ctrl.hideValue && $ctrl.isPermissionAverageCustomerReturnTime"
12
+ disable-animate
13
+ class="far fa-eye eye-board-target"></i>
14
+ <i ng-if="$ctrl.hideValue && $ctrl.isPermissionAverageCustomerReturnTime"
15
+ disable-animate
16
+ class="far fa-eye-slash eye-board-target"></i>
17
+ </div>
18
+ </div>
19
+ <div id="container"></div>
20
+ </figure>
3
21
  </div>
@@ -1,301 +1,196 @@
1
- .store-goal-wrapper {
1
+ .average-customer-time-wrapper {}
2
2
 
3
- .swiper {
4
- width: 100%;
5
- height: 100%;
6
- overflow: hidden;
7
- }
8
-
9
- .swiper-wrapper {
10
- display: flex;
11
- transition: transform 0.3s ease;
12
- }
13
-
14
- .swiper-slide {
15
- width: 100%;
16
- flex-shrink: 0;
17
- display: flex;
18
- justify-content: center;
19
- align-items: center;
20
- box-sizing: border-box;
21
- }
22
-
23
- .swiper-slide-active {
24
- display: flex;
25
- justify-content: center;
26
- align-items: center;
27
- }
28
-
29
- .swiper-pagination {
30
- position: absolute;
31
- top: 100px;
32
- left: 54%;
33
- transform: translateX(-50%);
34
- display: flex;
35
- gap: 5px;
36
- }
37
-
38
- .swiper-pagination-bullet {
39
- width: 10px;
40
- height: 10px;
41
- background-color: #606A90;
42
- border-radius: 50%;
43
- opacity: 0.5;
44
- }
45
-
46
- .swiper-pagination-bullet-active {
47
- background-color: #0EBCBD;
48
- opacity: 1;
49
- }
50
-
51
- .active-index {
52
- display: flex;
53
- justify-content: end;
54
- font-size: 14px;
55
- margin-top: -17px;
56
- color: var(--titleColor);
3
+ .highcharts-figure {
4
+ .custom-title-container{
5
+ .custom-title{
6
+ position: relative;
7
+ left: -20px;
57
8
  }
58
-
59
-
60
- .line-goal {
9
+ }
10
+ .line-pay {
61
11
  width: 100%;
62
12
  background: #737373;
63
13
  height: 1px;
64
14
  opacity: 0.3;
65
15
 
66
16
  }
67
-
68
- .dashboard-wrapper {
69
- overflow: hidden;
70
- display: flex;
71
- justify-content: center;
72
- align-items: center;
73
- height: 100%;
17
+ #container {
18
+ border-radius: 10px;
19
+ background: #FFF;
20
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
74
21
  width: 100%;
75
- position: relative;
76
- left: -22px;
77
-
78
- .dashboard-estimated {
79
-
80
- position: relative;
81
- left: 52px;
82
- top: 10px;
83
- height: 115px;
84
- font-size: 14px;
85
- color: #5f5b5b;
86
-
87
- }
88
-
89
- .dashboard-estimated-store {
90
-
91
- position: relative;
92
- top: 18px;
93
- left: 38px;
94
- height: 115px;
95
- font-size: 14px;
96
- color: #5f5b5b;
97
- }
98
- }
99
-
100
- .chart-container {
22
+ margin-left: 19px;
101
23
  display: flex;
102
24
  justify-content: center;
103
25
  align-items: center;
104
- width: 300px;
105
- height: auto;
106
- position: relative;
107
- left: 10%;
108
- bottom: 195px;
109
- }
110
-
111
- .opacity-dash-goal {
112
- opacity: 0.5;
113
26
  }
114
-
115
- .goal-target {
27
+ .description-container-dash {
28
+ color: var(--titleColor);
29
+ display: flex;
30
+ justify-content: end;
116
31
  position: relative;
117
- top: 180px;
118
- font-size: 14px;
119
- color: #5f5b5b;
120
- }
121
-
122
- .estimate-goal {
123
- font-size: 14px;
124
- color: #5f5b5b;
125
- }
32
+ top: 22px;
33
+ right: 12px;
34
+ z-index: 9999;
126
35
 
127
- .estimate-goal-store {
128
- font-size: 14px;
129
- color: #5f5b5b;
130
-
131
- i {
132
- color: #0EBCBD;
133
- }
134
-
135
- .tooltip-inner {
136
- width: 250px;
36
+ .mbg-h-c-tone-s-icon-dash {
37
+ margin-top: -10px;
38
+ transition: opacity 500ms ease;
39
+ opacity: 0.9;
137
40
  }
41
+ }
42
+ }
138
43
 
44
+ @media screen and (max-width: 1920px){
45
+ .highcharts-figure {
139
46
 
140
- .tooltip-chart-panel {
141
- display: flex;
142
- flex-direction: column;
47
+ .line-pay {
143
48
  position: relative;
144
- background: #0EBCBD !important;
145
- font-weight: bold;
146
- color: #FFFFFF;
147
- width: 100%;
148
- height: 100%;
149
- margin-right: 200px;
150
- border-radius: 10px;
151
- opacity: 1.0;
49
+ left: -20px;
50
+ width: 480px;
152
51
  }
153
-
154
- }
155
- .lock-permition{
156
-
157
- .tooltip-inner {
158
- background: #0EBCBD !important;
159
- color: #000000 !important;
160
- width: 300px;
52
+ #container {
53
+ border-radius: 10px;
54
+ background: #FFF;
55
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
56
+ width: 504px;
57
+ margin-left: 19px;
161
58
  }
59
+
162
60
  }
163
61
 
164
- .goal-day {
165
- display: flex;
166
- justify-content: space-between;
167
- align-items: end;
168
- position: relative;
169
- top: 170px;
170
- font-size: 16px;
171
- color: #5f5b5b;
172
- }
173
-
174
- .description-container-dash {
175
- flex-grow: 1;
176
- color: var(--titleColor);
177
- display: flex;
178
- justify-content: space-between;
179
- width: 100%;
180
- margin-top: 16px;
181
- font-weight: 600;
182
- font-size: 14px;
62
+ }
183
63
 
184
- .active-index-slide{
64
+ @media screen and (max-width: 1728px){
65
+ .highcharts-figure {
66
+ .line-pay {
185
67
  position: relative;
186
- top: -11px;
187
- left: 95px;
68
+ left: -20px;
69
+ width: 418px;
188
70
  }
189
-
190
- .mbg-h-c-tone-s-icon-dash {
191
- margin-top: -10px;
192
- transition: opacity 500ms ease;
193
- opacity: 0.9;
71
+ #container {
72
+ border-radius: 10px;
73
+ background: #FFF;
74
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
75
+ width: 444px;
76
+ padding: inherit;
194
77
  }
78
+ }
79
+ }
195
80
 
196
- .lock-dash-store {
81
+ @media screen and (max-width: 1536px){
82
+ .highcharts-figure {
83
+ .custom-title-container{
84
+ .custom-title{
85
+ font-size: 17px;
86
+ }
87
+ }
88
+ .line-pay {
197
89
  position: relative;
198
- right: -20px;
90
+ left: -20px;
91
+ width: 366px;
199
92
  }
200
-
201
- .show-tooltip {
202
- font-size: 20px;
203
- color: #5f5b5b;
204
- z-index: 9999;
93
+ #container {
94
+ border-radius: 10px;
95
+ background: #FFF;
96
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
97
+ width: 390px;
205
98
  }
206
99
  }
100
+ }
207
101
 
208
- @keyframes blink {
209
- 0% {
210
- opacity: 1;
102
+ @media screen and (max-width: 1440px){
103
+ .highcharts-figure {
104
+ .custom-title-container{
105
+ .custom-title{
106
+ font-size: 16px;
107
+ width: 100vw;
211
108
  }
212
-
213
- 50% {
214
- opacity: 0;
109
+ }
110
+
111
+ .line-pay {
112
+ position: relative;
113
+ left: -20px;
114
+ width: 332px;
215
115
  }
116
+ #container {
117
+ border-radius: 10px;
118
+ background: #FFF;
119
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
120
+ width: 358px;
216
121
 
217
- 100% {
218
- opacity: 1;
219
122
  }
220
123
  }
124
+ }
221
125
 
222
- .description-dash {
223
- font-size: 20px;
224
- color: #5f5b5b;
225
-
226
- i {
227
- animation: blink 1s infinite;
228
- color: #ff8c00;
126
+ @media screen and (max-width: 1368px){
127
+ .highcharts-figure {
128
+ .custom-title-container{
129
+ .custom-title{
130
+ font-size: 20px;
131
+ width: 100vw;
132
+ }
133
+ }
134
+
135
+ .line-pay {
229
136
  position: relative;
230
- z-index: 9999;
137
+ left: -20px;
138
+ width: 450px;
231
139
  }
140
+ #container {
141
+ border-radius: 10px;
142
+ background: #FFF;
143
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
144
+ width: 474px;
232
145
 
233
- .tooltip-inner {
234
- background: #ff8c00 !important;
235
- color: #000000 !important;
236
- width: 300px;
237
146
  }
238
147
  }
148
+ }
239
149
 
240
- @media screen and (max-width: 1920px){
241
- .description-container-dash{
242
- .active-index-slide {
243
- left: 140px;
244
- }
150
+ @media screen and (max-width: 1366px){
151
+ .highcharts-figure {
152
+ .custom-title-container{
153
+ .custom-title{
154
+ font-size: 20px;
155
+ width: 100vw;
245
156
  }
246
- }
247
-
248
- @media screen and (max-width: 1728px){
249
- .description-container-dash{
250
- .active-index-slide {
251
- left: 108px;
252
157
  }
158
+
159
+ .line-pay {
160
+ position: relative;
161
+ left: -20px;
162
+ width: 450px;
253
163
  }
254
- }
164
+ #container {
165
+ border-radius: 10px;
166
+ background: #FFF;
167
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
168
+ width: 474px;
255
169
 
256
- @media screen and (max-width: 1536px){
257
- .description-container-dash{
258
- .active-index-slide {
259
- left: 70px;
260
- }
261
- }
262
- }
263
- @media screen and (max-width: 1440px){
264
- .description-container-dash{
265
- .active-index-slide {
266
- left: 58px;
267
- }
268
170
  }
269
171
  }
172
+ }
270
173
 
271
- @media screen and (max-width: 1366px){
272
- .description-container-dash{
273
- .active-index-slide {
274
- left: 125px;
174
+ @media screen and (max-width: 1024px){
175
+ .highcharts-figure {
176
+ .custom-title-container{
177
+ .custom-title{
178
+ font-size: 15px;
179
+ width: 100vw;
180
+ }
275
181
  }
182
+
183
+ .line-pay {
184
+ position: relative;
185
+ left: -20px;
186
+ width: 306px;
276
187
  }
277
- }
188
+ #container {
189
+ border-radius: 10px;
190
+ background: #FFF;
191
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
192
+ width: 330px;
278
193
 
279
- @media screen and (max-width: 1024px){
280
- .description-container-dash{
281
- .active-index-slide {
282
- left: 44px;
283
- }
284
194
  }
285
195
  }
286
-
287
196
  }
288
-
289
- .hide-goal {
290
- display: flex;
291
- justify-content: center;
292
- align-items: center;
293
- width: 100%;
294
- height: 100%;
295
- font-size: 14px;
296
- color: #5f5b5b;
297
- }
298
-
299
- .state-goal {
300
- cursor: pointer;
301
- }
@@ -1,7 +1,20 @@
1
1
  import './mbg-average-customer-time.scss'
2
2
  import template from './mbg-average-customer-time.html'
3
+ import Highcharts from 'highcharts'
4
+ import Exporting from 'highcharts/modules/exporting.js'
5
+ import Accessibility from 'highcharts/modules/accessibility.js'
6
+
7
+ Exporting(Highcharts)
8
+ Accessibility(Highcharts)
3
9
 
4
10
  class MbgAverageCustomerTimeController {
11
+ private percentagesReturnCustomerTime
12
+ private isPermissionAverageCustomerReturnTime
13
+ private allowedToSee: boolean
14
+ private allowedCallBack: Function
15
+ private isBlockValuesDashboarReturnCustomer
16
+ private hideValue: boolean = false
17
+
5
18
  constructor(
6
19
  public $scope,
7
20
  public $element,
@@ -11,7 +24,152 @@ class MbgAverageCustomerTimeController {
11
24
  public $state,
12
25
  ) {}
13
26
 
14
- async $onInit() {}
27
+ async $onInit() {
28
+ this.isBlockValuesDashboarReturnCustomer =
29
+ !this.allowedToSee || !this.isPermissionAverageCustomerReturnTime
30
+ this.$scope.$watch(
31
+ '$ctrl.percentagesReturnCustomerTime',
32
+ (data) => {
33
+ if (data) {
34
+ this.configPanelPercentagesReturnCustomerTime()
35
+ }
36
+ },
37
+ true,
38
+ )
39
+ }
40
+
41
+ configPanelPercentagesReturnCustomerTime() {
42
+ const colors = ['#F24A57', '#45BDBF', '#482F72', '#CDDA34', '#F68E2C']
43
+ const hasPermissionPorcentages = !this.isPermissionAverageCustomerReturnTime || this.hideValue
44
+ const transformedData = this.percentagesReturnCustomerTime.map((item, index) => ({
45
+ name: `${item.days} dias`,
46
+ y: parseFloat(item.percentage) > 0 ? parseFloat(item.percentage) : 0,
47
+ color: colors[index],
48
+ }))
49
+
50
+ Highcharts.chart('container', {
51
+ chart: {
52
+ type: 'pie',
53
+ backgroundColor: 'none',
54
+ events: {
55
+ redraw: function () {
56
+ const chart = this
57
+ const noDataText = 'Nenhum período selecionado'
58
+
59
+ if (chart.noDataLabel) {
60
+ chart.noDataLabel.destroy()
61
+ chart.noDataLabel = null
62
+ }
63
+
64
+ const allDataHidden = chart.series.filter((series) =>
65
+ series.data.filter((point) => point.options.visible),
66
+ )
67
+
68
+ const hasDate = allDataHidden[0].data.some((option) => option.visible)
69
+
70
+ if (!hasDate) {
71
+ const centerX = chart.plotWidth / 2
72
+ const centerY = chart.plotHeight / 2
73
+ chart.noDataLabel = chart.renderer
74
+ .text(noDataText, centerX, centerY)
75
+ .attr({
76
+ zIndex: 5,
77
+ align: 'center',
78
+ })
79
+ .css({
80
+ fontSize: '20px',
81
+ color: '#5f5b5b',
82
+ textAlign: 'center',
83
+ })
84
+ .add()
85
+ }
86
+ },
87
+ },
88
+ },
89
+ title: {
90
+ text: `
91
+ <div class="custom-title-container">
92
+ <p class="custom-title">Tempo médio de retorno do cliente</p>
93
+ <div class="line-pay"></div>
94
+ </div>`,
95
+ useHTML: true,
96
+ style: {
97
+ fontSize: '20px',
98
+ color: '#5f5b5b',
99
+ fontWeight: 'bold',
100
+ },
101
+ },
102
+
103
+ legend: {
104
+ layout: 'horizontal',
105
+ itemDistance: 5,
106
+ },
107
+ plotOptions: {
108
+ pie: {
109
+ allowPointSelect: true,
110
+ cursor: 'pointer',
111
+ borderRadius: 8,
112
+ dataLabels: {
113
+ enabled: !hasPermissionPorcentages,
114
+
115
+ formatter: function () {
116
+ if (!hasPermissionPorcentages) {
117
+ return `<span style="color:#7B7B7B">${
118
+ this.point.name
119
+ }</span><br><span style="font-weight:bold; color:#333">(${this.y.toFixed(
120
+ 2,
121
+ )}%)</span>`
122
+ }
123
+ },
124
+ style: {
125
+ fontSize: '0.9em',
126
+ },
127
+ },
128
+ showInLegend: true,
129
+ },
130
+ },
131
+ tooltip: {
132
+ backgroundColor: '#FFF',
133
+ formatter: function () {
134
+ if (hasPermissionPorcentages) {
135
+ return 'Sem permissão para visualizar'
136
+ }
137
+ return `<b>${this.point.name}</b><br>Porcentagem: ${this.y.toFixed(2)}%`
138
+ },
139
+ },
140
+ series: [
141
+ {
142
+ name: 'Porcentagem',
143
+ colorByPoint: true,
144
+ innerSize: '75%',
145
+ data: transformedData,
146
+ },
147
+ ],
148
+ navigation: {
149
+ buttonOptions: {
150
+ enabled: false,
151
+ },
152
+ },
153
+ credits: {
154
+ enabled: false,
155
+ },
156
+ })
157
+ }
158
+
159
+ toggleShowValuesReturnCustomer() {
160
+ if (
161
+ (this.allowedToSee !== undefined && !this.allowedToSee) ||
162
+ !this.isPermissionAverageCustomerReturnTime
163
+ ) {
164
+ if (this.allowedCallBack) {
165
+ this.allowedCallBack()
166
+ }
167
+ return
168
+ }
169
+
170
+ this.hideValue = !this.hideValue
171
+ this.configPanelPercentagesReturnCustomerTime()
172
+ }
15
173
  }
16
174
  MbgAverageCustomerTimeController['$inject'] = [
17
175
  '$scope',
@@ -23,7 +181,13 @@ MbgAverageCustomerTimeController['$inject'] = [
23
181
  ]
24
182
 
25
183
  const mbgAverageCustomerTime = {
26
- bindings: {},
184
+ bindings: {
185
+ percentagesReturnCustomerTime: '=?',
186
+ isPermissionAverageCustomerReturnTime: '=?',
187
+ allowedToSee: '=?',
188
+ allowedCallBack: '&?',
189
+ isBlockValuesDashboarReturnCustomer: '=?',
190
+ },
27
191
  template,
28
192
  controller: MbgAverageCustomerTimeController,
29
193
  }
@@ -1,9 +1,6 @@
1
1
  <div ng-class="{'opacity-dash-goal': !$ctrl.isPermissionStoreGoal}"
2
2
  class="store-goal-wrapper"
3
3
  ng-show="$ctrl.showDashboard">
4
-
5
-
6
-
7
4
  <div class="description-container-dash">
8
5
  <p class="description-dash">
9
6
  Meta do mês / {{$ctrl.currentMonthName}}
@@ -13,8 +10,6 @@
13
10
  ng-show="$ctrl.estimatedPercentageGreaterThanTarget"
14
11
  aria-hidden="true"></i>
15
12
  </p>
16
-
17
-
18
13
  <div class="mbg-h-c-tone-s-icon-dash"
19
14
  ng-click="$ctrl.toggleShowValueStoreGoal(false)">
20
15
  <i class="fa fa-lock lock-dash-store"
@@ -127,6 +122,31 @@
127
122
 
128
123
 
129
124
  <div class="swiper-pagination"></div>
125
+ <div class="loading-indicator">
126
+ <svg id="loading-circle"
127
+ width="30"
128
+ height="30"
129
+ viewBox="0 0 100 100">
130
+
131
+ <circle cx="50"
132
+ cy="50"
133
+ r="40"
134
+ stroke="#E9E9E9"
135
+ stroke-width="8"
136
+ fill="none" />
137
+
138
+ <circle id="progress"
139
+ cx="50"
140
+ cy="50"
141
+ r="40"
142
+ stroke="#0ebcbd"
143
+ stroke-width="8"
144
+ stroke-dasharray="251.2"
145
+ stroke-dashoffset="251.2"
146
+ fill="none"
147
+ transform="rotate(-90 50 50)" />
148
+ </svg>
149
+ </div>
130
150
  </div>
131
151
  </div>
132
152
  </div>
@@ -1,5 +1,18 @@
1
1
  .store-goal-wrapper {
2
2
 
3
+ .loading-indicator {
4
+ position: absolute;
5
+ top: 26%;
6
+ left: 98%;
7
+ transform: translate(-50%, -50%);
8
+ width: 40px;
9
+ height: 40px;
10
+ }
11
+
12
+ #loading-circle {
13
+ position: absolute;
14
+ }
15
+
3
16
  .swiper {
4
17
  width: 100%;
5
18
  height: 100%;
@@ -29,7 +42,7 @@
29
42
  .swiper-pagination {
30
43
  position: absolute;
31
44
  top: 100px;
32
- left: 54%;
45
+ left: 50%;
33
46
  transform: translateX(-50%);
34
47
  display: flex;
35
48
  gap: 5px;
@@ -73,10 +86,9 @@
73
86
  height: 100%;
74
87
  width: 100%;
75
88
  position: relative;
76
- left: -22px;
77
89
 
78
- .dashboard-estimated {
79
90
 
91
+ .dashboard-estimated {
80
92
  position: relative;
81
93
  left: 52px;
82
94
  top: 10px;
@@ -238,6 +250,7 @@
238
250
  }
239
251
 
240
252
  @media screen and (max-width: 1920px){
253
+
241
254
  .description-container-dash{
242
255
  .active-index-slide {
243
256
  left: 140px;
@@ -261,6 +274,15 @@
261
274
  }
262
275
  }
263
276
  @media screen and (max-width: 1440px){
277
+ .dashboard-wrapper{
278
+ .swiper-slide{
279
+ .dashboard-estimated{
280
+ position: relative;
281
+ left: 32px;
282
+ }
283
+ }
284
+
285
+ }
264
286
  .description-container-dash{
265
287
  .active-index-slide {
266
288
  left: 58px;
@@ -277,6 +299,15 @@
277
299
  }
278
300
 
279
301
  @media screen and (max-width: 1024px){
302
+ .dashboard-wrapper{
303
+ .swiper-slide{
304
+ .dashboard-estimated{
305
+ position: relative;
306
+ left: 24px;
307
+ }
308
+ }
309
+
310
+ }
280
311
  .description-container-dash{
281
312
  .active-index-slide {
282
313
  left: 44px;
@@ -76,9 +76,43 @@ class MbgStoreGoalController {
76
76
  })
77
77
 
78
78
  swiper.on('slideChange', () => {
79
+ this.startLoadingAnimation(swiper)
79
80
  this.indexActiveSlide =
80
81
  swiper.activeIndex === 1 ? '(mensal)' : swiper.activeIndex === 2 ? '(diário)' : ''
81
82
  })
83
+
84
+ this.startLoadingAnimation(swiper)
85
+ }
86
+ startLoadingAnimation(swiper) {
87
+ const duration = 20000
88
+ const totalLength = 251.2
89
+
90
+ const progress = document.getElementById('progress')
91
+ if (!progress) return
92
+
93
+ let startTime: number | null = null
94
+
95
+ const animate = (timestamp: number) => {
96
+ if (!startTime) startTime = timestamp
97
+ const elapsed = timestamp - startTime
98
+
99
+ const progressPercentage = elapsed / duration
100
+ const currentOffset = totalLength * (1 - progressPercentage)
101
+
102
+ progress.style.strokeDashoffset = `${currentOffset}`
103
+
104
+ if (elapsed < duration) {
105
+ requestAnimationFrame(animate)
106
+ } else {
107
+ progress.style.strokeDashoffset = '0'
108
+ if (swiper.autoplay.running) {
109
+ swiper.autoplay.start()
110
+ }
111
+ }
112
+ }
113
+
114
+ progress.style.strokeDashoffset = `${totalLength}`
115
+ requestAnimationFrame(animate)
82
116
  }
83
117
 
84
118
  goalDataForTheMonthConfig() {
package/src/index.html CHANGED
@@ -161,7 +161,7 @@
161
161
  <div class="col-md-12"> -->
162
162
  <div class=""
163
163
  style="height: 260px">
164
- <mbg-average-customer-time></mbg-average-customer-time>
164
+ <mbg-store-goal></mbg-store-goal>
165
165
 
166
166
  <!-- <mbg-text-editor ng-model="editorJodit"
167
167
  ng-if="testeeditorif"