@icij/murmur-next 4.0.1 → 4.0.4

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 (62) hide show
  1. package/lib/components/AccordionStep.vue +53 -42
  2. package/lib/components/AccordionWrapper.vue +25 -24
  3. package/lib/components/ActiveTextTruncate.vue +44 -22
  4. package/lib/components/AdvancedLinkForm.vue +96 -46
  5. package/lib/components/Brand.vue +30 -23
  6. package/lib/components/BrandExpansion.vue +12 -3
  7. package/lib/components/ConfirmButton.vue +30 -26
  8. package/lib/components/ContentPlaceholder.vue +11 -7
  9. package/lib/components/CustomPagination.vue +50 -32
  10. package/lib/components/DigitsInput.vue +64 -60
  11. package/lib/components/DonateForm.vue +112 -83
  12. package/lib/components/EmbedForm.vue +37 -21
  13. package/lib/components/EmbeddableFooter.vue +14 -10
  14. package/lib/components/FollowUsPopover.vue +42 -40
  15. package/lib/components/GenericFooter.vue +98 -23
  16. package/lib/components/GenericHeader.vue +66 -29
  17. package/lib/components/HapticCopy.vue +41 -29
  18. package/lib/components/ImddbHeader.vue +113 -92
  19. package/lib/components/OrdinalLegend.vue +43 -20
  20. package/lib/components/RangePicker.vue +63 -42
  21. package/lib/components/ResponsiveIframe.vue +9 -2
  22. package/lib/components/ScaleLegend.vue +56 -18
  23. package/lib/components/SecretInput.vue +7 -8
  24. package/lib/components/SelectableDropdown.vue +120 -74
  25. package/lib/components/SharingOptions.vue +93 -36
  26. package/lib/components/SharingOptionsLink.vue +11 -5
  27. package/lib/components/SignUpForm.vue +44 -23
  28. package/lib/components/SlideUpDown.vue +7 -2
  29. package/lib/components/TexturedDeck.vue +24 -14
  30. package/lib/components/TinyPagination.vue +35 -22
  31. package/lib/composables/chart.ts +174 -157
  32. package/lib/composables/resizeObserver.ts +29 -29
  33. package/lib/composables/sendEmail.ts +53 -42
  34. package/lib/config.default.ts +17 -10
  35. package/lib/config.ts +34 -27
  36. package/lib/datavisualisations/BarChart.vue +48 -42
  37. package/lib/datavisualisations/ColumnChart.vue +133 -89
  38. package/lib/datavisualisations/LineChart.vue +79 -57
  39. package/lib/datavisualisations/StackedBarChart.vue +116 -68
  40. package/lib/datavisualisations/StackedColumnChart.vue +196 -115
  41. package/lib/enums.ts +25 -15
  42. package/lib/i18n.ts +3 -3
  43. package/lib/keys.ts +2 -2
  44. package/lib/main.ts +14 -10
  45. package/lib/maps/ChoroplethMap.vue +299 -160
  46. package/lib/maps/ChoroplethMapAnnotation.vue +29 -18
  47. package/lib/maps/SymbolMap.vue +194 -123
  48. package/lib/shims-bootstrap-vue.d.ts +1 -1
  49. package/lib/shims-vue.d.ts +3 -3
  50. package/lib/styles/functions.scss +10 -6
  51. package/lib/styles/lib.scss +2 -4
  52. package/lib/styles/mixins.scss +8 -8
  53. package/lib/styles/utilities.scss +1 -1
  54. package/lib/styles/variables.scss +24 -18
  55. package/lib/types.ts +26 -10
  56. package/lib/utils/animation.ts +4 -4
  57. package/lib/utils/assets.ts +31 -28
  58. package/lib/utils/clipboard.ts +16 -10
  59. package/lib/utils/iframe-resizer.ts +18 -13
  60. package/lib/utils/placeholder.ts +54 -23
  61. package/lib/utils/placeholderTypes.ts +3 -3
  62. package/package.json +7 -2
@@ -5,14 +5,14 @@ import sortBy from 'lodash/sortBy'
5
5
  import forEach from 'lodash/forEach'
6
6
 
7
7
  import config from '../config'
