@icij/murmur-next 4.0.0 → 4.0.3

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 (334) hide show
  1. package/README.md +15 -19
  2. package/dist/lib/components/AccordionStep.vue.d.ts +79 -0
  3. package/dist/lib/components/AccordionWrapper.vue.d.ts +33 -0
  4. package/dist/lib/components/ActiveTextTruncate.vue.d.ts +101 -0
  5. package/dist/lib/components/AdvancedLinkForm.vue.d.ts +168 -0
  6. package/dist/lib/components/Brand.vue.d.ts +55 -0
  7. package/dist/lib/components/BrandExpansion.vue.d.ts +105 -0
  8. package/dist/lib/components/ConfirmButton.vue.d.ts +158 -0
  9. package/dist/lib/components/ContentPlaceholder.vue.d.ts +44 -0
  10. package/dist/lib/components/CustomPagination.vue.d.ts +130 -0
  11. package/dist/lib/components/DigitsInput.vue.d.ts +66 -0
  12. package/dist/lib/components/DonateForm.vue.d.ts +46 -0
  13. package/dist/lib/components/EmbedForm.vue.d.ts +121 -0
  14. package/dist/lib/components/EmbeddableFooter.vue.d.ts +103 -0
  15. package/dist/lib/components/FollowUsPopover.vue.d.ts +16 -0
  16. package/dist/lib/components/GenericFooter.vue.d.ts +47 -0
  17. package/dist/lib/components/GenericHeader.vue.d.ts +928 -0
  18. package/dist/lib/components/HapticCopy.vue.d.ts +156 -0
  19. package/dist/lib/components/ImddbHeader.vue.d.ts +960 -0
  20. package/dist/lib/components/OrdinalLegend.vue.d.ts +87 -0
  21. package/dist/lib/components/RangePicker.vue.d.ts +196 -0
  22. package/dist/lib/components/ResponsiveIframe.vue.d.ts +45 -0
  23. package/dist/lib/components/ScaleLegend.vue.d.ts +101 -0
  24. package/dist/lib/components/SecretInput.vue.d.ts +99 -0
  25. package/dist/lib/components/SelectableDropdown.vue.d.ts +210 -0
  26. package/dist/lib/components/SharingOptions.vue.d.ts +153 -0
  27. package/dist/lib/components/SharingOptionsLink.vue.d.ts +200 -0
  28. package/dist/lib/components/SignUpForm.vue.d.ts +141 -0
  29. package/dist/lib/components/SlideUpDown.vue.d.ts +74 -0
  30. package/dist/lib/components/TexturedDeck.vue.d.ts +89 -0
  31. package/dist/lib/components/TinyPagination.vue.d.ts +188 -0
  32. package/dist/lib/composables/chart.d.ts +48 -0
  33. package/dist/lib/composables/resizeObserver.d.ts +22 -0
  34. package/dist/lib/composables/sendEmail.d.ts +6 -0
  35. package/dist/lib/config.d.ts +19 -0
  36. package/dist/lib/config.default.d.ts +34 -0
  37. package/dist/lib/datavisualisations/BarChart.vue.d.ts +234 -0
  38. package/dist/lib/datavisualisations/ColumnChart.vue.d.ts +404 -0
  39. package/dist/lib/datavisualisations/LineChart.vue.d.ts +200 -0
  40. package/dist/lib/datavisualisations/StackedBarChart.vue.d.ts +342 -0
  41. package/dist/lib/datavisualisations/StackedColumnChart.vue.d.ts +412 -0
  42. package/dist/lib/enums.d.ts +32 -0
  43. package/dist/lib/i18n.d.ts +4 -0
  44. package/dist/lib/keys.d.ts +2 -0
  45. package/dist/lib/main.d.ts +52 -0
  46. package/dist/lib/maps/ChoroplethMap.vue.d.ts +460 -0
  47. package/dist/lib/maps/ChoroplethMapAnnotation.vue.d.ts +188 -0
  48. package/dist/lib/maps/SymbolMap.vue.d.ts +276 -0
  49. package/dist/lib/murmur.css +1 -0
  50. package/dist/lib/murmur.js +44661 -0
  51. package/dist/lib/murmur.js.map +1 -0
  52. package/dist/lib/murmur.umd.cjs +837 -0
  53. package/dist/lib/murmur.umd.cjs.map +1 -0
  54. package/dist/lib/types.d.ts +44 -0
  55. package/dist/lib/utils/animation.d.ts +8 -0
  56. package/dist/lib/utils/assets.d.ts +2 -0
  57. package/dist/lib/utils/clipboard.d.ts +2 -0
  58. package/dist/lib/utils/iframe-resizer.d.ts +10 -0
  59. package/dist/lib/utils/placeholder.d.ts +12 -0
  60. package/dist/lib/utils/placeholderTypes.d.ts +18 -0
  61. package/dist/lib/utils/strings.d.ts +1 -0
  62. package/lib/components/AccordionStep.vue +53 -42
  63. package/lib/components/AccordionWrapper.vue +25 -24
  64. package/lib/components/ActiveTextTruncate.vue +44 -22
  65. package/lib/components/AdvancedLinkForm.vue +96 -46
  66. package/lib/components/Brand.vue +30 -23
  67. package/lib/components/BrandExpansion.vue +12 -3
  68. package/lib/components/ConfirmButton.vue +30 -26
  69. package/lib/components/ContentPlaceholder.vue +11 -7
  70. package/lib/components/CustomPagination.vue +50 -32
  71. package/lib/components/DigitsInput.vue +64 -60
  72. package/lib/components/DonateForm.vue +112 -83
  73. package/lib/components/EmbedForm.vue +37 -21
  74. package/lib/components/EmbeddableFooter.vue +14 -10
  75. package/lib/components/FollowUsPopover.vue +42 -40
  76. package/lib/components/GenericFooter.vue +98 -23
  77. package/lib/components/GenericHeader.vue +66 -29
  78. package/lib/components/HapticCopy.vue +41 -29
  79. package/lib/components/ImddbHeader.vue +113 -92
  80. package/lib/components/OrdinalLegend.vue +43 -20
  81. package/lib/components/RangePicker.vue +63 -42
  82. package/lib/components/ResponsiveIframe.vue +9 -2
  83. package/lib/components/ScaleLegend.vue +56 -18
  84. package/lib/components/SecretInput.vue +7 -8
  85. package/lib/components/SelectableDropdown.vue +119 -74
  86. package/lib/components/SharingOptions.vue +93 -36
  87. package/lib/components/SharingOptionsLink.vue +11 -5
  88. package/lib/components/SignUpForm.vue +44 -23
  89. package/lib/components/SlideUpDown.vue +7 -2
  90. package/lib/components/TexturedDeck.vue +24 -14
  91. package/lib/components/TinyPagination.vue +35 -22
  92. package/lib/composables/chart.ts +174 -157
  93. package/lib/composables/resizeObserver.ts +29 -29
  94. package/lib/composables/sendEmail.ts +53 -42
  95. package/lib/config.default.ts +17 -10
  96. package/lib/config.ts +34 -27
  97. package/lib/datavisualisations/BarChart.vue +48 -42
  98. package/lib/datavisualisations/ColumnChart.vue +133 -89
  99. package/lib/datavisualisations/LineChart.vue +79 -57
  100. package/lib/datavisualisations/StackedBarChart.vue +116 -68
  101. package/lib/datavisualisations/StackedColumnChart.vue +196 -115
  102. package/lib/enums.ts +25 -15
  103. package/lib/i18n.ts +3 -3
  104. package/lib/keys.ts +2 -2
  105. package/lib/main.ts +14 -10
  106. package/lib/maps/ChoroplethMap.vue +299 -160
  107. package/lib/maps/ChoroplethMapAnnotation.vue +29 -18
  108. package/lib/maps/SymbolMap.vue +194 -123
  109. package/lib/shims-bootstrap-vue.d.ts +1 -1
  110. package/lib/shims-vue.d.ts +3 -3
  111. package/lib/styles/functions.scss +10 -6
  112. package/lib/styles/lib.scss +2 -4
  113. package/lib/styles/mixins.scss +8 -8
  114. package/lib/styles/utilities.scss +1 -1
  115. package/lib/styles/variables.scss +24 -18
  116. package/lib/types.ts +26 -10
  117. package/lib/utils/animation.ts +4 -4
  118. package/lib/utils/assets.ts +31 -28
  119. package/lib/utils/clipboard.ts +16 -10
  120. package/lib/utils/iframe-resizer.ts +18 -13
  121. package/lib/utils/placeholder.ts +54 -23
  122. package/lib/utils/placeholderTypes.ts +3 -3
  123. package/package.json +21 -2
  124. package/.github/workflows/deploy-github-pages.yaml +0 -50
  125. package/.storybook/app.scss +0 -14
  126. package/.storybook/doc_variables.scss +0 -20
  127. package/.storybook/main.ts +0 -35
  128. package/.storybook/preview-head.html +0 -2
  129. package/.storybook/preview.ts +0 -32
  130. package/deploy.js +0 -15
  131. package/docs/components/ApiTable.vue +0 -171
  132. package/docs/components/App.vue +0 -146
  133. package/docs/components/CollapsibleBlock.vue +0 -122
  134. package/docs/components/DocsHeader.vue +0 -68
  135. package/docs/components/DocsMenu.vue +0 -201
  136. package/docs/components/DocsMenuSection.vue +0 -109
  137. package/docs/components/EditLink.vue +0 -49
  138. package/docs/components/OutboundLink.vue +0 -13
  139. package/docs/components/PalettePresenter.vue +0 -96
  140. package/docs/components/RepositoryLink.vue +0 -28
  141. package/docs/components/SampleCard.vue +0 -119
  142. package/docs/main.js +0 -42
  143. package/docs/pages/components/accordion/doc.md +0 -96
  144. package/docs/pages/components/active-text-truncate/doc.md +0 -44
  145. package/docs/pages/components/advanced-link-form/doc.md +0 -105
  146. package/docs/pages/components/brand/doc.md +0 -30
  147. package/docs/pages/components/brand-expansion/doc.md +0 -70
  148. package/docs/pages/components/confirm-button/doc.md +0 -91
  149. package/docs/pages/components/content-placeholder/doc.md +0 -16
  150. package/docs/pages/components/custom-pagination/doc.md +0 -61
  151. package/docs/pages/components/digits-input/doc.md +0 -28
  152. package/docs/pages/components/donate-form/doc.md +0 -20
  153. package/docs/pages/components/embed-form/doc.md +0 -22
  154. package/docs/pages/components/embeddable-footer/doc.md +0 -60
  155. package/docs/pages/components/follow-us-popover/doc.md +0 -5
  156. package/docs/pages/components/generic-footer/doc.md +0 -21
  157. package/docs/pages/components/generic-header/doc.md +0 -24
  158. package/docs/pages/components/haptic-copy/doc.md +0 -27
  159. package/docs/pages/components/imddb-header/doc.md +0 -23
  160. package/docs/pages/components/ordinal-legend/doc.md +0 -44
  161. package/docs/pages/components/range-picker/doc.md +0 -86
  162. package/docs/pages/components/responsive-iframe/doc.md +0 -13
  163. package/docs/pages/components/scale-legend/doc.md +0 -65
  164. package/docs/pages/components/secret-input/doc.md +0 -12
  165. package/docs/pages/components/selectable-dropdown/doc.md +0 -156
  166. package/docs/pages/components/sharing-options/doc.md +0 -13
  167. package/docs/pages/components/sharing-options-link/doc.md +0 -36
  168. package/docs/pages/components/sign-up-form/doc.md +0 -13
  169. package/docs/pages/components/slide-up-down/doc.md +0 -28
  170. package/docs/pages/components/textured-deck/doc.md +0 -78
  171. package/docs/pages/components/tiny-pagination/doc.md +0 -92
  172. package/docs/pages/datavisualisation/bars/doc.md +0 -110
  173. package/docs/pages/datavisualisation/columns/doc.md +0 -165
  174. package/docs/pages/datavisualisation/lines/doc.md +0 -139
  175. package/docs/pages/datavisualisation/stacked-bar/doc.md +0 -160
  176. package/docs/pages/datavisualisation/stacked-column/doc.md +0 -191
  177. package/docs/pages/getting-started/about-icij/doc.md +0 -13
  178. package/docs/pages/getting-started/custom-bootstrap/doc.md +0 -36
  179. package/docs/pages/getting-started/installation-guide/doc.md +0 -59
  180. package/docs/pages/getting-started/internationalization/doc.md +0 -74
  181. package/docs/pages/maps/choropleth-map/doc.md +0 -420
  182. package/docs/pages/maps/choropleth-map-annotation/doc.md +0 -373
  183. package/docs/pages/maps/symbol-map/doc.md +0 -203
  184. package/docs/pages/structure/breakpoints/doc.md +0 -3
  185. package/docs/pages/structure/grid/doc.md +0 -3
  186. package/docs/pages/utilities/assets/doc.md +0 -138
  187. package/docs/pages/utilities/config/doc.md +0 -52
  188. package/docs/pages/utilities/iframes/doc.md +0 -3
  189. package/docs/pages/visual/colors/doc.md +0 -31
  190. package/docs/pages/visual/iconography/doc.md +0 -56
  191. package/docs/pages/visual/states/doc.md +0 -77
  192. package/docs/pages/visual/themes/doc.md +0 -3
  193. package/docs/pages/visual/typography/doc.md +0 -71
  194. package/docs/routes.js +0 -25
  195. package/docs/store/index.js +0 -21
  196. package/docs/styles/app.scss +0 -36
  197. package/docs/styles/variables.scss +0 -20
  198. package/loaders/highlight-loader.js +0 -13
  199. package/loaders/markdown-loader.js +0 -91
  200. package/loaders/metadata-loader.js +0 -18
  201. package/loaders/sass-extract-loader.js +0 -14
  202. package/loaders/vue-docgen-loader.js +0 -14
  203. package/plugins/MdPluginTypes.ts +0 -10
  204. package/plugins/docs.ts +0 -50
  205. package/plugins/front-matter.ts +0 -36
  206. package/plugins/highlight.ts +0 -27
  207. package/plugins/markdown-it/api-table.ts +0 -25
  208. package/plugins/markdown-it/sample-card.ts +0 -31
  209. package/plugins/plugin-delete.ts +0 -47
  210. package/plugins/plugin-docgen.ts +0 -23
  211. package/plugins/sass-vars.ts +0 -25
  212. package/plugins/vue-docgen.ts +0 -29
  213. package/public/android-chrome-192x192.png +0 -0
  214. package/public/android-chrome-512x512.png +0 -0
  215. package/public/apple-touch-icon.png +0 -0
  216. package/public/assets/img/arrow-bottom.svg +0 -3
  217. package/public/assets/img/texture-brick-black.jpg +0 -0
  218. package/public/assets/img/texture-brick.jpg +0 -0
  219. package/public/assets/img/texture-carbon-black.jpg +0 -0
  220. package/public/assets/img/texture-carbon.jpg +0 -0
  221. package/public/assets/img/texture-crack-black.jpg +0 -0
  222. package/public/assets/img/texture-crack.jpg +0 -0
  223. package/public/assets/img/texture-rock-black.jpg +0 -0
  224. package/public/assets/img/texture-rock.jpg +0 -0
  225. package/public/assets/img/texture-sand-black.jpg +0 -0
  226. package/public/assets/img/texture-sand.jpg +0 -0
  227. package/public/assets/img/texture-silk-black.jpg +0 -0
  228. package/public/assets/img/texture-silk.jpg +0 -0
  229. package/public/assets/topojson/france-departments.json +0 -1
  230. package/public/assets/topojson/paris-arrondissements.json +0 -1
  231. package/public/assets/topojson/world-countries-sans-antarctica.json +0 -1
  232. package/public/favicon-16x16.png +0 -0
  233. package/public/favicon-32x32.png +0 -0
  234. package/public/favicon.ico +0 -0
  235. package/public/site.webmanifest +0 -1
  236. package/stories/assets/code-brackets.svg +0 -1
  237. package/stories/assets/colors.svg +0 -1
  238. package/stories/assets/comments.svg +0 -1
  239. package/stories/assets/direction.svg +0 -1
  240. package/stories/assets/flow.svg +0 -1
  241. package/stories/assets/plugin.svg +0 -1
  242. package/stories/assets/repo.svg +0 -1
  243. package/stories/assets/stackalt.svg +0 -1
  244. package/stories/getting-started/about-icij.mdx +0 -14
  245. package/stories/getting-started/custom-bootstrap.mdx +0 -23
  246. package/stories/getting-started/installation-guide.mdx +0 -62
  247. package/stories/getting-started/internationalization.mdx +0 -63
  248. package/stories/murmur/components/AccordionStep.stories.ts +0 -33
  249. package/stories/murmur/components/AccordionWrapper.stories.ts +0 -69
  250. package/stories/murmur/components/ActiveTextTruncate.stories.ts +0 -32
  251. package/stories/murmur/components/AdvancedLinkForm.stories.ts +0 -77
  252. package/stories/murmur/components/Brand.stories.ts +0 -30
  253. package/stories/murmur/components/BrandExpansion.stories.ts +0 -41
  254. package/stories/murmur/components/ConfirmButton.stories.ts +0 -40
  255. package/stories/murmur/components/ContentPlaceholder.stories.ts +0 -41
  256. package/stories/murmur/components/CustomPagination.stories.ts +0 -42
  257. package/stories/murmur/components/DigitsInput.stories.ts +0 -29
  258. package/stories/murmur/components/DonateForm.stories.ts +0 -29
  259. package/stories/murmur/components/EmbedForm.stories.ts +0 -35
  260. package/stories/murmur/components/EmbeddableFooter.stories.ts +0 -59
  261. package/stories/murmur/components/FollowUsPopover.stories.ts +0 -24
  262. package/stories/murmur/components/GenericFooter.stories.ts +0 -27
  263. package/stories/murmur/components/GenericHeader.stories.ts +0 -27
  264. package/stories/murmur/components/HapticCopy.stories.ts +0 -40
  265. package/stories/murmur/components/ImddbHeader.stories.ts +0 -27
  266. package/stories/murmur/components/OrdinalLegend.stories.ts +0 -49
  267. package/stories/murmur/components/RangePicker.stories.ts +0 -98
  268. package/stories/murmur/components/ResponsiveIframe.stories.ts +0 -24
  269. package/stories/murmur/components/ScaleLegend.stories.ts +0 -65
  270. package/stories/murmur/components/SecretInput.stories.ts +0 -60
  271. package/stories/murmur/components/SelectableDropdown.stories.ts +0 -143
  272. package/stories/murmur/components/SharingOptions.stories.ts +0 -32
  273. package/stories/murmur/components/SharingOptionsLink.stories.ts +0 -53
  274. package/stories/murmur/components/SignUpForm.stories.ts +0 -51
  275. package/stories/murmur/components/SlideUpDown.stories.ts +0 -32
  276. package/stories/murmur/components/TexturedDeck.stories.ts +0 -83
  277. package/stories/murmur/components/TinyPagination.stories.ts +0 -65
  278. package/stories/murmur/datavisualisations/BarChart.stories.ts +0 -54
  279. package/stories/murmur/datavisualisations/ColumnChart.stories.ts +0 -88
  280. package/stories/murmur/datavisualisations/LineChart.stories.ts +0 -139
  281. package/stories/murmur/datavisualisations/StackedBarChart.stories.ts +0 -199
  282. package/stories/murmur/datavisualisations/StackedColumnChart.stories.ts +0 -136
  283. package/stories/murmur/decorators.ts +0 -108
  284. package/stories/murmur/maps/ChoroplethMap.stories.ts +0 -440
  285. package/stories/murmur/maps/ChoroplethMapAnnotation.stories.ts +0 -26
  286. package/stories/murmur/maps/SymbolMap.stories.ts +0 -24
  287. package/stories/murmur/utils.ts +0 -7
  288. package/tests/unit/components/AccordionStep.spec.ts +0 -157
  289. package/tests/unit/components/AccordionWrapper.spec.ts +0 -57
  290. package/tests/unit/components/ActiveTextTruncate.spec.js +0 -30
  291. package/tests/unit/components/AdvancedLinkForm.spec.js +0 -124
  292. package/tests/unit/components/Brand.spec.js +0 -50
  293. package/tests/unit/components/ContentPlaceholder.spec.js +0 -29
  294. package/tests/unit/components/CustomPagination.spec.js +0 -72
  295. package/tests/unit/components/DigitsInput.spec.ts +0 -157
  296. package/tests/unit/components/DonateForm.spec.js +0 -149
  297. package/tests/unit/components/EmbedForm.spec.js +0 -108
  298. package/tests/unit/components/EmbeddableFooter.spec.js +0 -11
  299. package/tests/unit/components/Fa.spec.js +0 -18
  300. package/tests/unit/components/FollowUsPopover.spec.js +0 -29
  301. package/tests/unit/components/GenericFooter.spec.js +0 -29
  302. package/tests/unit/components/GenericHeader.spec.js +0 -104
  303. package/tests/unit/components/HapticCopy.spec.js +0 -123
  304. package/tests/unit/components/ImddbHeader.spec.js +0 -96
  305. package/tests/unit/components/OrdinalLegend.spec.js +0 -120
  306. package/tests/unit/components/RangePicker.spec.ts +0 -87
  307. package/tests/unit/components/ResponsiveIframe.spec.js +0 -20
  308. package/tests/unit/components/ScaleLegend.spec.js +0 -139
  309. package/tests/unit/components/SecretInput.spec.js +0 -81
  310. package/tests/unit/components/SelectableDropdown.spec.js +0 -160
  311. package/tests/unit/components/SharingOptions.spec.js +0 -125
  312. package/tests/unit/components/SharingOptionsLink.spec.js +0 -184
  313. package/tests/unit/components/SignUpForm.spec.js +0 -145
  314. package/tests/unit/components/SlideUpDown.spec.js +0 -59
  315. package/tests/unit/components/TinyPagination.spec.js +0 -46
  316. package/tests/unit/config.spec.js +0 -136
  317. package/tests/unit/datavisualisations/BarChart.spec.js +0 -63
  318. package/tests/unit/datavisualisations/ColumnChart.spec.js +0 -344
  319. package/tests/unit/datavisualisations/LineChart.spec.js +0 -155
  320. package/tests/unit/datavisualisations/StackedBarChart.spec.js +0 -294
  321. package/tests/unit/datavisualisations/StackedColumnChart.spec.js +0 -443
  322. package/tests/unit/i18n.spec.ts +0 -19
  323. package/tests/unit/main.spec.js +0 -82
  324. package/tests/unit/maps/ChoroplethMap.spec.js +0 -214
  325. package/tests/unit/maps/ChoroplethMapAnnotation.spec.ts +0 -186
  326. package/tests/unit/maps/SymbolMap.spec.js +0 -92
  327. package/tests/unit/require.spec.js +0 -22
  328. package/tests/unit/setup.js +0 -13
  329. package/tests/unit/utils/assets.spec.js +0 -61
  330. package/tests/unit/utils/clipboard.spec.js +0 -18
  331. package/tests/unit/utils/iframe-resizer.spec.js +0 -71
  332. package/tsconfig.json +0 -35
  333. package/vite.config.ts +0 -79
  334. package/vitest.config.ts +0 -19
