@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,37 @@
|
|
|
1
|
+
@mixin keyframes($animationName) {
|
|
2
|
+
@-webkit-keyframes #{$animationName} {
|
|
3
|
+
@content;
|
|
4
|
+
}
|
|
5
|
+
@-moz-keyframes #{$animationName} {
|
|
6
|
+
@content;
|
|
7
|
+
}
|
|
8
|
+
@-o-keyframes #{$animationName} {
|
|
9
|
+
@content;
|
|
10
|
+
}
|
|
11
|
+
@keyframes #{$animationName} {
|
|
12
|
+
@content;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@mixin animation($animation) {
|
|
17
|
+
-webkit-animation:$animation;
|
|
18
|
+
-moz-animation:$animation;
|
|
19
|
+
-o-animation:$animation;
|
|
20
|
+
animation:$animation;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@mixin animation-delay-loop($from:0, $to:10, $delay: 300ms) {
|
|
24
|
+
@for $i from $from through $to {
|
|
25
|
+
&:nth-child(#{$i}) {
|
|
26
|
+
animation-delay: $i * $delay;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@mixin vendor-prefix($name, $argument) {
|
|
32
|
+
-webkit-#{$name}: #{$argument};
|
|
33
|
+
-ms-#{$name}: #{$argument};
|
|
34
|
+
-moz-#{$name}: #{$argument};
|
|
35
|
+
-o-#{$name}: #{$argument};
|
|
36
|
+
#{$name}: #{$argument};
|
|
37
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.text-jumbotron {
|
|
2
|
+
font-family: $jumbotron-font-family;
|
|
3
|
+
font-weight: $jumbotron-font-weight;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.text-sans-serif {
|
|
7
|
+
font-family: $font-family-sans-serif;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.text-serif {
|
|
11
|
+
font-family: $font-family-serif;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.jumbotron > h1,
|
|
15
|
+
.jumbotron > .h1 {
|
|
16
|
+
font-family: $jumbotron-font-family;
|
|
17
|
+
font-weight: $jumbotron-font-weight;
|
|
18
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
$white: #fff !default;
|
|
2
|
+
$gray-100: #f8f8f8 !default;
|
|
3
|
+
$gray-200: #e9e9e9 !default;
|
|
4
|
+
$gray-300: #dedede !default;
|
|
5
|
+
$gray-400: #cccccc !default; // Brand color
|
|
6
|
+
$gray-500: #999999 !default; // Brand color
|
|
7
|
+
$gray-600: #696969 !default; // Brand color
|
|
8
|
+
$gray-700: #494949 !default;
|
|
9
|
+
$gray-800: #3c3c3c !default; // Brand color
|
|
10
|
+
$gray-900: #212121 !default;
|
|
11
|
+
$black: #000 !default;
|
|
12
|
+
|
|
13
|
+
$primary: #ff0000 !default; // Brand color
|
|
14
|
+
$secondary: $gray-500 !default;
|
|
15
|
+
$danger: #8B0707 !default; // Brand color
|
|
16
|
+
$success: #46EC4E !default;
|
|
17
|
+
$info: #0000FF !default;
|
|
18
|
+
$warning: #FFBA00 !default;
|
|
19
|
+
$light: $gray-200 !default;
|
|
20
|
+
$dark: #000 !default;
|
|
21
|
+
|
|
22
|
+
$brand-grays: () !default;
|
|
23
|
+
$brand-grays: map-merge(
|
|
24
|
+
(
|
|
25
|
+
"gray-lighter": $gray-400,
|
|
26
|
+
"gray-light": $gray-500,
|
|
27
|
+
"gray-dark": $gray-600,
|
|
28
|
+
"gray-darker": $gray-800
|
|
29
|
+
),
|
|
30
|
+
$brand-grays
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
$body-bg: $white !default; // Brand color
|
|
34
|
+
$body-color: $black !default; // Brand color
|
|
35
|
+
$text-muted: $gray-500 !default;
|
|
36
|
+
|
|
37
|
+
$component-active-bg: $primary !default;
|
|
38
|
+
$component-active-color: $white;
|
|
39
|
+
|
|
40
|
+
$table-dark-bg: $gray-800 !default;
|
|
41
|
+
$table-dark-border-color: $gray-600 !default;
|
|
42
|
+
|
|
43
|
+
$enable-rounded: false !default;
|
|
44
|
+
$enable-shadows: true !default;
|
|
45
|
+
$enable-gradients: false !default;
|
|
46
|
+
|
|
47
|
+
$font-family-sans-serif: "Poppins", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !default;
|
|
48
|
+
$font-family-serif: "Merriweather", Georgia, "Times New Roman", Times, serif !default;
|
|
49
|
+
|
|
50
|
+
$headings-font-family: $font-family-sans-serif !default;
|
|
51
|
+
$headings-font-weight: 700 !default;
|
|
52
|
+
|
|
53
|
+
$jumbotron-bg: $gray-200 !default;
|
|
54
|
+
$jumbotron-font-family: "Anton", $font-family-sans-serif !default;
|
|
55
|
+
$jumbotron-font-weight: 400 !default;
|
|
56
|
+
|
|
57
|
+
$fade-bg: $gray-400 !default;
|
|
58
|
+
$list-group-bg: transparent !default;
|
|
59
|
+
|
|
60
|
+
$input-focus-border-color: $secondary !default;
|
|
61
|
+
$bs-input-bg: $gray-100 !default;
|
|
62
|
+
$input-focus-bg: $white !default;
|
|
63
|
+
$input-box-shadow: none !default;
|
|
64
|
+
|
|
65
|
+
$btn-box-shadow: none !default;
|
|
66
|
+
$btn-font-family: $font-family-sans-serif;
|
|
67
|
+
|
|
68
|
+
$form-check-input-gutter: 1.5rem !default;
|
|
69
|
+
|
|
70
|
+
$popover-body-padding-y: 0 !default;
|
|
71
|
+
$popover-body-padding-x: 0 !default;
|
|
72
|
+
$popover-max-width: 300px !default;
|
|
73
|
+
|
|
74
|
+
$popover-box-shadow: 0 10px 30px -5px rgba($black, 0.15) !default;
|
|
75
|
+
$dropdown-box-shadow: $popover-box-shadow !default;
|
|
76
|
+
$dropdown-min-width: 14rem;
|
|
77
|
+
|
|
78
|
+
$modal-backdrop-bg: $white !default;
|
|
79
|
+
$modal-lg: 990px !default;
|
|
80
|
+
$modal-content-box-shadow-xs: $popover-box-shadow !default;
|
|
81
|
+
$modal-content-box-shadow-sm-up: $popover-box-shadow !default;
|
|
82
|
+
|
|
83
|
+
$tooltip-max-width: 260px !default;
|
|
84
|
+
$tooltip-opacity: 1 !default;
|
|
85
|
+
|
|
86
|
+
$alert-border-width: 0;
|
|
87
|
+
|
|
88
|
+
// Bootstrap variables and functions must be available everywhere
|
|
89
|
+
@import 'node_modules/bootstrap/scss/_functions.scss';
|
|
90
|
+
@import 'node_modules/bootstrap/scss/_variables.scss';
|
|
91
|
+
|
|
92
|
+
// Get theses variables to make them available in the doc
|
|
93
|
+
$theme-colors: none !default;
|
|
94
|
+
$font-family-monospace: none !default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$bs-input-bg-dark: $gray-900 !default;
|
package/lib/types.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { StyleValue } from 'vue'
|
|
2
|
+
|
|
3
|
+
import {AccordionKey, ParentKey} from '@/keys'
|
|
4
|
+
import { ComputedRef } from 'vue'
|
|
5
|
+
import type { GeoProjection } from 'd3-geo'
|
|
6
|
+
import { Ref } from 'vue'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
export type Step = symbol | string
|
|
10
|
+
|
|
11
|
+
export type Accordion = {
|
|
12
|
+
emitAccordionNextStepEvent: () => void
|
|
13
|
+
emitAccordionPreviousStepEvent: () => void
|
|
14
|
+
isActiveStep: (step: Step) => boolean
|
|
15
|
+
isPreviousStep: (step: Step) => boolean
|
|
16
|
+
isFirstStep: (step: Step) => boolean
|
|
17
|
+
isLastStep: (step: Step) => boolean
|
|
18
|
+
step: Step
|
|
19
|
+
steps: Step[]
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type AccordionProvide = {
|
|
23
|
+
[AccordionKey]: Accordion
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type BrandStyle = StyleValue & {
|
|
27
|
+
'--monochrome-color': string
|
|
28
|
+
color: string
|
|
29
|
+
background: string
|
|
30
|
+
width: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type BrandExpansionStyle = Pick<BrandStyle, '--monochrome-color' | 'background'>
|
|
34
|
+
|
|
35
|
+
export type Variant = 'primary' | 'secondary' | 'danger' | 'info' | 'warning' | 'success' | 'dark' | 'light'
|
|
36
|
+
|
|
37
|
+
export type MapTransform = { k: number, x: number, y: number, rotateX: number, rotateY : number }
|
|
38
|
+
|
|
39
|
+
export type ParentMap = {
|
|
40
|
+
mapRect:Ref<DOMRect>,
|
|
41
|
+
mapTransform:Ref<MapTransform>,
|
|
42
|
+
rotatingMapProjection:ComputedRef<GeoProjection|Function>
|
|
43
|
+
}
|
|
44
|
+
export type ParentMapProvide = {
|
|
45
|
+
[ParentKey]: ParentMap
|
|
46
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class RequestAnimationFrameWrapper {
|
|
2
|
+
live: boolean
|
|
3
|
+
callback: () => void
|
|
4
|
+
|
|
5
|
+
constructor () {
|
|
6
|
+
this.live = false
|
|
7
|
+
this.callback = () => null
|
|
8
|
+
}
|
|
9
|
+
start (callback: () => void) {
|
|
10
|
+
this.live = true
|
|
11
|
+
this.callback = callback
|
|
12
|
+
this.schedule()
|
|
13
|
+
}
|
|
14
|
+
stop () {
|
|
15
|
+
this.live = false
|
|
16
|
+
this.callback = () => null
|
|
17
|
+
}
|
|
18
|
+
schedule () {
|
|
19
|
+
this.callback()
|
|
20
|
+
if (this.live) {
|
|
21
|
+
window.requestAnimationFrame(this.schedule.bind(this))
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { memoize, flatten } from 'lodash'
|
|
2
|
+
|
|
3
|
+
var assetUniqueIdCounter: number = 0;
|
|
4
|
+
|
|
5
|
+
export const injectAsset = memoize(function(file: string, id: string = `dynamic-asset-${assetUniqueIdCounter++}`): Promise<unknown> {
|
|
6
|
+
|
|
7
|
+
return new Promise((resolve: (value?: unknown) => void) => {
|
|
8
|
+
const parent: HTMLElement = document.querySelector("body") || document.querySelector("head")!
|
|
9
|
+
const parts = file.split(".");
|
|
10
|
+
const ext = parts[parts.length-1].toLowerCase();
|
|
11
|
+
switch(ext) {
|
|
12
|
+
case "js":
|
|
13
|
+
var script = document.createElement('script');
|
|
14
|
+
script.setAttribute("type", "text/javascript");
|
|
15
|
+
script.onload = resolve
|
|
16
|
+
parent.appendChild(script);
|
|
17
|
+
script.setAttribute("src", file);
|
|
18
|
+
script.setAttribute("id", id);
|
|
19
|
+
break;
|
|
20
|
+
case "css":
|
|
21
|
+
var css = document.createElement('link');
|
|
22
|
+
css.setAttribute("rel", "stylesheet");
|
|
23
|
+
css.setAttribute("type", "text/css");
|
|
24
|
+
css.onload = resolve
|
|
25
|
+
parent.appendChild(css);
|
|
26
|
+
css.setAttribute("href", file);
|
|
27
|
+
css.setAttribute("id", id);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export const injectAssets = function(...args: string[]): Promise<void> {
|
|
34
|
+
const files = flatten(args)
|
|
35
|
+
return new Promise((resolve: () => void) => {
|
|
36
|
+
var filesLoaded = 0;
|
|
37
|
+
var allFilesLoaded = function() {
|
|
38
|
+
if(++filesLoaded == files.length) {
|
|
39
|
+
resolve();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for(var i=0; i < files.length ; i++) {
|
|
43
|
+
injectAsset(files[i]).then(allFilesLoaded)
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import Clipboard from 'clipboard'
|
|
2
|
+
|
|
3
|
+
export function copyText (text: string, container: Element): Promise<void> {
|
|
4
|
+
return new Promise(function (resolve: (value?:undefined) => void, reject: (value?: Clipboard.Event) => void) {
|
|
5
|
+
const fakeElement = document.createElement('button')
|
|
6
|
+
// Use the document body as container is no valid object is provided
|
|
7
|
+
container = typeof container === 'object' ? container : document.body
|
|
8
|
+
|
|
9
|
+
const clipboard: Clipboard = new Clipboard(fakeElement, { text: () => text, container })
|
|
10
|
+
|
|
11
|
+
clipboard.on('success', () => {
|
|
12
|
+
clipboard.destroy()
|
|
13
|
+
resolve()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
clipboard.on('error', error => {
|
|
17
|
+
clipboard.destroy()
|
|
18
|
+
reject(error)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
fakeElement.click()
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function copyHtml (html: string, plain: string) {
|
|
26
|
+
interface ClipboardEvent extends Event {
|
|
27
|
+
clipboardData: {
|
|
28
|
+
setData: (attribute: string, value: string) => void
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function listener(event: ClipboardEvent) {
|
|
33
|
+
event.clipboardData.setData("text/html", html)
|
|
34
|
+
event.clipboardData.setData("text/plain", plain)
|
|
35
|
+
event.preventDefault()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
document.addEventListener("copy", listener as EventListener)
|
|
39
|
+
document.execCommand("copy")
|
|
40
|
+
document.removeEventListener("copy", listener as EventListener)
|
|
41
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import every from 'lodash/every'
|
|
2
|
+
import { Child as PymChild } from 'pym.js'
|
|
3
|
+
import { injectAssets } from './assets'
|
|
4
|
+
|
|
5
|
+
// Will hold the pym instance once
|
|
6
|
+
var pymChild: PymChild
|
|
7
|
+
// URL parameters generated by Pym
|
|
8
|
+
const pymParams = ['initialWidth', 'childId', 'parentUrl', 'parentTitle']
|
|
9
|
+
// Save the initial window href value in case it changes
|
|
10
|
+
const initialHref = window.location.href
|
|
11
|
+
|
|
12
|
+
export default class IframeResizer {
|
|
13
|
+
initializer: Promise<PymChild>
|
|
14
|
+
|
|
15
|
+
constructor () {
|
|
16
|
+
this.initializer = injectAssets('//pym.nprapps.org/pym.v1.min.js').then(() => {
|
|
17
|
+
pymChild = pymChild || new window.pym.Child({ polling: 300 })
|
|
18
|
+
return pymChild
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
sendHeight (): Promise<void> {
|
|
22
|
+
return this.initializer.then(pymChild => pymChild.sendHeight())
|
|
23
|
+
}
|
|
24
|
+
static create (): IframeResizer {
|
|
25
|
+
return new IframeResizer()
|
|
26
|
+
}
|
|
27
|
+
static template(url: string, id: string = 'icij-' + Date.now().toString(32)): string {
|
|
28
|
+
return [
|
|
29
|
+
`<script type="text/javascript" src="https://pym.nprapps.org/pym.v1.min.js"></script>`,
|
|
30
|
+
`<div id="${id}"></div>`,
|
|
31
|
+
`<script>`,
|
|
32
|
+
`const icijIframe = new pym.Parent("${id}", "${IframeResizer.deletePymParams(url)}", {})`,
|
|
33
|
+
`</script>`,
|
|
34
|
+
].join('\n')
|
|
35
|
+
}
|
|
36
|
+
static deletePymParams(href: string = initialHref): string {
|
|
37
|
+
const url = new URL(href);
|
|
38
|
+
// Remove all unwanted param
|
|
39
|
+
for (const param of pymParams) {
|
|
40
|
+
url.searchParams.delete(param)
|
|
41
|
+
}
|
|
42
|
+
// Rebuild the URL
|
|
43
|
+
return url.href
|
|
44
|
+
}
|
|
45
|
+
static isEmbedded (href: string = initialHref): boolean {
|
|
46
|
+
const url = new URL(href)
|
|
47
|
+
return every(pymParams, param => url.searchParams.has(param))
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BoxStyle, ContentPlaceholderStyledRow, ContentPlaceholderRow, ContentPlaceholderRowBoxes, ContentPlaceholderStyledRows, ContentPlaceholderRows } from "@/utils/placeholderTypes"
|
|
2
|
+
|
|
3
|
+
export function isFlexBasis(value: string | number): boolean {
|
|
4
|
+
return Number(value).toString() === value.toString()
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function isWidth(value: string | number): boolean {
|
|
8
|
+
const valueAsStr = String(value)
|
|
9
|
+
const cssSuffix = ['px', '%', 'em', 'rem']
|
|
10
|
+
let checkState = false
|
|
11
|
+
cssSuffix.forEach(suffix => {
|
|
12
|
+
if (Number(valueAsStr.split(suffix)[0]) &&
|
|
13
|
+
valueAsStr.split(suffix)[1] === '' &&
|
|
14
|
+
valueAsStr.split(suffix).length === 2) {
|
|
15
|
+
checkState = true
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
return checkState
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function getBoxStyle(left: number, width: number, isLast: boolean, subClass: string = 'box'): BoxStyle[] {
|
|
22
|
+
const arr: BoxStyle[] = []
|
|
23
|
+
|
|
24
|
+
if (left !== 0) {
|
|
25
|
+
if (isFlexBasis(left)) {
|
|
26
|
+
arr.push({ style: `flex-grow: ${left}; flex-shrink: 0; flex-basis: 0;`, subClass })
|
|
27
|
+
} else if (isWidth(left)) {
|
|
28
|
+
arr.push({ style: `flex-grow: 0; flex-shrink: 0; flex-basis: ${left};`, subClass })
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (isFlexBasis(width)) {
|
|
32
|
+
arr.push({ style: `flex-grow: ${width}; flex-shrink: 0; flex-basis: 0;` })
|
|
33
|
+
} else if (isWidth(width)) {
|
|
34
|
+
arr.push({ style: `flex-grow: 0; flex-shrink: 0; flex-basis: ${width};` })
|
|
35
|
+
}
|
|
36
|
+
if (isLast) {
|
|
37
|
+
arr.push({ style: 'flex-grow: 1; flex-shrink: 0; flex-basis: 0;', subClass })
|
|
38
|
+
}
|
|
39
|
+
return arr
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function formatRows(rows: ContentPlaceholderRows, subClass: string = 'box'): ContentPlaceholderStyledRows {
|
|
43
|
+
const rowArr: ContentPlaceholderStyledRows = rows.map((row: ContentPlaceholderRow) => {
|
|
44
|
+
// Will contain all boxes in
|
|
45
|
+
const rowBoxes: Array<BoxStyle> = []
|
|
46
|
+
// Create placeholder row with initial height
|
|
47
|
+
const rowObj: ContentPlaceholderStyledRow = { height: row.height, boxes: [] }
|
|
48
|
+
// Add style
|
|
49
|
+
row.boxes.forEach((box: Array<any>, index: number) => {
|
|
50
|
+
const isLast: boolean = index === row.boxes.length - 1
|
|
51
|
+
// Merge the box styles
|
|
52
|
+
rowBoxes.push(...getBoxStyle(box[0], box[1], isLast, subClass))
|
|
53
|
+
})
|
|
54
|
+
rowObj.boxes = rowBoxes
|
|
55
|
+
return rowObj
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
return rowArr
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export default {
|
|
62
|
+
isFlexBasis,
|
|
63
|
+
isWidth,
|
|
64
|
+
getBoxStyle,
|
|
65
|
+
formatRows
|
|
66
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StyleValue } from 'vue'
|
|
2
|
+
|
|
3
|
+
export interface BoxStyle {
|
|
4
|
+
style: StyleValue,
|
|
5
|
+
subClass?: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type ContentPlaceholderRowBoxes = Array<Array<number | string>>
|
|
9
|
+
|
|
10
|
+
export interface ContentPlaceholderRow {
|
|
11
|
+
height: number | string,
|
|
12
|
+
boxes: ContentPlaceholderRowBoxes
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ContentPlaceholderStyledRow {
|
|
16
|
+
height: number | string,
|
|
17
|
+
boxes: Array<BoxStyle>
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ContentPlaceholderStyledRows = Array<ContentPlaceholderStyledRow>
|
|
21
|
+
export type ContentPlaceholderRows = Array<ContentPlaceholderRow>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const hljs = require('highlight.js')
|
|
2
|
+
const loaderUtils = require('loader-utils')
|
|
3
|
+
|
|
4
|
+
module.exports = function highlightLoader(source) {
|
|
5
|
+
this && this.cacheable && this.cacheable()
|
|
6
|
+
const query = loaderUtils.parseQuery(this.query || '?')
|
|
7
|
+
const language = query.lang
|
|
8
|
+
const code = hljs.getLanguage(language) ? hljs.highlight(source, { language }) : hljs.highlightAuto(source)
|
|
9
|
+
const json = JSON.stringify(code.value)
|
|
10
|
+
.replace(/\u2028/g, '\\u2028')
|
|
11
|
+
.replace(/\u2029/g, '\\u2029');
|
|
12
|
+
return `module.exports = ${json}`;
|
|
13
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @src https://github.com/vuejs/vuepress/tree/master/packages/%40vuepress/markdown-loader
|
|
5
|
+
* Module dependencies.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const { EventEmitter } = require('events')
|
|
9
|
+
const { getOptions } = require('loader-utils')
|
|
10
|
+
const { fs, path, hash, parseFrontmatter, } = require('@vuepress/shared-utils')
|
|
11
|
+
const LRU = require('lru-cache')
|
|
12
|
+
const md = require('@vuepress/markdown')
|
|
13
|
+
|
|
14
|
+
const cache = LRU({ max: 1000 })
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Expose markdown loader.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
module.exports = function (src) {
|
|
21
|
+
const isProd = process.env.NODE_ENV === 'production'
|
|
22
|
+
const options = getOptions(this)
|
|
23
|
+
const { sourceDir } = options
|
|
24
|
+
let { markdown } = options
|
|
25
|
+
// Duck-typing to ensure we received a correct markdown-it instance
|
|
26
|
+
if (!markdown || !markdown.parse) {
|
|
27
|
+
markdown = md()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// we implement a manual cache here because this loader is chained before
|
|
31
|
+
// vue-loader, and will be applied on the same file multiple times when
|
|
32
|
+
// selecting the individual blocks.
|
|
33
|
+
const file = this.resourcePath
|
|
34
|
+
const key = hash(file + src)
|
|
35
|
+
const cached = cache.get(key)
|
|
36
|
+
if (cached && (isProd || /\?vue/.test(this.resourceQuery))) {
|
|
37
|
+
return cached
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const frontmatter = parseFrontmatter(src)
|
|
41
|
+
const content = frontmatter.content
|
|
42
|
+
|
|
43
|
+
// the render method has been augmented to allow plugins to
|
|
44
|
+
// register data during render
|
|
45
|
+
const { html, data: { hoistedTags, links }, dataBlockString } = markdown.render(content)
|
|
46
|
+
|
|
47
|
+
// check if relative links are valid
|
|
48
|
+
links && links.forEach(link => {
|
|
49
|
+
link = decodeURIComponent(link)
|
|
50
|
+
|
|
51
|
+
const shortname = link
|
|
52
|
+
.replace(/#.*$/, '')
|
|
53
|
+
.replace(/\.html$/, '.md')
|
|
54
|
+
|
|
55
|
+
const filename = shortname
|
|
56
|
+
.replace(/\/$/, '/README.md')
|
|
57
|
+
.replace(/^\//, sourceDir + '/')
|
|
58
|
+
|
|
59
|
+
const altname = shortname
|
|
60
|
+
.replace(/\/$/, '/index.md')
|
|
61
|
+
.replace(/^\//, sourceDir + '/')
|
|
62
|
+
|
|
63
|
+
const dir = path.dirname(this.resourcePath)
|
|
64
|
+
const file = path.resolve(dir, filename)
|
|
65
|
+
const altfile = altname !== filename ? path.resolve(dir, altname) : null
|
|
66
|
+
|
|
67
|
+
if (!fs.existsSync(file) && (!altfile || !fs.existsSync(altfile))) {
|
|
68
|
+
this.emitWarning(
|
|
69
|
+
new Error(
|
|
70
|
+
`\nFile for relative link "${link}" does not exist.\n` +
|
|
71
|
+
`(Resolved file: ${file})\n`
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
const res = (
|
|
78
|
+
`<template>\n` +
|
|
79
|
+
`<div>${html}</div>\n` +
|
|
80
|
+
`</template>\n` +
|
|
81
|
+
`<script>
|
|
82
|
+
export default { }
|
|
83
|
+
</script>` +
|
|
84
|
+
(hoistedTags || []).join('\n') +
|
|
85
|
+
`\n${dataBlockString}\n`
|
|
86
|
+
)
|
|
87
|
+
cache.set(key, res)
|
|
88
|
+
return res
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
module.exports.frontmatterEmitter = new EventEmitter()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const frontmatter = require('front-matter')
|
|
2
|
+
const startCase = require('lodash/startCase')
|
|
3
|
+
const { dirname, extname, relative } = require('path')
|
|
4
|
+
|
|
5
|
+
module.exports = function metadataLoader(source) {
|
|
6
|
+
this && this.cacheable && this.cacheable();
|
|
7
|
+
|
|
8
|
+
const metadata = {
|
|
9
|
+
title: startCase(dirname(this.resourcePath).split('/').pop()),
|
|
10
|
+
resourcePath: relative('./', this.resourcePath)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (extname(this.resourcePath) === '.md') {
|
|
14
|
+
Object.assign(metadata, frontmatter(source).attributes)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return JSON.stringify(metadata)
|
|
18
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const { promises: fs } = require('fs')
|
|
2
|
+
const getSassVars = require('get-sass-vars')
|
|
3
|
+
|
|
4
|
+
module.exports = async function sassExtractLoader() {
|
|
5
|
+
const callback = this.async()
|
|
6
|
+
try {
|
|
7
|
+
const css = await fs.readFile(this.resourcePath, 'utf-8')
|
|
8
|
+
const json = await getSassVars(css)
|
|
9
|
+
callback(null, `module.exports = ${JSON.stringify(json)}`)
|
|
10
|
+
} catch(_) {
|
|
11
|
+
callback(null, "module.exports = {}")
|
|
12
|
+
}
|
|
13
|
+
return
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const vueDocs = require('vue-docgen-api')
|
|
2
|
+
|
|
3
|
+
module.exports = async function vueDocgenLoader() {
|
|
4
|
+
const callback = this.async()
|
|
5
|
+
const emptyApi = { "props": {}, "slots": {}, "events": {}, "methods": {} }
|
|
6
|
+
try {
|
|
7
|
+
const api = await vueDocs.parse(this.resourcePath)
|
|
8
|
+
const json = JSON.stringify(api, null, 2)
|
|
9
|
+
callback(null, `module.exports = ${json}`)
|
|
10
|
+
} catch (_) {
|
|
11
|
+
callback(null, `module.exports = ${emptyApi}`)
|
|
12
|
+
}
|
|
13
|
+
return
|
|
14
|
+
};
|