@icij/murmur-next 4.0.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.
Files changed (296) hide show
  1. package/.github/workflows/deploy-github-pages.yaml +50 -0
  2. package/.storybook/app.scss +14 -0
  3. package/.storybook/doc_variables.scss +20 -0
  4. package/.storybook/main.ts +35 -0
  5. package/.storybook/preview-head.html +2 -0
  6. package/.storybook/preview.ts +32 -0
  7. package/README.md +71 -0
  8. package/deploy.js +15 -0
  9. package/docs/components/ApiTable.vue +171 -0
  10. package/docs/components/App.vue +146 -0
  11. package/docs/components/CollapsibleBlock.vue +122 -0
  12. package/docs/components/DocsHeader.vue +68 -0
  13. package/docs/components/DocsMenu.vue +201 -0
  14. package/docs/components/DocsMenuSection.vue +109 -0
  15. package/docs/components/EditLink.vue +49 -0
  16. package/docs/components/OutboundLink.vue +13 -0
  17. package/docs/components/PalettePresenter.vue +96 -0
  18. package/docs/components/RepositoryLink.vue +28 -0
  19. package/docs/components/SampleCard.vue +119 -0
  20. package/docs/main.js +42 -0
  21. package/docs/pages/components/accordion/doc.md +96 -0
  22. package/docs/pages/components/active-text-truncate/doc.md +44 -0
  23. package/docs/pages/components/advanced-link-form/doc.md +105 -0
  24. package/docs/pages/components/brand/doc.md +30 -0
  25. package/docs/pages/components/brand-expansion/doc.md +70 -0
  26. package/docs/pages/components/confirm-button/doc.md +91 -0
  27. package/docs/pages/components/content-placeholder/doc.md +16 -0
  28. package/docs/pages/components/custom-pagination/doc.md +61 -0
  29. package/docs/pages/components/digits-input/doc.md +28 -0
  30. package/docs/pages/components/donate-form/doc.md +20 -0
  31. package/docs/pages/components/embed-form/doc.md +22 -0
  32. package/docs/pages/components/embeddable-footer/doc.md +60 -0
  33. package/docs/pages/components/follow-us-popover/doc.md +5 -0
  34. package/docs/pages/components/generic-footer/doc.md +21 -0
  35. package/docs/pages/components/generic-header/doc.md +24 -0
  36. package/docs/pages/components/haptic-copy/doc.md +27 -0
  37. package/docs/pages/components/imddb-header/doc.md +23 -0
  38. package/docs/pages/components/ordinal-legend/doc.md +44 -0
  39. package/docs/pages/components/range-picker/doc.md +86 -0
  40. package/docs/pages/components/responsive-iframe/doc.md +13 -0
  41. package/docs/pages/components/scale-legend/doc.md +65 -0
  42. package/docs/pages/components/secret-input/doc.md +12 -0
  43. package/docs/pages/components/selectable-dropdown/doc.md +156 -0
  44. package/docs/pages/components/sharing-options/doc.md +13 -0
  45. package/docs/pages/components/sharing-options-link/doc.md +36 -0
  46. package/docs/pages/components/sign-up-form/doc.md +13 -0
  47. package/docs/pages/components/slide-up-down/doc.md +28 -0
  48. package/docs/pages/components/textured-deck/doc.md +78 -0
  49. package/docs/pages/components/tiny-pagination/doc.md +92 -0
  50. package/docs/pages/datavisualisation/bars/doc.md +110 -0
  51. package/docs/pages/datavisualisation/columns/doc.md +165 -0
  52. package/docs/pages/datavisualisation/lines/doc.md +139 -0
  53. package/docs/pages/datavisualisation/stacked-bar/doc.md +160 -0
  54. package/docs/pages/datavisualisation/stacked-column/doc.md +191 -0
  55. package/docs/pages/getting-started/about-icij/doc.md +13 -0
  56. package/docs/pages/getting-started/custom-bootstrap/doc.md +36 -0
  57. package/docs/pages/getting-started/installation-guide/doc.md +59 -0
  58. package/docs/pages/getting-started/internationalization/doc.md +74 -0
  59. package/docs/pages/maps/choropleth-map/doc.md +420 -0
  60. package/docs/pages/maps/choropleth-map-annotation/doc.md +373 -0
  61. package/docs/pages/maps/symbol-map/doc.md +203 -0
  62. package/docs/pages/structure/breakpoints/doc.md +3 -0
  63. package/docs/pages/structure/grid/doc.md +3 -0
  64. package/docs/pages/utilities/assets/doc.md +138 -0
  65. package/docs/pages/utilities/config/doc.md +52 -0
  66. package/docs/pages/utilities/iframes/doc.md +3 -0
  67. package/docs/pages/visual/colors/doc.md +31 -0
  68. package/docs/pages/visual/iconography/doc.md +56 -0
  69. package/docs/pages/visual/states/doc.md +77 -0
  70. package/docs/pages/visual/themes/doc.md +3 -0
  71. package/docs/pages/visual/typography/doc.md +71 -0
  72. package/docs/routes.js +25 -0
  73. package/docs/store/index.js +21 -0
  74. package/docs/styles/app.scss +36 -0
  75. package/docs/styles/variables.scss +20 -0
  76. package/lib/assets/images/icij-full-white.svg +6 -0
  77. package/lib/assets/images/icij-full.svg +6 -0
  78. package/lib/assets/images/icij.png +0 -0
  79. package/lib/assets/images/icij.svg +46 -0
  80. package/lib/assets/images/icij@2x.png +0 -0
  81. package/lib/assets/images/murmur-dark.png +0 -0
  82. package/lib/assets/images/murmur-dark.svg +79 -0
  83. package/lib/assets/images/murmur-white.png +0 -0
  84. package/lib/assets/images/murmur-white.svg +68 -0
  85. package/lib/components/AccordionStep.vue +128 -0
  86. package/lib/components/AccordionWrapper.vue +138 -0
  87. package/lib/components/ActiveTextTruncate.vue +258 -0
  88. package/lib/components/AdvancedLinkForm.vue +273 -0
  89. package/lib/components/Brand.vue +150 -0
  90. package/lib/components/BrandExpansion.vue +237 -0
  91. package/lib/components/ConfirmButton.vue +204 -0
  92. package/lib/components/ContentPlaceholder.vue +100 -0
  93. package/lib/components/CustomPagination.vue +225 -0
  94. package/lib/components/DigitsInput.vue +180 -0
  95. package/lib/components/DonateForm.vue +367 -0
  96. package/lib/components/EmbedForm.vue +173 -0
  97. package/lib/components/EmbeddableFooter.vue +201 -0
  98. package/lib/components/Fa.js +3 -0
  99. package/lib/components/FollowUsPopover.vue +117 -0
  100. package/lib/components/GenericFooter.vue +218 -0
  101. package/lib/components/GenericHeader.vue +259 -0
  102. package/lib/components/HapticCopy.vue +256 -0
  103. package/lib/components/ImddbHeader.vue +336 -0
  104. package/lib/components/OrdinalLegend.vue +164 -0
  105. package/lib/components/RangePicker.vue +430 -0
  106. package/lib/components/ResponsiveIframe.vue +48 -0
  107. package/lib/components/ScaleLegend.vue +230 -0
  108. package/lib/components/SecretInput.vue +132 -0
  109. package/lib/components/SelectableDropdown.vue +368 -0
  110. package/lib/components/SharingOptions.vue +230 -0
  111. package/lib/components/SharingOptionsLink.vue +259 -0
  112. package/lib/components/SignUpForm.vue +181 -0
  113. package/lib/components/SlideUpDown.vue +131 -0
  114. package/lib/components/TexturedDeck.vue +101 -0
  115. package/lib/components/TinyPagination.vue +268 -0
  116. package/lib/components/index.js +31 -0
  117. package/lib/composables/chart.ts +182 -0
  118. package/lib/composables/resizeObserver.ts +37 -0
  119. package/lib/composables/sendEmail.ts +50 -0
  120. package/lib/config.default.ts +33 -0
  121. package/lib/config.ts +70 -0
  122. package/lib/d3-geo-projection.d.ts +1 -0
  123. package/lib/datavisualisations/BarChart.vue +275 -0
  124. package/lib/datavisualisations/ColumnChart.vue +527 -0
  125. package/lib/datavisualisations/LineChart.vue +274 -0
  126. package/lib/datavisualisations/StackedBarChart.vue +614 -0
  127. package/lib/datavisualisations/StackedColumnChart.vue +640 -0
  128. package/lib/datavisualisations/index.js +5 -0
  129. package/lib/enums.ts +25 -0
  130. package/lib/i18n.ts +16 -0
  131. package/lib/keys.ts +2 -0
  132. package/lib/locales/en.json +140 -0
  133. package/lib/locales/fr.json +117 -0
  134. package/lib/locales/locales/en.json +140 -0
  135. package/lib/locales/locales/fr.json +117 -0
  136. package/lib/main.ts +87 -0
  137. package/lib/maps/ChoroplethMap.vue +825 -0
  138. package/lib/maps/ChoroplethMapAnnotation.vue +336 -0
  139. package/lib/maps/SymbolMap.vue +628 -0
  140. package/lib/maps/index.js +3 -0
  141. package/lib/querystring-es3.d.ts +1 -0
  142. package/lib/shims-bootstrap-vue.d.ts +5 -0
  143. package/lib/shims-tsx.d.ts +11 -0
  144. package/lib/shims-vue.d.ts +14 -0
  145. package/lib/styles/functions.scss +20 -0
  146. package/lib/styles/lib.scss +19 -0
  147. package/lib/styles/mixins.scss +37 -0
  148. package/lib/styles/utilities.scss +18 -0
  149. package/lib/styles/variables.scss +94 -0
  150. package/lib/styles/variables_dark.scss +1 -0
  151. package/lib/types.ts +46 -0
  152. package/lib/utils/animation.ts +24 -0
  153. package/lib/utils/assets.ts +46 -0
  154. package/lib/utils/clipboard.ts +41 -0
  155. package/lib/utils/iframe-resizer.ts +49 -0
  156. package/lib/utils/placeholder.ts +66 -0
  157. package/lib/utils/placeholderTypes.ts +21 -0
  158. package/lib/utils/strings.ts +8 -0
  159. package/loaders/highlight-loader.js +13 -0
  160. package/loaders/markdown-loader.js +91 -0
  161. package/loaders/metadata-loader.js +18 -0
  162. package/loaders/sass-extract-loader.js +14 -0
  163. package/loaders/vue-docgen-loader.js +14 -0
  164. package/package.json +96 -0
  165. package/plugins/MdPluginTypes.ts +10 -0
  166. package/plugins/docs.ts +50 -0
  167. package/plugins/front-matter.ts +36 -0
  168. package/plugins/highlight.ts +27 -0
  169. package/plugins/markdown-it/api-table.ts +25 -0
  170. package/plugins/markdown-it/sample-card.ts +31 -0
  171. package/plugins/plugin-delete.ts +47 -0
  172. package/plugins/plugin-docgen.ts +23 -0
  173. package/plugins/sass-vars.ts +25 -0
  174. package/plugins/vue-docgen.ts +29 -0
  175. package/public/android-chrome-192x192.png +0 -0
  176. package/public/android-chrome-512x512.png +0 -0
  177. package/public/apple-touch-icon.png +0 -0
  178. package/public/assets/img/arrow-bottom.svg +3 -0
  179. package/public/assets/img/texture-brick-black.jpg +0 -0
  180. package/public/assets/img/texture-brick.jpg +0 -0
  181. package/public/assets/img/texture-carbon-black.jpg +0 -0
  182. package/public/assets/img/texture-carbon.jpg +0 -0
  183. package/public/assets/img/texture-crack-black.jpg +0 -0
  184. package/public/assets/img/texture-crack.jpg +0 -0
  185. package/public/assets/img/texture-rock-black.jpg +0 -0
  186. package/public/assets/img/texture-rock.jpg +0 -0
  187. package/public/assets/img/texture-sand-black.jpg +0 -0
  188. package/public/assets/img/texture-sand.jpg +0 -0
  189. package/public/assets/img/texture-silk-black.jpg +0 -0
  190. package/public/assets/img/texture-silk.jpg +0 -0
  191. package/public/assets/topojson/france-departments.json +1 -0
  192. package/public/assets/topojson/paris-arrondissements.json +1 -0
  193. package/public/assets/topojson/world-countries-sans-antarctica.json +1 -0
  194. package/public/favicon-16x16.png +0 -0
  195. package/public/favicon-32x32.png +0 -0
  196. package/public/favicon.ico +0 -0
  197. package/public/site.webmanifest +1 -0
  198. package/stories/assets/code-brackets.svg +1 -0
  199. package/stories/assets/colors.svg +1 -0
  200. package/stories/assets/comments.svg +1 -0
  201. package/stories/assets/direction.svg +1 -0
  202. package/stories/assets/flow.svg +1 -0
  203. package/stories/assets/plugin.svg +1 -0
  204. package/stories/assets/repo.svg +1 -0
  205. package/stories/assets/stackalt.svg +1 -0
  206. package/stories/getting-started/about-icij.mdx +14 -0
  207. package/stories/getting-started/custom-bootstrap.mdx +23 -0
  208. package/stories/getting-started/installation-guide.mdx +62 -0
  209. package/stories/getting-started/internationalization.mdx +63 -0
  210. package/stories/murmur/components/AccordionStep.stories.ts +33 -0
  211. package/stories/murmur/components/AccordionWrapper.stories.ts +69 -0
  212. package/stories/murmur/components/ActiveTextTruncate.stories.ts +32 -0
  213. package/stories/murmur/components/AdvancedLinkForm.stories.ts +77 -0
  214. package/stories/murmur/components/Brand.stories.ts +30 -0
  215. package/stories/murmur/components/BrandExpansion.stories.ts +41 -0
  216. package/stories/murmur/components/ConfirmButton.stories.ts +40 -0
  217. package/stories/murmur/components/ContentPlaceholder.stories.ts +41 -0
  218. package/stories/murmur/components/CustomPagination.stories.ts +42 -0
  219. package/stories/murmur/components/DigitsInput.stories.ts +29 -0
  220. package/stories/murmur/components/DonateForm.stories.ts +29 -0
  221. package/stories/murmur/components/EmbedForm.stories.ts +35 -0
  222. package/stories/murmur/components/EmbeddableFooter.stories.ts +59 -0
  223. package/stories/murmur/components/FollowUsPopover.stories.ts +24 -0
  224. package/stories/murmur/components/GenericFooter.stories.ts +27 -0
  225. package/stories/murmur/components/GenericHeader.stories.ts +27 -0
  226. package/stories/murmur/components/HapticCopy.stories.ts +40 -0
  227. package/stories/murmur/components/ImddbHeader.stories.ts +27 -0
  228. package/stories/murmur/components/OrdinalLegend.stories.ts +49 -0
  229. package/stories/murmur/components/RangePicker.stories.ts +98 -0
  230. package/stories/murmur/components/ResponsiveIframe.stories.ts +24 -0
  231. package/stories/murmur/components/ScaleLegend.stories.ts +65 -0
  232. package/stories/murmur/components/SecretInput.stories.ts +60 -0
  233. package/stories/murmur/components/SelectableDropdown.stories.ts +143 -0
  234. package/stories/murmur/components/SharingOptions.stories.ts +32 -0
  235. package/stories/murmur/components/SharingOptionsLink.stories.ts +53 -0
  236. package/stories/murmur/components/SignUpForm.stories.ts +51 -0
  237. package/stories/murmur/components/SlideUpDown.stories.ts +32 -0
  238. package/stories/murmur/components/TexturedDeck.stories.ts +83 -0
  239. package/stories/murmur/components/TinyPagination.stories.ts +65 -0
  240. package/stories/murmur/datavisualisations/BarChart.stories.ts +54 -0
  241. package/stories/murmur/datavisualisations/ColumnChart.stories.ts +88 -0
  242. package/stories/murmur/datavisualisations/LineChart.stories.ts +139 -0
  243. package/stories/murmur/datavisualisations/StackedBarChart.stories.ts +199 -0
  244. package/stories/murmur/datavisualisations/StackedColumnChart.stories.ts +136 -0
  245. package/stories/murmur/decorators.ts +108 -0
  246. package/stories/murmur/maps/ChoroplethMap.stories.ts +440 -0
  247. package/stories/murmur/maps/ChoroplethMapAnnotation.stories.ts +26 -0
  248. package/stories/murmur/maps/SymbolMap.stories.ts +24 -0
  249. package/stories/murmur/utils.ts +7 -0
  250. package/tests/unit/components/AccordionStep.spec.ts +157 -0
  251. package/tests/unit/components/AccordionWrapper.spec.ts +57 -0
  252. package/tests/unit/components/ActiveTextTruncate.spec.js +30 -0
  253. package/tests/unit/components/AdvancedLinkForm.spec.js +124 -0
  254. package/tests/unit/components/Brand.spec.js +50 -0
  255. package/tests/unit/components/ContentPlaceholder.spec.js +29 -0
  256. package/tests/unit/components/CustomPagination.spec.js +72 -0
  257. package/tests/unit/components/DigitsInput.spec.ts +157 -0
  258. package/tests/unit/components/DonateForm.spec.js +149 -0
  259. package/tests/unit/components/EmbedForm.spec.js +108 -0
  260. package/tests/unit/components/EmbeddableFooter.spec.js +11 -0
  261. package/tests/unit/components/Fa.spec.js +18 -0
  262. package/tests/unit/components/FollowUsPopover.spec.js +29 -0
  263. package/tests/unit/components/GenericFooter.spec.js +29 -0
  264. package/tests/unit/components/GenericHeader.spec.js +104 -0
  265. package/tests/unit/components/HapticCopy.spec.js +123 -0
  266. package/tests/unit/components/ImddbHeader.spec.js +96 -0
  267. package/tests/unit/components/OrdinalLegend.spec.js +120 -0
  268. package/tests/unit/components/RangePicker.spec.ts +87 -0
  269. package/tests/unit/components/ResponsiveIframe.spec.js +20 -0
  270. package/tests/unit/components/ScaleLegend.spec.js +139 -0
  271. package/tests/unit/components/SecretInput.spec.js +81 -0
  272. package/tests/unit/components/SelectableDropdown.spec.js +160 -0
  273. package/tests/unit/components/SharingOptions.spec.js +125 -0
  274. package/tests/unit/components/SharingOptionsLink.spec.js +184 -0
  275. package/tests/unit/components/SignUpForm.spec.js +145 -0
  276. package/tests/unit/components/SlideUpDown.spec.js +59 -0
  277. package/tests/unit/components/TinyPagination.spec.js +46 -0
  278. package/tests/unit/config.spec.js +136 -0
  279. package/tests/unit/datavisualisations/BarChart.spec.js +63 -0
  280. package/tests/unit/datavisualisations/ColumnChart.spec.js +344 -0
  281. package/tests/unit/datavisualisations/LineChart.spec.js +155 -0
  282. package/tests/unit/datavisualisations/StackedBarChart.spec.js +294 -0
  283. package/tests/unit/datavisualisations/StackedColumnChart.spec.js +443 -0
  284. package/tests/unit/i18n.spec.ts +19 -0
  285. package/tests/unit/main.spec.js +82 -0
  286. package/tests/unit/maps/ChoroplethMap.spec.js +214 -0
  287. package/tests/unit/maps/ChoroplethMapAnnotation.spec.ts +186 -0
  288. package/tests/unit/maps/SymbolMap.spec.js +92 -0
  289. package/tests/unit/require.spec.js +22 -0
  290. package/tests/unit/setup.js +13 -0
  291. package/tests/unit/utils/assets.spec.js +61 -0
  292. package/tests/unit/utils/clipboard.spec.js +18 -0
  293. package/tests/unit/utils/iframe-resizer.spec.js +71 -0
  294. package/tsconfig.json +35 -0
  295. package/vite.config.ts +79 -0
  296. package/vitest.config.ts +19 -0