@@ -4,179 +4,196 @@ import isObject from 'lodash/isObject'
4
4
  import isString from 'lodash/isString'
5
5
  import max from 'lodash/max'
6
6
  import some from 'lodash/some'
7
- import {ComponentPublicInstance, computed, onMounted, ref, watch} from 'vue'
8
- import {isUrl} from '@/utils/strings'
9
- import { Ref, SetupContext} from "@vue/runtime-core";
10
- import useResizeObserver from "@/composables/resizeObserver";
7
+ import { ComponentPublicInstance, computed, onMounted, ref, watch } from 'vue'
8
+ import { isUrl } from '@/utils/strings'
9
+ import { Ref, SetupContext } from '@vue/runtime-core'
10
+ import useResizeObserver from '@/composables/resizeObserver'
11
11
  import { watchEffect } from 'vue'
12
12
 
13
-
14
- type ChartContext<T extends string[]> = SetupContext<[...T, ...string[]]>;
15
- type ChartEmit = Pick<ChartContext<["resized", "loaded"]>, 'emit'>
13
+ type ChartContext<T extends string[]> = SetupContext<[...T, ...string[]]>
14
+ type ChartEmit = Pick<ChartContext<['resized', 'loaded']>, 'emit'>
16
15
  type ChartProps = {
17
- chartHeightRatio: { type: NumberConstructor },
18
- data: {
19
- default: () => any[] | string,
20
- validator(value: string): boolean,
21
- type: (ArrayConstructor | StringConstructor | ObjectConstructor)[]
22
- },
23
- dataUrlType: { default: string, validator(value: string): boolean, type: StringConstructor },
24
- socialMode: { type: BooleanConstructor },
25
- socialModeRatio:
26
- { default: number, type: NumberConstructor }
27
- };
16
+ chartHeightRatio: { type: NumberConstructor }
17
+ data: {
18
+ default: () => any[] | string
19
+ validator(value: string): boolean
20
+ type: (ArrayConstructor | StringConstructor | ObjectConstructor)[]
21
+ }
22
+ dataUrlType: {
23
+ default: string
24
+ validator(value: string): boolean
25
+ type: StringConstructor
26
+ }
27
+ socialMode: { type: BooleanConstructor }
28
+ socialModeRatio: { default: number; type: NumberConstructor }
29
+ }
28
30
 
