@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,49 @@
1
+ import { OrdinalLegend } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+
5
+ const data = {
6
+ highlighted: 'dc',
7
+ icijOffices: [
8
+ { id: 'paris', color: '#6e40aa', label: 'Paris, France' },
9
+ { id: 'sydney', color: '#ff5e63', label: 'Sydney, Australia' },
10
+ { id: 'dc', color: '#aff05b', label: 'Washington DC, USA' }
11
+ ]}
12
+ export default {
13
+ title: 'Murmur/components/OrdinalLegend',
14
+ component: OrdinalLegend,
15
+ tags: ['autodocs'],
16
+ argTypes: {
17
+ }
18
+ };
19
+
20
+ type Story = StoryObj<typeof OrdinalLegend>;
21
+ const Template: Story = (args: any) => ({
22
+ components: { OrdinalLegend },
23
+ setup() {
24
+ return { args };
25
+ },
26
+ template: '<OrdinalLegend v-bind="args" />',
27
+ });
28
+
29
+ export const Default = Template.bind({});
30
+ Default.args = {
31
+ data:data.icijOffices,
32
+ value:"paris"
33
+ };
34
+ export const Horizontal = Template.bind({});
35
+ Horizontal.args = {
36
+ data:data.icijOffices,
37
+ horizontal:true
38
+ };
39
+ export const Highlighted = Template.bind({});
40
+ Highlighted.args = {
41
+ data:data.icijOffices,
42
+ highlight:data.highlighted,
43
+ horizontal:true
44
+ };
45
+ export const CustomMarker = Template.bind({});
46
+ CustomMarker.args = {
47
+ data:data.icijOffices,
48
+ markerPath:"M384 192C384 279.4 267 435 215.7 499.2C203.4 514.5 180.6 514.5 168.3 499.2C116.1 435 0 279.4 0 192C0 85.96 85.96 0 192 0C298 0 384 85.96 384 192H384z"
49
+ };
@@ -0,0 +1,98 @@
1
+ import { RangePicker } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import {BBadge} from "bootstrap-vue-next";
4
+ import {ColumnChart} from "../../../lib/main";
5
+ import {range} from "lodash";
6
+ import {computed} from "vue";
7
+
8
+ export default {
9
+ title: 'Murmur/components/RangePicker',
10
+ component: RangePicker,
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ }
14
+ };
15
+
16
+ type Story = StoryObj<typeof RangePicker>;
17
+ const Template: Story = (args: any) => ({
18
+ components: { RangePicker, BBadge },
19
+ setup() {
20
+ return { args };
21
+ },
22
+ template: `<RangePicker v-bind="args" ></RangePicker>`
23
+ });
24
+ export const Default = Template.bind({});
25
+ Default.decorators=[()=>({template:`<div style="width:500px;"><story/></div>`})]
26
+ Default.args = {
27
+ range:[5,10]
28
+ }
29
+
30
+ export const WithOffsets = (args: any) => ({
31
+ components: { RangePicker, BBadge },
32
+ setup() {
33
+ return { args };
34
+ },
35
+ template: `
36
+ <RangePicker v-bind="args" >
37
+ <div class="bg-white p-3 text-center text-uppercase">
38
+ <b-badge>{{ args.range[0] * 100 }}%</b-badge> - <b-badge>{{ args.range[1] * 100 }}%</b-badge>
39
+ </div>
40
+ </RangePicker>
41
+ `,
42
+ });
43
+ WithOffsets.args = {
44
+ range:[5,10],
45
+
46
+ };
47
+ export const WithColumnChart = (args: any) => ({
48
+ components: { RangePicker, ColumnChart },
49
+ setup() {
50
+ const rangeStartYear = computed(()=> {
51
+ const start = args.rangeYears[0]
52
+ const year = Math.ceil(start * (args.dataPerYear.length - 1))
53
+ return args.dataPerYear[year].date
54
+ })
55
+ const rangeEndYear = computed(()=> {
56
+ const end = args.rangeYears[1]
57
+ return args.dataPerYear[Math.floor(end * (args.dataPerYear.length - 1))].date
58
+ })
59
+ const highlightedYears = computed(()=> {
60
+ return range(rangeStartYear.value, rangeEndYear.value + 1)
61
+ })
62
+ return { args,highlightedYears };
63
+ },
64
+ template: `
65
+ <div class="bg-light p-5">
66
+ <range-picker :snap="1 / args.dataPerYear.length" variant="dark" v-model:range="args.rangeYears" class="py-2" hover>
67
+ <column-chart :bar-padding=0 :bar-margin=20 :highlights="highlightedYears" :data="args.dataPerYear" :fixed-height="200" no-y-axis no-tooltips />
68
+ </range-picker>
69
+ </div>
70
+
71
+ `,
72
+ });
73
+ WithColumnChart.args = {
74
+ range: [.2, .8],
75
+ rangeYears: [0, 1 / 5],
76
+ dataPerYear: [
77
+ {
78
+ date: 2018,
79
+ value: 120
80
+ },
81
+ {
82
+ date: 2019,
83
+ value: 100
84
+ },
85
+ {
86
+ date: 2020,
87
+ value: 80
88
+ },
89
+ {
90
+ date: 2021,
91
+ value: 110
92
+ },
93
+ {
94
+ date: 2022,
95
+ value: 130
96
+ }
97
+ ]
98
+ };
@@ -0,0 +1,24 @@
1
+ import { ResponsiveIframe } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/components/ResponsiveIframe',
6
+ component: ResponsiveIframe,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ }
10
+ };
11
+
12
+ type Story = StoryObj<typeof ResponsiveIframe>;
13
+ const Template: Story = (args: any) => ({
14
+ components: { ResponsiveIframe },
15
+ setup() {
16
+ return { args };
17
+ },
18
+ template: `<ResponsiveIframe v-bind="args" />`,
19
+ });
20
+
21
+ export const Default = Template.bind({});
22
+ Default.args = {
23
+ url:"https://projects.icij.org/the-implant-files/graphics/#/adverse-events?no-embeddable-footer=1"
24
+ };
@@ -0,0 +1,65 @@
1
+ import { ScaleLegend } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ import * as d3 from 'd3'
5
+ export default {
6
+ title: 'Murmur/components/ScaleLegend',
7
+ component: ScaleLegend,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ }
11
+ };
12
+
13
+ type Story = StoryObj<typeof ScaleLegend>;
14
+ const Template: Story = (args: any) => ({
15
+ components: { ScaleLegend },
16
+ setup() {
17
+ return { args };
18
+ },
19
+ template: '<ScaleLegend v-bind="args" >{{args.default}}</ScaleLegend>',
20
+ });
21
+
22
+ export const Default = Template.bind({});
23
+ Default.args = {};
24
+ export const Width = Template.bind({});
25
+ Width.args = {width:"200"};
26
+ export const ColorScale = Template.bind({});
27
+ ColorScale.args = {
28
+ colorScaleStart:"#fafa6e",
29
+ colorScaleEnd:"teal"
30
+ };
31
+
32
+ function thresholdScaleFn () {
33
+ return d3.scaleThreshold()
34
+ .domain([1e4, 2e4, 3e4, 4e4, 5e4])
35
+ // @ts-ignore
36
+ .range(["#D12229", "#F68A1E", "#FDE01A", "#007940", "#24408E", "#732982"])
37
+ }
38
+ export const ThresholdScale = Template.bind({});
39
+ ThresholdScale.args = {
40
+ min:0,
41
+ max:6e4,
42
+ colorScale:thresholdScaleFn()
43
+ };
44
+ export const HighlightValue = Template.bind({});
45
+ HighlightValue.args = {
46
+ width:400,
47
+ cursorValue:46
48
+ };
49
+
50
+ export const CustomizedWithSlot: Story = (args: any) => ({
51
+ components: { ScaleLegend },
52
+ setup() {
53
+ return { args };
54
+ },
55
+ template: `<ScaleLegend v-bind="args" ><template #cursor="{ value }">
56
+ <div class="bg-dark text-light px-3 py-2">
57
+ {{value}}
58
+ </div>
59
+ </template></ScaleLegend>`
60
+ });
61
+ CustomizedWithSlot.decorators=[()=>({template:`<div style="margin:40px;"><story/></div>`})]
62
+ CustomizedWithSlot.args={
63
+ width:400,
64
+ cursorValue:10
65
+ }
@@ -0,0 +1,60 @@
1
+ import { SecretInput } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import {Size} from "../../../lib/enums";
4
+
5
+ export default {
6
+ title: 'Murmur/components/SecretInput',
7
+ component: SecretInput,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ }
11
+ };
12
+
13
+ type Story = StoryObj<typeof SecretInput>;
14
+ const Template: Story = (args: any) => ({
15
+ components: { SecretInput },
16
+ setup() {
17
+ return { args };
18
+ },
19
+ template: '<SecretInput v-bind="args" />',
20
+ });
21
+
22
+ export const Default = Template.bind({});
23
+ Default.args = {};
24
+ export const NoToggler = Template.bind({});
25
+ NoToggler.args = {noToggler:true};
26
+ export const NoHapticCopy = Template.bind({});
27
+ NoHapticCopy.args = {noHapticCopy:true};
28
+ export const HideSecret = Template.bind({});
29
+ HideSecret.args = {
30
+ value:"this is a secret passphrase 🕵️‍♀️"
31
+ };
32
+ export const ShowSecret = Template.bind({});
33
+ ShowSecret.args = {
34
+ value:"this is a secret passphrase 🕵️‍♀️",
35
+ visible:true
36
+ };
37
+ export const SmallSize = Template.bind({});
38
+ SmallSize.args = {
39
+ value:"this is a secret passphrase 🕵️‍♀️",
40
+ visible:true,
41
+ size:Size.sm
42
+ };
43
+ export const MediumSize = Template.bind({});
44
+ MediumSize.args = {
45
+ value:"this is a secret passphrase 🕵️‍♀️",
46
+ visible:true,
47
+ size:Size.md
48
+ };
49
+ export const LargeSize = Template.bind({});
50
+ LargeSize.args = {
51
+ value:"this is a secret passphrase 🕵️‍♀️",
52
+ visible:true,
53
+ size:Size.lg
54
+ };
55
+ export const HapticCopyVariant = Template.bind({});
56
+ HapticCopyVariant.args = {
57
+ value:"this is a secret passphrase 🕵️‍♀️",
58
+ visible:true,
59
+ hapticCopyVariant:"secondary"
60
+ };
@@ -0,0 +1,143 @@
1
+ import { SelectableDropdown } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import {onBeforeMount, reactive, ref, toRef, toRefs, watch} from "vue";
4
+
5
+ const data = {
6
+ country: 'Peru',
7
+ countries: [],
8
+ filteredCountries: ['Spain', 'Peru', 'France'],
9
+ twoCountries: ['Spain', 'France'],
10
+ treeCountries: ['Spain', 'Peru', 'France'],
11
+ allCountries: ['France', 'United States of America', 'Spain', 'Peru'],
12
+ countryCollection: [
13
+ { label: 'Spain' },
14
+ { label: 'Peru' },
15
+ { label: 'France' }
16
+ ],
17
+ selectedGames: [{uid: 'sf1'},{uid: 'sf3'},{uid: 'sf5'}],
18
+ streetFighters : [
19
+ { label: 'Street Fighter (I)', uid: 'sf1' },
20
+ { label: 'Street Fighter (II)', uid: 'sf2' },
21
+ { label: 'Street Fighter (III)', uid: 'sf3' },
22
+ { label: 'Street Fighter (IV)', uid: 'sf4' },
23
+ { label: 'Street Fighter (V)', uid: 'sf5' },
24
+ ],
25
+ frenchCities:[],
26
+ selectedFrenchCities:[]
27
+ };
28
+
29
+ const countryArgTypes = {
30
+ modelValue:{control:"multi-select",options:data.allCountries}
31
+ }
32
+ const SFArgTypes = {
33
+ modelValue:{control:"object"}
34
+ }
35
+ export default {
36
+ title: 'Murmur/components/SelectableDropdown',
37
+ component: SelectableDropdown,
38
+ tags: ['autodocs']
39
+ };
40
+
41
+ type Story = StoryObj<typeof SelectableDropdown>;
42
+ const Template: Story = (args: any) => ({
43
+ components: { SelectableDropdown },
44
+ setup() {
45
+ return { args };
46
+ },
47
+ template: '<SelectableDropdown v-bind="args" />',
48
+ });
49
+
50
+ export const Default = Template.bind({});
51
+ Default.args = {
52
+ modelValue:data.country,
53
+ items:data.allCountries,
54
+ }
55
+ Default.argTypes= countryArgTypes
56
+ export const WithSerializer = Template.bind({});
57
+ WithSerializer.args = {
58
+ modelValue:data.country,
59
+ items:data.allCountries,
60
+ deactivateKeys :true,
61
+ serializer:(item:string) => item.toUpperCase()
62
+ }
63
+ WithSerializer.argTypes= countryArgTypes
64
+ export const WithSerializerLabel = Template.bind({});
65
+ WithSerializerLabel.args = {
66
+ modelValue:data.country,
67
+ items:data.countryCollection,
68
+ serializer:(item:{label:string}) => item.label,
69
+ deactivateKeys :true,
70
+ multiple :true
71
+ }
72
+ export const WithSerializerAndEqualFn = Template.bind({});
73
+
74
+ WithSerializerAndEqualFn.args = {
75
+ eq:(item:any, other:any) => item.uid === other.uid,
76
+ serializer:(item:{label:string}) => item.label,
77
+ items:data.streetFighters,
78
+ deactivateKeys :true,
79
+ multiple :true,
80
+ modelValue:data.selectedGames
81
+ }
82
+ WithSerializerAndEqualFn.argTypes= SFArgTypes
83
+
84
+ export const Multiple = Template.bind({});
85
+ Multiple.args = {
86
+ modelValue:data.country,
87
+ items:data.allCountries,
88
+ deactivateKeys :true,
89
+ multiple :true
90
+ }
91
+ Multiple.argTypes= countryArgTypes
92
+ export const DynamicList = Template.bind({});
93
+ DynamicList.decorators = [(_storyFn:any,context:any)=>({
94
+ setup() {
95
+ const { modelValue } = toRefs( context.args)
96
+ function onClickThree(){
97
+ modelValue.value = data.treeCountries
98
+ }
99
+ function onClickTwo(){
100
+ modelValue.value = data.twoCountries
101
+ }
102
+ return {onClickTwo,onClickThree}
103
+ },
104
+ template:`
105
+ <story/>
106
+ <button class="btn btn-outline-secondary mt-2 mx-2" @click="onClickThree">
107
+ Tree countries
108
+ </button>
109
+ <button class="btn btn-outline-secondary mt-2 mx-2" @click="onClickTwo">
110
+ Two countries
111
+ </button>`})]
112
+ DynamicList.args = {
113
+ modelValue:data.filteredCountries,
114
+ items:data.allCountries,
115
+ deactivateKeys :true,
116
+ multiple :true
117
+ }
118
+
119
+ DynamicList.argTypes= countryArgTypes
120
+
121
+
122
+ export const BigList = Template.bind({});
123
+ BigList.decorators=[(fn:any,ctx:any)=>({
124
+ setup(){
125
+ const frenchCities = ref<any>([])
126
+ const args = toRefs(ctx.args)
127
+ onBeforeMount(async ()=>{
128
+ const url = 'https://raw.githubusercontent.com/high54/Communes-France-JSON/master/france.json';
129
+ const cities = await fetch(url).then(data=> data.json());
130
+ args.items.value = [...new Set(cities.map((city:any)=> city.Code_postal + ' - ' + city.Nom_commune).sort())];
131
+ })
132
+
133
+ return {...args}
134
+ },
135
+ template:`<story />`
136
+ })]
137
+ BigList.args = {
138
+ modelValue:[],
139
+ items:data.frenchCities,
140
+ deactivateKeys :true,
141
+ multiple :true,
142
+ scrollerHeight:"500px",
143
+ }
@@ -0,0 +1,32 @@
1
+ import { SharingOptions } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/components/SharingOptions',
6
+ component: SharingOptions,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ direction:{control:'select',options:['row', 'row-reverse', 'column', 'column-reverse']}
10
+ }
11
+ };
12
+
13
+ type Story = StoryObj<typeof SharingOptions>;
14
+ const Template: Story = (args: any) => ({
15
+ components: { SharingOptions },
16
+ setup() {
17
+ return { args };
18
+ },
19
+ template: `<SharingOptions v-bind="args" />`,
20
+ });
21
+
22
+ export const Default = Template.bind({});
23
+ Default.args = {};
24
+ export const WithUrl = Template.bind({});
25
+ WithUrl.args = {
26
+ url:"https://www.icij.org/",
27
+ class:"justify-content-center"
28
+ };
29
+ export const DirectionColumn = Template.bind({});
30
+ DirectionColumn.args = {
31
+ direction:"column"
32
+ };
@@ -0,0 +1,53 @@
1
+ import { SharingOptionsLink } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/components/SharingOptionsLink',
6
+ component: SharingOptionsLink,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ network:{control:"select",options:["twitter","facebook","linkedin","email"]}
10
+ }
11
+ };
12
+
13
+ type Story = StoryObj<typeof SharingOptionsLink>;
14
+ const Template: Story = (args: any) => ({
15
+ components: { SharingOptionsLink },
16
+ setup() {
17
+ return { args };
18
+ },
19
+ template: '<SharingOptionsLink v-bind="args" >{{args.default}}</SharingOptionsLink>',
20
+ });
21
+
22
+ export const Default = Template.bind({});
23
+ Default.args = {
24
+ network:"twitter",
25
+ class:"btn btn-outline-primary mx-1",
26
+ url:"https://www.icij.org"
27
+ };
28
+
29
+ export const NoIcon = Template.bind({});
30
+ NoIcon.args = {
31
+ network:"twitter",
32
+ class:"btn btn-outline-primary mx-1",
33
+ url:"https://www.icij.org",
34
+ noIcon:true
35
+ };
36
+ export const CustomSlot = Template.bind({});
37
+ CustomSlot.args = {
38
+ network:"twitter",
39
+ class:"btn btn-outline-primary mx-1",
40
+ url:"https://www.icij.org",
41
+ noIcon:true,
42
+ default:"Share twitter"
43
+ };
44
+ export const CustomTagAndSlot = Template.bind({});
45
+ CustomTagAndSlot.args = {
46
+ network:"twitter",
47
+ title:"Murmur Design System",
48
+ class:"btn btn-warning",
49
+ url:"https://www.icij.org",
50
+ noIcon:true,
51
+ tag:"button",
52
+ default:"Twitter Button"
53
+ };
@@ -0,0 +1,51 @@
1
+ import { SignUpForm } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+
4
+ export default {
5
+ title: 'Murmur/components/SignUpForm',
6
+ component: SignUpForm,
7
+ tags: ['autodocs'],
8
+ argTypes: {
9
+ variant:{type:'select',options:[
10
+ "primary",
11
+ "secondary",
12
+ "success",
13
+ "danger",
14
+ "warning",
15
+ "info",
16
+ "light",
17
+ "dark",
18
+ ]}
19
+ }
20
+ };
21
+
22
+ type Story = StoryObj<typeof SignUpForm>;
23
+ const Template: Story = (args: any) => ({
24
+ components: { SignUpForm },
25
+ setup() {
26
+ return { args };
27
+ },
28
+ template: '<SignUpForm v-bind="args" />',
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+ Default.args = {};
33
+
34
+ export const Variant = Template.bind({});
35
+ Variant.args = {
36
+ variant:'secondary'
37
+ };
38
+ export const Horizontal = Template.bind({});
39
+ Horizontal.args = {
40
+ variant:'secondary',
41
+ horizontal :true,
42
+ defaultGroups:'group[9][1],group[9][131072]',
43
+ };
44
+ export const NoLabel = Template.bind({});
45
+ NoLabel.args = {
46
+ noLabel:true,
47
+ };
48
+ export const MailChimpGroups = Template.bind({});
49
+ MailChimpGroups.args = {
50
+ defaultGroups:'group[9][1],group[9][131072]',
51
+ };
@@ -0,0 +1,32 @@
1
+ import { SlideUpDown } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import {toggleDecorator} from "../decorators";
4
+
5
+ export default {
6
+ title: 'Murmur/components/SlideUpDown',
7
+ component: SlideUpDown,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ }
11
+ };
12
+
13
+ type Story = StoryObj<typeof SlideUpDown>;
14
+ const Template: Story = (args: any) => ({
15
+ components: { SlideUpDown },
16
+ setup() {
17
+ return { args }
18
+ },
19
+ template: `
20
+ <slide-up-down v-bind="args">
21
+ <div class="card-body">
22
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
23
+ </div>
24
+ </slide-up-down>`
25
+ })
26
+
27
+ export const Default = Template.bind({})
28
+ Default.args = {
29
+ active:true
30
+ }
31
+ Default.decorators = [toggleDecorator]
32
+
@@ -0,0 +1,83 @@
1
+ import { TexturedDeck } from "@/components";
2
+ import { StoryObj } from "@storybook/vue3";
3
+ import {BButton} from "bootstrap-vue-next";
4
+ import {Brand} from "@/components";
5
+
6
+ export default {
7
+ title: 'Murmur/components/TexturedDeck',
8
+ component: TexturedDeck,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ modelValue:{control:"select",options:["brick","crack","rock","sand"]},
12
+ size:{control:"select",options:["cover", "contain", "auto", "50%", "50%", "auto"]}
13
+ }
14
+ };
15
+
16
+ type Story = StoryObj<typeof TexturedDeck>;
17
+ const Template: Story = (args: any) => ({
18
+ components: { TexturedDeck },
19
+ setup() {
20
+ return { args };
21
+ },
22
+ template: `<TexturedDeck class="p-5 m-4" v-bind="args" >
23
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
24
+ </TexturedDeck>`,
25
+ });
26
+
27
+ export const Default = Template.bind({});
28
+ Default.args = {
29
+ };
30
+ export const Black = Template.bind({});
31
+ Black.args = {
32
+ black:true
33
+ };
34
+
35
+ export const BrickDonate = (args: any) => ({
36
+ components: { TexturedDeck,BButton },
37
+ setup() {
38
+ return { args };
39
+ },
40
+ template: `<textured-deck class="p-5 m-4 row no-gutters align-items-center" v-bind="args">
41
+ <div class="col">
42
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
43
+ </div>
44
+ <div class="col-4 text-center">
45
+ <b-button variant="primary" class="text-dark">
46
+ Donate now
47
+ </b-button>
48
+ </div>
49
+ </textured-deck>`
50
+ });
51
+
52
+ BrickDonate.args = {
53
+ modelValue:"brick"
54
+ };
55
+ export const CrackBrand = (args: any) => ({
56
+ components: { TexturedDeck,Brand },
57
+ setup() {
58
+ return { args };
59
+ },
60
+ template: `<textured-deck class="p-5 m-4 d-flex align-items-center" v-bind="args">
61
+ <brand class="me-5" /> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
62
+ </textured-deck>`
63
+ });
64
+
65
+ CrackBrand.args = {
66
+ modelValue:"crack"
67
+ };
68
+ export const Rock = Template.bind({});
69
+ Rock.args = {
70
+ modelValue:"rock"
71
+ };
72
+ export const Sand = Template.bind({});
73
+ Sand.args = {
74
+ modelValue:"sand"
75
+ };
76
+ export const Crack = Template.bind({});
77
+ Crack.args = {
78
+ modelValue:"crack"
79
+ };
80
+ export const Carbon = Template.bind({});
81
+ Carbon.args = {
82
+ modelValue:"carbon"
83
+ };