@@ -0,0 +1,108 @@
1
+ import {BModal, BPopover, useModal} from "bootstrap-vue-next";
2
+ import {Size} from "@/enums";
3
+ import {toRefs} from "vue";
4
+ import {geoOrthographic} from "d3-geo";
5
+ import {defineComponent} from "vue";
6
+ import {ChoroplethMap} from "@/maps";
7
+
8
+ export default defineComponent({
9
+ components: {ChoroplethMap}
10
+ })
11
+
12
+
13
+ export const modalDecorator = (buttonLabel:string="Click to see the form",modalTitle:string|null,size:Size=Size.md) => ({
14
+ components: {BModal},
15
+ setup() {
16
+ const {show} = useModal('formModal')
17
+ return {show,buttonLabel,modalTitle,size};
18
+ },
19
+ template: `
20
+ <div class="p-4 text-center">
21
+ <button class="btn btn-info fw-bold" @click="show">
22
+ {{buttonLabel}}
23
+ </button>
24
+ </div>
25
+ <b-modal hide-footer lazy :title="modalTitle" id="formModal" :size="size" no-headings>
26
+ <story/>
27
+ </b-modal>`
28
+ })
29
+
30
+
31
+ export const popoverDecorator = () => ({
32
+ components: { BPopover },
33
+ template:`<div>
34
+ <div class="p-4 text-center">
35
+ <button class="btn btn-info fw-bold" id="popover-button-sample">
36
+ Click to see the form
37
+ </button>
38
+ </div>
39
+ <b-popover target="popover-button-sample" placement="right" >
40
+ <story id="popover-button-sample"/>
41
+ </b-popover>
42
+ </div>`
43
+ })
44
+
45
+ export const toggleDecorator = (_storyFn:any,context:any) => ({
46
+ setup() {
47
+ const { active } = toRefs( context.args)
48
+ function onClick(){
49
+ active.value = !active.value
50
+ }
51
+ return {onClick}
52
+ },
53
+ template:`
54
+ <div class="card card-xs mx-auto m-4" >
55
+ <story />
56
+ <div class="card-footer text-center">
57
+ <button @click="onClick" type="button" class="btn btn-info">
58
+ Click to toggle
59
+ </button>
60
+ </div>
61
+ </div>`
62
+ })
63
+
64
+
65
+ export const bgStripedDecorator = () => ({ template: '<div class="p-2 bg-striped"><story/></div>' })
66
+ export const leakSizeDecorator = () => ({
67
+ template: `
68
+ <h4>Leaks size</h4>
69
+ <p class="text-muted">
70
+ Size of each ICIJ's leak.
71
+ </p>
72
+ <story/>
73
+ <p class="text-muted small">
74
+ Source: ICIJ.
75
+ </p>`
76
+ })
77
+
78
+ export const icijOfficesDecorator = ()=>({
79
+ template:`
80
+ <h4>ICIJ Offices</h4>
81
+ <p class="mb-4">A non-exhaustive list of ICIJ offices and operations.</p>
82
+ <story/>
83
+ `
84
+ })
85
+ export const choroplethDecorator = (fn,ctx)=>({
86
+ components:[ChoroplethMap],
87
+ decorators:[icijOfficesDecorator],
88
+ setup(){
89
+ const props = {
90
+ color:"#faa",
91
+ outlineColor:"#000",
92
+ graticuleColor:"#eee",
93
+ graticule:true ,
94
+ outline:true ,
95
+ hideLegend:true ,
96
+ zoomable:true ,
97
+ spherical:true,
98
+ zoomMin:0.9,
99
+ projection:geoOrthographic
100
+ }
101
+ return {props}
102
+ },
103
+ template:`
104
+ <choropleth-map v-bind="props" >
105
+ <story/>
106
+ </choropleth-map>
107
+ `
108
+ })
@@ -0,0 +1,440 @@
1
+ import { ChoroplethMap,ChoroplethMapAnnotation } from "@/maps";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import { scaleThreshold } from 'd3'
4
+ import { geoOrthographic } from 'd3-geo'
5
+ const motorVehiclesPer1000people= {
6
+ "MCO": 899,
7
+ "USA": 797,
8
+ "LIE": 750,
9
+ "ISL": 745,
10
+ "LUX": 739,
11
+ "AUS": 717,
12
+ "NZL": 712,
13
+ "MLT": 693,
14
+ "ITA": 679,
15
+ "GUM": 677,
16
+ "PRI": 635,
17
+ "GRC": 624,
18
+ "FIN": 612,
19
+ "CAN": 607,
20
+ "ESP": 593,
21
+ "JPN": 591,
22
+ "NOR": 584,
23
+ "FRA": 578,
24
+ "AUT": 578,
25
+ "DEU": 572,
26
+ "SVN": 567,
27
+ "CHE": 566,
28
+ "LTU": 560,
29
+ "BEL": 559,
30
+ "PRT": 548,
31
+ "BHR": 537,
32
+ "POL": 537,
33
+ "QAT": 532,
34
+ "CYP": 532,
35
+ "NLD": 528,
36
+ "KWT": 527,
37
+ "SWE": 520,
38
+ "GBR": 519,
39
+ "IRL": 513,
40
+ "BRN": 510,
41
+ "CZE": 485,
42
+ "DNK": 480,
43
+ "EST": 476,
44
+ "BRB": 469,
45
+ "LBN": 434,
46
+ "BGR": 393,
47
+ "HRV": 380,
48
+ "KOR": 376,
49
+ "SVK": 364,
50
+ "BLR": 362,
51
+ "MYS": 361,
52
+ "TTO": 353,
53
+ "ISR": 346,
54
+ "HUN": 345,
55
+ "SAU": 336,
56
+ "TWN": 324,
57
+ "LVA": 319,
58
+ "ARG": 314,
59
+ "ARE": 313,
60
+ "MNE": 309,
61
+ "RUS": 293,
62
+ "SUR": 291,
63
+ "LBY": 290,
64
+ "MEX": 275,
65
+ "BRA": 249,
66
+ "SRB": 238,
67
+ "ROU": 235,
68
+ "ATG": 230,
69
+ "KNA": 223,
70
+ "KAZ": 219,
71
+ "OMN": 215,
72
+ "BIH": 214,
73
+ "THA": 206,
74
+ "VCT": 204,
75
+ "IRN": 200,
76
+ "URY": 200,
77
+ "JAM": 188,
78
+ "CHL": 184,
79
+ "FJI": 179,
80
+ "CRI": 177,
81
+ "SYC": 176,
82
+ "MUS": 175,
83
+ "BLZ": 174,
84
+ "TON": 174,
85
+ "UKR": 173,
86
+ "LCA": 166,
87
+ "JOR": 165,
88
+ "ZAF": 165,
89
+ "DMA": 163,
90
+ "NRU": 159,
91
+ "MDA": 156,
92
+ "GEO": 155,
93
+ "MKD": 155,
94
+ "SGP": 149,
95
+ "VEN": 147,
96
+ "KIR": 146,
97
+ "TUR": 144,
98
+ "BWA": 133,
99
+ "PAN": 132,
100
+ "DOM": 128,
101
+ "TUN": 125,
102
+ "ALB": 124,
103
+ "GRD": 122,
104
+ "ZWE": 114,
105
+ "DZA": 114,
106
+ "NAM": 107,
107
+ "TKM": 106,
108
+ "ARM": 103,
109
+ "CPV": 101,
110
+ "AZE": 101,
111
+ "GUY": 95,
112
+ "HND": 95,
113
+ "SLV": 94,
114
+ "SWZ": 89,
115
+ "CHN": 83,
116
+ "BHS": 81,
117
+ "HKG": 77,
118
+ "WSM": 77,
119
+ "LKA": 76,
120
+ "SYR": 73,
121
+ "PER": 73,
122
+ "MNG": 72,
123
+ "ECU": 71,
124
+ "COL": 71,
125
+ "MAR": 70,
126
+ "BOL": 68,
127
+ "GTM": 68,
128
+ "IDN": 60,
129
+ "KGZ": 59,
130
+ "NIC": 57,
131
+ "BTN": 57,
132
+ "VUT": 54,
133
+ "PRY": 54,
134
+ "IRQ": 50,
135
+ "EGY": 45,
136
+ "PSE": 42,
137
+ "TJK": 38,
138
+ "CUB": 38,
139
+ "AGO": 38,
140
+ "UZB": 37,
141
+ "FSM": 37,
142
+ "YEM": 35,
143
+ "GNB": 33,
144
+ "COM": 33,
145
+ "NGA": 31,
146
+ "PHL": 30,
147
+ "GHA": 30,
148
+ "AFG": 28,
149
+ "MDV": 28,
150
+ "DJI": 28,
151
+ "COG": 27,
152
+ "SDN": 27,
153
+ "MDG": 26,
154
+ "KEN": 24,
155
+ "VNM": 23,
156
+ "SEN": 22,
157
+ "BEN": 22,
158
+ "KHM": 21,
159
+ "ZMB": 21,
160
+ "LAO": 20,
161
+ "CIB": 20,
162
+ "PAK": 18,
163
+ "IND": 18,
164
+ "CMR": 14,
165
+ "GAB": 14,
166
+ "MLI": 14,
167
+ "PNG": 13,
168
+ "GNQ": 13,
169
+ "BFA": 12,
170
+ "MOZ": 12,
171
+ "HTI": 12,
172
+ "ERI": 11,
173
+ "PRK": 11,
174
+ "MWI": 8,
175
+ "UGA": 8,
176
+ "TZA": 7,
177
+ "NER": 7,
178
+ "GMB": 7,
179
+ "MMR": 7,
180
+ "SLE": 6,
181
+ "TCD": 6,
182
+ "BDI": 6,
183
+ "GIN": 5,
184
+ "RWA": 5,
185
+ "NPL": 5,
186
+ "MRT": 5,
187
+ "COD": 5,
188
+ "CAF": 4,
189
+ "LSA": 4,
190
+ "ETH": 3,
191
+ "LBR": 3,
192
+ "BGD": 3,
193
+ "SLB": 3,
194
+ "SOM": 3,
195
+ "TGO": 2
196
+ }
197
+ const wineStockByDepartment= {
198
+ "01": 10155,
199
+ "02": 686,
200
+ "03": 851,
201
+ "04": 1786,
202
+ "05": 225,
203
+ "06": 66,
204
+ "07": 21156,
205
+ "08": 165,
206
+ "09": 0,
207
+ "10": 7731,
208
+ "11": 207334,
209
+ "12": 0,
210
+ "13": 1699268,
211
+ "14": 325321,
212
+ "15": 4002,
213
+ "16": 11038,
214
+ "17": 493,
215
+ "18": 2712,
216
+ "19": 29,
217
+ "2A": 0,
218
+ "2B": 22518,
219
+ "21": 147630,
220
+ "22": 170,
221
+ "23": 0,
222
+ "24": 40713,
223
+ "25": 0,
224
+ "26": 1115,
225
+ "27": 410,
226
+ "28": 0,
227
+ "29": 0,
228
+ "30": 168319,
229
+ "31": 14023,
230
+ "32": 23450,
231
+ "33": 2416742,
232
+ "34": 856268,
233
+ "35": 9899,
234
+ "36": 267,
235
+ "37": 7179,
236
+ "38": 68,
237
+ "39": 17025,
238
+ "40": 986,
239
+ "41": 53451,
240
+ "42": 8154,
241
+ "43": 1576,
242
+ "44": 120456,
243
+ "45": 4569,
244
+ "46": 15274,
245
+ "47": 1061,
246
+ "48": 62,
247
+ "49": 48127,
248
+ "50": 0,
249
+ "51": 146309,
250
+ "52": 506,
251
+ "53": 906,
252
+ "54": 0,
253
+ "55": 0,
254
+ "56": 0,
255
+ "57": 642,
256
+ "58": 960,
257
+ "59": 3355,
258
+ "60": 424,
259
+ "61": 44,
260
+ "62": 101972,
261
+ "63": 1001,
262
+ "64": 8380,
263
+ "65": 0,
264
+ "66": 80076,
265
+ "67": 219631,
266
+ "68": 6173,
267
+ "69": 232683,
268
+ "70": 0,
269
+ "71": 431251,
270
+ "72": 23,
271
+ "73": 1,
272
+ "74": 29,
273
+ "75": 1486,
274
+ "76": 26255,
275
+ "77": 118021,
276
+ "78": 74781,
277
+ "79": 103690,
278
+ "80": 413,
279
+ "81": 7780,
280
+ "82": 31273,
281
+ "83": 160518,
282
+ "84": 218890,
283
+ "85": 0,
284
+ "86": 3688,
285
+ "87": 803,
286
+ "88": 0,
287
+ "89": 26907,
288
+ "90": 0,
289
+ "91": 8749,
290
+ "92": 11208,
291
+ "93": 4595,
292
+ "94": 13394,
293
+ "95": 840
294
+ }
295
+ function featureColorScale () {
296
+ const scale = scaleThreshold()
297
+ .domain([100, 300, 700])
298
+ .range(["#ffffcc","#c2e699","#78c679", "#238443"]);
299
+ return scale
300
+ }
301
+ export default {
302
+ title: 'Murmur/maps/ChoroplethMap',
303
+ component: ChoroplethMap,
304
+ tags: ['autodocs'],
305
+ argTypes: {
306
+ }
307
+ };
308
+
309
+ type Story = StoryObj<typeof ChoroplethMap>;
310
+ const Template: Story = (args: any) => ({
311
+ components: { ChoroplethMap },
312
+ setup() {
313
+ return { args };
314
+ },
315
+ template: `<ChoroplethMap v-bind="args" />`
316
+ });
317
+
318
+ export const Default = Template.bind({});
319
+ Default.args = {
320
+ data:motorVehiclesPer1000people
321
+ };
322
+ export const hatchEmpty = Template.bind({});
323
+ hatchEmpty.args = {
324
+ data:motorVehiclesPer1000people,
325
+ hatchEmpty:true
326
+ };
327
+ export const Zoomable = Template.bind({});
328
+ Zoomable.args = {
329
+ data:motorVehiclesPer1000people,
330
+ hatchEmpty:true,
331
+ zoomable:true
332
+ };
333
+ export const FeatureColorScale = Template.bind({});
334
+ FeatureColorScale.args = {
335
+ data:motorVehiclesPer1000people,
336
+ featureColorScale:featureColorScale()
337
+ };
338
+
339
+ export const Topojson = Template.bind({});
340
+ Topojson.args = {
341
+ data:wineStockByDepartment,
342
+ clickable:true,
343
+ zoomable:true,
344
+ topojsonUrl:"./assets/topojson/france-departments.json",
345
+ topojsonObjects:"departements",
346
+ topojsonObjectsPath:"properties.code",
347
+ };
348
+ const TemplateLegend: Story = (args: any) => ({
349
+ components: { ChoroplethMap },
350
+ setup() {
351
+ return { args };
352
+ },
353
+ template: `
354
+ <choropleth-map v-bind="args">
355
+ <template #legend-cursor="{ value, identifier }">
356
+ <div class="bg-dark text-light px-2 py-1 text-nowrap">
357
+ <span>{{value.toLocaleString()}} hl</span>
358
+ </div>
359
+ </template>
360
+
361
+ </choropleth-map>`
362
+ });
363
+ export const TopojsonLegend = TemplateLegend.bind({});
364
+ TopojsonLegend.args = {
365
+ data:wineStockByDepartment,
366
+ clickable:true,
367
+ zoomable:true,
368
+ topojsonUrl:"./assets/topojson/france-departments.json",
369
+ topojsonObjects:"departements",
370
+ topojsonObjectsPath:"properties.code"
371
+ };
372
+ const TemplateAnnotation: Story = (args: any) => ({
373
+ components: { ChoroplethMap ,ChoroplethMapAnnotation},
374
+ setup() {
375
+ const annotation={
376
+ latitude: 44.836151,
377
+ longitude: -0.580816,
378
+ placement:"righttop",
379
+ class:"text-center",
380
+ }
381
+ return { args,annotation };
382
+ },
383
+ template: `
384
+ <choropleth-map v-bind="args">
385
+ <template #legend-cursor="{ value, identifier }">
386
+ <div class="bg-dark text-light px-2 py-1 text-nowrap">
387
+ <span>{{value.toLocaleString()}} hl</span>
388
+ </div>
389
+ </template>
390
+ <choropleth-map-annotation v-bind="annotation">
391
+ Bordeaux<br /><img src="/assets/img/arrow-bottom.svg" width="16px" />
392
+ </choropleth-map-annotation>
393
+ </choropleth-map>`
394
+ });
395
+ export const TopojsonAnnotation = TemplateAnnotation.bind({});
396
+ TopojsonAnnotation.args = {
397
+ data:wineStockByDepartment,
398
+ clickable:true,
399
+ zoomable:true,
400
+ topojsonUrl:"./assets/topojson/france-departments.json",
401
+ topojsonObjects:"departements",
402
+ topojsonObjectsPath:"properties.code",
403
+
404
+ };
405
+ const TemplateCustomProjection: Story = (args: any) => ({
406
+ components: { ChoroplethMap ,ChoroplethMapAnnotation},
407
+ setup() {
408
+ const annotation={
409
+ class:"text-center",
410
+ height:15,
411
+ latitude:35.167406,
412
+ longitude:33.435499,
413
+ width:15,
414
+ dropShadow:"none",
415
+ scale:true
416
+ }
417
+ return { args,annotation };
418
+ },
419
+ template: `
420
+ <choropleth-map v-bind="args">
421
+ <choropleth-map-annotation v-bind="annotation">
422
+ <div class="border border-warning" style="height: 15px; width: 15px"></div>
423
+ </choropleth-map-annotation>
424
+ </choropleth-map>`
425
+ });
426
+
427
+ export const CustomProjection = TemplateCustomProjection.bind({})
428
+ CustomProjection.args = {
429
+ center:[33.435499, 35.167406],
430
+ projection:geoOrthographic,
431
+ zoomMin:0.9,
432
+ color:"#aaf",
433
+ outlineColor:"#fff",
434
+ graticuleColor:"#333",
435
+ graticule:true,
436
+ hideLegend:true,
437
+ outline:true ,
438
+ spherical:true,
439
+ zoomable:true
440
+ };
@@ -0,0 +1,26 @@
1
+ import { ChoroplethMapAnnotation } from "@/maps";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/maps/ChoroplethMapAnnotation',
6
+ component: ChoroplethMapAnnotation,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ }
10
+ };
11
+
12
+ type Story = StoryObj<typeof ChoroplethMapAnnotation>;
13
+ const Template: Story = (args: any) => ({
14
+ components: { ChoroplethMapAnnotation },
15
+ setup() {
16
+ return { args };
17
+ },
18
+ template: `<ChoroplethMapAnnotation v-bind="args" />`
19
+ });
20
+
21
+
22
+
23
+ export const Default = Template.bind({});
24
+ Default.args = {
25
+
26
+ };
@@ -0,0 +1,24 @@
1
+ import { SymbolMap } from "@/maps";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/maps/SymbolMap',
6
+ component: SymbolMap,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ }
10
+ };
11
+
12
+ type Story = StoryObj<typeof SymbolMap>;
13
+ const Template: Story = (args: any) => ({
14
+ components: { SymbolMap },
15
+ setup() {
16
+ return { args };
17
+ },
18
+ template: `<SymbolMap v-bind="args" />`
19
+ });
20
+
21
+ export const Default = Template.bind({});
22
+ Default.args = {
23
+
24
+ };
@@ -0,0 +1,7 @@
1
+ export function humanReadableGb(size: number) {
2
+ if (size >= 1e3) {
3
+ return `${size / 1e3}TB`
4
+ } else {
5
+ return `${size}GB`
6
+ }
7
+ }