@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.
- package/.github/workflows/deploy-github-pages.yaml +50 -0
- package/.storybook/app.scss +14 -0
- package/.storybook/doc_variables.scss +20 -0
- package/.storybook/main.ts +35 -0
- package/.storybook/preview-head.html +2 -0
- package/.storybook/preview.ts +32 -0
- package/README.md +71 -0
- package/deploy.js +15 -0
- package/docs/components/ApiTable.vue +171 -0
- package/docs/components/App.vue +146 -0
- package/docs/components/CollapsibleBlock.vue +122 -0
- package/docs/components/DocsHeader.vue +68 -0
- package/docs/components/DocsMenu.vue +201 -0
- package/docs/components/DocsMenuSection.vue +109 -0
- package/docs/components/EditLink.vue +49 -0
- package/docs/components/OutboundLink.vue +13 -0
- package/docs/components/PalettePresenter.vue +96 -0
- package/docs/components/RepositoryLink.vue +28 -0
- package/docs/components/SampleCard.vue +119 -0
- package/docs/main.js +42 -0
- package/docs/pages/components/accordion/doc.md +96 -0
- package/docs/pages/components/active-text-truncate/doc.md +44 -0
- package/docs/pages/components/advanced-link-form/doc.md +105 -0
- package/docs/pages/components/brand/doc.md +30 -0
- package/docs/pages/components/brand-expansion/doc.md +70 -0
- package/docs/pages/components/confirm-button/doc.md +91 -0
- package/docs/pages/components/content-placeholder/doc.md +16 -0
- package/docs/pages/components/custom-pagination/doc.md +61 -0
- package/docs/pages/components/digits-input/doc.md +28 -0
- package/docs/pages/components/donate-form/doc.md +20 -0
- package/docs/pages/components/embed-form/doc.md +22 -0
- package/docs/pages/components/embeddable-footer/doc.md +60 -0
- package/docs/pages/components/follow-us-popover/doc.md +5 -0
- package/docs/pages/components/generic-footer/doc.md +21 -0
- package/docs/pages/components/generic-header/doc.md +24 -0
- package/docs/pages/components/haptic-copy/doc.md +27 -0
- package/docs/pages/components/imddb-header/doc.md +23 -0
- package/docs/pages/components/ordinal-legend/doc.md +44 -0
- package/docs/pages/components/range-picker/doc.md +86 -0
- package/docs/pages/components/responsive-iframe/doc.md +13 -0
- package/docs/pages/components/scale-legend/doc.md +65 -0
- package/docs/pages/components/secret-input/doc.md +12 -0
- package/docs/pages/components/selectable-dropdown/doc.md +156 -0
- package/docs/pages/components/sharing-options/doc.md +13 -0
- package/docs/pages/components/sharing-options-link/doc.md +36 -0
- package/docs/pages/components/sign-up-form/doc.md +13 -0
- package/docs/pages/components/slide-up-down/doc.md +28 -0
- package/docs/pages/components/textured-deck/doc.md +78 -0
- package/docs/pages/components/tiny-pagination/doc.md +92 -0
- package/docs/pages/datavisualisation/bars/doc.md +110 -0
- package/docs/pages/datavisualisation/columns/doc.md +165 -0
- package/docs/pages/datavisualisation/lines/doc.md +139 -0
- package/docs/pages/datavisualisation/stacked-bar/doc.md +160 -0
- package/docs/pages/datavisualisation/stacked-column/doc.md +191 -0
- package/docs/pages/getting-started/about-icij/doc.md +13 -0
- package/docs/pages/getting-started/custom-bootstrap/doc.md +36 -0
- package/docs/pages/getting-started/installation-guide/doc.md +59 -0
- package/docs/pages/getting-started/internationalization/doc.md +74 -0
- package/docs/pages/maps/choropleth-map/doc.md +420 -0
- package/docs/pages/maps/choropleth-map-annotation/doc.md +373 -0
- package/docs/pages/maps/symbol-map/doc.md +203 -0
- package/docs/pages/structure/breakpoints/doc.md +3 -0
- package/docs/pages/structure/grid/doc.md +3 -0
- package/docs/pages/utilities/assets/doc.md +138 -0
- package/docs/pages/utilities/config/doc.md +52 -0
- package/docs/pages/utilities/iframes/doc.md +3 -0
- package/docs/pages/visual/colors/doc.md +31 -0
- package/docs/pages/visual/iconography/doc.md +56 -0
- package/docs/pages/visual/states/doc.md +77 -0
- package/docs/pages/visual/themes/doc.md +3 -0
- package/docs/pages/visual/typography/doc.md +71 -0
- package/docs/routes.js +25 -0
- package/docs/store/index.js +21 -0
- package/docs/styles/app.scss +36 -0
- package/docs/styles/variables.scss +20 -0
- package/lib/assets/images/icij-full-white.svg +6 -0
- package/lib/assets/images/icij-full.svg +6 -0
- package/lib/assets/images/icij.png +0 -0
- package/lib/assets/images/icij.svg +46 -0
- package/lib/assets/images/icij@2x.png +0 -0
- package/lib/assets/images/murmur-dark.png +0 -0
- package/lib/assets/images/murmur-dark.svg +79 -0
- package/lib/assets/images/murmur-white.png +0 -0
- package/lib/assets/images/murmur-white.svg +68 -0
- package/lib/components/AccordionStep.vue +128 -0
- package/lib/components/AccordionWrapper.vue +138 -0
- package/lib/components/ActiveTextTruncate.vue +258 -0
- package/lib/components/AdvancedLinkForm.vue +273 -0
- package/lib/components/Brand.vue +150 -0
- package/lib/components/BrandExpansion.vue +237 -0
- package/lib/components/ConfirmButton.vue +204 -0
- package/lib/components/ContentPlaceholder.vue +100 -0
- package/lib/components/CustomPagination.vue +225 -0
- package/lib/components/DigitsInput.vue +180 -0
- package/lib/components/DonateForm.vue +367 -0
- package/lib/components/EmbedForm.vue +173 -0
- package/lib/components/EmbeddableFooter.vue +201 -0
- package/lib/components/Fa.js +3 -0
- package/lib/components/FollowUsPopover.vue +117 -0
- package/lib/components/GenericFooter.vue +218 -0
- package/lib/components/GenericHeader.vue +259 -0
- package/lib/components/HapticCopy.vue +256 -0
- package/lib/components/ImddbHeader.vue +336 -0
- package/lib/components/OrdinalLegend.vue +164 -0
- package/lib/components/RangePicker.vue +430 -0
- package/lib/components/ResponsiveIframe.vue +48 -0
- package/lib/components/ScaleLegend.vue +230 -0
- package/lib/components/SecretInput.vue +132 -0
- package/lib/components/SelectableDropdown.vue +368 -0
- package/lib/components/SharingOptions.vue +230 -0
- package/lib/components/SharingOptionsLink.vue +259 -0
- package/lib/components/SignUpForm.vue +181 -0
- package/lib/components/SlideUpDown.vue +131 -0
- package/lib/components/TexturedDeck.vue +101 -0
- package/lib/components/TinyPagination.vue +268 -0
- package/lib/components/index.js +31 -0
- package/lib/composables/chart.ts +182 -0
- package/lib/composables/resizeObserver.ts +37 -0
- package/lib/composables/sendEmail.ts +50 -0
- package/lib/config.default.ts +33 -0
- package/lib/config.ts +70 -0
- package/lib/d3-geo-projection.d.ts +1 -0
- package/lib/datavisualisations/BarChart.vue +275 -0
- package/lib/datavisualisations/ColumnChart.vue +527 -0
- package/lib/datavisualisations/LineChart.vue +274 -0
- package/lib/datavisualisations/StackedBarChart.vue +614 -0
- package/lib/datavisualisations/StackedColumnChart.vue +640 -0
- package/lib/datavisualisations/index.js +5 -0
- package/lib/enums.ts +25 -0
- package/lib/i18n.ts +16 -0
- package/lib/keys.ts +2 -0
- package/lib/locales/en.json +140 -0
- package/lib/locales/fr.json +117 -0
- package/lib/locales/locales/en.json +140 -0
- package/lib/locales/locales/fr.json +117 -0
- package/lib/main.ts +87 -0
- package/lib/maps/ChoroplethMap.vue +825 -0
- package/lib/maps/ChoroplethMapAnnotation.vue +336 -0
- package/lib/maps/SymbolMap.vue +628 -0
- package/lib/maps/index.js +3 -0
- package/lib/querystring-es3.d.ts +1 -0
- package/lib/shims-bootstrap-vue.d.ts +5 -0
- package/lib/shims-tsx.d.ts +11 -0
- package/lib/shims-vue.d.ts +14 -0
- package/lib/styles/functions.scss +20 -0
- package/lib/styles/lib.scss +19 -0
- package/lib/styles/mixins.scss +37 -0
- package/lib/styles/utilities.scss +18 -0
- package/lib/styles/variables.scss +94 -0
- package/lib/styles/variables_dark.scss +1 -0
- package/lib/types.ts +46 -0
- package/lib/utils/animation.ts +24 -0
- package/lib/utils/assets.ts +46 -0
- package/lib/utils/clipboard.ts +41 -0
- package/lib/utils/iframe-resizer.ts +49 -0
- package/lib/utils/placeholder.ts +66 -0
- package/lib/utils/placeholderTypes.ts +21 -0
- package/lib/utils/strings.ts +8 -0
- package/loaders/highlight-loader.js +13 -0
- package/loaders/markdown-loader.js +91 -0
- package/loaders/metadata-loader.js +18 -0
- package/loaders/sass-extract-loader.js +14 -0
- package/loaders/vue-docgen-loader.js +14 -0
- package/package.json +96 -0
- package/plugins/MdPluginTypes.ts +10 -0
- package/plugins/docs.ts +50 -0
- package/plugins/front-matter.ts +36 -0
- package/plugins/highlight.ts +27 -0
- package/plugins/markdown-it/api-table.ts +25 -0
- package/plugins/markdown-it/sample-card.ts +31 -0
- package/plugins/plugin-delete.ts +47 -0
- package/plugins/plugin-docgen.ts +23 -0
- package/plugins/sass-vars.ts +25 -0
- package/plugins/vue-docgen.ts +29 -0
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/img/arrow-bottom.svg +3 -0
- package/public/assets/img/texture-brick-black.jpg +0 -0
- package/public/assets/img/texture-brick.jpg +0 -0
- package/public/assets/img/texture-carbon-black.jpg +0 -0
- package/public/assets/img/texture-carbon.jpg +0 -0
- package/public/assets/img/texture-crack-black.jpg +0 -0
- package/public/assets/img/texture-crack.jpg +0 -0
- package/public/assets/img/texture-rock-black.jpg +0 -0
- package/public/assets/img/texture-rock.jpg +0 -0
- package/public/assets/img/texture-sand-black.jpg +0 -0
- package/public/assets/img/texture-sand.jpg +0 -0
- package/public/assets/img/texture-silk-black.jpg +0 -0
- package/public/assets/img/texture-silk.jpg +0 -0
- package/public/assets/topojson/france-departments.json +1 -0
- package/public/assets/topojson/paris-arrondissements.json +1 -0
- package/public/assets/topojson/world-countries-sans-antarctica.json +1 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/site.webmanifest +1 -0
- package/stories/assets/code-brackets.svg +1 -0
- package/stories/assets/colors.svg +1 -0
- package/stories/assets/comments.svg +1 -0
- package/stories/assets/direction.svg +1 -0
- package/stories/assets/flow.svg +1 -0
- package/stories/assets/plugin.svg +1 -0
- package/stories/assets/repo.svg +1 -0
- package/stories/assets/stackalt.svg +1 -0
- package/stories/getting-started/about-icij.mdx +14 -0
- package/stories/getting-started/custom-bootstrap.mdx +23 -0
- package/stories/getting-started/installation-guide.mdx +62 -0
- package/stories/getting-started/internationalization.mdx +63 -0
- package/stories/murmur/components/AccordionStep.stories.ts +33 -0
- package/stories/murmur/components/AccordionWrapper.stories.ts +69 -0
- package/stories/murmur/components/ActiveTextTruncate.stories.ts +32 -0
- package/stories/murmur/components/AdvancedLinkForm.stories.ts +77 -0
- package/stories/murmur/components/Brand.stories.ts +30 -0
- package/stories/murmur/components/BrandExpansion.stories.ts +41 -0
- package/stories/murmur/components/ConfirmButton.stories.ts +40 -0
- package/stories/murmur/components/ContentPlaceholder.stories.ts +41 -0
- package/stories/murmur/components/CustomPagination.stories.ts +42 -0
- package/stories/murmur/components/DigitsInput.stories.ts +29 -0
- package/stories/murmur/components/DonateForm.stories.ts +29 -0
- package/stories/murmur/components/EmbedForm.stories.ts +35 -0
- package/stories/murmur/components/EmbeddableFooter.stories.ts +59 -0
- package/stories/murmur/components/FollowUsPopover.stories.ts +24 -0
- package/stories/murmur/components/GenericFooter.stories.ts +27 -0
- package/stories/murmur/components/GenericHeader.stories.ts +27 -0
- package/stories/murmur/components/HapticCopy.stories.ts +40 -0
- package/stories/murmur/components/ImddbHeader.stories.ts +27 -0
- package/stories/murmur/components/OrdinalLegend.stories.ts +49 -0
- package/stories/murmur/components/RangePicker.stories.ts +98 -0
- package/stories/murmur/components/ResponsiveIframe.stories.ts +24 -0
- package/stories/murmur/components/ScaleLegend.stories.ts +65 -0
- package/stories/murmur/components/SecretInput.stories.ts +60 -0
- package/stories/murmur/components/SelectableDropdown.stories.ts +143 -0
- package/stories/murmur/components/SharingOptions.stories.ts +32 -0
- package/stories/murmur/components/SharingOptionsLink.stories.ts +53 -0
- package/stories/murmur/components/SignUpForm.stories.ts +51 -0
- package/stories/murmur/components/SlideUpDown.stories.ts +32 -0
- package/stories/murmur/components/TexturedDeck.stories.ts +83 -0
- package/stories/murmur/components/TinyPagination.stories.ts +65 -0
- package/stories/murmur/datavisualisations/BarChart.stories.ts +54 -0
- package/stories/murmur/datavisualisations/ColumnChart.stories.ts +88 -0
- package/stories/murmur/datavisualisations/LineChart.stories.ts +139 -0
- package/stories/murmur/datavisualisations/StackedBarChart.stories.ts +199 -0
- package/stories/murmur/datavisualisations/StackedColumnChart.stories.ts +136 -0
- package/stories/murmur/decorators.ts +108 -0
- package/stories/murmur/maps/ChoroplethMap.stories.ts +440 -0
- package/stories/murmur/maps/ChoroplethMapAnnotation.stories.ts +26 -0
- package/stories/murmur/maps/SymbolMap.stories.ts +24 -0
- package/stories/murmur/utils.ts +7 -0
- package/tests/unit/components/AccordionStep.spec.ts +157 -0
- package/tests/unit/components/AccordionWrapper.spec.ts +57 -0
- package/tests/unit/components/ActiveTextTruncate.spec.js +30 -0
- package/tests/unit/components/AdvancedLinkForm.spec.js +124 -0
- package/tests/unit/components/Brand.spec.js +50 -0
- package/tests/unit/components/ContentPlaceholder.spec.js +29 -0
- package/tests/unit/components/CustomPagination.spec.js +72 -0
- package/tests/unit/components/DigitsInput.spec.ts +157 -0
- package/tests/unit/components/DonateForm.spec.js +149 -0
- package/tests/unit/components/EmbedForm.spec.js +108 -0
- package/tests/unit/components/EmbeddableFooter.spec.js +11 -0
- package/tests/unit/components/Fa.spec.js +18 -0
- package/tests/unit/components/FollowUsPopover.spec.js +29 -0
- package/tests/unit/components/GenericFooter.spec.js +29 -0
- package/tests/unit/components/GenericHeader.spec.js +104 -0
- package/tests/unit/components/HapticCopy.spec.js +123 -0
- package/tests/unit/components/ImddbHeader.spec.js +96 -0
- package/tests/unit/components/OrdinalLegend.spec.js +120 -0
- package/tests/unit/components/RangePicker.spec.ts +87 -0
- package/tests/unit/components/ResponsiveIframe.spec.js +20 -0
- package/tests/unit/components/ScaleLegend.spec.js +139 -0
- package/tests/unit/components/SecretInput.spec.js +81 -0
- package/tests/unit/components/SelectableDropdown.spec.js +160 -0
- package/tests/unit/components/SharingOptions.spec.js +125 -0
- package/tests/unit/components/SharingOptionsLink.spec.js +184 -0
- package/tests/unit/components/SignUpForm.spec.js +145 -0
- package/tests/unit/components/SlideUpDown.spec.js +59 -0
- package/tests/unit/components/TinyPagination.spec.js +46 -0
- package/tests/unit/config.spec.js +136 -0
- package/tests/unit/datavisualisations/BarChart.spec.js +63 -0
- package/tests/unit/datavisualisations/ColumnChart.spec.js +344 -0
- package/tests/unit/datavisualisations/LineChart.spec.js +155 -0
- package/tests/unit/datavisualisations/StackedBarChart.spec.js +294 -0
- package/tests/unit/datavisualisations/StackedColumnChart.spec.js +443 -0
- package/tests/unit/i18n.spec.ts +19 -0
- package/tests/unit/main.spec.js +82 -0
- package/tests/unit/maps/ChoroplethMap.spec.js +214 -0
- package/tests/unit/maps/ChoroplethMapAnnotation.spec.ts +186 -0
- package/tests/unit/maps/SymbolMap.spec.js +92 -0
- package/tests/unit/require.spec.js +22 -0
- package/tests/unit/setup.js +13 -0
- package/tests/unit/utils/assets.spec.js +61 -0
- package/tests/unit/utils/clipboard.spec.js +18 -0
- package/tests/unit/utils/iframe-resizer.spec.js +71 -0
- package/tsconfig.json +35 -0
- package/vite.config.ts +79 -0
- package/vitest.config.ts +19 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
::: sample-card
|
|
2
|
+
<template>
|
|
3
|
+
<div class="p-4">
|
|
4
|
+
<embeddable-footer class="position-relative card"></embeddable-footer>
|
|
5
|
+
</div>
|
|
6
|
+
</template>
|
|
7
|
+
:::
|
|
8
|
+
|
|
9
|
+
Main slot is displayed as "lead" text:
|
|
10
|
+
|
|
11
|
+
::: sample-card
|
|
12
|
+
<div class="p-4">
|
|
13
|
+
<embeddable-footer class="position-relative card">
|
|
14
|
+
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.
|
|
15
|
+
</embeddable-footer>
|
|
16
|
+
</div>
|
|
17
|
+
:::
|
|
18
|
+
|
|
19
|
+
A title slot can also be provider:
|
|
20
|
+
|
|
21
|
+
::: sample-card
|
|
22
|
+
<div class="p-4">
|
|
23
|
+
<embeddable-footer class="position-relative card">
|
|
24
|
+
<template #title>
|
|
25
|
+
<span class="small">Demo<br />Project</span>
|
|
26
|
+
</template>
|
|
27
|
+
</embeddable-footer>
|
|
28
|
+
</div>
|
|
29
|
+
:::
|
|
30
|
+
|
|
31
|
+
This can be used for more complex structures:
|
|
32
|
+
|
|
33
|
+
::: sample-card
|
|
34
|
+
<template>
|
|
35
|
+
<div class="p-4">
|
|
36
|
+
<embeddable-footer class="position-relative card">
|
|
37
|
+
<div class="d-flex align-items-center">
|
|
38
|
+
<div class="flew-grow-1 mr-2">
|
|
39
|
+
This is an helpful text.
|
|
40
|
+
</div>
|
|
41
|
+
<b-button variant="info" pill size="sm" class="ml-auto mr-2">
|
|
42
|
+
Help
|
|
43
|
+
</b-button>
|
|
44
|
+
</div>
|
|
45
|
+
</embeddable-footer>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
:::
|
|
49
|
+
|
|
50
|
+
::: api-table components/EmbeddableFooter.vue :::
|
|
51
|
+
|
|
52
|
+
<script>
|
|
53
|
+
export default {
|
|
54
|
+
data () {
|
|
55
|
+
return {
|
|
56
|
+
url: 'https://www.reddit.com/submit?url=https%3A%2F%2Ficij.org'
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
</script>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Generic Footer
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
::: sample-card
|
|
6
|
+
<div class="full-width">
|
|
7
|
+
<generic-footer class="card m-4"></generic-footer>
|
|
8
|
+
</div>
|
|
9
|
+
:::
|
|
10
|
+
|
|
11
|
+
::: api-table components/GenericFooter.vue :::
|
|
12
|
+
|
|
13
|
+
<style lang="scss" scoped>
|
|
14
|
+
.full-width {
|
|
15
|
+
overflow: auto;
|
|
16
|
+
|
|
17
|
+
.generic-footer {
|
|
18
|
+
width: 100vw;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
</style>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Generic Header
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A component to create header with generic features.
|
|
6
|
+
|
|
7
|
+
::: sample-card
|
|
8
|
+
<div class="full-width card m-4">
|
|
9
|
+
<generic-header no-headroom position="relative" class=""></generic-header>
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
::: api-table components/GenericHeader.vue :::
|
|
14
|
+
|
|
15
|
+
<style lang="scss">
|
|
16
|
+
.full-width {
|
|
17
|
+
overflow: auto;
|
|
18
|
+
|
|
19
|
+
.generic-header {
|
|
20
|
+
width: 100vw;
|
|
21
|
+
max-width: 1000px;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Haptic Copy
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A button to copy text with an haptic feedback:
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="p-2 text-center">
|
|
9
|
+
<haptic-copy text="Lorem info sit amet" class="btn-info" />
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
:::sample-card
|
|
14
|
+
<template>
|
|
15
|
+
<div class="p-2 text-center">
|
|
16
|
+
<haptic-copy
|
|
17
|
+
class="btn-secondary"
|
|
18
|
+
hide-label
|
|
19
|
+
tooltip-placement="right"
|
|
20
|
+
v-b-tooltip.hover.right
|
|
21
|
+
title="Click to copy"
|
|
22
|
+
text="Lorem secondary sit amet" />
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
:::
|
|
26
|
+
|
|
27
|
+
::: api-table components/HapticCopy.vue :::
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: IMDDB Header
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A component to create header with generic features.
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="full-width">
|
|
9
|
+
<imddb-header no-headroom position="relative" />
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
::: api-table components/ImddbHeader.vue :::
|
|
14
|
+
|
|
15
|
+
<style lang="scss">
|
|
16
|
+
.full-width {
|
|
17
|
+
overflow: auto;
|
|
18
|
+
|
|
19
|
+
.imddb-header {
|
|
20
|
+
min-width: 990px;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
</style>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
badge: unstable
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A quick way to create orginal legend:
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="bg-light p-5">
|
|
9
|
+
<ordinal-legend :data="icijOffices" value="paris" />
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
Or horizontal:
|
|
14
|
+
|
|
15
|
+
:::sample-card
|
|
16
|
+
<div class="bg-light p-5">
|
|
17
|
+
<ordinal-legend :data="icijOffices" :highlight.sync="highlighthed" horizontal />
|
|
18
|
+
</div>
|
|
19
|
+
:::
|
|
20
|
+
|
|
21
|
+
It also works with a custom marker path:
|
|
22
|
+
|
|
23
|
+
:::sample-card
|
|
24
|
+
<div class="bg-light p-5">
|
|
25
|
+
<ordinal-legend :data="icijOffices" marker-path="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" />
|
|
26
|
+
</div>
|
|
27
|
+
:::
|
|
28
|
+
|
|
29
|
+
::: api-table components/OrdinalLegend.vue :::
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
export default {
|
|
33
|
+
data () {
|
|
34
|
+
return {
|
|
35
|
+
highlighthed: 'dc',
|
|
36
|
+
icijOffices: [
|
|
37
|
+
{ id: 'paris', color: '#6e40aa', label: 'Paris, France' },
|
|
38
|
+
{ id: 'sydney', color: '#ff5e63', label: 'Sydney, Australia' },
|
|
39
|
+
{ id: 'dc', color: '#aff05b', label: 'Washington DC, USA' }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Range Picker
|
|
3
|
+
description: A component to wrap an HTML element with a range picker overlay.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
:::sample-card
|
|
7
|
+
<div class="bg-light p-5">
|
|
8
|
+
<range-picker v-model="range">
|
|
9
|
+
<div class="bg-white p-3 text-center text-uppercase">
|
|
10
|
+
<b-badge>{{ range[0] }}</b-badge> - <b-badge>{{ range[1] }}</b-badge>
|
|
11
|
+
</div>
|
|
12
|
+
</range-picker>
|
|
13
|
+
</div>
|
|
14
|
+
:::
|
|
15
|
+
|
|
16
|
+
You can add offsets (in pixels), a snap fraction or a variant (using Bootstrap theme):
|
|
17
|
+
|
|
18
|
+
:::sample-card
|
|
19
|
+
<div class="bg-light p-5">
|
|
20
|
+
<range-picker v-model="range" :start-offset=30 :end-offset=30 :snap=.1 :precision=2 variant="info" hover rounded>
|
|
21
|
+
<div class="bg-white p-3 text-center text-uppercase">
|
|
22
|
+
<b-badge>{{ range[0] * 100 }}%</b-badge> - <b-badge>{{ range[1] * 100 }}%</b-badge>
|
|
23
|
+
</div>
|
|
24
|
+
</range-picker>
|
|
25
|
+
</div>
|
|
26
|
+
:::
|
|
27
|
+
|
|
28
|
+
Or in combination with a column chart
|
|
29
|
+
|
|
30
|
+
:::sample-card
|
|
31
|
+
<div class="bg-light p-5">
|
|
32
|
+
<range-picker :snap="1 / dataPerYear.length" variant="dark" v-model="rangeYears" class="py-2" hover>
|
|
33
|
+
<column-chart :bar-padding=0 :bar-margin=20 :highlights="higlightedYears" :data="dataPerYear" :fixed-height="200" no-y-axis no-tooltips />
|
|
34
|
+
</range-picker>
|
|
35
|
+
</div>
|
|
36
|
+
:::
|
|
37
|
+
|
|
38
|
+
::: api-table components/RangePicker.vue :::
|
|
39
|
+
|
|
40
|
+
<script>
|
|
41
|
+
import { range } from 'lodash'
|
|
42
|
+
|
|
43
|
+
export default {
|
|
44
|
+
data() {
|
|
45
|
+
return {
|
|
46
|
+
range: [.2, .8],
|
|
47
|
+
rangeYears: [0, 1 / 5],
|
|
48
|
+
dataPerYear: [
|
|
49
|
+
{
|
|
50
|
+
date: 2018,
|
|
51
|
+
value: 120
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
date: 2019,
|
|
55
|
+
value: 100
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
date: 2020,
|
|
59
|
+
value: 80
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
date: 2021,
|
|
63
|
+
value: 110
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
date: 2022,
|
|
67
|
+
value: 130
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
computed: {
|
|
73
|
+
rangeStartYear() {
|
|
74
|
+
const start = this.rangeYears[0]
|
|
75
|
+
return this.dataPerYear[Math.ceil(start * (this.dataPerYear.length - 1))].date
|
|
76
|
+
},
|
|
77
|
+
rangeEndYear() {
|
|
78
|
+
const end = this.rangeYears[1]
|
|
79
|
+
return this.dataPerYear[Math.floor(end * (this.dataPerYear.length - 1))].date
|
|
80
|
+
},
|
|
81
|
+
higlightedYears() {
|
|
82
|
+
return range(this.rangeStartYear, this.rangeEndYear + 1)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</script>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Responsive Iframe
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A component to create responsive iframe with Pym.js:
|
|
6
|
+
|
|
7
|
+
::: sample-card
|
|
8
|
+
<div class="card m-4">
|
|
9
|
+
<responsive-iframe url="https://projects.icij.org/the-implant-files/graphics/#/adverse-events?no-embeddable-footer=1"></responsive-iframe>
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
::: api-table components/ResponsiveIframe.vue :::
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
badge: unstable
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A quick way to create scale legend:
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="bg-light p-5 text-center">
|
|
9
|
+
<scale-legend :width="200" />
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
Or use different colors
|
|
14
|
+
|
|
15
|
+
:::sample-card
|
|
16
|
+
<div class="bg-light p-5 text-center">
|
|
17
|
+
<scale-legend :width="200" color-scale-start="#fafa6e" color-scale-end="teal" />
|
|
18
|
+
</div>
|
|
19
|
+
:::
|
|
20
|
+
|
|
21
|
+
And a non-continuous scale
|
|
22
|
+
|
|
23
|
+
:::sample-card
|
|
24
|
+
<div class="bg-light p-5 text-center">
|
|
25
|
+
<scale-legend :width="200" :min="0" :max="6e4" :color-scale="thresholdScale" />
|
|
26
|
+
</div>
|
|
27
|
+
:::
|
|
28
|
+
|
|
29
|
+
You can highlight a specific value:
|
|
30
|
+
|
|
31
|
+
:::sample-card
|
|
32
|
+
<div class="bg-light p-5 text-center">
|
|
33
|
+
<scale-legend :width="200" :cursor-value="46" />
|
|
34
|
+
</div>
|
|
35
|
+
:::
|
|
36
|
+
|
|
37
|
+
The cursor can be customized with slot:
|
|
38
|
+
|
|
39
|
+
:::sample-card
|
|
40
|
+
<div class="bg-light p-5 text-center">
|
|
41
|
+
<scale-legend :width="200" :cursor-value="10">
|
|
42
|
+
<template #cursor="{ value }">
|
|
43
|
+
<div class="bg-dark text-light px-3 py-2">
|
|
44
|
+
<span v-html="`${value}€`"></span>
|
|
45
|
+
</div>
|
|
46
|
+
</template>
|
|
47
|
+
</scale-legend>
|
|
48
|
+
</div>
|
|
49
|
+
:::
|
|
50
|
+
|
|
51
|
+
::: api-table components/ScaleLegend.vue :::
|
|
52
|
+
|
|
53
|
+
<script>
|
|
54
|
+
import * as d3 from 'd3'
|
|
55
|
+
|
|
56
|
+
export default {
|
|
57
|
+
computed: {
|
|
58
|
+
thresholdScale () {
|
|
59
|
+
return d3.scaleThreshold()
|
|
60
|
+
.domain([1e4, 2e4, 3e4, 4e4, 5e4])
|
|
61
|
+
.range(["#D12229", "#F68A1E", "#FDE01A", "#007940", "#24408E", "#732982"])
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</script>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Secret Input
|
|
3
|
+
description: A input form for secret value that must not be seen.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
:::sample-card
|
|
7
|
+
<div class="p-4">
|
|
8
|
+
<secret-input value="this is a secret passphrase 🕵️♀️" />
|
|
9
|
+
</div>
|
|
10
|
+
:::
|
|
11
|
+
|
|
12
|
+
::: api-table components/SecretInput.vue :::
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Selectable Dropdown
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A component to create an interactive list.
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<template>
|
|
9
|
+
<div class="p-2 text-center">
|
|
10
|
+
<selectable-dropdown v-model="country" :items="allCountries" />
|
|
11
|
+
<button @click="country = 'Peru'" class="btn btn-outline-secondary mt-2 mx-2">Choose Peru</button>
|
|
12
|
+
<button @click="country = 'France'" class="btn btn-outline-secondary mt-2 mx-2">Choose France</button>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
:::
|
|
16
|
+
|
|
17
|
+
With a serializer:
|
|
18
|
+
|
|
19
|
+
:::sample-card
|
|
20
|
+
<template>
|
|
21
|
+
<div class="p-2 text-center">
|
|
22
|
+
<selectable-dropdown deactivate-keys :serializer="item => item.toUpperCase()" :items="allCountries"></selectable-dropdown>
|
|
23
|
+
</div>
|
|
24
|
+
</template>
|
|
25
|
+
:::
|
|
26
|
+
|
|
27
|
+
With multiple values:
|
|
28
|
+
|
|
29
|
+
:::sample-card
|
|
30
|
+
<template>
|
|
31
|
+
<div class="p-2 text-center">
|
|
32
|
+
<selectable-dropdown deactivate-keys v-model="countries" multiple :items="allCountries"></selectable-dropdown>
|
|
33
|
+
<button class="btn btn-outline-secondary mt-2 mx-2" @click="countries = twoCountries">Choose two countries</button>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
:::
|
|
37
|
+
|
|
38
|
+
With a dynamic list:
|
|
39
|
+
|
|
40
|
+
:::sample-card
|
|
41
|
+
<template>
|
|
42
|
+
<div class="p-2 text-center">
|
|
43
|
+
<selectable-dropdown deactivate-keys v-model="countries" multiple :items="filteredCountries"></selectable-dropdown>
|
|
44
|
+
<button class="btn btn-outline-secondary mt-2 mx-2" @click="filteredCountries = treeCountries">
|
|
45
|
+
Tree countries
|
|
46
|
+
</button>
|
|
47
|
+
<button class="btn btn-outline-secondary mt-2 mx-2" @click="filteredCountries = twoCountries">
|
|
48
|
+
Two countries
|
|
49
|
+
</button>
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
52
|
+
:::
|
|
53
|
+
|
|
54
|
+
## Collection
|
|
55
|
+
|
|
56
|
+
You can also use this component to build a list based from a collection of object:
|
|
57
|
+
|
|
58
|
+
:::sample-card
|
|
59
|
+
<template>
|
|
60
|
+
<div class="p-2 text-center">
|
|
61
|
+
<selectable-dropdown deactivate-keys multiple :serializer="item => item.label" :items="countryCollection"></selectable-dropdown>
|
|
62
|
+
</div>
|
|
63
|
+
</template>
|
|
64
|
+
:::
|
|
65
|
+
|
|
66
|
+
Some lists are not trivial and comparisons are not easy. For instance a games with similar name:
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
const streetFighters = [
|
|
70
|
+
{ label: 'Street Fighter (I)', uid: 'sf1' },
|
|
71
|
+
{ label: 'Street Fighter (II)', uid: 'sf2' },
|
|
72
|
+
{ label: 'Street Fighter (III)', uid: 'sf3' },
|
|
73
|
+
{ label: 'Street Fighter (IV)', uid: 'sf4' },
|
|
74
|
+
{ label: 'Street Fighter (V)', uid: 'sf5' },
|
|
75
|
+
]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
You might want to display a list and prove uniqueness using the `uid`:
|
|
79
|
+
|
|
80
|
+
:::sample-card
|
|
81
|
+
<template>
|
|
82
|
+
<div class="p-2 text-center">
|
|
83
|
+
<selectable-dropdown
|
|
84
|
+
:eq="(item, other) => item.uid === other.uid"
|
|
85
|
+
:items="streetFighters"
|
|
86
|
+
:serializer="item => item.label"
|
|
87
|
+
deactivate-keys
|
|
88
|
+
multiple
|
|
89
|
+
v-model="selectedGames"
|
|
90
|
+
/>
|
|
91
|
+
Selected games: {{ selectedGames.join(', ') }}
|
|
92
|
+
</div>
|
|
93
|
+
</template>
|
|
94
|
+
:::
|
|
95
|
+
|
|
96
|
+
When you want to display a very big list, like the 36,369 towns in France, the virtual scroller will help you deal with large amount of data:
|
|
97
|
+
|
|
98
|
+
:::sample-card
|
|
99
|
+
<template>
|
|
100
|
+
<div class="p-2 text-center">
|
|
101
|
+
<selectable-dropdown
|
|
102
|
+
:items="frenchCities"
|
|
103
|
+
deactivate-keys
|
|
104
|
+
multiple
|
|
105
|
+
scrollerHeight="500px"
|
|
106
|
+
v-model="selectedFrenchCities"
|
|
107
|
+
/>
|
|
108
|
+
Selected cities: {{ selectedFrenchCities.join(', ') }}
|
|
109
|
+
</div>
|
|
110
|
+
</template>
|
|
111
|
+
:::
|
|
112
|
+
|
|
113
|
+
::: api-table components/SelectableDropdown.vue :::
|
|
114
|
+
|
|
115
|
+
<script>
|
|
116
|
+
export default {
|
|
117
|
+
data () {
|
|
118
|
+
return {
|
|
119
|
+
country: 'Peru',
|
|
120
|
+
countries: [],
|
|
121
|
+
filteredCountries: ['Spain', 'Peru', 'France'],
|
|
122
|
+
twoCountries: ['Spain', 'France'],
|
|
123
|
+
treeCountries: ['Spain', 'Peru', 'France'],
|
|
124
|
+
allCountries: ['France', 'United States of America', 'Spain', 'Peru'],
|
|
125
|
+
countryCollection: [
|
|
126
|
+
{ label: 'Spain' },
|
|
127
|
+
{ label: 'Peru' },
|
|
128
|
+
{ label: 'France' }
|
|
129
|
+
],
|
|
130
|
+
selectedGames: [],
|
|
131
|
+
streetFighters: [
|
|
132
|
+
{ label: 'Street Fighter', episode: 'I', uid: 'sf1' },
|
|
133
|
+
{ label: 'Street Fighter', episode: 'II', uid: 'sf2' },
|
|
134
|
+
{ label: 'Street Fighter', episode: 'III', uid: 'sf3' },
|
|
135
|
+
{ label: 'Street Fighter', episode: 'IV', uid: 'sf4' },
|
|
136
|
+
{ label: 'Street Fighter', episode: 'V', uid: 'sf5' },
|
|
137
|
+
],
|
|
138
|
+
frenchCities:[],
|
|
139
|
+
selectedFrenchCities:[]
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
watch: {
|
|
143
|
+
country () {
|
|
144
|
+
console.log('Selected country:', this.country)
|
|
145
|
+
},
|
|
146
|
+
countries () {
|
|
147
|
+
console.log('Selected countries:', this.countries.join(', '))
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
async created(){
|
|
151
|
+
const url = 'https://raw.githubusercontent.com/high54/Communes-France-JSON/master/france.json';
|
|
152
|
+
const cities = await fetch(url).then(data=> data.json());
|
|
153
|
+
this.frenchCities = [...new Set(cities.map(city=> city.Code_postal + ' - ' + city.Nom_commune).sort())];
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
</script>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sharing Options
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
::: sample-card
|
|
6
|
+
<div class="text-center">
|
|
7
|
+
<div class="card card-body d-inline-block my-4">
|
|
8
|
+
<sharing-options url="https://www.pirhoo.com/" class="justify-content-center"></sharing-options>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
::: api-table components/SharingOptions.vue :::
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sharing Options Link
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
A link to share a page on a given social network:
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="p-2 text-center">
|
|
9
|
+
<sharing-options-link network="twitter" url="https://www.icij.org" class="btn btn-outline-primary mx-1" />
|
|
10
|
+
<sharing-options-link network="facebook" url="https://www.icij.org" class="btn btn-outline-primary mx-1" />
|
|
11
|
+
<sharing-options-link network="linkedin" url="https://www.icij.org" class="btn btn-outline-primary mx-1" />
|
|
12
|
+
<sharing-options-link network="email" url="https://www.icij.org" class="btn btn-outline-primary mx-1" />
|
|
13
|
+
</div>
|
|
14
|
+
:::
|
|
15
|
+
|
|
16
|
+
Without icon and a custom slot:
|
|
17
|
+
|
|
18
|
+
:::sample-card
|
|
19
|
+
<div class="p-2 text-center">
|
|
20
|
+
<sharing-options-link network="twitter" url="https://www.icij.org" no-icon class="btn btn-info">
|
|
21
|
+
Share twitter
|
|
22
|
+
</sharing-options-link>
|
|
23
|
+
</div>
|
|
24
|
+
:::
|
|
25
|
+
|
|
26
|
+
With a custom tag and a custom slot:
|
|
27
|
+
|
|
28
|
+
:::sample-card
|
|
29
|
+
<div class="p-2 text-center">
|
|
30
|
+
<sharing-options-link network="twitter" title="Murmur Design System" tag="button" class="btn btn-warning" no-icon>
|
|
31
|
+
Twitter Button
|
|
32
|
+
</sharing-options-link>
|
|
33
|
+
</div>
|
|
34
|
+
:::
|
|
35
|
+
|
|
36
|
+
::: api-table components/SharingOptionsLink.vue :::
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
:::sample-card
|
|
2
|
+
<div class="m-4">
|
|
3
|
+
<sign-up-form />
|
|
4
|
+
</div>
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
:::sample-card
|
|
8
|
+
<div class="m-4">
|
|
9
|
+
<sign-up-form variant="secondary" horizontal default-groups="group[9][1],group[9][131072]" />
|
|
10
|
+
</div>
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
::: api-table components/SignUpForm.vue :::
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
A component to create a slide up/down animation (with CSS transitions).
|
|
2
|
+
|
|
3
|
+
::: sample-card
|
|
4
|
+
<div class="card card-xs mx-auto m-4">
|
|
5
|
+
<slide-up-down :active="show">
|
|
6
|
+
<div class="card-body">
|
|
7
|
+
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.
|
|
8
|
+
</div>
|
|
9
|
+
</slide-up-down>
|
|
10
|
+
<div class="card-footer text-center">
|
|
11
|
+
<button @click="show = !show" type="button" class="btn btn-info">
|
|
12
|
+
Click to toggle
|
|
13
|
+
</button>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
:::
|
|
17
|
+
|
|
18
|
+
::: api-table components/SlideUpDown.vue :::
|
|
19
|
+
|
|
20
|
+
<script>
|
|
21
|
+
export default {
|
|
22
|
+
data () {
|
|
23
|
+
return {
|
|
24
|
+
show: true
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
</script>
|