29
31
  export function getChartProps(props: any): ChartProps {
30
- return {
31
- chartHeightRatio: props.chartHeightRatio,
32
- data: props.data,
33
- dataUrlType: props.dataUrlType,
34
- socialMode: props.socialMode,
35
- socialModeRatio: props.socialModeRatio,
36
- }
32
+ return {
33
+ chartHeightRatio: props.chartHeightRatio,
34
+ data: props.data,
35
+ dataUrlType: props.dataUrlType,
36
+ socialMode: props.socialMode,
37
+ socialModeRatio: props.socialModeRatio
38
+ }
37
39
  }
38
40
 
39
41
  export const chartProps = (): ChartProps => ({
40
- data: {
41
- type: [Array, String, Object],
42
- default: () => [],
43
- validator(value: string) {
44
- return isObject(value) || (isString(value) && isUrl(value))
45
- }
46
- },
47
- /**
48
- * Format of the data to load.
49
- */
50
- dataUrlType: {
51
- type: String,
52
- default: 'json',
53
- validator(value: string) {
54
- return ['json', 'csv', 'tsv'].indexOf(value) > -1
55
- }
56
- },
57
- /**
58
- * When applicable, default chart's height ratio
59
- */
60
- chartHeightRatio: {
61
- type: Number
62
- },
63
- /**
64
- * If true, the chart will be display on social mode
65
- */
66
- socialMode: {
67
- type: Boolean
68
- },
69
- /**
70
- * Ratio to use in social mode
71
- */
72
- socialModeRatio: {
73
- type: Number,
74
- default: 5 / 4
42
+ data: {
43
+ type: [Array, String, Object],
44
+ default: () => [],
45
+ validator(value: string) {
46
+ return isObject(value) || (isString(value) && isUrl(value))
47
+ }
48
+ },
49
+ /**
50
+ * Format of the data to load.
51
+ */
52
+ dataUrlType: {
53
+ type: String,
54
+ default: 'json',
55
+ validator(value: string) {
56
+ return ['json', 'csv', 'tsv'].indexOf(value) > -1
75
57
  }
58
+ },
59
+ /**
60
+ * When applicable, default chart's height ratio
61
+ */
62
+ chartHeightRatio: {
63
+ type: Number
64
+ },
65
+ /**
66
+ * If true, the chart will be display on social mode
67
+ */
68
+ socialMode: {
69
+ type: Boolean
70
+ },
71
+ /**
72
+ * Ratio to use in social mode
73
+ */
74
+ socialModeRatio: {
75
+ type: Number,
76
+ default: 5 / 4
77
+ }
76
78
  })
77
- export const chartEmits = ["resized", "loaded"]
78
- type Chart = {
79
- dataHasHighlights: any;
80
- loadedData: any;
81
- xAxisYearFormat: (year: (number | string)) => number | string;
82
- elementsMaxBBox: ({selector, defaultWidth, defaultHeight}?: {
83
- selector?: any;
84
- defaultWidth?: any;
85
- defaultHeight?: any
86
- }) => ({ width: any; height: any });
87
- d3Formatter: any;
88
- baseHeightRatio: any
79
+ export const chartEmits = ['resized', 'loaded']
80
+ type Chart = {
81
+ dataHasHighlights: any
82
+ loadedData: any
83
+ xAxisYearFormat: (year: number | string) => number | string
84
+ elementsMaxBBox: ({
85
+ selector,
86
+ defaultWidth,
87
+ defaultHeight
88
+ }?: {
89
+ selector?: any
90
+ defaultWidth?: any
91
+ defaultHeight?: any
92
+ }) => { width: any; height: any }
93
+ d3Formatter: any
94
+ baseHeightRatio: any
89
95
  }
90
- export function useChart(resizableRef: Ref<ComponentPublicInstance<HTMLElement> | null>, props: ChartProps, {emit}: ChartEmit, isLoaded:Ref<boolean>, onResized?:Function, afterLoaded?:()=>Promise<any>): Chart {
91
- const { resizeRef , resizeState } = useResizeObserver(resizableRef)
92
- const loadedData = ref([])
93
-
94
- onMounted(async () => {
95
- await document.fonts?.ready
96
-
97
- watchEffect(async ()=>{
98
- if(!isLoaded.value){
99
-
100
- if (isString(props.data)) {
101
- // @ts-ignore
102
- loadedData.value = await d3[props.dataUrlType](props.data)
103
- } else {
104
- loadedData.value = props.data as unknown as []
105
- }
106
-
107
- if(afterLoaded){
108
- await afterLoaded()
109
- }
110
- isLoaded.value = true
111
- emit('loaded')
112
- }
113
-
114
- if(isLoaded.value && onResized){
115
- onResized()
116
- emit('resized')
117
- }
118
- })
119
-
120
-
121
- })
122
- function elementsMaxBBox({selector = 'text', defaultWidth = null, defaultHeight = null} = {}) {
123
-
124
- const elements = isLoaded.value? resizeRef.value?.querySelectorAll(selector) : []
125
- if (elements.length == 0) {
126
- return {width: defaultWidth, height: defaultHeight}
96
+ export function useChart(
97
+ resizableRef: Ref<ComponentPublicInstance<HTMLElement> | null>,
98
+ props: ChartProps,
99
+ { emit }: ChartEmit,
100
+ isLoaded: Ref<boolean>,
101
+ onResized?: Function,
102
+ afterLoaded?: () => Promise<any>
103
+ ): Chart {
104
+ const { resizeRef, resizeState } = useResizeObserver(resizableRef)
105
+ const loadedData = ref([])
106
+
107
+ onMounted(async () => {
108
+ await document.fonts?.ready
109
+
110
+ watchEffect(async () => {
111
+ if (!isLoaded.value) {
112
+ if (isString(props.data)) {
113
+ // @ts-ignore
114
+ loadedData.value = await d3[props.dataUrlType](props.data)
115
+ } else {
116
+ loadedData.value = props.data as unknown as []
127
117
  }
128
- const width = max(
129
- [...elements].map((l) => {
130
- return l.getBBox ? l.getBBox().width : defaultWidth
131
- })
132
- )
133
- const height = max(
134
- [...elements].map((l) => {
135
- return l.getBBox ? l.getBBox().height : defaultHeight
136
- })
137
- )
138
- return {width, height}
139
- }
140
118
 
141
- function xAxisYearFormat(year: number | string) {
142
- // previously using narrowWidth but it is automatically updated through resizeObserver state reactivity
143
- return resizeState.narrowWidth ? '’' + String(year).slice(2, 4) : year
119
+ if (afterLoaded) {
120
+ await afterLoaded()
121
+ }
122
+ isLoaded.value = true
123
+ emit('loaded')
124
+ }
125
+
126
+ if (isLoaded.value && onResized) {
127
+ onResized()
128
+ emit('resized')
129
+ }
130
+ })
131
+ })
132
+ function elementsMaxBBox({
133
+ selector = 'text',
134
+ defaultWidth = null,
135
+ defaultHeight = null
136
+ } = {}) {
137
+ const elements = isLoaded.value
138
+ ? resizeRef.value?.querySelectorAll(selector)
139
+ : []
140
+ if (elements.length == 0) {
141
+ return { width: defaultWidth, height: defaultHeight }
144
142
  }
145
- function highlighted(datum: { highlight: boolean }) {
146
- return datum.highlight
143
+ const width = max(
144
+ [...elements].map((l) => {
145
+ return l.getBBox ? l.getBBox().width : defaultWidth
146
+ })
147
+ )
148
+ const height = max(
149
+ [...elements].map((l) => {
150
+ return l.getBBox ? l.getBBox().height : defaultHeight
151
+ })
152
+ )
153
+ return { width, height }
154
+ }
155
+
156
+ function xAxisYearFormat(year: number | string) {
157
+ // previously using narrowWidth but it is automatically updated through resizeObserver state reactivity
158
+ return resizeState.narrowWidth ? '’' + String(year).slice(2, 4) : year
159
+ }
160
+ function highlighted(datum: { highlight: boolean }) {
161
+ return datum.highlight
162
+ }
163
+ function d3Formatter(value: any, formatter: any) {
164
+ if (isFunction(formatter)) {
165
+ return formatter(value)
166
+ } else if (isString(formatter)) {
167
+ return d3.format(formatter)(value)
147
168
  }
148
- function d3Formatter(value:any,formatter:any) {
149
- if (isFunction(formatter)) {
150
- return formatter(value)
151
- } else if (isString(formatter)) {
152
- return d3.format(formatter)(value)
153
- }
154
- return value
169
+ return value
170
+ }
171
+ const baseHeightRatio = computed(() => {
172
+ return (
173
+ props.chartHeightRatio ||
174
+ (props.socialMode ? props.socialModeRatio : 9 / 16)
175
+ )
176
+ })
177
+ const dataHasHighlights = computed(() => {
178
+ if (Array.isArray(props.data)) {
179
+ return some(props.data, highlighted)
155
180
  }
156
- const baseHeightRatio = computed(() => {
157
- return props.chartHeightRatio || (props.socialMode ? props.socialModeRatio : 9 / 16)
158
- })
159
- const dataHasHighlights = computed(() => {
160
- if (Array.isArray(props.data)) {
161
- return some(props.data, highlighted)
162
- }
163
- return false
164
- })
165
-
166
- watch(resizeState.dimensions, () => {
167
- if(isLoaded.value && onResized){
168
- onResized()
169
- emit('resized')
170
- }
171
- })
172
-
181
+ return false
182
+ })
173
183
 
174
- return {
175
- loadedData,
176
- elementsMaxBBox,
177
- xAxisYearFormat,
178
- d3Formatter,
179
- baseHeightRatio,
180
- dataHasHighlights,
184
+ watch(resizeState.dimensions, () => {
185
+ if (isLoaded.value && onResized) {
186
+ onResized()
187
+ emit('resized')
181
188
  }
189
+ })
190
+
191
+ return {
192
+ loadedData,
193
+ elementsMaxBBox,
194
+ xAxisYearFormat,
195
+ d3Formatter,
196
+ baseHeightRatio,
197
+ dataHasHighlights
198
+ }
182
199
  }
@@ -1,37 +1,37 @@
1
- import { ref, reactive, onMounted, onBeforeUnmount } from "vue";
2
- import { Ref,nextTick } from "vue";
1
+ import { ref, reactive, onMounted, onBeforeUnmount } from 'vue'
2
+ import { Ref, nextTick } from 'vue'
3
3
  import ResizeObserver from 'resize-observer-polyfill'
4
4
 
5
- export const useResizeObserver = (resizableRef?:Ref) => {
6
- const resizeRef:Ref<HTMLElement> = resizableRef ?? ref();
7
- const resizeState = reactive({
8
- dimensions: {} as DOMRect,
9
- offsetWidth: 540,
10
- narrowWidth: false
11
- });
5
+ export const useResizeObserver = (resizableRef?: Ref) => {
6
+ const resizeRef: Ref<HTMLElement> = resizableRef ?? ref()
7
+ const resizeState = reactive({
8
+ dimensions: {} as DOMRect,
9
+ offsetWidth: 540,
10
+ narrowWidth: false
11
+ })
12
12
 
13
- const observer = new ResizeObserver(entries => {
14
- entries.forEach(entry => {
15
- resizeState.dimensions = entry.contentRect
16
- resizeState.offsetWidth = (entry.target as HTMLElement).offsetWidth
17
- resizeState.narrowWidth = (resizeState.offsetWidth ?? 540) < 540
18
- });
19
- });
13
+ const observer = new ResizeObserver((entries) => {
14
+ entries.forEach((entry) => {
15
+ resizeState.dimensions = entry.contentRect
16
+ resizeState.offsetWidth = (entry.target as HTMLElement).offsetWidth
17
+ resizeState.narrowWidth = (resizeState.offsetWidth ?? 540) < 540
18
+ })
19
+ })
20
20
 
21
- onMounted(async () => {
22
- // set initial dimensions right before observing: Element.getBoundingClientRect()
23
- resizeState.dimensions = resizeRef.value.getBoundingClientRect();
24
- resizeState.offsetWidth = resizeRef.value.offsetWidth
25
- resizeState.narrowWidth = false // TODO CD: old default is false but maybe this would work (resizeState.offsetWidth ?? 540) < 540 but would be often true
21
+ onMounted(async () => {
22
+ // set initial dimensions right before observing: Element.getBoundingClientRect()
23
+ resizeState.dimensions = resizeRef.value.getBoundingClientRect()
24
+ resizeState.offsetWidth = resizeRef.value.offsetWidth
25
+ resizeState.narrowWidth = false // TODO CD: old default is false but maybe this would work (resizeState.offsetWidth ?? 540) < 540 but would be often true
26
26
 
27
- observer.observe(resizeRef.value);
28
- });
27
+ observer.observe(resizeRef.value)
28
+ })
29
29
 
30
- onBeforeUnmount(() => {
31
- observer.unobserve(resizeRef.value);
32
- });
30
+ onBeforeUnmount(() => {
31
+ observer.unobserve(resizeRef.value)
32
+ })
33
33
 
34
- return { resizeState, resizeRef };
35
- };
34
+ return { resizeState, resizeRef }
35
+ }
36
36
 
37
- export default useResizeObserver;
37
+ export default useResizeObserver
@@ -1,50 +1,61 @@
1
- import jsonp from "jsonp";
2
- import {computed, MaybeRefOrGetter, toValue} from "vue";
3
- import flatten from "lodash/flatten";
4
- import castArray from "lodash/castArray";
5
- import {Ref} from "react";
1
+ import jsonp from 'jsonp'
2
+ import { computed, MaybeRefOrGetter, toValue } from 'vue'
3
+ import flatten from 'lodash/flatten'
4
+ import castArray from 'lodash/castArray'
5
+ import { Ref } from 'react'
6
6
 
7
7
  type FormDataResult = { result: string; msg: string }
8
8
  // by convention, composable function names start with "use"
9
- export function useSendEmail(email:MaybeRefOrGetter<string>,action?:string,emailField?:string, tracker?:string, referrer?:string|null,defaultGroups?:string[]|string,) {
10
- const emailValue = toValue(email)
11
-
12
- const groups = computed(()=> {
13
- return flatten(castArray(defaultGroups).map((g) => g.split(',')))
14
- })
15
-
16
- const urlFromAction = computed(()=> {
17
- return action?.replace('/post?', '/post-json?').concat('&c=?')
18
- })
19
- const parentReferrer = computed(()=> {
20
- if (referrer) {
21
- return referrer
22
- }
23
- return window.location !== window.parent.location ? document.referrer : document.location.href
24
- })
9
+ export function useSendEmail(
10
+ email: MaybeRefOrGetter<string>,
11
+ action?: string,
12
+ emailField?: string,
13
+ tracker?: string,
14
+ referrer?: string | null,
15
+ defaultGroups?: string[] | string
16
+ ) {
17
+ const emailValue = toValue(email)
18
+
19
+ const groups = computed(() => {
20
+ return flatten(castArray(defaultGroups).map((g) => g.split(',')))
21
+ })
22
+
23
+ const urlFromAction = computed(() => {
24
+ return action?.replace('/post?', '/post-json?').concat('&c=?')
25
+ })
26
+ const parentReferrer = computed(() => {
27
+ if (referrer) {
28
+ return referrer
29
+ }
30
+ return window.location !== window.parent.location
31
+ ? document.referrer
32
+ : document.location.href
33
+ })
34
+
35
+ const submitUrl = computed(() => {
36
+ if (typeof urlFromAction.value == 'undefined' || !tracker || !emailField) {
37
+ throw new Error('Missing url Info')
38
+ }
25
39
 
26
- const submitUrl = computed(()=> {
27
- if(typeof urlFromAction.value == 'undefined' || !tracker || !emailField){
28
- throw new Error("Missing url Info")
40
+ const url = new URL(urlFromAction.value)
41
+ url.searchParams.set('SIGNUP', tracker)
42
+ url.searchParams.set('MMERGE24', parentReferrer.value)
43
+ url.searchParams.set(emailField, emailValue)
44
+ groups.value.map((group) => url.searchParams.set(group, '1'))
45
+
46
+ return url.href
47
+ })
48
+ function send() {
49
+ return new Promise((resolve, reject) => {
50
+ jsonp(
51
+ submitUrl.value,
52
+ { param: 'c' },
53
+ (err: any, data: FormDataResult) => {
54
+ return err ? reject(err) : resolve(data)
29
55
  }
30
-
31
- const url = new URL(urlFromAction.value)
32
- url.searchParams.set('SIGNUP', tracker)
33
- url.searchParams.set('MMERGE24', parentReferrer.value)
34
- url.searchParams.set(emailField, emailValue)
35
- groups.value.map((group) => url.searchParams.set(group, '1'))
36
-
37
- return url.href
56
+ )
38
57
  })
39
- function send() {
40
- return new Promise((resolve, reject) => {
41
- jsonp(submitUrl.value, { param: 'c' }, (err: any, data: FormDataResult) => {
42
- return err ? reject(err) : resolve(data)
43
- })
44
- })
45
- }
46
-
58
+ }
47
59
 
48
- return {send}
60
+ return { send }
49
61
  }
50
-
@@ -1,20 +1,24 @@
1
1
  export default {
2
2
  'imddb-header.dropdown.items': [
3
- { label: 'Graphics', href: "#/" },
4
- { label: 'Overview', href: "#/" },
5
- { label: 'Visual overview', href: "#/" },
6
- { label: 'Backgrounder', href: "#/" },
7
- { label: 'About this project', href: "#/", active: true }
3
+ { label: 'Graphics', href: '#/' },
4
+ { label: 'Overview', href: '#/' },
5
+ { label: 'Visual overview', href: '#/' },
6
+ { label: 'Backgrounder', href: '#/' },
7
+ { label: 'About this project', href: '#/', active: true }
8
8
  ],
9
9
  'project.name': 'Secret Papers',
10
10
  'app.name': 'Awesome App',
11
11
  'app.home': './',
12
12
  'app.donate-url': 'https://www.icij.org/donate/',
13
- 'contact-email':'contact@icij.org',
13
+ 'contact-email': 'contact@icij.org',
14
14
  'content-placeholder.rows': [
15
15
  {
16
16
  height: '1em',
17
- boxes: [[0, '50%'], ['5%', '30%'], ['5%', '10%']]
17
+ boxes: [
18
+ [0, '50%'],
19
+ ['5%', '30%'],
20
+ ['5%', '10%']
21
+ ]
18
22
  }
19
23
  ],
20
24
  'donate-form.tracker': null,
@@ -24,10 +28,13 @@ export default {
24
28
  'sharing-options.media': null,
25
29
  'sharing-options.twitter-user': 'ICIJorg',
26
30
  'signup-form.tracker': 'EXTERNAL',
27
- 'signup-form.action': 'https://icij.us15.list-manage.com/subscribe/post?u=0d48a33b1c24d257734cc2a79&id=992ecfdbb2',
31
+ 'signup-form.action':
32
+ 'https://icij.us15.list-manage.com/subscribe/post?u=0d48a33b1c24d257734cc2a79&id=992ecfdbb2',
28
33
  'signup-form.email-field': 'EMAIL',
29
34
  'signup-form.default-groups': ['group[9][1]'],
30
35
  'textured-deck.background-base-url': 'https://icij.github.io/murmur',
31
- 'map.topojson.world-countries-sans-antarctica': 'https://icij.github.io/murmur/assets/topojson/world-countries-sans-antarctica.json',
32
- 'map.topojson.france-departements': 'https://icij.github.io/murmur/assets/topojson/france-departements.json'
36
+ 'map.topojson.world-countries-sans-antarctica':
37
+ 'https://icij.github.io/murmur/assets/topojson/world-countries-sans-antarctica.json',
38
+ 'map.topojson.france-departements':
39
+ 'https://icij.github.io/murmur/assets/topojson/france-departements.json'
33
40
  }