toggle-components-library 1.25.15 → 1.25.17

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 (42) hide show
  1. package/dist/img/airship-audiences-hover.7197407c.svg +9 -0
  2. package/dist/img/airship-audiences.e7477e19.svg +9 -0
  3. package/dist/img/{airship-user-icon-hover.7eecff69.svg → airship-circle-user-icon-hover.7eecff69.svg} +0 -0
  4. package/dist/img/{airship-user-icon.b39571b4.svg → airship-circle-user-icon.b39571b4.svg} +0 -0
  5. package/dist/img/airship-user-icon.1c0e190a.svg +3 -0
  6. package/dist/img/airship-x-hover.e1c3bb98.svg +3 -0
  7. package/dist/img/airship-x.dec93e61.svg +3 -0
  8. package/dist/toggle-components-library.common.js +367 -151
  9. package/dist/toggle-components-library.common.js.map +1 -1
  10. package/dist/toggle-components-library.css +1 -1
  11. package/dist/toggle-components-library.umd.js +367 -151
  12. package/dist/toggle-components-library.umd.js.map +1 -1
  13. package/dist/toggle-components-library.umd.min.js +6 -6
  14. package/dist/toggle-components-library.umd.min.js.map +1 -1
  15. package/package.json +11 -11
  16. package/src/.DS_Store +0 -0
  17. package/src/assets/icons/airship-audiences-hover.svg +9 -0
  18. package/src/assets/icons/airship-audiences.svg +9 -0
  19. package/src/assets/icons/airship-circle-user-icon-hover.svg +3 -0
  20. package/src/assets/icons/airship-circle-user-icon.svg +3 -0
  21. package/src/assets/icons/airship-user-icon-hover.svg +2 -2
  22. package/src/assets/icons/airship-user-icon.svg +2 -2
  23. package/src/assets/icons/airship-x-hover.svg +3 -0
  24. package/src/assets/icons/airship-x.svg +3 -0
  25. package/src/components/forms/ToggleInputImage.vue +10 -6
  26. package/src/components/forms/ToggleInputText.vue +6 -6
  27. package/src/components/json/char_list.json +2233 -0
  28. package/src/components/metrics/ToggleMetricBarChart.vue +7 -6
  29. package/src/components/metrics/ToggleMetricFunnelChart.vue +12 -3
  30. package/src/components/metrics/ToggleMetricPieChart.vue +15 -8
  31. package/src/components/metrics/ToggleMetricSingleMetric.vue +2 -4
  32. package/src/components/metrics/ToggleMetricSparkLine.vue +9 -7
  33. package/src/components/mixins/mixins.js +58 -23
  34. package/src/components/navs/multitiersidenav/ToggleMultiTierSideNav.vue +39 -3
  35. package/src/components/text/ToggleTextClipboardCopy.vue +10 -1
  36. package/src/index.js +2 -0
  37. package/src/sass/includes/_as_buttons.scss +1 -6
  38. package/src/sass/includes/_as_inputs.scss +11 -13
  39. package/src/sass/includes/_as_metrics.scss +28 -17
  40. package/src/sass/includes/_as_navs.scss +111 -6
  41. package/src/sass/includes/_as_table.scss +2 -1
  42. package/src/sass/includes/_as_text.scss +1 -1
@@ -69,8 +69,9 @@ export default {
69
69
  plotOptions: {
70
70
  bar: {
71
71
  borderRadius: 5,
72
- columnWidth: '60%',
73
- }
72
+ columnWidth: '85%',
73
+ distributed : false,
74
+ },
74
75
 
75
76
  },
