@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,50 @@
1
+ # Workflow name
2
+ name: Build and Publish Storybook to GitHub Pages
3
+
4
+ on:
5
+ # Event for the workflow to run on
6
+ push:
7
+ branches:
8
+ - 'main' # Replace with the branch you want to deploy from
9
+
10
+ permissions:
11
+ contents: read
12
+ pages: write
13
+ id-token: write
14
+
15
+ # List of jobs
16
+ jobs:
17
+ deploy:
18
+ runs-on: ubuntu-latest
19
+ # Job steps
20
+ steps:
21
+ # Manual Checkout
22
+ - uses: actions/checkout@v3
23
+
24
+ # Set up Node
25
+ - uses: actions/setup-node@v3
26
+ with:
27
+ node-version: '18.x'
28
+ cache: 'yarn'
29
+
30
+ - name: Install Node dependencies
31
+ run: yarn --frozen-lockfile
32
+
33
+ - name: Run tests
34
+ run: yarn test
35
+
36
+ - name: Build Murmur
37
+ run: yarn build
38
+
39
+ - name: Build storybook artifacts
40
+ run: yarn build-storybook
41
+
42
+ # Upload storybook to repository's artifacts
43
+ - name: Upload storybook artifacts
44
+ uses: actions/upload-pages-artifact@v3
45
+ with:
46
+ path: storybook-static
47
+
48
+ - uses: actions/deploy-pages@v4
49
+
50
+
@@ -0,0 +1,14 @@
1
+ @import './doc_variables.scss';
2
+ @import '../lib/styles/lib';
3
+ @import 'node_modules/bootstrap/scss/bootstrap';
4
+ @import 'node_modules/bootstrap-vue-next/dist/bootstrap-vue-next';
5
+ .bg-striped {
6
+ background: repeating-linear-gradient(45deg, #dfdddd, #dfdddd 10px, #cfcccc 10px, #cfcccc 20px);
7
+ width:500px
8
+ }
9
+ @include color-mode(dark) {
10
+ .bg-striped {
11
+ background: repeating-linear-gradient(45deg, #222, #333 10px, #444 10px, #444 20px);
12
+
13
+ }
14
+ }
@@ -0,0 +1,20 @@
1
+ @import '@/styles/variables.scss';
2
+
3
+ $docs-menu-bg: #000;
4
+ $docs-menu-color: #fff;
5
+ $docs-menu-muted: mix($docs-menu-bg, $docs-menu-color, 50%);
6
+
7
+ $docs-header-bg: $jumbotron-bg;
8
+ $docs-header-border-color: darken($docs-header-bg, 10%);
9
+
10
+ $pre-color: $light;
11
+ $app-menu-max-width: 300px;
12
+ $app-main-max-width: 770px;
13
+
14
+ $modal-backdrop-bg: rgba(darken($dark, 10%), .5);
15
+ $code-color: $info;
16
+
17
+ $link-color: #000;
18
+ $link-decoration: none;
19
+ $link-hover-color: $primary;
20
+ $link-hover-decoration: none;
@@ -0,0 +1,35 @@
1
+ import type { StorybookConfig } from "@storybook/vue3-vite";
2
+ import { mergeConfig } from "vite";
3
+
4
+ const config:StorybookConfig = {
5
+ core: {
6
+ disableTelemetry: true, // 👈 Disables telemetry
7
+ },
8
+ stories: ["../stories/**/*.mdx", "../stories/**/*.stories.@(js|jsx|ts|tsx)"],
9
+ staticDirs: ["../public"],
10
+ addons: [
11
+ "@storybook/addon-links",
12
+ "@storybook/addon-essentials",
13
+ "@storybook/addon-interactions",
14
+ "@storybook/addon-mdx-gfm",
15
+ "@storybook/preset-scss",
16
+ "@storybook/addon-themes"
17
+ ],
18
+ framework: {
19
+ name: "@storybook/vue3-vite",
20
+ options: {},
21
+ },
22
+ docs: {
23
+ autodocs: "tag",
24
+ },
25
+ viteFinal: (config, options) => {
26
+ return mergeConfig(config, {
27
+ // This is needed because the copy plugin can't copy files outside of the root directory
28
+ // The files are copied back to the root by the post script
29
+ build: {
30
+ outDir: 'storybook-static'
31
+ }
32
+ });
33
+ }
34
+ };
35
+ export default config;
@@ -0,0 +1,2 @@
1
+ <link rel="preload" href="https://fonts.googleapis.com/css?family=Poppins:400,700,800|Anton:300,400,400italic&display=swap" as="style">
2
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:400,700,800|Anton:300,400,400italic&display=swap">
@@ -0,0 +1,32 @@
1
+ import {setup, Preview} from '@storybook/vue3'
2
+ import './app.scss';
3
+ import Murmur from "@/main";
4
+ import { withThemeByDataAttribute } from '@storybook/addon-themes';
5
+
6
+ setup((app)=>{
7
+ app.use(Murmur)
8
+ })
9
+ export const decorators = [
10
+ withThemeByDataAttribute({
11
+ themes: {
12
+ light: 'light',
13
+ dark: 'dark',
14
+ },
15
+ defaultTheme: 'light',
16
+ attributeName: 'data-bs-theme',
17
+ }),
18
+ ];
19
+ export const parameters = {
20
+ actions: { argTypesRegex: "^on[A-Z].*" },
21
+ controls: {
22
+ matchers: {
23
+ color: /(background|color)$/i,
24
+ date: /Date$/,
25
+ },
26
+ },
27
+ };
28
+
29
+ const preview: Preview = {
30
+ parameters
31
+ };
32
+ export default preview;
package/README.md ADDED
@@ -0,0 +1,71 @@
1
+ <p align="center">
2
+ <a href="https://icij.github.io/murmur/">
3
+ <img src="https://github.com/ICIJ/murmur/raw/master/lib/assets/images/murmur-dark.png" width="158px">
4
+ </a>
5
+ <br>
6
+ Murmur is <a href="https://icij.org">ICIJ</a>'s Design System for Bootstrap 4 and Vue.js
7
+ </p>
8
+
9
+ <div align="center">
10
+
11
+ | | Status |
12
+ | --: | :-- |
13
+ | **CI checks** | [![CircleCI](https://circleci.com/gh/ICIJ/murmur.svg?style=shield)](https://circleci.com/gh/ICIJ/murmur) |
14
+ | **Code Climate** | [![Code Climate](https://api.codeclimate.com/v1/badges/e487295b939be72d5f15/maintainability)](ttps://codeclimate.com/github/ICIJ/murmur/maintainability) |
15
+ | **NPM version** | [![NPM version](https://img.shields.io/npm/v/@icij/murmur)](https://www.npmjs.com/package/@icij/murmur) |
16
+ | **NPM downloads** | [![NPM download](https://img.shields.io/npm/dm/@icij/murmur)](https://www.npmjs.com/package/@icij/murmur) |
17
+
18
+ </div>
19
+
20
+
21
+ ## Installation guide
22
+
23
+ If you are using module bundlers such as Webpack or Rollup, you might need to include the package into your project.
24
+ To get started, use NPM or Yarn to get latest version of **@icij/murmur**.
25
+
26
+ ```bash
27
+ # with NPM:
28
+ npm i @icij/murmur
29
+
30
+ # or with Yarn:
31
+ yarn add @icij/murmur
32
+ ```
33
+ Then, register Murmur as a pluggin in your app entry point:
34
+
35
+ ```js
36
+ import Vue from 'vue'
37
+ import Murmur from '@icij/murmur'
38
+
39
+ Vue.use(Murmur)
40
+ ```
41
+
42
+ Now all components will be globally available in your app.
43
+ [Read the documentation](https://icij.github.io/murmur/) to know how to use them.
44
+
45
+ ## Build Setup
46
+
47
+ ``` bash
48
+ # install dependencies
49
+ yarn
50
+
51
+ # serve documentation with hot reload at localhost:8080
52
+ yarn serve
53
+
54
+ # build library and documentation for production with minification
55
+ yarn build
56
+
57
+ # build library for production with minification
58
+ yarn build:lib
59
+
60
+ # build documentation for production with minification
61
+ yarn build:docs
62
+
63
+ # deploy the doc on Github Pages
64
+ yarn deploy
65
+
66
+ # publish a version of the package on NPM registry
67
+ yarn publish
68
+
69
+ # run unit tests
70
+ yarn test:unit
71
+ ```
package/deploy.js ADDED
@@ -0,0 +1,15 @@
1
+ import gh from 'gh-pages'
2
+ import path from 'path'
3
+ import ora from 'ora'
4
+ import chalk from 'chalk'
5
+
6
+ process.env.NODE_ENV = 'production'
7
+
8
+ const spinner = ora('push dist folder to gh-pages branch...')
9
+ const message = 'Updates [ci skip]'
10
+ spinner.start()
11
+
12
+ gh.publish(path.join(process.cwd(), 'dist', 'docs'), { message }, () => {
13
+ spinner.stop()
14
+ console.log(chalk.cyan(' Push complete.\n'))
15
+ });
@@ -0,0 +1,171 @@
1
+ <template>
2
+ <section class="api-table">
3
+ <h3 class="api-table__heading mb-3">
4
+ API
5
+ </h3>
6
+ <div :key="docgen.title" class="api-table__component">
7
+ <b-tabs class="api-table__component__tabs">
8
+ <b-tab v-if="hasItems(docgen.props)" title="Properties" class="api-table__component__tabs__container">
9
+ <b-table :items="toItems(docgen.props)" :fields="propsFields" small class="m-0 small">
10
+ <template v-for="{ key } in propsFields" v-slot:[`cell(${key})`]="{ value }">
11
+ <span v-html="value" :key="key"></span>
12
+ </template>
13
+ </b-table>
14
+ </b-tab>
15
+
16
+ <b-tab v-if="hasItems(docgen.slots)" title="Slots" class="api-table__component__tabs__container">
17
+ <b-table :items="toItems(docgen.slots)" :fields="slotsFields" small class="m-0 small">
18
+ <template v-for="{ key } in slotsFields" v-slot:[`cell(${key})`]="{ value }">
19
+ <span v-html="value" :key="key"></span>
20
+ </template>
21
+ </b-table>
22
+ </b-tab>
23
+
24
+ <b-tab v-if="hasItems(docgen.events)" title="Events" class="api-table__component__tabs__container">
25
+ <b-table :items="toItems(docgen.events)" :fields="eventsFields" small class="m-0 small">
26
+ <template v-for="{ key } in eventsFields" v-slot:[`cell(${key})`]="{ value }">
27
+ <span v-html="value" :key="key"></span>
28
+ </template>
29
+ </b-table>
30
+ </b-tab>
31
+
32
+ <b-tab v-if="hasItems(docgen.methods)" title="Methods" class="api-table__component__tabs__container">
33
+ <b-table :items="toItems(docgen.methods)" :fields="methodsFields" small class="m-0 small">
34
+ <template v-for="{ key } in methodsFields" v-slot:[`cell(${key})`]="{ value }">
35
+ <span v-html="value" :key="key"></span>
36
+ </template>
37
+ </b-table>
38
+ </b-tab>
39
+ </b-tabs>
40
+ </div>
41
+ </section>
42
+ </template>
43
+
44
+ <script>
45
+ import reduce from 'lodash/reduce'
46
+ import sortBy from 'lodash/sortBy'
47
+ import keys from 'lodash/keys'
48
+ import isObject from 'lodash/isObject'
49
+
50
+ import { BTabs } from 'bootstrap-vue/esm/components/tabs/tabs'
51
+ import { BTab } from 'bootstrap-vue/esm/components/tabs/tab'
52
+ import { BTable } from 'bootstrap-vue/esm/components/table/table'
53
+
54
+ export default {
55
+ components: {
56
+ BTabs,
57
+ BTab,
58
+ BTable,
59
+ },
60
+ props: {
61
+ api: {
62
+ type: [Object, String],
63
+ default: () => {}
64
+ },
65
+ path: {
66
+ type: String,
67
+ default: null
68
+ }
69
+ },
70
+ methods: {
71
+ toItems(docgen = {}) {
72
+ return sortBy(reduce(keys(docgen), (items, name) => {
73
+ items.push({ name, ...docgen[name] })
74
+ return items
75
+ }, []), 'name')
76
+ },
77
+ hasItems(docgen = {}) {
78
+ return !!keys(docgen).length
79
+ },
80
+ codeFormatter (v = '—') {
81
+ return `<code>${v}</code>`
82
+ },
83
+ varFormatter (v = '—') {
84
+ if (v && (v.indexOf('function() {') === 0 || v.indexOf('() =>') === 0)) {
85
+ return '<span class="text-muted">computed</span>'
86
+ }
87
+ return `<var>${v}</var>`
88
+ }
89
+ },
90
+ async mounted () {
91
+ if (this.path) {
92
+ const path = this.path.replace(/\.vue$/i, '')
93
+ const docgens = import.meta.glob('@/**/*.vue', { as: 'vue-docgen' })
94
+ this.docgen = (await docgens[`/lib/${path}.vue`]()).default
95
+ } else if (this.api) {
96
+ this.docgen = isObject(this.api) ? this.api : JSON.parse(this.api)
97
+ }
98
+ },
99
+ data () {
100
+ return {
101
+ docgen: {},
102
+ propsFields: [
103
+ { label: 'Name', key: 'name', formatter: this.codeFormatter },
104
+ { label: 'Description', key: 'description', class: 'description' },
105
+ { label: 'Type', key: 'type.name' },
106
+ { label: 'Default', key: 'defaultValue.value', formatter: this.varFormatter }
107
+ ],
108
+ slotsFields: [
109
+ { label: 'Slot name', key: 'name', slot: 'cell(name)', formatter: this.codeFormatter },
110
+ { label: 'Description', key: 'description', class: 'description' }
111
+ ],
112
+ eventsFields: [
113
+ { label: 'Name', key: 'name', slot: 'cell(name)', formatter: this.codeFormatter },
114
+ { label: 'Description', key: 'description' , class: 'description'},
115
+ { label: 'Parameters', key: 'type.names', formatter: this.varFormatter }
116
+ ],
117
+ methodsFields: [
118
+ { label: 'Name', key: 'name', slot: 'cell(name)', formatter: this.codeFormatter },
119
+ { label: 'Description', key: 'description', class: 'description' },
120
+ { label: 'Return', key: 'return', formatter: this.varFormatter }
121
+ ]
122
+ }
123
+ }
124
+ }
125
+ </script>
126
+
127
+ <style lang="scss">
128
+ @import '../../lib/styles/lib.scss';
129
+
130
+ .api-table {
131
+
132
+ &__component {
133
+
134
+ &__tabs {
135
+
136
+ .nav-item {
137
+ text-transform: uppercase;
138
+ font-size: 0.9rem;
139
+
140
+ .active {
141
+ font-weight: bolder;
142
+ }
143
+ }
144
+
145
+ &__container {
146
+ padding: $spacer * 0.5;
147
+ overflow: auto;
148
+ width: 100%;
149
+ border: 1px solid $table-border-color;
150
+ border-top: 0;
151
+
152
+ .table {
153
+ white-space: nowrap;
154
+ thead th {
155
+ border-top: 0;
156
+
157
+ &.description {
158
+ min-width: 330px;
159
+ max-width: 450px;
160
+ }
161
+ }
162
+
163
+ td > span > code {
164
+ white-space: nowrap;
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ </style>
@@ -0,0 +1,146 @@
1
+ <template>
2
+ <div id="app" class="app">
3
+ <div class="app__navbar d-block d-lg-none bg-dark p-3 clearfix">
4
+ <router-link to="/">
5
+ <img
6
+ src="@/assets/images/murmur-white.svg"
7
+ alt="ICIJ"
8
+ class="border border-primary d-inline-block"
9
+ height="30px"
10
+ />
11
+ </router-link>
12
+ <button class="btn btn-link text-white float-end" @click="toggleMenu">
13
+ <fa icon="bars" />
14
+ </button>
15
+ </div>
16
+ <transition name="fade">
17
+ <div v-if="!collapseMenu" class="app__overlay" @click="toggleMenu"></div>
18
+ </transition>
19
+ <div class="row no-gutters flex-nowrap">
20
+ <div class="col app__menu" :class="{ 'app__menu--collapse': collapseMenu }">
21
+ <docs-menu></docs-menu>
22
+ </div>
23
+ <div class="col">
24
+ <div class="app__main">
25
+ <docs-header></docs-header>
26
+ <router-view class="app__main__view py-4"></router-view>
27
+ <edit-link></edit-link>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </template>
33
+
34
+ <script>
35
+ import { faBars } from '@fortawesome/free-solid-svg-icons/faBars'
36
+ import { mapState } from 'vuex'
37
+
38
+ import DocsHeader from './DocsHeader.vue'
39
+ import DocsMenu from './DocsMenu.vue'
40
+ import EditLink from './EditLink.vue'
41
+
42
+ import { library } from '@/components/Fa'
43
+
44
+ export default {
45
+ name: 'App',
46
+ components: {
47
+ DocsHeader,
48
+ DocsMenu,
49
+ EditLink
50
+ },
51
+ watch: {
52
+ '$route.name': function () {
53
+ this.$store.commit('collapseMenu')
54
+ },
55
+ collapseMenu: function () {
56
+ // Use bootstrap's class to disable scrolling on the body
57
+ document.body.classList.toggle('modal-open', !this.collapseMenu)
58
+ }
59
+ },
60
+ beforeCreate() {
61
+ library.add(faBars)
62
+ },
63
+ computed: {
64
+ ...mapState(['collapseMenu'])
65
+ },
66
+ methods: {
67
+ toggleMenu() {
68
+ this.$store.commit('toggleMenu')
69
+ }
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <style lang="scss" scoped>
75
+ @import '../styles/variables.scss';
76
+ @import 'node_modules/bootstrap/scss/_mixins.scss';
77
+
78
+ .app {
79
+ &:deep(.hljs) {
80
+ background: $dark;
81
+ padding: $spacer;
82
+ display: block;
83
+ }
84
+
85
+ .fade-enter-active,
86
+ .fade-leave-active {
87
+ transition: opacity 300ms;
88
+ }
89
+ .fade-enter,
90
+ .fade-leave-to {
91
+ opacity: 0;
92
+ }
93
+
94
+ @include media-breakpoint-down(md) {
95
+ &__overlay {
96
+ z-index: $zindex-modal-backdrop;
97
+ position: fixed;
98
+ top: 0;
99
+ left: 0;
100
+ right: 0;
101
+ bottom: 0;
102
+ background: $modal-backdrop-bg;
103
+ }
104
+ }
105
+
106
+ &__menu {
107
+ max-width: $app-menu-max-width;
108
+ min-width: $app-menu-max-width;
109
+ background: $docs-menu-bg;
110
+
111
+ @include media-breakpoint-down(md) {
112
+ z-index: $zindex-modal;
113
+ position: fixed;
114
+ top: 0;
115
+ left: 0;
116
+ bottom: 0;
117
+ width: auto;
118
+ overflow: auto;
119
+ transform: translateX(0%);
120
+ transition: transform 300ms;
121
+
122
+ &--collapse {
123
+ pointer-events: none;
124
+ transform: translateX(-100%);
125
+ }
126
+ }
127
+ }
128
+
129
+ &__main {
130
+ min-height: 100%;
131
+ border: $spacer solid $docs-menu-bg;
132
+ border-left: 0;
133
+
134
+ @include media-breakpoint-down(md) {
135
+ min-height: auto;
136
+ border: 0;
137
+ }
138
+
139
+ &__view {
140
+ max-width: $app-main-max-width;
141
+ padding: 0 $spacer;
142
+ margin: auto;
143
+ }
144
+ }
145
+ }
146
+ </style>
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <component :is="tag" class="collapsible-block card mb-5" :class="{ 'collapsible-block--visible': visible }">
3
+ <div class="d-flex">
4
+ <a class="py-3 px-4 d-block collapsible-block__caret" @click="toggle">
5
+ <fa icon="caret-right" :rotation="show ? 90 : null" />
6
+ </a>
7
+ <div class="flex-grow-1">
8
+ <slot name="label" v-bind:label="label">
9
+ <a v-if="label" class="py-3 pe-4 collapsible-block__label d-block" @click="toggle">
10
+ {{ label }}
11
+ </a>
12
+ </slot>
13
+ </div>
14
+ </div>
15
+ <b-collapse :visible="show" class="collapsible-block__body">
16
+ <slot v-if="useSlot" />
17
+ <pre v-else-if="json"><code class="hljs language-json" v-html="formattedJson"></code></pre>
18
+ </b-collapse>
19
+ </component>
20
+ </template>
21
+
22
+ <script>
23
+ import hljs from 'highlight.js'
24
+ import { faCaretRight } from '@fortawesome/free-solid-svg-icons/faCaretRight'
25
+
26
+ import { library, default as Fa } from '@/components/Fa'
27
+
28
+ export default {
29
+ name: 'CollapsibleBlock',
30
+ components: {
31
+ Fa
32
+ },
33
+ beforeMount () {
34
+ library.add(faCaretRight)
35
+ },
36
+ model: {
37
+ prop: 'visible',
38
+ event: 'input'
39
+ },
40
+ props: {
41
+ visible: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ tag: {
46
+ type: [String, Object],
47
+ default: 'div'
48
+ },
49
+ label: {
50
+ type: String,
51
+ default: null
52
+ },
53
+ json: {
54
+ default: null
55
+ }
56
+ },
57
+ data() {
58
+ return {
59
+ show: this.visible
60
+ }
61
+ },
62
+ watch: {
63
+ visible (value) {
64
+ if (value !== this.show) {
65
+ this.show = value
66
+ }
67
+ },
68
+ show (value, oldValue) {
69
+ if (value !== oldValue) {
70
+ this.$emit('input', this.show)
71
+ }
72
+ }
73
+ },
74
+ created() {
75
+ this.show = this.visible
76
+ },
77
+ mounted() {
78
+ this.show = this.visible
79
+ },
80
+ beforeDestroy() {
81
+ this.show = false
82
+ },
83
+ methods: {
84
+ toggle() {
85
+ this.show = !this.show
86
+ }
87
+ },
88
+ computed: {
89
+ useSlot() {
90
+ return !!this.$slots.default && !!this.$slots.default.length
91
+ },
92
+ stringifiedJson() {
93
+ return JSON.stringify(this.json, null, 2)
94
+ },
95
+ formattedJson() {
96
+ const language = 'json'
97
+ const { value } = hljs.highlight(this.stringifiedJson, { language })
98
+ return value
99
+ }
100
+ }
101
+ }
102
+ </script>
103
+
104
+ <style lang="scss">
105
+ .collapsible-block {
106
+
107
+ &__caret, &__label {
108
+ cursor: pointer;
109
+ }
110
+
111
+ &__caret .svg-inline--fa{
112
+ transition: transform 300ms;
113
+ }
114
+
115
+ &__body {
116
+ // Exception for code block
117
+ & *[class^=language-] pre {
118
+ margin-bottom: 0;
119
+ }
120
+ }
121
+ }
122
+ </style>