8
- import {useI18n} from "vue-i18n";
9
- import {computed, ref, watch} from "vue";
8
+ import { useI18n } from 'vue-i18n'
9
+ import { computed, ref, watch } from 'vue'
10
10
 
11
11
  /**
12
12
  * A form to encourage donations. We usually put this form inside a modal
13
13
  */
14
14
  export default {
15
- name: 'DonateForm',
15
+ name: 'DonateForm',
16
16
  props: {
17
17
  /**
18
18
  * Title of the form.
@@ -21,8 +21,8 @@ name: 'DonateForm',
21
21
  type: Boolean
22
22
  }
23
23
  },
24
- setup(){
25
- const {t, locale, messages} = useI18n()
24
+ setup() {
25
+ const { t, locale, messages } = useI18n()
26
26
  const amount = ref(10)
27
27
  // True if the amount wasn't changed by the user yet
28
28
  const amountIsPristine = ref(true)
@@ -42,29 +42,31 @@ name: 'DonateForm',
42
42
  }
43
43
  })
44
44
 
45
- const suggestedAmount = ref(messages.value[locale.value]['donate-form']["suggesteddonation"])
46
- const listBenefits = ref(messages.value[locale.value]['donate-form']["benefits"]["list"])
47
- const ranges = computed(()=> {
48
- if(installmentPeriod.value==='onetime'){
45
+ const suggestedAmount = ref(
46
+ messages.value[locale.value]['donate-form']['suggesteddonation']
47
+ )
48
+ const listBenefits = ref(
49
+ messages.value[locale.value]['donate-form']['benefits']['list']
50
+ )
51
+ const ranges = computed(() => {
52
+ if (installmentPeriod.value === 'onetime') {
49
53
  return labelForChange.value['yearly']
50
54
  }
51
55
  return labelForChange.value[installmentPeriod.value]
52
56
  })
53
- const firstRange = computed(()=> {
57
+ const firstRange = computed(() => {
54
58
  const key = keys(ranges.value)[0]
55
59
  return ranges.value[key]
56
60
  })
57
- const changeThe = computed(()=> {
58
- // Final label
59
- let label = null
60
- forEach(sortBy(map(keys(ranges.value), Number)), (amountV) => {
61
- label = amount.value >= amountV ? ranges.value[amountV] : label
62
- })
63
- return label
64
- }
65
-
66
- )
67
- watch(installmentPeriod,() => {
61
+ const changeThe = computed(() => {
62
+ // Final label
63
+ let label = null
64
+ forEach(sortBy(map(keys(ranges.value), Number)), (amountV) => {
65
+ label = amount.value >= amountV ? ranges.value[amountV] : label
66
+ })
67
+ return label
68
+ })
69
+ watch(installmentPeriod, () => {
68
70
  if (!amountIsPristine.value) {
69
71
  return
70
72
  }
@@ -72,12 +74,14 @@ name: 'DonateForm',
72
74
  // Set suggested amount
73
75
  amount.value = getSuggestedAmount()
74
76
  })
75
- watch(()=>amount.value,(v) => {
76
- level.value = changeThe.value
77
+ watch(
78
+ () => amount.value,
79
+ (v) => {
80
+ level.value = changeThe.value
77
81
 
78
- // Set manual amount
79
- return (amount.value = v)
80
- }
82
+ // Set manual amount
83
+ return (amount.value = v)
84
+ }
81
85
  )
82
86
  function getSuggestedAmount() {
83
87
  if (!amountIsPristine.value) {
@@ -98,7 +102,7 @@ name: 'DonateForm',
98
102
  // Set suggested amount
99
103
  amount.value = getSuggestedAmount()
100
104
  }
101
- function amountIsNotPristine(){
105
+ function amountIsNotPristine() {
102
106
  amountIsPristine.value = false
103
107
  }
104
108
 
@@ -114,84 +118,96 @@ name: 'DonateForm',
114
118
  selectLevel,
115
119
  amountIsNotPristine
116
120
  }
117
-
118
- },
119
-
121
+ }
120
122
  }
121
123
  </script>
122
124
 
123
125
  <template>
124
126
  <div class="donate-form container-fluid py-2">
125
- <h2 v-if="!noTitle" class="donate-form__title text-uppercase fw-bold text-primary h5">
127
+ <h2
128
+ v-if="!noTitle"
129
+ class="donate-form__title text-uppercase fw-bold text-primary h5"
130
+ >
126
131
  {{ t('donate-form.support') }}
127
132
  </h2>
128
133
  <!-- @slot Description of the form (bellow the title). -->
129
134
  <slot name="introduction">
130
135
  <!-- eslint-disable vue/no-v-html -->
131
- <p class="donate-form__introduction" v-html="t('donate-form.introduction')" />
136
+ <p
137
+ class="donate-form__introduction"
138
+ v-html="t('donate-form.introduction')"
139
+ />
132
140
  <!-- eslint-enable -->
133
141
  </slot>
134
142
 
135
143
  <div class="donate-form__payment mb-4 text-center">
136
144
  <form
137
- action="//checkout.fundjournalism.org/memberform"
138
- method="get"
139
- target="_blank"
140
- class="donate-form__payment__form bg-light p-4"
145
+ action="//checkout.fundjournalism.org/memberform"
146
+ method="get"
147
+ target="_blank"
148
+ class="donate-form__payment__form bg-light p-4"
141
149
  >
142
150
  <div class="donate-form__payment__levels row">
143
151
  <div
144
- class="col donate-form__payment__level"
145
- :class="{ active: level === 'conversation' }"
146
- @click="selectLevel('conversation')"
152
+ class="col donate-form__payment__level"
153
+ :class="{ active: level === 'conversation' }"
154
+ @click="selectLevel('conversation')"
147
155
  >
148
- <h3 class="donate-form__payment__heading text-uppercase fw-bold text-primary h5">
156
+ <h3
157
+ class="donate-form__payment__heading text-uppercase fw-bold text-primary h5"
158
+ >
149
159
  {{ t('donate-form.benefits.impacts.conversation.heading') }}
150
160
  </h3>
151
161
  <div class="Article">
152
162
  <div>
153
163
  <!-- eslint-disable vue/no-v-html -->
154
164
  <p
155
- class="donate-form__payment__highlight text-icij fw-bold"
156
- v-html="t('donate-form.benefits.impacts.conversation.highlight')"
165
+ class="donate-form__payment__highlight text-icij fw-bold"
166
+ v-html="
167
+ t('donate-form.benefits.impacts.conversation.highlight')
168
+ "
157
169
  />
158
170
  <!-- eslint-enable -->
159
171
  </div>
160
172
  </div>
161
173
  </div>
162
174
  <div
163
- class="col donate-form__payment__level"
164
- :class="{ active: level === 'rules' }"
165
- @click="selectLevel('rules')"
175
+ class="col donate-form__payment__level"
176
+ :class="{ active: level === 'rules' }"
177
+ @click="selectLevel('rules')"
166
178
  >
167
- <h3 class="donate-form__payment__heading text-uppercase fw-bold text-primary h5">
179
+ <h3
180
+ class="donate-form__payment__heading text-uppercase fw-bold text-primary h5"
181
+ >
168
182
  {{ t('donate-form.benefits.impacts.rules.heading') }}
169
183
  </h3>
170
184
  <div class="Article">
171
185
  <div>
172
186
  <!-- eslint-disable vue/no-v-html -->
173
187
  <p
174
- class="donate-form__payment__highlight text-icij fw-bold"
175
- v-html="t('donate-form.benefits.impacts.rules.highlight')"
188
+ class="donate-form__payment__highlight text-icij fw-bold"
189
+ v-html="t('donate-form.benefits.impacts.rules.highlight')"
176
190
  />
177
191
  <!-- eslint-enable -->
178
192
  </div>
179
193
  </div>
180
194
  </div>
181
195
  <div
182
- class="col donate-form__payment__level"
183
- :class="{ active: level === 'world' }"
184
- @click="selectLevel('world')"
196
+ class="col donate-form__payment__level"
197
+ :class="{ active: level === 'world' }"
198
+ @click="selectLevel('world')"
185
199
  >
186
- <h3 class="donate-form__payment__heading text-uppercase fw-bold text-primary h5">
200
+ <h3
201
+ class="donate-form__payment__heading text-uppercase fw-bold text-primary h5"
202
+ >
187
203
  {{ t('donate-form.benefits.impacts.world.heading') }}
188
204
  </h3>
189
205
  <div class="Article">
190
206
  <div>
191
207
  <!-- eslint-disable vue/no-v-html -->
192
208
  <p
193
- class="donate-form__payment__highlight text-icij fw-bold"
194
- v-html="t('donate-form.benefits.impacts.world.highlight')"
209
+ class="donate-form__payment__highlight text-icij fw-bold"
210
+ v-html="t('donate-form.benefits.impacts.world.highlight')"
195
211
  />
196
212
  <!-- eslint-enable -->
197
213
  </div>
@@ -203,26 +219,26 @@ name: 'DonateForm',
203
219
  <div class="mt-5">
204
220
  <span class="donate-form__payment__buttons">
205
221
  <button
206
- type="button"
207
- class="btn btn-sm frequency-monthly"
208
- :class="{ 'btn-primary': installmentPeriod === 'monthly' }"
209
- @click="installmentPeriod = 'monthly'"
222
+ type="button"
223
+ class="btn btn-sm frequency-monthly"
224
+ :class="{ 'btn-primary': installmentPeriod === 'monthly' }"
225
+ @click="installmentPeriod = 'monthly'"
210
226
  >
211
227
  {{ t('donate-form.frequency.monthly') }}
212
228
  </button>
213
229
  <button
214
- type="button"
215
- class="btn btn-sm frequency-yearly"
216
- :class="{ 'btn-primary': installmentPeriod === 'yearly' }"
217
- @click="installmentPeriod = 'yearly'"
230
+ type="button"
231
+ class="btn btn-sm frequency-yearly"
232
+ :class="{ 'btn-primary': installmentPeriod === 'yearly' }"
233
+ @click="installmentPeriod = 'yearly'"
218
234
  >
219
235
  {{ t('donate-form.frequency.yearly') }}
220
236
  </button>
221
237
  <button
222
- type="button"
223
- class="btn btn-sm frequency-onetime"
224
- :class="{ 'btn-primary': installmentPeriod === null }"
225
- @click="installmentPeriod = 'onetime'"
238
+ type="button"
239
+ class="btn btn-sm frequency-onetime"
240
+ :class="{ 'btn-primary': installmentPeriod === null }"
241
+ @click="installmentPeriod = 'onetime'"
226
242
  >
227
243
  {{ t('donate-form.frequency.onetime') }}
228
244
  </button>
@@ -230,28 +246,41 @@ name: 'DonateForm',
230
246
  </div>
231
247
  <div class="mt-4">
232
248
  <span>{{ t('donate-form.label') }}&nbsp;</span>
233
- <label class="donate-form__payment__unit input-group input-group-sm d-inline-flex">
249
+ <label
250
+ class="donate-form__payment__unit input-group input-group-sm d-inline-flex"
251
+ >
234
252
  <span class="input-group-prepend">
235
253
  <span class="input-group-text">$</span>
236
254
  </span>
237
255
  <input
238
- v-model="amount"
239
- class="donate-form__payment__input form-control"
240
- name="amount"
241
- type="number"
242
- min="0"
243
- @change="amountIsNotPristine"
256
+ v-model="amount"
257
+ class="donate-form__payment__input form-control"
258
+ name="amount"
259
+ type="number"
260
+ min="0"
261
+ @change="amountIsNotPristine"
244
262
  />
245
263
  </label>
246
264
  </div>
247
265
  <div class="mt-4">
248
266
  <input name="org_id" value="icij" type="hidden" />
249
267
  <input v-model="campaign" name="campaign" type="hidden" />
250
- <input v-model="installmentPeriod" name="installmentPeriod" type="hidden" />
251
- <button type="submit" class="btn btn-primary rounded-pill text-uppercase fw-bold">
268
+ <input
269
+ v-model="installmentPeriod"
270
+ name="installmentPeriod"
271
+ type="hidden"
272
+ />
273
+ <button
274
+ type="submit"
275
+ class="btn btn-primary rounded-pill text-uppercase fw-bold"
276
+ >
252
277
  {{ t('donate-form.submit') }}
253
278
  </button>
254
- <a target="_blank" href="https://icij.org/donate" class="donate-form__payment__image" />
279
+ <a
280
+ target="_blank"
281
+ href="https://icij.org/donate"
282
+ class="donate-form__payment__image"
283
+ />
255
284
  </div>
256
285
  </div>
257
286
  </form>
@@ -267,10 +296,10 @@ name: 'DonateForm',
267
296
  <div>
268
297
  <ul class="donate-form__insider__list">
269
298
  <li
270
- v-for="(benefit, index) in listBenefits"
271
- :key="index"
272
- class="donate-form__insider__list-item"
273
- v-html="benefit"
299
+ v-for="(benefit, index) in listBenefits"
300
+ :key="index"
301
+ class="donate-form__insider__list-item"
302
+ v-html="benefit"
274
303
  />
275
304
  </ul>
276
305
  </div>
@@ -278,9 +307,9 @@ name: 'DonateForm',
278
307
  <hr class="donate-form__insider__separator" />
279
308
  <div class="donate-form__insider__more text-center">
280
309
  <a
281
- target="_blank"
282
- href="https://icij.org/donate"
283
- class="btn btn-primary rounded-pill text-uppercase fw-bold py-2"
310
+ target="_blank"
311
+ href="https://icij.org/donate"
312
+ class="btn btn-primary rounded-pill text-uppercase fw-bold py-2"
284
313
  >
285
314
  {{ t('donate-form.benefits.more') }}
286
315
  </a>
@@ -9,15 +9,26 @@
9
9
  <p>
10
10
  {{ t('embed-form.introduction') }}
11
11
  </p>
12
- <textarea ref='embed-form__code' class="form-control embed-form__code mb-2" readonly :value="embedCode()" @click="selectCode" />
12
+ <textarea
13
+ ref="embed-form__code"
14
+ class="form-control embed-form__code mb-2"
15
+ readonly
16
+ :value="embedCode()"
17
+ @click="selectCode"
18
+ />
13
19
 
14
20
  <div class="d-flex justify-content-between">
15
- <div class="form-check align-self-end">
16
- <input type="checkbox" class="form-check-input" id="responsiveOptin" v-model="responsiveCheck" />
17
- <label class="form-check-label fw-bold" for="responsiveOptin">
18
- {{ t('embed-form.responsive-optin') }}
19
- </label>
20
- </div>
21
+ <div class="form-check align-self-end">
22
+ <input
23
+ type="checkbox"
24
+ class="form-check-input"
25
+ id="responsiveOptin"
26
+ v-model="responsiveCheck"
27
+ />
28
+ <label class="form-check-label fw-bold" for="responsiveOptin">
29
+ {{ t('embed-form.responsive-optin') }}
30
+ </label>
31
+ </div>
21
32
 
22
33
  <haptic-copy
23
34
  class="btn-link btn-sm text-uppercase fw-bold"
@@ -27,7 +38,10 @@
27
38
  />
28
39
  </div>
29
40
  </div>
30
- <div v-if="!noPreview" class="col-7 d-none d-lg-block embed-form__preview">
41
+ <div
42
+ v-if="!noPreview"
43
+ class="col-7 d-none d-lg-block embed-form__preview"
44
+ >
31
45
  <!-- eslint-disable vue/no-v-html -->
32
46
  <span v-html="embedCode(false)" />
33
47
  <!-- eslint-enable -->
@@ -38,9 +52,9 @@
38
52
  </template>
39
53
 
40
54
  <script lang="ts">
41
- import {computed, defineComponent, ref} from 'vue'
55
+ import { computed, defineComponent, ref } from 'vue'
42
56
 
43
- import {useI18n} from "vue-i18n";
57
+ import { useI18n } from 'vue-i18n'
44
58
  import HapticCopy from '@/components/HapticCopy.vue'
45
59
  import IframeResizer from '@/utils/iframe-resizer'
46
60
 
@@ -58,7 +72,7 @@ interface ComponentInterface {
58
72
  * Embed Form
59
73
  */
60
74
  export default defineComponent({
61
- name: 'EmbedForm',
75
+ name: 'EmbedForm',
62
76
  components: {
63
77
  HapticCopy
64
78
  },
@@ -111,18 +125,17 @@ name: 'EmbedForm',
111
125
  default: null
112
126
  }
113
127
  },
114
- setup(props)
115
- {
116
- const {t} = useI18n()
128
+ setup(props) {
129
+ const { t } = useI18n()
117
130
 
118
131
  const responsiveCheck = ref(false)
119
- const embedFormCode = ref<HTMLTextAreaElement|null>(null)
120
- const currentUrl = computed(()=> {
132
+ const embedFormCode = ref<HTMLTextAreaElement | null>(null)
133
+ const currentUrl = computed(() => {
121
134
  return props.url || window.location.href
122
135
  })
123
136
  function iframeCodeFor(_url = currentUrl, width: string, height: string) {
124
137
  return `<iframe width="${width}" height="${height}" src="${IframeResizer.deletePymParams(
125
- props.url
138
+ props.url
126
139
  )}" frameborder="0" allowfullscreen></iframe>`
127
140
  }
128
141
  function pymCodeFor(url = currentUrl): string {
@@ -132,9 +145,14 @@ name: 'EmbedForm',
132
145
  embedFormCode.value?.select()
133
146
  }
134
147
  function embedCode(withPym = responsiveCheck.value): string {
135
- const width = typeof props.width === 'string' ? props.width : Math.max(props.width, props.minWidth).toString()
148
+ const width =
149
+ typeof props.width === 'string'
150
+ ? props.width
151
+ : Math.max(props.width, props.minWidth).toString()
136
152
  const height = Math.max(props.height, props.minHeight).toString()
137
- return withPym ? pymCodeFor(currentUrl) : iframeCodeFor(currentUrl, width, height)
153
+ return withPym
154
+ ? pymCodeFor(currentUrl)
155
+ : iframeCodeFor(currentUrl, width, height)
138
156
  }
139
157
 
140
158
  return {
@@ -155,8 +173,6 @@ name: 'EmbedForm',
155
173
  font-size: 0.9rem;
156
174
  overflow: auto;
157
175
 
158
-
159
-
160
176
  &__heading {
161
177
  font-size: 1.1em;
162
178
  text-transform: uppercase;
@@ -1,6 +1,10 @@
1
1
  <template>
2
2
  <div class="embeddable-footer p-2 text-nowrap">
3
- <a :href="homeUrl" target="_blank" class="text-white embeddable-footer__brand">
3
+ <a
4
+ :href="homeUrl"
5
+ target="_blank"
6
+ class="text-white embeddable-footer__brand"
7
+ >
4
8
  <brand :size="40" no-border class="me-2" color="white" />
5
9
  <!-- @slot Slot to redefine title display -->
6
10
  <slot name="title">
@@ -16,20 +20,20 @@
16
20
  <!-- @slot Overide the sharing button -->
17
21
  <slot name="sharing-button" v-bind="{ sharingOptionsValues }">
18
22
  <button
19
- class="btn btn-link text-white btn-sm py-0 embeddable-footer__share-btn"
20
- :class="{ active: showShareOptions }"
21
- @click="showShareOptions = !showShareOptions"
23
+ class="btn btn-link text-white btn-sm py-0 embeddable-footer__share-btn"
24
+ :class="{ active: showShareOptions }"
25
+ @click="showShareOptions = !showShareOptions"
22
26
  >
23
27
  <fa icon="share-alt" />
24
28
  <span class="sr-only">{{ $t('embeddable-footer.share') }}</span>
25
29
  </button>
26
30
  </slot>
27
31
  <sharing-options
28
- v-if="showShareOptions"
29
- :values="sharingOptionsValues"
30
- direction="column-reverse"
31
- :iframe-min-height="iframeMinHeight"
32
- :iframe-min-width="iframeMinWidth"
32
+ v-if="showShareOptions"
33
+ :values="sharingOptionsValues"
34
+ direction="column-reverse"
35
+ :iframe-min-height="iframeMinHeight"
36
+ :iframe-min-width="iframeMinWidth"
33
37
  />
34
38
  </div>
35
39
  </template>
@@ -52,7 +56,7 @@ type EmbeddableFooterData = {
52
56
  * EmbeddableFooter
53
57
  */
54
58
  export default defineComponent({
55
- name: 'EmbeddableFooter',
59
+ name: 'EmbeddableFooter',
56
60
  components: {
57
61
  Fa,
58
62
  SharingOptions,
@@ -1,6 +1,9 @@
1
1
  <template>
2
2
  <div class="follow-us">
3
- <button class="btn btn-link text-light follow-us__close" @click="closeSignupPopover">
3
+ <button
4
+ class="btn btn-link text-light follow-us__close"
5
+ @click="closeSignupPopover"
6
+ >
4
7
  <fa icon="times" />
5
8
  </button>
6
9
  <sign-up-form class="p-3" />
@@ -8,40 +11,40 @@
8
11
  {{ t('follow-us-popover.heading') }}
9
12
  </div>
10
13
  <div class="p-3 bg-light d-flex justify-content-between text-center">
11
- <div class="col">
12
- <a
13
- href="https://twitter.com/ICIJorg"
14
- target="_blank"
15
- class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
16
- title="Twitter"
17
- >
18
- <fa :icon="['fab', 'twitter']" size="lg" />
19
- <span class="sr-only">Twitter</span>
20
- </a>
21
- </div>
22
- <div class="col">
23
- <a
24
- href="https://www.facebook.com/ICIJ.org"
25
- target="_blank"
26
- class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
27
- title="Facebook"
28
- >
29
- <fa :icon="['fab', 'facebook']" size="lg" />
30
- <span class="sr-only">Facebook</span>
31
- </a>
32
- </div>
33
- <div class="col">
34
- <a
35
- href="https://www.linkedin.com/company/1732242/"
36
- target="_blank"
37
- class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
38
- title="Linkedin"
39
- >
40
- <fa :icon="['fab', 'linkedin']" size="lg" />
41
- <span class="sr-only">Linkedin</span>
42
- </a>
43
- </div>
14
+ <div class="col">
15
+ <a
16
+ href="https://twitter.com/ICIJorg"
17
+ target="_blank"
18
+ class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
19
+ title="Twitter"
20
+ >
21
+ <fa :icon="['fab', 'twitter']" size="lg" />
22
+ <span class="sr-only">Twitter</span>
23
+ </a>
44
24
  </div>
25
+ <div class="col">
26
+ <a
27
+ href="https://www.facebook.com/ICIJ.org"
28
+ target="_blank"
29
+ class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
30
+ title="Facebook"
31
+ >
32
+ <fa :icon="['fab', 'facebook']" size="lg" />
33
+ <span class="sr-only">Facebook</span>
34
+ </a>
35
+ </div>
36
+ <div class="col">
37
+ <a
38
+ href="https://www.linkedin.com/company/1732242/"
39
+ target="_blank"
40
+ class="d-inline-block text-primary border border-primary rounded-circle bg-white follow-us__social-btn"
41
+ title="Linkedin"
42
+ >
43
+ <fa :icon="['fab', 'linkedin']" size="lg" />
44
+ <span class="sr-only">Linkedin</span>
45
+ </a>
46
+ </div>
47
+ </div>
45
48
  </div>
46
49
  </template>
47
50
 
@@ -55,7 +58,6 @@ import { useI18n } from 'vue-i18n'
55
58
  import SignUpForm from './SignUpForm.vue'
56
59
  import { library, default as Fa } from './Fa'
57
60
 
58
-
59
61
  /**
60
62
  * FollowUsPopover
61
63
  */
@@ -65,11 +67,11 @@ export default defineComponent({
65
67
  Fa,
66
68
  SignUpForm
67
69
  },
68
- emits:["update:close"],
69
- setup(_props,{emit}){
70
- const {t} = useI18n()
71
- onBeforeMount((): void=>{
72
- library.add(faTimes, faTwitter, faFacebook, faLinkedin)
70
+ emits: ['update:close'],
71
+ setup(_props, { emit }) {
72
+ const { t } = useI18n()
73
+ onBeforeMount((): void => {
74
+ library.add(faTimes, faTwitter, faFacebook, faLinkedin)
73
75
  })
74
76
  function closeSignupPopover(): void {
75
77
  /**