76
77
  chart: {
@@ -112,17 +113,17 @@ export default {
112
113
 
113
114
  colors: this.colors ? this.colors : this.getDefaultColors(),
114
115
  legend: {
115
- horizontalAlign: 'left',
116
- offsetX: -12,
116
+ horizontalAlign: 'center',
117
117
  showForSingleSeries: true,
118
+ fontSize: '16px',
118
119
  markers: {
119
120
  width: 50,
121
+ height: 12,
120
122
  radius: 5,
121
- offsetY: 3
122
123
  },
123
124
 
124
125
  itemMargin: {
125
- horizontal: 5,
126
+ horizontal: 30,
126
127
  vertical: 0
127
128
  },
128
129
 
@@ -12,25 +12,34 @@
12
12
  <div class="funnel-spark-line funnel-grid-3">
13
13
  <slot name="sparkLine3"></slot>
14
14
  </div>
15
+ <div class="funnel-spark-line funnel-grid-4">
16
+ <slot name="sparkLine4"></slot>
17
+ </div>
15
18
 
16
- <div class="funnel-single-metric funnel-grid-4">
19
+ <div class="funnel-single-metric funnel-grid-5">
17
20
  <div class="funnel-single-metric-container">
18
21
  <slot name="funnel1" class="funnel-single-metric"></slot>
19
22
  </div>
20
23
  </div>
21
24
 
22
- <div class="funnel-single-metric funnel-grid-5">
25
+ <div class="funnel-single-metric funnel-grid-6">
23
26
  <div class="funnel-single-metric-container">
24
27
  <slot name="funnel2" class="funnel-single-metric"></slot>
25
28
  </div>
26
29
  </div>
27
30
 
28
- <div class="funnel-single-metric funnel-grid-6">
31
+ <div class="funnel-single-metric funnel-grid-7">
29
32
  <div class="funnel-single-metric-container">
30
33
  <slot name="funnel3" class="funnel-single-metric"></slot>
31
34
  </div>
32
35
  </div>
33
36
 
37
+ <div class="funnel-single-metric funnel-grid-8">
38
+ <div class="funnel-single-metric-container">
39
+ <slot name="funnel4" class="funnel-single-metric"></slot>
40
+ </div>
41
+ </div>
42
+
34
43
  </div>
35
44
  </template>
36
45
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div>
3
3
  <h3 class="toggle-metric metric-label">{{label}}</h3>
4
- <apexchart type="pie" :options="chartOptions" :series="values"></apexchart>
4
+ <apexchart type="pie" :height="height" :options="chartOptions" :series="values"></apexchart>
5
5
  </div>
6
6
 
7
7
  </template>
@@ -27,6 +27,13 @@ export default {
27
27
  type: Array,
28
28
  required: true
29
29
  },
30
+ /*
31
+ * Component's height
32
+ */
33
+ height: {
34
+ type: String,
35
+ default: ""
36
+ },
30
37
  /**
31
38
  * Component's main label
32
39
  */
@@ -52,14 +59,14 @@ export default {
52
59
  labels: this.labels,
53
60
  plotOptions: {
54
61
  pie: {
55
- customScale: 1,
62
+ distributed : false,
63
+ customScale: 0.7,
56
64
  dataLabels: {
57
- offset: -50
58
- }
59
-
65
+ offset: 100
66
+ }
60
67
  }
61
68
  },
62
- colors: this.colors ? this.colors : this.getDefaultColors(),
69
+ colors: this.colors ? this.colors : this.getDefaultColors(),
63
70
  dataLabels: {
64
71
  enabledOnSeries: true,
65
72
  formatter: function (val, {seriesIndex, w}) {
@@ -67,8 +74,8 @@ export default {
67
74
  },
68
75
  style: {
69
76
  colors: [this.getColor('black')],
70
- fontSize: '1rem',
71
- fontWeight: 300
77
+ fontSize: '1.1rem',
78
+ fontWeight: 'bold'
72
79
  },
73
80
  background: {
74
81
  enabled: false,
@@ -48,7 +48,6 @@ export default {
48
48
  */
49
49
  currencyCode:{
50
50
  type:String,
51
- required:false,
52
51
  default:'GBP'
53
52
  },
54
53
  /**
@@ -56,7 +55,6 @@ export default {
56
55
  */
57
56
  currencyLocale:{
58
57
  type:String,
59
- required:false,
60
58
  default:'en-GB'
61
59
  },
62
60
  /**
@@ -64,7 +62,7 @@ export default {
64
62
  */
65
63
  currencyDenomination: {
66
64
  type: Number,
67
- default: 100
65
+ default: 1
68
66
  }
69
67
  },
70
68
  computed: {
@@ -73,7 +71,7 @@ export default {
73
71
  * @return String
74
72
  */
75
73
  metricValue() {
76
- if (this.value == 0) {
74
+ if (this.value === null) {
77
75
  return "-";
78
76
  }
79
77
 
@@ -83,7 +83,6 @@ export default {
83
83
  */
84
84
  currencyCode:{
85
85
  type:String,
86
- required:false,
87
86
  default:'GBP'
88
87
  },
89
88
  /**
@@ -91,7 +90,6 @@ export default {
91
90
  */
92
91
  currencyLocale:{
93
92
  type:String,
94
- required:false,
95
93
  default:'en-GB'
96
94
  },
97
95
  /**
@@ -99,14 +97,14 @@ export default {
99
97
  */
100
98
  currencyDenomination: {
101
99
  type: Number,
102
- default: 100
100
+ default: 1
103
101
  },
104
102
  /**
105
103
  * Percentage base used to calculate the trend impact
106
104
  */
107
- trend_impact_percentage :{
105
+ trend_impact_base :{
108
106
  type: Number,
109
- default: 5
107
+ default: 0.5
110
108
  },
111
109
  /**
112
110
  * This prop will inverse the trend impact
@@ -136,6 +134,9 @@ export default {
136
134
  },
137
135
  stroke: {
138
136
  width: 5,
137
+ curve: 'smooth',
138
+ lineCap: 'butt',
139
+
139
140
  },
140
141
  grid: {
141
142
  padding: {
@@ -192,9 +193,10 @@ export default {
192
193
  if (this.sparkLineVal[0].data.length > 0) {
193
194
  // if the value is an object, map to array
194
195
 
195
- const trendImpactVals = this.sparkLineVal[0].data[0].y ? this.sparkLineVal[0].data.map(data => data.y) : this.sparkLineVal[0].data;
196
+ const trendImpactVals = this.sparkLineVal[0].data[0].y || this.sparkLineVal[0].data[0].y === 0 ? this.sparkLineVal[0].data.map(data => data.y) : this.sparkLineVal[0].data;
197
+
198
+ let result = this.calcTrendImpact(trendImpactVals, this.trend_impact_base);
196
199
 
197
- let result = this.calcTrendImpact(trendImpactVals, this.trend_impact_percentage);
198
200
  if (this.inverse_trend_impact === true && result != false)
199
201
  return result *-1;
200
202
  else
@@ -1,8 +1,11 @@
1
1
  import styleInfo from '../../../src/sass/includes/_as_variables.scss';
2
+ import jsonCharCodesData from '../json/char_list.json';
2
3
 
3
4
  export const mixins = {
4
5
  data(){
5
- return {}
6
+ return {
7
+ jsonCharCodes: jsonCharCodesData
8
+ }
6
9
  },
7
10
  methods:{
8
11
 
@@ -59,6 +62,20 @@ export const mixins = {
59
62
 
60
63
  //converts a character into an HTML entity
61
64
  const char2Html = (char) => {
65
+ // Check for special characters first
66
+ let codepointVals = Object.values(this.jsonCharCodes).map(value => value.codepoints[0]);
67
+
68
+ let codesArray = Object.entries(this.jsonCharCodes)
69
+
70
+ if (codepointVals.includes(char.codePointAt())) {
71
+
72
+ let namedChar = codesArray.filter(nestedArr => {
73
+ return nestedArr[1].codepoints[0] == char.codePointAt()
74
+ })
75
+ // If it's a special character return now
76
+ return `${namedChar[0][0]}`
77
+ }
78
+
62
79
  let item = `${char}`;
63
80
 
64
81
  //spread operator can detect emoji surrogate pairs
@@ -108,7 +125,7 @@ export const charts = {
108
125
  return {
109
126
 
110
127
  defcolors: [
111
- '#FF9494','#FFCA8A','#FCFF9D','#B2FFA2','#81F4FF','#85B4FF','#A898FF'
128
+ '#85B4FF', '#81F4FF', '#A898FF'
112
129
  ]
113
130
  }
114
131
  },
@@ -122,41 +139,59 @@ export const charts = {
122
139
  *
123
140
  * @return { {Integer} 1, 0,-1 }
124
141
  */
125
- calcTrendImpact(values, percentageBase){
142
+ calcTrendImpact(values, trend_impact_base){
126
143
 
127
144
  // If all values in the values array are 0 return 0;
128
145
  if (values.every((val) => val === 0)){
129
- return 0;
146
+ return false;
130
147
  }
131
148
 
132
- let sum = 0
133
- values.forEach(val => {
134
- sum = sum + val;
135
- });
136
-
137
- let average = sum/values.length;
149
+ let regressionCalc = this.calculateLinearRegression(values);
138
150
 
139
- // the acceptable difference before it's trending positive or negatively
140
- let difference = average/100 * percentageBase;
151
+ if (regressionCalc >= trend_impact_base){
152
+ return 1;
153
+ } else if (regressionCalc < -trend_impact_base) {
154
+ return -1;
155
+ } else {
156
+ return 0;
157
+ }
158
+ },
141
159
 
142
- // lower 'keeping steady value'
143
- let lower_base = average-difference;
144
- // higher 'keeping steady value'
145
- let upper_base = average+difference;
160
+ /*
161
+ * Calculates the linear regression for the trend impact
162
+ *
163
+ * @param {Array} [nums] [the array of values to be calculated]
164
+ * @return {Integer}
165
+ */
166
+ calculateLinearRegression(nums) {
167
+ let summed_nums = 0;
168
+ nums.forEach(val => {
169
+ summed_nums = summed_nums + val;
170
+ });
146
171
 
147
- let last_value = values[values.length - 1];
172
+ let multiplied_data = 0;
173
+ let summed_index = 0;
174
+ let squared_index = 0;
148
175
 
149
- if(last_value >= upper_base)
150
- return 1;
151
- if(last_value <= lower_base)
152
- return -1;
153
- return 0;
176
+ nums.forEach((num, index) => {
177
+ index += 1;
178
+ multiplied_data += index * num;
179
+ summed_index += index;
180
+ squared_index += index**2;
181
+ });
154
182
 
183
+ let numerator = ( (nums.length) * multiplied_data) - (summed_nums * summed_index);
184
+ let denominator = ( (nums.length) * squared_index) - summed_index**2;
185
+
186
+ if (denominator != 0)
187
+ return numerator/denominator;
188
+ else
189
+ return 0;
155
190
  },
156
191
 
157
192
  //return an array of default colors
158
193
  getDefaultColors() {
159
- return this.$data.defcolors.sort(() => Math.random() - 0.5);
194
+ return this.$data.defcolors;
160
195
  },
161
196
 
162
197
  //return a specific color
@@ -3,7 +3,7 @@
3
3
  <img :src="logo.src" :alt="logo.alt" class="toggle-multi-tier-sidenav-logo">
4
4
  <ul class="toggle-multi-tier-sidenav-ul">
5
5
  <!-- @slot For ToggleSideNavItems -->
6
- <slot></slot>
6
+ <slot name="nav-items"></slot>
7
7
  </ul>
8
8
 
9
9
  <div class="toggle-multi-tier-sidenav-divider"></div>
@@ -14,10 +14,22 @@
14
14
 
15
15
 
16
16
  <div class="toggle-multi-tier-sidenav-select-container">
17
- <ToggleInputSelect type="text" placeholder="placeholder text" label="Location" :options="unitOptions" v-model="unitOptionVal" />
17
+ <ToggleInputSelect type="text" placeholder="placeholder text" label="Location" :options="unitOptionsSorted" v-model="unitOptionVal" />
18
18
  </div>
19
19
 
20
- <div class="toggle-multi-tier-sidenav-user-icon"></div>
20
+ <div v-if="userMenuOpen" class="toggle-multi-tier-sidenav-user-menu-container">
21
+ <div class="toggle-multi-tier-sidenav-user-menu">
22
+ <ToggleHeaderTextLarge class="toggle-multi-tier-sidenav-user-name">
23
+ {{ user }}
24
+ </ToggleHeaderTextLarge>
25
+ <div class="toggle-multi-tier-sidenav-user-menu-divider"></div>
26
+ <ul class="toggle-multi-tier-sidenav-user-menu-ul">
27
+ <slot name="user-menu"></slot>
28
+ </ul>
29
+ </div>
30
+ </div>
31
+ <div @click="userMenuOpen = !userMenuOpen" :class="userMenuOpen ? 'toggle-multi-tier-sidenav-user-icon-menu-open' : 'toggle-multi-tier-sidenav-user-icon'">
32
+ </div>
21
33
  </nav>
22
34
  </template>
23
35
 
@@ -28,6 +40,11 @@ import ToggleInputSelect from '../../forms/ToggleInputSelect.vue';
28
40
 
29
41
  export default {
30
42
  name: 'ToggleMultiTierSideNav',
43
+ data() {
44
+ return {
45
+ userMenuOpen: false,
46
+ }
47
+ },
31
48
  props: {
32
49
  value: {},
33
50
  /**
@@ -44,6 +61,13 @@ export default {
44
61
  type: String,
45
62
  default: 'Airship'
46
63
  },
64
+ /**
65
+ * Name of the user, displayed in the user menu
66
+ */
67
+ user: {
68
+ type: String,
69
+ default: 'User'
70
+ },
47
71
  unitOptions: {
48
72
  type: Array,
49
73
  required: true
@@ -58,7 +82,19 @@ export default {
58
82
  set: function (value) {
59
83
  this.$emit('input', value);
60
84
  }
85
+ },
86
+
87
+ unitOptionsSorted() {
88
+ // Create a new array and populate it with the elements from the original unitOptions array
89
+ const sortedUnitOptions = [...this.unitOptions];
90
+
91
+ // Sort the new array in ascending alphabetical order according to the label property of each element
92
+ sortedUnitOptions.sort((a, b) => a.label.localeCompare(b.label));
93
+
94
+ // Return the new sorted array
95
+ return sortedUnitOptions;
61
96
  }
97
+
62
98
  },
63
99
  components: {
64
100
  ToggleHeaderTextLarge,
@@ -45,7 +45,16 @@ export default {
45
45
  window.getSelection().removeAllRanges();
46
46
  window.getSelection().addRange(range);
47
47
  document.execCommand("copy");
48
- }
48
+ this.click();
49
+ },
50
+ click(){
51
+ /**
52
+ * Emitted when the button is clicked.
53
+ * @event click
54
+ * @type {Event}
55
+ */
56
+ this.$emit('click');
57
+ }
49
58
  }
50
59
  };
51
60
  </script>
package/src/index.js CHANGED
@@ -25,6 +25,7 @@ import ToggleModal from "./components/modals/ToggleModal.vue";
25
25
  import ToggleInputSearch from "./components/forms/ToggleInputSearch.vue";
26
26
  import ToggleInputRadioButtonGroup from "./components/forms/ToggleInputRadioButtonGroup.vue";
27
27
  import ToggleButton from "./components/buttons/ToggleButton.vue";
28
+ import ToggleLoginButton from "./components/buttons/ToggleLoginButton.vue";
28
29
  import ToggleFillLoader from "./components/loaders/ToggleFillLoader.vue";
29
30
 
30
31
 
@@ -90,6 +91,7 @@ const Components = {
90
91
  ToggleFillLoader,
91
92
  ToggleInputImage,
92
93
  ToggleButton,
94
+ ToggleLoginButton,
93
95
  ToggleInputGroup,
94
96
  ToggleHeaderTextLarge,
95
97
  ToggleInputNumber,
@@ -18,7 +18,6 @@
18
18
  .toggle-button-container{
19
19
  background:white;
20
20
  display: inline-block;
21
-
22
21
  border-radius: 0.3rem;
23
22
  &--login{
24
23
  border-radius: 23px;
@@ -145,7 +144,7 @@
145
144
  background-image: url("../assets/icons/delete-grey.svg");
146
145
  }
147
146
 
148
- // Neutral Button styles
147
+ // Neutral Button styls
149
148
  .toggle-button.neutral, .toggle-button-a.neutral a{
150
149
  color: $toggle-button-neutral;
151
150
  border-color: $toggle-button-neutral;
@@ -157,10 +156,6 @@
157
156
  .toggle-button.neutral:disabled, .toggle-button-a.disabled a{
158
157
  }
159
158
 
160
-
161
-
162
-
163
-
164
159
  // Mini buttons
165
160
  //
166
161
  .toggle-button-container-mini{
@@ -154,8 +154,8 @@
154
154
  font-size: $toggle-font-size-small;
155
155
  color : $toggle-error-red !important;
156
156
  display : block;
157
- margin-top: 1rem;
158
- margin-bottom: -1.1rem;
157
+ position : absolute;
158
+ bottom : 0.3rem;
159
159
  }
160
160
 
161
161
  // date picker
@@ -280,7 +280,7 @@
280
280
 
281
281
  .toggle-input-select {
282
282
  padding: 0rem;
283
- font-size: 1.1rem;
283
+ font-size: 0.9rem;
284
284
  }
285
285
  }
286
286
 
@@ -507,20 +507,20 @@ $iconWidth:20px;
507
507
  background-size: cover !important;
508
508
  background-position: center;
509
509
  border-radius:4px;
510
- cursor: move;
511
510
  }
512
- .toggle-item-img::after{
511
+ .toggle-center {
512
+ display: flex;
513
+ align-items: center;
514
+ justify-content: center;
515
+ }
516
+ .toggle-move-icon::after {
513
517
  position: absolute;
514
518
  content:'';
515
519
  height: 100%;
516
520
  width: 100%;
521
+ background-size: $iconWidth!important;
517
522
  background: url('../assets/icons/draggable.svg') no-repeat center center;
518
- background-size: $iconWidth;
519
- }
520
- .toggle-center {
521
- display: flex;
522
- align-items: center;
523
- justify-content: center;
523
+ cursor: move;
524
524
  }
525
525
 
526
526
  }
@@ -893,8 +893,6 @@ $iconWidth:20px;
893
893
  }
894
894
 
895
895
  .toggle-input-label-error {
896
- margin-top: 0rem;
897
- margin-bottom: 0rem;
898
896
  position: absolute;
899
897
  bottom:-17px;
900
898
  }
@@ -22,20 +22,20 @@
22
22
  /* Funnel */
23
23
  .toggle-metric-funnel-container {
24
24
  grid-template-rows: auto;
25
- grid-template-columns: 1fr 1fr 1fr;
25
+ grid-template-columns: 1fr 1fr 1fr 1fr;
26
26
  display: grid;
27
27
  grid-auto-flow: column;
28
28
 
29
29
  }
30
30
 
31
31
  .funnel-grid-svg {
32
- min-height: 13rem;
33
- background: transparent url('../assets/img/funnel.svg') no-repeat padding-box bottom;
34
- background-size: 100% 100%;
32
+ min-height: 12rem;
33
+ background: transparent url('../assets/img/funnel.svg') no-repeat padding-box center;
34
+ background-size: 100% auto;
35
35
  grid-row-start: 2;
36
36
  grid-column-start: 1;
37
37
  grid-row-end: 3;
38
- grid-column-end: 4;
38
+ grid-column-end: 5;
39
39
  }
40
40
 
41
41
  .funnel-grid-1 {
@@ -60,6 +60,13 @@
60
60
  }
61
61
 
62
62
  .funnel-grid-4 {
63
+ grid-row-start: 1;
64
+ grid-column-start: 4;
65
+ grid-row-end: 2;
66
+ grid-column-end: 5;
67
+ }
68
+
69
+ .funnel-grid-5 {
63
70
  grid-row-start: 2;
64
71
  grid-column-start: 1;
65
72
  grid-row-end: 3;
@@ -67,7 +74,7 @@
67
74
  display: flex;
68
75
  }
69
76
 
70
- .funnel-grid-5 {
77
+ .funnel-grid-6 {
71
78
  grid-row-start: 2;
72
79
  grid-column-start: 2;
73
80
  grid-row-end: 3;
@@ -75,7 +82,7 @@
75
82
  display: flex;
76
83
  }
77
84
 
78
- .funnel-grid-6 {
85
+ .funnel-grid-7 {
79
86
  grid-row-start: 2;
80
87
  grid-column-start: 3;
81
88
  grid-row-end: 3;
@@ -83,11 +90,19 @@
83
90
  display: flex;
84
91
  }
85
92
 
93
+ .funnel-grid-8 {
94
+ grid-row-start: 2;
95
+ grid-column-start: 4;
96
+ grid-row-end: 3;
97
+ grid-column-end: 5;
98
+ display: flex;
99
+ }
100
+
86
101
  .funnel-spark-line, .funnel-single-metric {
87
102
  margin-right: 1rem;
88
103
  border-right: 1px solid #BCDBEE;
89
104
 
90
- &:nth-child(4), &:last-child {
105
+ &:nth-child(5), &:last-child {
91
106
  border: 0;
92
107
  }
93
108
  }
@@ -97,13 +112,9 @@
97
112
  }
98
113
 
99
114
  .funnel-single-metric-container {
100
- margin-left: 40%;
101
- align-self: center;
102
- }
103
-
104
- @media (min-width: $toggle-breakpoint-large-desktop) {
105
- .funnel-grid-svg {
106
- min-height: 15rem;
107
- background-size: 100%;
108
- }
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: center;
118
+ justify-content: center;
119
+ width: 100%;
109
120
  }