diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 0000000..629a251
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,239 @@
+{
+ "parser": "babel-eslint",
+ "env": {
+ "browser": true,
+ "commonjs": true,
+ "es6": true,
+ "jest": true,
+ "node": true
+ },
+ "globals": {
+ "__PUBLIC_URL__": false,
+ "__OVIDE_VERSION__": false,
+ "__SOURCE_REPOSITORY__": false,
+ "FONIO_CONFIG": false,
+ "db": false
+ },
+ "plugins": [
+ "mocha",
+ "react"
+ ],
+ "settings": {
+ "react": {
+ "version": "16.0.2"
+ }
+ },
+ "extends": [
+ "@robindemourat/eslint-config/es7",
+ "@robindemourat/eslint-config/react"
+ ],
+ "rules": {
+ "require-jsdoc": 2,
+ "react/jsx-no-bind": 0,
+
+
+ "react/jsx-handler-names": [2, {
+ "eventHandlerPrefix": "handle",
+ "eventHandlerPropPrefix": "on"
+ }],
+
+ "no-case-declarations": 0,
+ "no-useless-escape": 0,
+ "arrow-parens": [
+ 2,
+ "always"
+ ],
+ "arrow-spacing": [
+ 2,
+ {
+ "before": true,
+ "after": true
+ }
+ ],
+ "constructor-super": 0,
+ "generator-star-spacing": 0,
+ "no-class-assign": 0,
+ "no-confusing-arrow": 2,
+ "no-const-assign": 2,
+ "no-this-before-super": 0,
+ "no-var": 2,
+ "object-shorthand": [
+ 2,
+ "always"
+ ],
+ "prefer-arrow-callback": 0,
+ "prefer-const": 2,
+ "prefer-spread": 0,
+ "prefer-reflect": 0,
+ "require-yield": 0,
+ "react/jsx-uses-react": 2,
+ "react/no-multi-comp": 0,
+ "react/prop-types": 0,
+ "react/display-name": 0,
+ "react/jsx-wrap-multilines": 2,
+ "react/self-closing-comp": 2,
+ "react/jsx-no-comment-textnodes": 2,
+ "react/no-danger": 2,
+ "react/no-is-mounted": 2,
+ "react/no-deprecated": 2,
+ "react/no-did-mount-set-state": 2,
+ "react/no-did-update-set-state": 2,
+ "react/no-render-return-value": 2,
+ "react/react-in-jsx-scope": 2,
+ "react/jsx-uses-vars": 2,
+ "react/jsx-pascal-case": 2,
+ "react/jsx-no-undef": 2,
+ "react/no-unknown-property": 2,
+
+ "react/jsx-curly-spacing": [
+ 2,
+ "always",
+ {
+ "allowMultiline": true,
+ "spacing":
+ {
+ "objectLiterals": "always"
+ }
+ }
+ ],
+ "react/jsx-equals-spacing": [
+ 2,
+ "never"
+ ],
+
+ "react/sort-prop-types": 2,
+ "react/jsx-boolean-value": 2,
+ "react/sort-comp": 2,
+ "react/jsx-no-duplicate-props": 2,
+ "react/jsx-max-props-per-line": [
+ 2,
+ {
+ "maximum": 1,
+ "when": "always"
+ }
+ ],
+ "react/jsx-no-literals": 0,
+ "react/jsx-indent-props": [2, 2],
+ "react/jsx-indent": [2, 2],
+ "react/jsx-closing-bracket-location": [
+ 2,
+ "tag-aligned"
+ ],
+
+ "react/jsx-tag-spacing": 2,
+ "react/no-direct-mutation-state": 2,
+ "react/forbid-prop-types": 0,
+ "react/prefer-es6-class": 2,
+ "react/jsx-key": 2,
+ "react/no-string-refs": 2,
+ "react/no-set-state": 0,
+ "react/prefer-stateless-function": 2,
+ "react/require-render-return": 2,
+ "react/jsx-first-prop-new-line": 2,
+ "react/jsx-no-target-blank": 2,
+ "react/jsx-filename-extension": [
+ 2,
+ {
+ "extensions": [
+ ".js",
+ ".jsx"
+ ]
+ }
+ ],
+ "react/require-optimization": 2,
+ "react/no-find-dom-node": 2,
+
+ "object-curly-spacing": [
+ 2,
+ "always"
+ ],
+ "brace-style": [
+ 2,
+ "stroustrup",
+ {
+ "allowSingleLine": false
+ }
+ ],
+ "block-spacing": [
+ 2,
+ "always"
+ ],
+ "array-bracket-spacing": [
+ 2,
+ "always"
+ ],
+ "rest-spread-spacing": [
+ 2,
+ "never"
+ ],
+ "array-bracket-newline": [
+ 2,
+ "consistent"
+ ],
+ "space-in-parens": [
+ 2,
+ "always"
+ ],
+
+ "no-multiple-empty-lines": [2,
+ {
+ "max": 1
+ }],
+ "key-spacing": [
+ 2,
+ {
+ "beforeColon": false
+ }
+ ],
+ "no-mixed-spaces-and-tabs": 2,
+ "multiline-comment-style": [
+ 2,
+ "starred-block"
+ ],
+ "lines-around-comment": [
+ 2,
+ {
+ "beforeBlockComment": true
+ }
+ ],
+ "computed-property-spacing": [
+ 2,
+ "never"
+ ],
+
+ "keyword-spacing": [
+ "error",
+ {
+ "before": true,
+ "after": true
+ }
+ ],
+ "linebreak-style": [
+ "error",
+ "unix"
+ ],
+ "switch-colon-spacing": [
+ 2,
+ {
+ "after": true,
+ "before": false
+ }
+ ],
+
+ "prefer-template": 2,
+ "react/boolean-prop-naming": 2,
+ "react/no-typos": 2,
+ "react/no-unescaped-entities": 2,
+ "react/no-will-update-set-state": 2,
+ "react/void-dom-elements-no-children": 2,
+ "react/jsx-child-element-spacing": 2,
+ "react/jsx-closing-tag-location": 2,
+ "react/jsx-curly-brace-presence": [
+ 2,
+ {
+ "props": "always",
+ "children": "never"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index ad46b30..12bdd4f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+.DS_Store
# Runtime data
pids
diff --git a/dist/components/Authors.js b/dist/components/Authors.js
new file mode 100644
index 0000000..202ac35
--- /dev/null
+++ b/dist/components/Authors.js
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const Authors = ({
+ authors,
+ displayRole = false
+}) => authors.map((author, index) => _react.default.createElement("span", {
+ className: "author'",
+ key: index
+}, author.given.trim(), " ", author.family.trim(), displayRole && author.role ? ` (${author.role})` : '')).reduce((prev, curr, index) => {
+ if (index > 0) {
+ return [prev, ', ', curr];
+ }
+
+ return [curr];
+}, []);
+
+var _default = Authors;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/BackCover.js b/dist/components/BackCover.js
new file mode 100644
index 0000000..af2d2e8
--- /dev/null
+++ b/dist/components/BackCover.js
@@ -0,0 +1,64 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+var _Authors = _interopRequireDefault(require("./Authors"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ backgroundColor,
+ useAbstract = true,
+ customMarkdownContents,
+ animatedBackground,
+ customCoverFooter
+ } = {},
+ id
+}) => {
+ const {
+ data: editionData = {}
+ } = edition;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return _react.default.createElement("section", {
+ className: `composition-block back-cover ${animatedBackground && animatedBackground !== 'none' ? `with-animated-background-${animatedBackground}` : ''}`,
+ style: {
+ backgroundColor
+ }
+ }, _react.default.createElement("div", {
+ className: 'back-cover-content'
+ }, _react.default.createElement("h2", {
+ id: id,
+ className: 'back-cover-title'
+ }, finalTitle), finalSubtitle && _react.default.createElement("h3", {
+ className: 'back-cover-subtitle'
+ }, finalSubtitle), metadata.authors && _react.default.createElement("h3", {
+ className: 'back-cover-authors'
+ }, _react.default.createElement(_Authors.default, {
+ authors: metadata.authors
+ })), _react.default.createElement("div", {
+ className: 'back-cover-text'
+ }, useAbstract && _react.default.createElement(_MarkdownPlayer.default, {
+ src: metadata.abstract
+ }), customMarkdownContents && customMarkdownContents.trim().length ? _react.default.createElement(_MarkdownPlayer.default, {
+ src: customMarkdownContents
+ }) : null), customCoverFooter && customCoverFooter.length > 0 && _react.default.createElement("div", {
+ className: 'back-cover-footer'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: customCoverFooter
+ }))));
+};
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/BlockAssetWrapper.js b/dist/components/BlockAssetWrapper.js
new file mode 100644
index 0000000..844fc3e
--- /dev/null
+++ b/dist/components/BlockAssetWrapper.js
@@ -0,0 +1,124 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * This module exports a stateless reusable block asset wrapper component
+ * It handles the connection to context's data and builds proper data to render the asset
+ * ============
+ */
+const BlockAssetWrapper = ({
+ data
+}, context) => {
+ const assetId = data.asset.id;
+ const contextualization = context.production && context.production.contextualizations && context.production.contextualizations[assetId];
+
+ if (!contextualization) {
+ return null;
+ }
+
+ const {
+ visibility = {
+ screened: true,
+ paged: true
+ }
+ } = contextualization;
+ const production = context.production || {};
+ const containerId = context.containerId;
+ const assets = context.productionAssets || {};
+ const contextualizer = production.contextualizers[contextualization.contextualizerId];
+ const resource = production.resources[contextualization.resourceId];
+ const dimensions = context.dimensions || {};
+ const fixedPresentationId = context.fixedPresentationId; // const onPresentationExit = context.onPresentationExit;
+
+ const inNote = context.inNote;
+ const contextualizers = context.contextualizers;
+ const contextualizerModule = contextualizers[contextualizer.type];
+ const Component = contextualizerModule && contextualizerModule.Block;
+
+ if (contextualization && Component) {
+ const hide = !visibility.paged;
+ return hide ? null : _react.default.createElement("figure", {
+ className: `block-contextualization-container ${contextualizer.type}`,
+ style: {
+ position: 'relative',
+ minHeight: contextualizer.type === 'data-presentation' ? dimensions.height : '20px'
+ },
+ id: `contextualization-${containerId}-${assetId}`
+ }, _react.default.createElement(Component, {
+ resource: resource,
+ contextualizer: contextualizer,
+ contextualization: contextualization,
+ renderingMode: 'paged',
+ assets: assets,
+ fixed: fixedPresentationId === assetId,
+ allowInteractions: inNote || fixedPresentationId === assetId
+ }), _react.default.createElement("figcaption", {
+ className: 'figure-caption'
+ }, _react.default.createElement("h4", {
+ className: 'figure-title'
+ }, _react.default.createElement("span", null, contextualization.title || resource.metadata.title)), contextualization.legend && _react.default.createElement("div", {
+ className: 'figure-legend'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: contextualization.legend
+ }))));
+ } else {
+ return null;
+ }
+};
+/**
+ * Component's properties types
+ */
+
+
+BlockAssetWrapper.propTypes = {
+ /**
+ * Corresponds to the data initially embedded in a draft-js entity
+ */
+ data: _propTypes.default.shape({
+ asset: _propTypes.default.shape({
+ id: _propTypes.default.string
+ })
+ })
+};
+/**
+ * Component's context used properties
+ */
+
+BlockAssetWrapper.contextTypes = {
+ /**
+ * The active production data
+ */
+ production: _propTypes.default.object,
+
+ /**
+ * Dimensions of the wrapping element
+ */
+ dimensions: _propTypes.default.object,
+
+ /**
+ * Id of the presentation being displayed full screen if any
+ */
+ fixedPresentationId: _propTypes.default.string,
+
+ /**
+ * Whether the block asset is displayed in a note (and not in main content)
+ */
+ inNote: _propTypes.default.bool,
+ contextualizers: _propTypes.default.object,
+ productionAssets: _propTypes.default.object,
+ containerId: _propTypes.default.string
+};
+var _default = BlockAssetWrapper;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Colophon.js b/dist/components/Colophon.js
new file mode 100644
index 0000000..ceadd15
--- /dev/null
+++ b/dist/components/Colophon.js
@@ -0,0 +1,43 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ data: {
+ customText,
+ copyright,
+ issn,
+ isbn
+ } = {},
+ id
+}) => {
+ return _react.default.createElement("section", {
+ id: id,
+ className: 'composition-block colophon'
+ }, _react.default.createElement("div", {
+ className: 'colophon-content'
+ }, customText && customText.length > 0 && _react.default.createElement("div", {
+ className: 'colophon-custom-text'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: customText
+ })), copyright && copyright.length > 0 && _react.default.createElement("div", {
+ className: 'colophon-copyright'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: copyright
+ })), isbn && isbn.length > 0 && _react.default.createElement("div", {
+ className: 'colophon-isbn'
+ }, "ISBN ", isbn), issn && issn.length > 0 && _react.default.createElement("div", {
+ className: 'colophon-issn'
+ }, "ISSN ", issn)));
+};
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/DefaultLinkComponent.js b/dist/components/DefaultLinkComponent.js
new file mode 100644
index 0000000..00fa779
--- /dev/null
+++ b/dist/components/DefaultLinkComponent.js
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ href,
+ target,
+ children,
+ className,
+ id,
+ style
+}) => _react.default.createElement("a", {
+ href: href,
+ target: target,
+ className: className,
+ id: id,
+ style: style
+}, children);
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/DefaultMentionComponent.js b/dist/components/DefaultMentionComponent.js
new file mode 100644
index 0000000..749b8cb
--- /dev/null
+++ b/dist/components/DefaultMentionComponent.js
@@ -0,0 +1,27 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ href,
+ target,
+ // children,
+ className,
+ id,
+ style
+}) => _react.default.createElement("a", {
+ href: href,
+ target: target,
+ className: `page-link ${className || ''}`,
+ id: id,
+ style: style
+}, "p.");
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/DefaultSectionLinkComponent.js b/dist/components/DefaultSectionLinkComponent.js
new file mode 100644
index 0000000..a9a0978
--- /dev/null
+++ b/dist/components/DefaultSectionLinkComponent.js
@@ -0,0 +1,30 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ sectionId,
+ target,
+ children,
+ className,
+ id,
+ style
+}) => _react.default.createElement("a", {
+ href: `#section-${sectionId}`,
+ target: target,
+ className: `page-link ${className}`,
+ id: id,
+ style: style
+}, children, "( p. ", _react.default.createElement("span", {
+ className: 'page-link',
+ href: `#section-${sectionId}`
+}), ")");
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/EndNotes.js b/dist/components/EndNotes.js
new file mode 100644
index 0000000..7daa9f5
--- /dev/null
+++ b/dist/components/EndNotes.js
@@ -0,0 +1,53 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _Renderer = _interopRequireDefault(require("./Renderer"));
+
+var _reactCiteproc = require("react-citeproc");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ production: {
+ sections
+ },
+ sectionsIds: sectionsOrder,
+ translate,
+ title,
+ citations,
+ citationStyle,
+ citationLocale,
+ id
+}) => _react.default.createElement("section", {
+ className: 'end-notes',
+ title: title,
+ id: id
+}, _react.default.createElement(_reactCiteproc.ReferencesManager, {
+ style: citationStyle,
+ locale: citationLocale,
+ items: citations.citationItems,
+ citations: citations.citationData,
+ componentClass: 'references-manager'
+}, _react.default.createElement("h1", {
+ className: 'section-title'
+}, title || translate('Notes')), _react.default.createElement("ol", {
+ className: 'end-notes'
+}, sectionsOrder.reduce((results, sectionId) => results.concat(Object.keys(sections[sectionId].notes).map(thatId => sections[sectionId].notes[thatId])), []).map((note, index) => {
+ return _react.default.createElement("li", {
+ id: `note-content-${note.id}`,
+ key: index
+ }, _react.default.createElement("a", {
+ href: `#note-pointer-${note.id}`,
+ className: 'note-number'
+ }, index + 1), _react.default.createElement(_Renderer.default, {
+ raw: note.contents
+ }));
+}))));
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Footnote.js b/dist/components/Footnote.js
new file mode 100644
index 0000000..8969dce
--- /dev/null
+++ b/dist/components/Footnote.js
@@ -0,0 +1,84 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _FootnoteRenderer = _interopRequireDefault(require("./FootnoteRenderer"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * This module exports a stateless reusable note pointer component
+ * ============
+ * @module quinoa-production-player/components/NotePointer
+ */
+
+/**
+ * Renders a not pointer as a pure component
+ * @param {object} props
+ * @param {array} props.children - children elements of the component
+ * @param {array} props.noteId - the id of the note to point to
+ * @param {object} context - the context data of the component
+ * @return {ReactElement} component - the component
+ */
+const Footnote = ({
+ // children,
+ noteId = '',
+ notesPosition
+}, context) => {
+ const notes = context.notes;
+
+ if (notes) {
+ const note = notes[noteId];
+
+ if (note) {
+ return _react.default.createElement("sup", {
+ className: notesPosition === 'sidenotes' ? 'sidenote' : 'footnote',
+ id: `note-pointer-${noteId}`,
+ "data-notenumber": note.order
+ }, _react.default.createElement("span", {
+ className: 'footnote-content'
+ }, _react.default.createElement(_FootnoteRenderer.default, {
+ raw: note.contents
+ })));
+ }
+
+ return null;
+ }
+
+ return null;
+};
+/**
+ * Component's properties types
+ */
+
+
+Footnote.propTypes = {
+ /**
+ * Children react components
+ */
+ children: _propTypes.default.array,
+
+ /**
+ * id of the note to render
+ */
+ noteId: _propTypes.default.string
+};
+/**
+ * Component's context used properties
+ */
+
+Footnote.contextTypes = {
+ /**
+ * Map of available notes to look into
+ */
+ notes: _propTypes.default.object
+};
+var _default = Footnote;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/FootnoteRenderer.js b/dist/components/FootnoteRenderer.js
new file mode 100644
index 0000000..466b0a8
--- /dev/null
+++ b/dist/components/FootnoteRenderer.js
@@ -0,0 +1,278 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireWildcard(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _redraft = _interopRequireDefault(require("redraft"));
+
+var _peritextSchemas = require("peritext-schemas");
+
+var _Link = _interopRequireDefault(require("./Link"));
+
+var _BlockAssetWrapper = _interopRequireDefault(require("./BlockAssetWrapper"));
+
+var _InlineAssetWrapper = _interopRequireDefault(require("./InlineAssetWrapper"));
+
+var _InternalLink = _interopRequireDefault(require("./InternalLink"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+/**
+ * This module exports a statefull reusable draft-js raw-to-react renderer component
+ * It wrapps around the redraft engine that converts draft-s raw to a react representation,
+ * providing it specific settings and callbacks.
+ */
+
+/*
+ * import NotePointer from './NotePointer';
+ * import Footnote from './Footnote';
+ */
+const {
+ LINK,
+ BLOCK_ASSET,
+ INLINE_ASSET,
+ SECTION_POINTER
+} = _peritextSchemas.constants.draftEntitiesNames; // just a helper to add a after each block
+
+const addBreaklines = children => children.map((child, index) => [child, _react.default.createElement("br", {
+ key: index + 1
+})]);
+/**
+ * Define the renderers
+ */
+
+
+const renderers = {
+ /**
+ * Those callbacks will be called recursively to render a nested structure
+ */
+ inline: {
+ // The key passed here is just an index based on rendering order inside a block
+ BOLD: (children, {
+ key
+ }) => _react.default.createElement("strong", {
+ key: key
+ }, children),
+ ITALIC: (children, {
+ key
+ }) => _react.default.createElement("em", {
+ key: key
+ }, children),
+ UNDERLINE: (children, {
+ key
+ }) => _react.default.createElement("u", {
+ key: key
+ }, children),
+ CODE: (children, {
+ key
+ }) => _react.default.createElement("span", {
+ key: key
+ }, children)
+ },
+
+ /**
+ * Blocks receive children and depth
+ * Note that children are an array of blocks with same styling,
+ */
+ blocks: {
+ 'unstyled': children => children.map((child, index) => _react.default.createElement("span", {
+ key: index,
+ className: 'footnote-p'
+ }, child)),
+ 'blockquote': children => _react.default.createElement("span", {
+ className: 'footnote-blockquote'
+ }, addBreaklines(children)),
+ 'header-one': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h1',
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-two': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h2',
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-three': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h3',
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-four': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h4',
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-five': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h5',
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-six': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-h6',
+ key: index,
+ id: keys[index]
+ }, child)),
+ // You can also access the original keys of the blocks
+ 'code-block': (children, {
+ keys
+ }) => _react.default.createElement("span", {
+ className: 'footnote-pre',
+ key: keys[0]
+ }, addBreaklines(children)),
+ // or depth for nested lists
+ 'unordered-list-item': (children, {
+ depth,
+ keys
+ }) => _react.default.createElement("span", {
+ // className={ 'footnote-ul' }
+ key: keys[keys.length - 1],
+ className: `ul-level-${depth}`
+ }, children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-li',
+ key: index
+ }, child))),
+ 'ordered-list-item': (children, {
+ depth,
+ keys
+ }) => _react.default.createElement("span", {
+ // className={ 'footnote-ol' }
+ key: keys.join('|'),
+ className: `ol-level-${depth}`
+ }, children.map((child, index) => _react.default.createElement("span", {
+ className: 'footnote-li',
+ key: keys[index]
+ }, child)))
+ /*
+ * If your blocks use meta data it can also be accessed like keys
+ * atomic: (children, { keys, data }) => children.map((child, i) => {child} ),
+ */
+
+ },
+
+ /**
+ * Entities receive children and the entity data
+ */
+ entities: {
+ // // key is the entity key value from raw
+ [LINK]: (children, data, {
+ key
+ }) => _react.default.createElement(_Link.default, {
+ key: key,
+ to: data.url
+ }, children),
+ [BLOCK_ASSET]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_BlockAssetWrapper.default, {
+ key: key,
+ data: data
+ });
+ },
+ [INLINE_ASSET]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_InlineAssetWrapper.default, {
+ data: data,
+ key: key
+ }, children);
+ },
+ [SECTION_POINTER]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_InternalLink.default, {
+ key: key,
+ sectionId: data.sectionId
+ }, children);
+ }
+ }
+};
+/**
+ * Renderer class for building raw-to-react rendering react component instances
+ */
+
+class Renderer extends _react.Component {
+ /**
+ * constructor
+ * @param {object} props - properties given to instance at instanciation
+ */
+ constructor(props) {
+ super(props);
+ }
+ /**
+ * Determines whether to update the component or not
+ * @param {object} nextProps - the future properties of the component
+ * @return {boolean} shouldUpdate - yes or no
+ */
+
+
+ shouldComponentUpdate() {
+ return true; // return this.props.raw !== nextProps.raw;
+ }
+ /**
+ * Displays something when no suitable content state is provided to the renderer
+ * @return {ReactElement} default message
+ */
+
+
+ renderWarning() {
+ return _react.default.createElement("div", null);
+ }
+ /**
+ * Renders the component
+ * @return {ReactElement} component - the component
+ */
+
+
+ render() {
+ const {
+ raw
+ } = this.props;
+
+ if (!raw) {
+ return this.renderWarning();
+ }
+
+ const rendered = (0, _redraft.default)(raw, renderers); // redraft can return a null if there's nothing to render
+
+ if (!rendered) {
+ return this.renderWarning();
+ }
+
+ return _react.default.createElement("span", null, rendered);
+ }
+
+}
+/**
+ * Component's properties types
+ */
+
+
+Renderer.propTypes = {
+ /**
+ * Draft-js raw representation of some contents
+ * see https://draftjs.org/docs/api-reference-data-conversion.html
+ */
+ raw: _propTypes.default.object
+};
+var _default = Renderer;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/FrontCover.js b/dist/components/FrontCover.js
new file mode 100644
index 0000000..fc2d624
--- /dev/null
+++ b/dist/components/FrontCover.js
@@ -0,0 +1,57 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+var _Authors = _interopRequireDefault(require("./Authors"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ backgroundColor,
+ customCoverFooter,
+ animatedBackground
+ } = {},
+ id
+}) => {
+ const {
+ data: editionData = {}
+ } = edition;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return _react.default.createElement("section", {
+ id: 'front-cover',
+ className: `composition-block front-cover ${animatedBackground && animatedBackground !== 'none' ? `with-animated-background-${animatedBackground}` : ''}`,
+ style: {
+ backgroundColor
+ }
+ }, _react.default.createElement("div", {
+ className: 'front-cover-content'
+ }, _react.default.createElement("h1", {
+ id: id,
+ className: 'front-cover-title'
+ }, finalTitle), finalSubtitle && _react.default.createElement("h2", {
+ className: 'front-cover-subtitle'
+ }, finalSubtitle), _react.default.createElement("h3", {
+ className: 'front-cover-authors'
+ }, metadata.authors && _react.default.createElement(_Authors.default, {
+ authors: metadata.authors
+ }))), customCoverFooter && customCoverFooter.length > 0 && _react.default.createElement("div", {
+ className: 'front-cover-footer'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: customCoverFooter
+ })));
+};
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Glossary.js b/dist/components/Glossary.js
new file mode 100644
index 0000000..4722967
--- /dev/null
+++ b/dist/components/Glossary.js
@@ -0,0 +1,174 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _reactCiteproc = require("react-citeproc");
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+var _peritextUtils = require("peritext-utils");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+const buildGlossary = ({
+ production,
+ edition,
+ options
+}) => {
+ const {
+ contextualizers,
+ resources
+ } = production;
+ const {
+ showUncited = false,
+ glossaryTypes = ['person', 'place', 'event', 'notion', 'other']
+ } = options;
+ let items;
+ const usedContextualizations = (0, _peritextUtils.getContextualizationsFromEdition)(production, edition);
+
+ if (showUncited) {
+ items = Object.keys(production.resources).filter(resourceId => production.resources[resourceId].metadata.type === 'glossary').map(resourceId => production.resources[resourceId]).map(resource => {
+ return {
+ resource,
+ mentions: usedContextualizations.filter(c => c.contextualization.resourceId === resource.id)
+ };
+ });
+ } else {
+ items = usedContextualizations.filter(element => {
+ const contextualization = element.contextualization;
+ const contextualizerId = contextualization.contextualizerId;
+ const contextualizer = contextualizers[contextualizerId];
+ return contextualizer && contextualizer.type === 'glossary';
+ }).map(element => {
+ const contextualization = element.contextualization;
+ return _objectSpread({}, contextualization, {
+ contextualizer: contextualizers[contextualization.contextualizerId],
+ resource: resources[contextualization.resourceId],
+ contextContent: (0, _peritextUtils.buildContextContent)(production, contextualization.id),
+ containerId: element.containerId
+ });
+ }).reduce((entries, contextualization) => {
+ return _objectSpread({}, entries, {
+ [contextualization.resourceId]: {
+ resource: contextualization.resource,
+ mentions: entries[contextualization.resourceId] ? entries[contextualization.resourceId].mentions.concat(contextualization) : [contextualization]
+ }
+ });
+ }, {});
+ items = Object.keys(items).map(resourceId => ({
+ resource: items[resourceId].resource,
+ mentions: items[resourceId].mentions
+ }));
+ }
+
+ const glossaryMentions = items.filter(item => {
+ return glossaryTypes.includes(item.resource.data.entryType);
+ }).sort((a, b) => {
+ if (a.resource.data.name.toLowerCase() > b.resource.data.name.toLowerCase()) {
+ return 1;
+ } else {
+ return -1;
+ }
+ });
+ return glossaryMentions;
+};
+
+const Glossary = ({
+ production,
+ edition,
+ translate,
+ citations,
+ citationStyle,
+ citationLocale,
+ id,
+ data = {
+ showMentions: true,
+ showDescriptions: true
+ },
+ // LinkComponent: propLinkComponent,
+ MentionComponent: propMentionComponent
+}, {
+ // LinkComponent: contextLinkComponent,
+ MentionComponent: contextMentionComponent
+}) => {
+ // const LinkComponent = propLinkComponent || contextLinkComponent;
+ const MentionComponent = propMentionComponent || contextMentionComponent;
+ const {
+ showMentions,
+ customTitle,
+ showDescriptions
+ } = data;
+ const glossary = buildGlossary({
+ options: data,
+ production,
+ edition
+ });
+ return _react.default.createElement("section", {
+ className: 'composition-block glossary',
+ title: customTitle || translate('Glossary list')
+ }, _react.default.createElement(_reactCiteproc.ReferencesManager, {
+ style: citationStyle,
+ locale: citationLocale,
+ items: citations.citationItems,
+ citations: citations.citationData,
+ componentClass: 'references-manager'
+ }, _react.default.createElement("h2", {
+ className: 'composition-block-title peritext-block-title',
+ id: `glossary-block-${id}`
+ }, customTitle || translate('Glossary list')), _react.default.createElement("ul", {
+ className: 'mentions-container'
+ }, glossary.map((entry, index) => {
+ // const entryName = entry.title;
+ return _react.default.createElement("li", {
+ key: index,
+ id: entry.resource.metadata.id,
+ className: 'mention-item'
+ }, _react.default.createElement("div", {
+ className: 'title'
+ }, entry.resource.data.name), showDescriptions && _react.default.createElement("div", {
+ className: 'description'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: entry.resource.data.description
+ })), showMentions && entry.mentions.length > 0 && _react.default.createElement("div", {
+ className: 'mentions-list'
+ }, entry.mentions.filter(mention => mention !== undefined && mention.contextContent).map((mention, count) => {
+ const {
+ contextContent: {
+ /*
+ * targetContents,
+ * contents,
+ * sectionTitle,
+ */
+ sectionId
+ },
+ id: thatId,
+ containerId
+ } = mention;
+ return _react.default.createElement(MentionComponent, {
+ key: count,
+ href: `#contextualization-${containerId}-${thatId}`,
+ sectionId: sectionId
+ });
+ }).reduce((prev, curr, thatIndex) => {
+ return thatIndex > 0 ? [prev, ', ', curr] : [curr];
+ }, [])));
+ }))));
+};
+
+Glossary.contextTypes = {
+ LinkComponent: _propTypes.default.func,
+ MentionComponent: _propTypes.default.func
+};
+var _default = Glossary;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Head.js b/dist/components/Head.js
new file mode 100644
index 0000000..bfc5d76
--- /dev/null
+++ b/dist/components/Head.js
@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _reactHelmet = require("react-helmet");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ pageTitle,
+ authors = [],
+ tags = [],
+ description = '',
+ url = ''
+}) => {
+ const authorsStr = authors.map(author => `${author.given} ${author.family}`).join(', ');
+ return _react.default.createElement(_reactHelmet.Helmet, null, _react.default.createElement("title", null, pageTitle), _react.default.createElement("meta", {
+ name: 'generator',
+ content: 'peritext'
+ }), _react.default.createElement("meta", {
+ name: 'DC.Title',
+ lang: 'fr',
+ content: pageTitle
+ }), _react.default.createElement("meta", {
+ name: 'DC.Date.created',
+ schema: 'W3CDTF',
+ content: new Date().toISOString()
+ }), _react.default.createElement("meta", {
+ name: 'author',
+ content: authorsStr
+ }), _react.default.createElement("meta", {
+ name: 'keywords',
+ content: tags.join(',')
+ }), _react.default.createElement("meta", {
+ name: 'description',
+ content: description
+ }), _react.default.createElement("meta", {
+ name: 'viewport',
+ content: 'user-scalable=no,width=device-width'
+ }), _react.default.createElement("meta", {
+ name: 'twitter:card',
+ value: 'summary'
+ }), _react.default.createElement("meta", {
+ name: 'twitter:site',
+ content: url
+ }), _react.default.createElement("meta", {
+ name: 'twitter:title',
+ content: pageTitle
+ }), _react.default.createElement("meta", {
+ name: 'twitter:description',
+ content: description
+ }), _react.default.createElement("meta", {
+ itemProp: 'name',
+ content: pageTitle
+ }), _react.default.createElement("meta", {
+ itemProp: 'description',
+ content: description
+ }), _react.default.createElement("meta", {
+ property: 'og:title',
+ content: pageTitle
+ }), _react.default.createElement("meta", {
+ property: 'og:type',
+ content: 'website'
+ }), _react.default.createElement("meta", {
+ property: 'og:url',
+ content: url
+ }), _react.default.createElement("meta", {
+ property: 'og:description',
+ content: description
+ }));
+};
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/InlineAssetWrapper.js b/dist/components/InlineAssetWrapper.js
new file mode 100644
index 0000000..8a19a54
--- /dev/null
+++ b/dist/components/InlineAssetWrapper.js
@@ -0,0 +1,86 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const InlineAssetWrapper = ({
+ data,
+ children
+}, context) => {
+ const {
+ production,
+ containerId
+ } = context;
+ const assetId = data.asset && data.asset.id;
+
+ if (!assetId || !production) {
+ return null;
+ }
+
+ const contextualization = production.contextualizations[assetId];
+
+ if (!contextualization) {
+ return null;
+ }
+
+ const contextualizer = production.contextualizers[contextualization.contextualizerId];
+ const resource = production.resources[contextualization.resourceId];
+ const contextualizers = context.contextualizers;
+ const contextualizerModule = contextualizers[contextualizer.type];
+ const Component = contextualizerModule && contextualizerModule.Inline;
+
+ if (contextualizer && Component) {
+ /**
+ * @todo this is a fix for a rendering bug
+ */
+ if (contextualizer.type === 'glossary') {
+ return children;
+ }
+
+ return _react.default.createElement("span", {
+ className: `inline-contextualization-container ${contextualizer.type}`,
+ id: `contextualization-${containerId}-${assetId}`
+ }, _react.default.createElement(Component, {
+ contextualization: contextualization,
+ contextualizer: contextualizer,
+ resource: resource,
+ renderingMode: 'paged'
+ }, children));
+ }
+
+ return null;
+};
+/**
+ * Component's properties types
+ */
+
+
+InlineAssetWrapper.propTypes = {
+ /**
+ * Corresponds to the data initially embedded in a draft-js entity
+ */
+ data: _propTypes.default.shape({
+ asset: _propTypes.default.shape({
+ id: _propTypes.default.string
+ })
+ })
+};
+/**
+ * Component's context used properties
+ */
+
+InlineAssetWrapper.contextTypes = {
+ production: _propTypes.default.object,
+ contextualizers: _propTypes.default.object,
+ containerId: _propTypes.default.string
+};
+var _default = InlineAssetWrapper;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/InternalLink.js b/dist/components/InternalLink.js
new file mode 100644
index 0000000..c7fae16
--- /dev/null
+++ b/dist/components/InternalLink.js
@@ -0,0 +1,31 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const InternalLink = ({
+ sectionId,
+ children
+}, {
+ containerId
+}) => _react.default.createElement("a", {
+ href: `#section-${containerId}-${sectionId}`,
+ className: 'internal-link'
+}, children, '(', _react.default.createElement("span", {
+ href: `#section-${containerId}-${sectionId}`,
+ className: ' page-link'
+}, 'p'), ')');
+
+InternalLink.contextTypes = {
+ containerId: _propTypes.default.string
+};
+var _default = InternalLink;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Link.js b/dist/components/Link.js
new file mode 100644
index 0000000..b50d8dd
--- /dev/null
+++ b/dist/components/Link.js
@@ -0,0 +1,52 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * This module exports a stateless reusable external link component
+ * ============
+ * @module perinext/components/Link
+ */
+
+/**
+ * Renders a link as a pure component
+ * @param {object} props
+ * @param {string} props.to - the url to point to
+ * @param {array} props.children - children elements of the component
+ * @return {ReactElement} component - the component
+ */
+const Link = ({
+ to,
+ children
+}) => _react.default.createElement("a", {
+ href: to,
+ target: 'blank',
+ rel: 'noopener'
+}, children);
+/**
+ * Component's properties types
+ */
+
+
+Link.propTypes = {
+ /**
+ * url to point to
+ */
+ children: _propTypes.default.array,
+
+ /**
+ * children react elements
+ */
+ to: _propTypes.default.string
+};
+var _default = Link;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/MarkdownPlayer.js b/dist/components/MarkdownPlayer.js
new file mode 100644
index 0000000..b3d7c99
--- /dev/null
+++ b/dist/components/MarkdownPlayer.js
@@ -0,0 +1,20 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _reactMarkdown = _interopRequireDefault(require("react-markdown"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ src = ''
+}) => _react.default.createElement(_reactMarkdown.default, {
+ source: src
+});
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/NotePointer.js b/dist/components/NotePointer.js
new file mode 100644
index 0000000..6fa8628
--- /dev/null
+++ b/dist/components/NotePointer.js
@@ -0,0 +1,87 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * This module exports a stateless reusable note pointer component
+ * ============
+ * @module quinoa-production-player/components/NotePointer
+ */
+
+/**
+ * Renders a note pointer as a pure component
+ * @param {object} props
+ * @param {array} props.children - children elements of the component
+ * @param {array} props.noteId - the id of the note to point to
+ * @param {object} context - the context data of the component
+ * @return {ReactElement} component - the component
+ */
+const NotePointer = ({
+ children,
+ noteId = ''
+}, context) => {
+ const notes = context.notes;
+ const NoteLinkComponent = context.NoteLinkComponent;
+
+ if (notes) {
+ const note = notes[noteId];
+
+ if (note) {
+ return _react.default.createElement("sup", {
+ className: 'note-pointer',
+ id: `note-pointer-${noteId}`
+ }, NoteLinkComponent ? _react.default.createElement(NoteLinkComponent, {
+ href: `#note-content-${noteId}`
+ }, note.order, children) : _react.default.createElement("a", {
+ href: `#note-content-${noteId}`
+ }, note.order, children));
+ }
+
+ return null;
+ }
+
+ return null;
+};
+/**
+ * Component's properties types
+ */
+
+
+NotePointer.propTypes = {
+ /**
+ * Children react components
+ */
+ children: _propTypes.default.array,
+
+ /**
+ * id of the note to render
+ */
+ noteId: _propTypes.default.string
+};
+/**
+ * Component's context used properties
+ */
+
+NotePointer.contextTypes = {
+ /**
+ * Map of available notes to look into
+ */
+ notes: _propTypes.default.object,
+
+ /**
+ * Triggers a callback upstream when the pointer is clicked
+ */
+ onNoteContentPointerClick: _propTypes.default.func,
+ NoteLinkComponent: _propTypes.default.func
+};
+var _default = NotePointer;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/References.js b/dist/components/References.js
new file mode 100644
index 0000000..26b5213
--- /dev/null
+++ b/dist/components/References.js
@@ -0,0 +1,271 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _uniq = _interopRequireDefault(require("lodash/uniq"));
+
+var _reactCiteproc = require("react-citeproc");
+
+var _peritextUtils = require("peritext-utils");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/**
+ * Builds an interactive bibliography for a given edition
+ * @returns {ReactMarkup}
+ */
+function buildBibliography({
+ production,
+ edition,
+ citations,
+ contextualizations,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending
+}) {
+ const {
+ /*
+ * contextualizations,
+ * contextualizers,
+ */
+ resources
+ } = production;
+ /**
+ * Select relevant resources
+ */
+ // filter cited references only
+
+ let citedResourcesIds = showUncitedReferences ? Object.keys(resources) : (0, _uniq.default)(contextualizations.map(element => {
+ const contextualization = element.contextualization;
+ return contextualization.resourceId;
+ })); // filter by type of resource
+
+ citedResourcesIds = citedResourcesIds.filter(resourceId => {
+ const type = resources[resourceId].metadata.type;
+ return resourceTypes.includes(type);
+ });
+ let items = citedResourcesIds.map(resourceId => {
+ const cit = (0, _peritextUtils.resourceToCslJSON)(resources[resourceId]);
+ const citationKey = cit && cit[0] && cit[0].id;
+ const mentions = contextualizations.map(element => {
+ if (element.contextualization.resourceId === resourceId) {
+ return _objectSpread({}, element, {
+ id: element.contextualization.id
+ });
+ }
+ }).filter(s => s);
+ let biblio;
+
+ if (citations.citationItems[citationKey]) {
+ biblio = (0, _reactCiteproc.makeBibliography)(citations.citationItems, edition.data.citationStyle.data, edition.data.citationLocale.data, {
+ select: [{
+ field: 'id',
+ value: citationKey
+ }]
+ });
+ } else {
+ biblio = (0, _reactCiteproc.makeBibliography)({
+ [resourceId]: _objectSpread({}, cit[0], {
+ id: resourceId
+ })
+ }, edition.data.citationStyle.data, edition.data.citationLocale.data, {
+ select: [{
+ field: 'id',
+ value: resourceId
+ }]
+ });
+ }
+
+ const title = biblio && biblio[1] && biblio[1][0];
+ return {
+ citationKey,
+ title,
+ item: citations.citationItems[citationKey] || cit[0],
+ mentions: mentions.map(mention => _objectSpread({}, mention, {
+ contextContent: (0, _peritextUtils.buildContextContent)(production, mention.id)
+ }))
+ };
+ });
+ items = items.sort((a, b) => {
+ switch (sortingKey) {
+ case 'date':
+ const datePartsA = a.item.issued && a.item.issued['date-parts'];
+ const datePartsB = b.item.issued && b.item.issued['date-parts'];
+
+ if (datePartsA && datePartsB && datePartsA.length && datePartsB.length) {
+ if (datePartsA[0] > datePartsB[0]) {
+ return 1;
+ } else if (datePartsA[0] < datePartsB[0]) {
+ return -1;
+ } else if (datePartsA.length > 1 && datePartsB.length > 1) {
+ if (datePartsA[1] > datePartsB[1]) {
+ return 1;
+ } else if (datePartsA[1] < datePartsB[1]) {
+ return -1;
+ } else return 0;
+ } else {
+ return 0;
+ }
+ } else if (!datePartsB || datePartsB && !datePartsB.length) {
+ return -1;
+ } else if (!datePartsA || datePartsA && !datePartsA.length) {
+ return 1;
+ } else {
+ return 0;
+ }
+
+ case 'authors':
+ if (a.item.author && b.item.author) {
+ const authorsA = a.item.author && a.item.author.map(author => `${author.family}-${author.given}`.toLowerCase()).join('');
+ const authorsB = b.item.author && b.item.author.map(author => `${author.family}-${author.given}`.toLowerCase()).join('');
+
+ if (authorsA > authorsB) {
+ return 1;
+ } else return -1;
+ } else if (!b.item.author) {
+ return -1;
+ } else if (!a.item.author) {
+ return 1;
+ } else return 0;
+
+ case 'title':
+ if (a.item.title.toLowerCase() > b.item.title.toLowerCase()) {
+ return 1;
+ }
+
+ return -1;
+
+ default:
+ break;
+ }
+ });
+
+ if (!sortingAscending) {
+ items = items.reverse();
+ }
+
+ return items;
+}
+
+const References = ({
+ production,
+ edition,
+ translate,
+ data = {
+ showMentions: true,
+ showUncitedReferences: false,
+ resourceTypes: ['bib'],
+ sortingKey: 'authors',
+ sortingAscending: true
+ },
+ citations,
+ citationStyle,
+ citationLocale,
+ id,
+ // LinkComponent: propLinkComponent,
+ MentionComponent: propMentionComponent
+}, {
+ // LinkComponent: contextLinkComponent,
+ MentionComponent: contextMentionComponent
+}) => {
+ const {
+ showMentions,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending,
+ customTitle
+ } = data; // const LinkComponent = propLinkComponent || contextLinkComponent;
+
+ const MentionComponent = propMentionComponent || contextMentionComponent;
+ /**
+ * @todo compute citations based on edition
+ */
+
+ const contextualizations = (0, _peritextUtils.getContextualizationsFromEdition)(production, edition);
+ const references = buildBibliography({
+ production,
+ edition,
+ citations,
+ contextualizations,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending
+ });
+ return _react.default.createElement("section", {
+ className: 'composition-block references',
+ title: customTitle || translate('References')
+ }, _react.default.createElement(_reactCiteproc.ReferencesManager, {
+ style: citationStyle,
+ locale: citationLocale,
+ items: citations.citationItems,
+ citations: citations.citationData,
+ componentClass: 'references-manager'
+ }, _react.default.createElement("h2", {
+ id: `reference-block-${id}`,
+ className: 'composition-block-title peritext-block-title'
+ }, customTitle || translate('References')), _react.default.createElement("ul", {
+ className: 'mentions-container'
+ }, references.map((entry, index) => {
+ const entryName = entry.title;
+ return _react.default.createElement("li", {
+ key: index,
+ id: entry.citationKey,
+ className: 'mention-item'
+ }, _react.default.createElement("div", {
+ className: 'title'
+ }, _react.default.createElement("div", {
+ dangerouslySetInnerHTML: {
+ __html: entryName
+ /* eslint react/no-danger: 0 */
+
+ }
+ })), showMentions && entry.mentions.find(mention => mention && mention.contextContent) && _react.default.createElement("div", {
+ className: 'mentions-list'
+ }, entry.mentions.filter(mention => mention !== undefined && mention.contextContent).map((mention, count) => {
+ const {
+ contextContent: {
+ /*
+ * targetContents,
+ * contents,
+ * sectionTitle,
+ */
+ sectionId
+ },
+ id: thatId,
+ containerId
+ } = mention;
+ return _react.default.createElement(MentionComponent, {
+ key: count,
+ href: `#contextualization-${containerId}-${thatId}`,
+ sectionId: sectionId
+ });
+ }).reduce((prev, curr, thatIndex) => {
+ if (thatIndex === 0) {
+ return [curr];
+ }
+
+ return [prev, ', ', curr];
+ }, [])));
+ }))));
+};
+
+References.contextTypes = {
+ LinkComponent: _propTypes.default.func,
+ MentionComponent: _propTypes.default.func
+};
+var _default = References;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Renderer.js b/dist/components/Renderer.js
new file mode 100644
index 0000000..31f70eb
--- /dev/null
+++ b/dist/components/Renderer.js
@@ -0,0 +1,295 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireWildcard(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _redraft = _interopRequireDefault(require("redraft"));
+
+var _peritextSchemas = require("peritext-schemas");
+
+var _Link = _interopRequireDefault(require("./Link"));
+
+var _BlockAssetWrapper = _interopRequireDefault(require("./BlockAssetWrapper"));
+
+var _InlineAssetWrapper = _interopRequireDefault(require("./InlineAssetWrapper"));
+
+var _NotePointer = _interopRequireDefault(require("./NotePointer"));
+
+var _Footnote = _interopRequireDefault(require("./Footnote"));
+
+var _InternalLink = _interopRequireDefault(require("./InternalLink"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+const {
+ LINK,
+ BLOCK_ASSET,
+ INLINE_ASSET,
+ SECTION_POINTER,
+ NOTE_POINTER
+} = _peritextSchemas.constants.draftEntitiesNames; // just a helper to add a after each block
+
+const addBreaklines = children => children.map((child, index) => [child, _react.default.createElement("br", {
+ key: index
+})]);
+/**
+ * Define the renderers
+ */
+
+
+const renderers = {
+ /**
+ * Those callbacks will be called recursively to render a nested structure
+ */
+ inline: {
+ // The key passed here is just an index based on rendering order inside a block
+ BOLD: (children, {
+ key
+ }) => _react.default.createElement("strong", {
+ key: key
+ }, children),
+ ITALIC: (children, {
+ key
+ }) => _react.default.createElement("em", {
+ key: key
+ }, children),
+ UNDERLINE: (children, {
+ key
+ }) => _react.default.createElement("u", {
+ key: key
+ }, children),
+ CODE: (children, {
+ key
+ }) => _react.default.createElement("span", {
+ key: key
+ }, children)
+ },
+
+ /**
+ * Blocks receive children and depth
+ * Note that children are an array of blocks with same styling,
+ */
+ blocks: {
+ 'unstyled': children => children.map((child, index) => _react.default.createElement("div", {
+ className: 'unstyled',
+ key: index
+ }, child)),
+ 'blockquote': (children, index) => _react.default.createElement("blockquote", {
+ key: index
+ }, addBreaklines(children)),
+ 'header-one': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h1", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-two': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h2", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-three': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h3", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-four': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h4", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-five': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h5", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ 'header-six': (children, {
+ keys
+ }) => children.map((child, index) => _react.default.createElement("h6", {
+ key: index,
+ id: keys[index]
+ }, child)),
+ // You can also access the original keys of the blocks
+ 'code-block': (children, {
+ keys
+ }) => _react.default.createElement("pre", {
+ key: keys[0]
+ }, addBreaklines(children)),
+ // or depth for nested lists
+ 'unordered-list-item': (children, {
+ depth,
+ keys
+ }) => _react.default.createElement("ul", {
+ key: keys[keys.length - 1],
+ className: `ul-level-${depth}`
+ }, children.map((child, index) => _react.default.createElement("li", {
+ key: index
+ }, child))),
+ 'ordered-list-item': (children, {
+ depth,
+ keys
+ }) => _react.default.createElement("ol", {
+ key: keys.join('|'),
+ className: `ol-level-${depth}`
+ }, children.map((child, index) => _react.default.createElement("li", {
+ key: keys[index]
+ }, child)))
+ /*
+ * If your blocks use meta data it can also be accessed like keys
+ * atomic: (children, { keys, data }) => children.map((child, i) => {child} ),
+ */
+
+ },
+
+ /**
+ * Entities receive children and the entity data
+ */
+ entities: {
+ // // key is the entity key value from raw
+ [LINK]: (children, data, {
+ key
+ }) => _react.default.createElement(_Link.default, {
+ key: key,
+ to: data.url
+ }, children),
+ [BLOCK_ASSET]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_BlockAssetWrapper.default, {
+ key: key,
+ data: data
+ });
+ },
+ [INLINE_ASSET]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_InlineAssetWrapper.default, {
+ data: data,
+ key: key
+ }, children);
+ },
+ [SECTION_POINTER]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_InternalLink.default, {
+ key: key,
+ sectionId: data.sectionId
+ }, children);
+ },
+ [NOTE_POINTER]: (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_NotePointer.default, {
+ key: key,
+ children: children,
+ noteId: data.noteId
+ });
+ }
+ }
+};
+/**
+ * Renderer class for building raw-to-react rendering react component instances
+ */
+
+class Renderer extends _react.Component {
+ /**
+ * constructor
+ * @param {object} props - properties given to instance at instanciation
+ */
+ constructor(props) {
+ super(props);
+
+ _defineProperty(this, "getChildContext", () => ({
+ containerId: this.props.containerId
+ }));
+ }
+
+ /**
+ * Determines whether to update the component or not
+ * @param {object} nextProps - the future properties of the component
+ * @return {boolean} shouldUpdate - yes or no
+ */
+ shouldComponentUpdate() {
+ return true;
+ }
+ /**
+ * Displays something when no suitable content state is provided to the renderer
+ * @return {ReactElement} default message
+ */
+
+
+ renderWarning() {
+ return _react.default.createElement("div", null);
+ }
+ /**
+ * Renders the component
+ * @return {ReactElement} component - the component
+ */
+
+
+ render() {
+ const {
+ raw,
+ notesPosition
+ } = this.props;
+
+ if (!raw) {
+ return this.renderWarning();
+ }
+
+ if (notesPosition === 'footnotes' || notesPosition === 'sidenotes') {
+ renderers.entities.NOTE_POINTER = (children, data, {
+ key
+ }) => {
+ return _react.default.createElement(_Footnote.default, {
+ key: key,
+ children: children,
+ noteId: data.noteId,
+ notesPosition: notesPosition
+ });
+ };
+ }
+
+ const rendered = (0, _redraft.default)(raw, renderers); // redraft can return a null if there's nothing to render
+
+ if (!rendered) {
+ return this.renderWarning();
+ }
+
+ return _react.default.createElement("div", {
+ className: 'rendered-content'
+ }, rendered);
+ }
+
+}
+/**
+ * Component's properties types
+ */
+
+
+Renderer.propTypes = {
+ /**
+ * Draft-js raw representation of some contents
+ * see https://draftjs.org/docs/api-reference-data-conversion.html
+ */
+ raw: _propTypes.default.object
+};
+Renderer.childContextTypes = {
+ containerId: _propTypes.default.string
+};
+var _default = Renderer;
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Section.js b/dist/components/Section.js
new file mode 100644
index 0000000..d6c89d6
--- /dev/null
+++ b/dist/components/Section.js
@@ -0,0 +1,100 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireWildcard(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _reactCiteproc = require("react-citeproc");
+
+var _Renderer = _interopRequireDefault(require("./Renderer"));
+
+var _EndNotes = _interopRequireDefault(require("./EndNotes"));
+
+var _Authors = _interopRequireDefault(require("./Authors"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+class Section extends _react.Component {
+ constructor(props) {
+ super(props);
+
+ _defineProperty(this, "getChildContext", () => ({
+ notes: this.props.section.notes
+ }));
+
+ _defineProperty(this, "render", () => {
+ const {
+ citations,
+ citationStyle,
+ citationLocale,
+ section: {
+ id,
+ metadata: {
+ title,
+ subtitle,
+ authors = []
+ },
+ contents
+ },
+ containerId,
+ notesPosition,
+ production,
+ translate,
+ publicationTitle,
+ publicationSubtitle
+ } = this.props;
+ return _react.default.createElement("section", {
+ className: `section has-notes-position-${notesPosition}`,
+ title: title,
+ id: `section-${containerId}-${id}`
+ }, _react.default.createElement(_reactCiteproc.ReferencesManager, {
+ style: citationStyle,
+ locale: citationLocale,
+ items: citations.citationItems,
+ citations: citations.citationData,
+ componentClass: 'references-manager'
+ }, _react.default.createElement("h2", {
+ className: 'composition-block-title section-title'
+ }, title), _react.default.createElement("em", {
+ className: 'section-title-running'
+ }, title), _react.default.createElement("em", {
+ className: 'publication-title-running'
+ }, publicationTitle), subtitle && _react.default.createElement("h2", {
+ className: 'section-subtitle'
+ }, subtitle), authors.length > 0 && _react.default.createElement("h3", {
+ className: 'section-authors'
+ }, _react.default.createElement(_Authors.default, {
+ authors: authors
+ })), _react.default.createElement(_Renderer.default, {
+ raw: contents,
+ notesPosition: notesPosition,
+ containerId: containerId
+ }), notesPosition === 'endOfSections' && _react.default.createElement(_EndNotes.default, {
+ sectionsIds: [id],
+ production: production,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale,
+ publicationTitle: publicationTitle,
+ publicationSubtitle: publicationSubtitle
+ })));
+ });
+ }
+
+}
+
+var _default = Section;
+exports.default = _default;
+Section.childContextTypes = {
+ notes: _propTypes.default.object
+};
\ No newline at end of file
diff --git a/dist/components/TableOfContents.js b/dist/components/TableOfContents.js
new file mode 100644
index 0000000..52850b1
--- /dev/null
+++ b/dist/components/TableOfContents.js
@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const TocElement = ({
+ title,
+ href,
+ level = 0
+}) => _react.default.createElement("li", {
+ className: `table-of-contents-element level-${level}`
+}, _react.default.createElement("span", {
+ className: 'element-title'
+}, title), _react.default.createElement("span", {
+ className: 'element-leading'
+}), _react.default.createElement("a", {
+ className: 'page-link',
+ href: `#${href}`
+}, "p."));
+
+var _default = ({
+ tableOfContents,
+ data: {
+ customTitle,
+ displayPageNumber
+ } = {},
+ translate
+}) => _react.default.createElement("section", {
+ className: `composition-block table-of-contents ${displayPageNumber ? 'has-page-number' : ''}`
+}, _react.default.createElement("h2", {
+ className: 'composition-block-title peritext-block-title'
+}, customTitle && customTitle.trim().length ? customTitle : translate('Table of contents')), _react.default.createElement("ul", {
+ className: 'table-of-contents-elements-container'
+}, tableOfContents.map((item, index) => {
+ return _react.default.createElement(TocElement, {
+ key: index,
+ title: item.title,
+ href: item.href,
+ level: item.level
+ });
+})));
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/TitlePage.js b/dist/components/TitlePage.js
new file mode 100644
index 0000000..c570c7c
--- /dev/null
+++ b/dist/components/TitlePage.js
@@ -0,0 +1,51 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+var _Authors = _interopRequireDefault(require("./Authors"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = ({
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ customCoverFooter
+ } = {},
+ id
+}) => {
+ const {
+ data: editionData = {}
+ } = edition;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return _react.default.createElement("section", {
+ className: 'composition-block title-page'
+ }, _react.default.createElement("div", {
+ className: 'title-page-content'
+ }, _react.default.createElement("h1", {
+ id: id,
+ className: 'title-page-title'
+ }, finalTitle), finalSubtitle && _react.default.createElement("h2", {
+ className: 'title-page-subtitle'
+ }, finalSubtitle), _react.default.createElement("h3", {
+ className: 'title-page-authors'
+ }, metadata.authors && _react.default.createElement(_Authors.default, {
+ authors: metadata.authors
+ }))), customCoverFooter && customCoverFooter.length > 0 && _react.default.createElement("div", {
+ className: 'title-page-footer'
+ }, _react.default.createElement(_MarkdownPlayer.default, {
+ src: customCoverFooter
+ })));
+};
+
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/components/Wrapper.js b/dist/components/Wrapper.js
new file mode 100644
index 0000000..2c9e9b9
--- /dev/null
+++ b/dist/components/Wrapper.js
@@ -0,0 +1,428 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _react = _interopRequireWildcard(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _peritextUtils = require("peritext-utils");
+
+var _FrontCover = _interopRequireDefault(require("./FrontCover"));
+
+var _TitlePage = _interopRequireDefault(require("./TitlePage"));
+
+var _BackCover = _interopRequireDefault(require("./BackCover"));
+
+var _Colophon = _interopRequireDefault(require("./Colophon"));
+
+var _References = _interopRequireDefault(require("./References"));
+
+var _Glossary = _interopRequireDefault(require("./Glossary"));
+
+var _EndNotes = _interopRequireDefault(require("./EndNotes"));
+
+var _DefaultLinkComponent = _interopRequireDefault(require("./DefaultLinkComponent"));
+
+var _DefaultMentionComponent = _interopRequireDefault(require("./DefaultMentionComponent"));
+
+var _DefaultSectionLinkComponent = _interopRequireDefault(require("./DefaultSectionLinkComponent"));
+
+var _MarkdownPlayer = _interopRequireDefault(require("./MarkdownPlayer"));
+
+var _TableOfContents = _interopRequireDefault(require("./TableOfContents"));
+
+var _Section = _interopRequireDefault(require("./Section"));
+
+var _defaultStyle = _interopRequireDefault(require("../defaultStyle"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+const EmptyPage = () => _react.default.createElement("div", {
+ className: 'composition-block empty-page'
+});
+
+const updateStyles = props => {
+ const {
+ edition: {
+ data = {}
+ },
+ contextualizers = {}
+ } = props;
+ const {
+ style: {
+ css = '',
+ mode = 'merge'
+ } = {
+ css: ''
+ }
+ } = data;
+ const contextualizersStyles = Object.keys(contextualizers).map(type => contextualizers[type] && contextualizers[type].defaultCss || '').join('\n');
+
+ if (mode === 'merge') {
+ return [_defaultStyle.default, // templateStylesheet,
+ contextualizersStyles, css].join('\n');
+ } else {
+ // styleMode === 'replace'
+ return [// templateStylesheet,
+ contextualizersStyles, css].join('\n');
+ }
+};
+/**
+ * @todo externalize
+ */
+
+
+const buildToc = (production, edition, translate) => {
+ const summary = edition.data.plan.summary; // returns [{level, title, href}]
+
+ return summary.reduce((res, element) => {
+ const {
+ data = {}
+ } = element;
+
+ switch (element.type) {
+ case 'customPage':
+ const {
+ title,
+ displayInTableOfContents
+ } = data;
+
+ if (displayInTableOfContents) {
+ return [...res, {
+ title,
+ level: 0,
+ href: `custom-block-${element.id}`
+ }];
+ }
+
+ return res;
+
+ case 'sections':
+ const {
+ id
+ } = element;
+ const {
+ customSummary = {
+ active: false
+ }
+ } = data;
+
+ if (customSummary.active) {
+ const {
+ summary: thatCustomSummary
+ } = customSummary;
+ return [...res, ...thatCustomSummary.map(el => {
+ const thatSection = production.sections[el.id];
+ return {
+ title: thatSection && thatSection.metadata.title,
+ level: el.level,
+ href: `section-${id}-${el.id}`
+ };
+ }).filter(s => s)];
+ }
+
+ return [...res, ...production.sectionsOrder.map(sectionId => {
+ const thatSection = production.sections[sectionId];
+ return {
+ title: thatSection && thatSection.metadata.title,
+ level: thatSection && thatSection.metadata.level || 0,
+ href: `section-${id}-${sectionId}`
+ };
+ })];
+
+ case 'glossary':
+ return [...res, {
+ title: data.customTitle || translate('Glossary list'),
+ level: 0,
+ href: `glossary-block-${element.id}`
+ }];
+
+ case 'references':
+ return [...res, {
+ level: 0,
+ title: data.customTitle || translate('References'),
+ href: `reference-block-${element.id}`
+ }];
+
+ default:
+ return res;
+ }
+ }, []);
+};
+
+const buildSectionBlockSummary = (sectionBlock, production) => {
+ if (sectionBlock.customSummary && sectionBlock.customSummary.active) {
+ return sectionBlock.customSummary.summary.map(el => el.id);
+ }
+
+ return production.sectionsOrder;
+};
+
+const Sections = ({
+ production,
+ edition,
+ translate,
+ data = {},
+ citations,
+ citationStyle,
+ citationLocale,
+ publicationTitle,
+ publicationSubtitle,
+ id
+}) => {
+ const summary = edition.data.plan.summary;
+ const notesPosition = data.notesPosition || 'footnotes';
+ const sectionsBlocks = summary.filter(s => s.type === 'sections');
+ const sectionsIds = sectionsBlocks.reduce((res, sectionBlock) => {
+ // @todo handle custom sections order
+ return [...res, ...buildSectionBlockSummary(sectionBlock, production)];
+ }, []);
+ return [...sectionsIds.map((sectionId, index) => {
+ const section = production.sections[sectionId];
+ return _react.default.createElement(_Section.default, {
+ section: section,
+ notesPosition: notesPosition,
+ key: `${index}-${sectionId}`,
+ production: production,
+ containerId: id,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale,
+ publicationTitle: publicationTitle,
+ publicationSubtitle: publicationSubtitle
+ });
+ }), // @todo endnotes relative to sections and not to production sectionsOrder
+ notesPosition === 'endOfContents' ? _react.default.createElement(_EndNotes.default, {
+ key: 'endnotes',
+ sectionsIds: sectionsIds,
+ production: production,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale,
+ publicationTitle: publicationTitle,
+ publicationSubtitle: publicationSubtitle
+ }) : null];
+};
+
+const renderSummary = ({
+ production,
+ edition,
+ translate,
+ citations
+}) => {
+ const summary = edition.data.plan.summary;
+ const citationStyle = edition.data.citationStyle.data;
+ const citationLocale = edition.data.citationLocale.data;
+ const {
+ data: editionData = {}
+ } = edition;
+ const {
+ metadata
+ } = production;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return summary.map((element, index) => {
+ switch (element.type) {
+ case 'frontCover':
+ return _react.default.createElement(_FrontCover.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate
+ }, element));
+
+ case 'titlePage':
+ return _react.default.createElement(_TitlePage.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate
+ }, element));
+
+ case 'colophon':
+ return _react.default.createElement(_Colophon.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate
+ }, element));
+
+ case 'backCover':
+ return _react.default.createElement(_BackCover.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate
+ }, element));
+
+ case 'emptyPage':
+ return _react.default.createElement(EmptyPage, {
+ key: index
+ });
+
+ case 'tableOfContents':
+ const toc = buildToc(production, edition, translate);
+ return _react.default.createElement(_TableOfContents.default, {
+ key: index,
+ data: element.data,
+ tableOfContents: toc,
+ translate: translate,
+ id: element.id
+ });
+
+ case 'customPage':
+ return _react.default.createElement("div", {
+ id: element.data.customCssId || element.id,
+ key: index,
+ className: `composition-block custom-page ${element.data.displayPageNumber ? 'has-page-number' : ''}`
+ }, element.data.title && _react.default.createElement("h1", {
+ id: `custom-block-${element.id}`,
+ className: 'composition-block-title peritext-block-title'
+ }, element.data.title), element.data.markdownContents && _react.default.createElement(_MarkdownPlayer.default, {
+ src: element.data.markdownContents
+ }));
+
+ case 'sections':
+ return _react.default.createElement(Sections, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale,
+ publicationTitle: finalTitle,
+ publicationSubtitle: finalSubtitle
+ }, element));
+
+ case 'glossary':
+ return _react.default.createElement(_Glossary.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale
+ }, element));
+
+ case 'references':
+ return _react.default.createElement(_References.default, _extends({
+ key: index,
+ production: production,
+ edition: edition,
+ translate: translate,
+ citations: citations,
+ citationStyle: citationStyle,
+ citationLocale: citationLocale
+ }, element));
+
+ default:
+ return _react.default.createElement("div", {
+ id: element.id,
+ className: 'composition-block',
+ key: index
+ }, element.type);
+ }
+ });
+};
+
+class Template extends _react.Component {
+ constructor(props) {
+ super(props);
+
+ _defineProperty(this, "shouldComponentUpdate", () => true);
+
+ _defineProperty(this, "translate", key => {
+ const {
+ locale = {}
+ } = this.props;
+ return locale[key] || key;
+ });
+ }
+
+ getChildContext() {
+ return {
+ LinkComponent: this.props.LinkComponent || _DefaultLinkComponent.default,
+ MentionComponent: this.props.MentionComponent || _DefaultMentionComponent.default,
+ SectionLinkComponent: this.props.SectionLinkComponent || _DefaultSectionLinkComponent.default,
+ production: this.props.production,
+ productionAssets: this.props.production.assets,
+ contextualizers: this.props.contextualizers,
+ translate: this.translate
+ };
+ }
+
+ render() {
+ const {
+ props: {
+ production,
+ edition,
+ contextualizers,
+ renderAdditionalHTML = false
+ },
+ translate
+ } = this;
+ const {
+ data = {}
+ } = edition;
+ const {
+ additionalHTML = ''
+ } = data;
+ const citations = (0, _peritextUtils.buildCitations)(production);
+ const finalStyles = updateStyles({
+ edition,
+ contextualizers
+ });
+ /**
+ * We render an array
+ * to have our sections as a flat collection
+ * which facilitates @paged rules about pages breaks
+ */
+
+ return [...renderSummary({
+ production,
+ edition,
+ translate,
+ citations
+ }), _react.default.createElement("style", {
+ key: 'styles',
+ dangerouslySetInnerHTML: {
+ __html: finalStyles
+ /* eslint react/no-danger : 0 */
+
+ }
+ }), renderAdditionalHTML ? _react.default.createElement("div", {
+ id: 'additional-html',
+ key: 'additional-html',
+ dangerouslySetInnerHTML: {
+ /* eslint react/no-danger : 0 */
+ __html: `${additionalHTML} `
+ }
+ }) : null].filter(s => s);
+ }
+
+}
+
+exports.default = Template;
+Template.childContextTypes = {
+ LinkComponent: _propTypes.default.func,
+ MentionComponent: _propTypes.default.func,
+ SectionLinkComponent: _propTypes.default.func,
+ translate: _propTypes.default.func,
+ production: _propTypes.default.object,
+ productionAssets: _propTypes.default.object,
+ contextualizers: _propTypes.default.object
+};
\ No newline at end of file
diff --git a/dist/defaultStyle.js b/dist/defaultStyle.js
new file mode 100644
index 0000000..f1cf261
--- /dev/null
+++ b/dist/defaultStyle.js
@@ -0,0 +1,666 @@
+"use strict";
+
+const style = `
+
+/* variable used for the template */
+:root {
+ --color-link-default: #99B6BD;/* bleu délavé */
+ --color-link-active:#D4613E;/* rouille */
+ --color-text: #4d4c4c;
+
+ font-family:'Source serif pro', serif;
+ --gutter-medium: .5cm;
+}
+
+/**
+ *
+ * PAGES LAYOUTS
+ *
+ */
+@page{
+ format: A4 portrait;
+}
+
+/* front cover */
+
+@page front-cover {
+ margin: 0e-6cm;
+}
+@page back-cover {
+ margin: 0e-6cm;
+}
+@page front-cover{
+}
+@page colophon:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+
+ @top-left{
+ }
+ @top-left-corner {
+
+ }
+}
+
+@page colophon:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ }
+ @top-right {
+ }
+}
+@page empty-page {
+}
+@page table-of-contents {
+}
+@page table-of-contents-wpnumber:left {
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page table-of-contents-wpnumber:right {
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page custom-page {
+}
+@page custom-page-wpnumber:left {
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page custom-page-wpnumber:right {
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page section{
+
+}
+
+@page section:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+ @top-left{
+ content: element(publicationTitle);
+ }
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page section:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+ @top-right {
+ content: element(sectionTitle);
+ }
+}
+
+@page peritext{
+
+}
+
+@page peritext:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+ @top-left{
+ content: element(publicationTitle);
+ }
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page peritext:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+ @top-right {
+ }
+}
+@page section:first{
+ @top-right {
+ content: none;
+ }
+}
+
+
+.front-cover{
+ page: front-cover;
+ page-break-before: right;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.title-page{
+ page: title-page;
+ page-break-before: right;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+
+.colophon{
+ page: colophon;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.back-cover{
+ page: back-cover;
+ page-break-before: left;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+.empty-page{
+ page: empty-page;
+}
+
+.table-of-contents{
+ page: table-of-contents;
+ page-break-before: right;
+}
+.table-of-contents.has-page-number{
+ page: table-of-contents-wpnumber;
+ page-break-before: right;
+}
+
+.custom-page{
+ page: custom-page;
+}
+.section{
+ page: section;
+ page-break-before: right;
+}
+
+.glossary{
+ page: peritext;
+}
+.reference{
+ page: peritext;
+}
+
+.custom-page.has-page-number{
+ page: custom-page-wpnumber;
+}
+
+/**
+ *
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ * REUSED COMPONENTS
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ *
+ */
+body{
+ text-rendering: optimizeLebility;
+ color: var(--color-text);
+}
+a,
+.page-link{
+ text-decoration: none;
+ color: var(--color-link-default);
+}
+.page-link::after{
+ content: target-counter(attr(href), page);
+}
+.publication-title-running{
+ position: running(publicationTitle);
+}
+.section-title-running{
+ position: running(sectionTitle);
+}
+
+.composition-block-title{
+ font-weight: 800;
+ font-size: 50px;
+}
+
+/**
+ * Prevent overflow bugs
+ */
+.csl-entry,
+a{
+ word-break: break-all;
+}
+
+/* lists */
+.mentions-container{
+ padding: 0;
+}
+.mention-item{
+ list-style-type: none;
+ padding: 0;
+ margin-bottom: var(--gutter-medium);
+}
+.mention-item .title{
+
+}
+.glossary .mention-item .title{
+ font-weight: 800;
+}
+.mention-item .description {
+
+}
+.mention-item .mentions-list{
+ opacity: .8;
+ font-size: 80%;
+}
+
+.mention-item .mentions-list::before{
+ content: "◉";
+ font-style: normal;
+ padding-right: calc(.5 * var(--gutter-medium));
+}
+
+/* rendered content */
+.rendered-content .unstyled{
+ text-indent: var(--gutter-medium);
+ margin-bottom: calc(.4 * var(--gutter-medium));
+}
+.rendered-content > .unstyled {
+ text-indent: none;
+}
+
+ul + .unstyled,
+blockquote + .unstyled,
+figure + .unstyled,
+.csl-entry{
+ text-indent: none;
+}
+
+.rendered-content sup{
+ line-height: 0;
+ vertical-align: super;
+ position: relative;
+ top: .2em;
+}
+.footnote-area .footnote{
+}
+.footnote-area .footnote sup{
+ vertical-align: baseline;
+ font-size: 100%;
+}
+.footnote-area .footnote sup::after{
+ content: ".";
+ padding-right: .5em;
+}
+
+/**
+ * Figures (general)
+ */
+.block-contextualization-container,
+.block-contextualization-container figure
+{
+ padding: 0;
+ margin: 0;
+}
+.block-contextualization-container .figure-caption{
+ padding-top: calc(.5 * var(--gutter-medium));
+ font-style: italic;
+}
+.block-contextualization-container .figure-title{
+ margin: 0;
+}
+.block-contextualization-container .figure-title .mention-context-pointer{
+ font-size: 1.2rem;
+ padding: 0;
+}
+.block-contextualization-container .figure-legend{
+ font-size: 1em;
+ margin-top: 0;
+}
+.block-contextualization-container .figure-legend p{
+ margin-top: 0;
+}
+.block-contextualization-container figure{
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+.block-contextualization-container img
+{
+ max-width: 100%;
+ max-height: 4cm;
+}
+.block-contextualization-container iframe
+{
+ min-height: 30%;
+ outline: none;
+ border: none;
+ width: 100%;
+ max-height: 4cm;
+ min-height: 3cm;
+}
+/**
+ * Figures (specific)
+ */
+/* tables */
+.block-contextualization-container.table{
+ page-break-before: always;
+ max-width: 100%;
+ overflow: hidden;
+}
+
+.block-contextualization-container.table table th,
+.block-contextualization-container.table table tr
+ {
+ border-right: 1px solid black;
+ border-bottom: 1px solid black;
+ font-size: 8px;
+}
+
+.block-contextualization-container.bib .figure-caption{
+ display: none;
+}
+/* images */
+.block-contextualization-container.image .static-images-container{
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: flex-start;
+}
+.block-contextualization-container.image .static-images-container img{
+ display: block;
+}
+.block-contextualization-container.image .image-specific-caption {
+ font-style: italic;
+ font-size: 70%;
+ opacity: .8;
+ padding: calc(.5 * var(--gutter-medium));
+ padding-left: 0;
+}
+/* vegaLite visualizations */
+.block-contextualization-container.vegaLite .vegaLite > div {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: var(--gutter-medium);
+ page-break-inside: avoid;
+}
+/**
+ *
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ * VIEW SPECIFIC COMPONENTS
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ *
+ */
+/* front cover components */
+.front-cover .front-cover-title {
+ font-size: 50px;
+ margin-bottom: 0;
+}
+.front-cover .front-cover-subtitle {
+ font-size: 30px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.front-cover .front-cover-authors{
+ color: var(--color-link-active);
+ font-size: 20px;
+}
+.front-cover .front-cover-footer{
+ font-style: italic;
+}
+/* title-page */
+.title-page{
+ text-align: center;
+}
+.title-page .title-page-title {
+ font-size: 50px;
+ margin-bottom: 0;
+}
+.title-page .title-page-subtitle {
+ font-size: 30px;
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+.title-page .title-page-authors{
+ font-size: 22px;
+}
+.title-page .title-page-footer{
+ font-style: italic;
+}
+/* colophon components */
+.colophon-content{
+ position: absolute;
+ bottom: 0;
+}
+
+/* back cover components */
+.back-cover .back-cover-title {
+ font-size: 30px;
+ margin-bottom: 0;
+}
+.back-cover .back-cover-subtitle {
+ font-size: 20px;
+ margin-top: 5px;
+ margin-bottom: 15px;
+}
+.back-cover .back-cover-authors{
+ color: var(--color-link-active);
+ font-size: 16px;
+}
+.back-cover .back-cover-text{
+ max-height: 60%;
+}
+.back-cover .back-cover-footer{
+ font-style: italic;
+}
+
+/* toc views components */
+.table-of-contents .table-of-contents-elements-container{
+ padding: 0;
+}
+.table-of-contents .table-of-contents-element{
+ list-style-type: none;
+ margin: 0;
+ font-size: 20px;
+}
+.table-of-contents .table-of-contents-element {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: stretch;
+
+}
+.table-of-contents .table-of-contents-element .element-leading{
+ flex: 1;
+ content: " ";
+ border-bottom: 1px dashed var(--color-text);
+}
+.table-of-contents .table-of-contents-element .element-title,
+.table-of-contents .table-of-contents-element .page-link
+{
+ position: relative;
+ top: .25em;
+ min-width: 20px;
+}
+.table-of-contents .table-of-contents-element.level-0{
+}
+.table-of-contents .table-of-contents-element.level-1{
+ margin-left: calc(.3 * var(--gutter-medium));
+}
+.table-of-contents .table-of-contents-element.level-2{
+ margin-left: calc(.6 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-3{
+ margin-left: calc(.9 * var(--gutter-medium));
+}
+.table-of-contents .table-of-contents-element.level-4{
+ margin-left: calc(1.2 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-5{
+ margin-left: calc(1.5 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-6{
+ margin-left: calc(1.8 * var(--gutter-medium));
+
+}
+/* sections views */
+.section.has-notes-position-sidenotes .sidenote {
+ color: var(--color-link-default);
+ border-left: 3px solid var(--color-link-default);
+ margin-left: .5em;
+ padding-left: .5em;
+ font-size: .8em;
+ vertical-align: baseline;
+}
+
+.footnote{
+ font-size: 80%;
+ vertical-align: baseline;
+ opacity: .8;
+}
+
+
+.section-title{
+ margin-top: 50%;
+}
+
+/* front cover and back cover */
+.front-cover{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+}
+.title-page{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+}
+.back-cover{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+ align-items: center;
+}
+.front-cover .front-cover-footer,
+.back-cover .back-cover-footer,
+.title-page .title-page-footer
+{
+ position : absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.front-cover .front-cover-content,
+.back-cover .back-cover-content
+{
+ background: white;
+ color: var(--color-text);
+ padding: 2cm;
+}
+.back-cover-content {
+ margin: 2cm;
+}
+.front-cover.with-animated-background-gradient,
+.back-cover.with-animated-background-gradient
+{
+ background: linear-gradient(-45deg, #EE7752, #E73C7E, #23A6D5, #23D5AB);
+ background-size: 400% 400%;
+ -webkit-animation: Gradient 15s ease infinite;
+ -moz-animation: Gradient 15s ease infinite;
+ animation: Gradient 15s ease infinite;
+}
+
+@-webkit-keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+@-moz-keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+@keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+`;
+module.exports = style;
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..5942fcf
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,33 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _Wrapper = _interopRequireDefault(require("./components/Wrapper"));
+
+var _References = _interopRequireDefault(require("./components/References"));
+
+var _Glossary = _interopRequireDefault(require("./components/Glossary"));
+
+var _EndNotes = _interopRequireDefault(require("./components/EndNotes"));
+
+var _defaultStyle = _interopRequireDefault(require("./defaultStyle"));
+
+var _meta = _interopRequireDefault(require("./meta"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const components = {
+ Edition: _Wrapper.default,
+ EndNotes: _EndNotes.default,
+ References: _References.default,
+ Glossary: _Glossary.default
+};
+var _default = {
+ meta: _meta.default,
+ components,
+ css: _defaultStyle.default
+};
+exports.default = _default;
\ No newline at end of file
diff --git a/dist/meta.js b/dist/meta.js
new file mode 100644
index 0000000..09b9caa
--- /dev/null
+++ b/dist/meta.js
@@ -0,0 +1,289 @@
+"use strict";
+
+module.exports = {
+ id: 'pyrrah',
+ type: 'peritext-template',
+ name: 'Pyrrah template',
+ renderingTypes: ['paged'],
+ generatorsTypes: ['pdf', 'epub'],
+ summaryType: 'linear',
+ options: {
+ referencesScope: {
+ type: 'string',
+ enum: ['sections', 'edition'],
+ default: 'edition'
+ }
+ },
+ defaultBibType: 'book',
+ defaultAdditionalHTML: ' ',
+ defaultPlan: {
+ type: 'linear',
+ summary: [{
+ type: 'frontCover',
+ data: {
+ animatedBackground: 'none',
+ backgroundColor: '#466CA6'
+ }
+ }, {
+ type: 'titlePage'
+ }, {
+ type: 'tableOfContents',
+ data: {
+ displayPageNumber: true
+ }
+ }, {
+ type: 'sections',
+ data: {
+ notesPosition: 'footnotes'
+ }
+ }, {
+ type: 'backCover',
+ data: {
+ backgroundColor: '#D6CFC4',
+ useAbstract: true
+ }
+ }]
+ },
+ summaryBlockDataTypes: {
+ frontCover: {
+ type: 'object',
+ default: {
+ animatedBackground: 'none',
+ backgroundColor: '#466CA6'
+ },
+ properties: {
+ backgroundColor: {
+ type: 'string',
+ uiType: 'color'
+ },
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ },
+ animatedBackground: {
+ type: 'string',
+ description: 'animated background to use',
+ enum: ['gradient', 'none']
+ }
+ }
+ },
+ titlePage: {
+ type: 'object',
+ default: {},
+ properties: {
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ }
+ }
+ },
+ colophon: {
+ type: 'object',
+ default: {},
+ properties: {
+ customText: {
+ type: 'string',
+ longString: true
+ },
+ copyright: {
+ type: 'string'
+ },
+ issn: {
+ type: 'string'
+ },
+ isbn: {
+ type: 'string'
+ }
+ }
+ },
+ backCover: {
+ type: 'object',
+ default: {
+ backgroundColor: '#D6CFC4',
+ useAbstract: true
+ },
+ properties: {
+ backgroundColor: {
+ type: 'string'
+ },
+ useAbstract: {
+ type: 'boolean'
+ },
+ customMarkdownContents: {
+ type: 'string',
+ description: 'custom content to put on this page',
+ longString: true
+ },
+ animatedBackground: {
+ type: 'string',
+ description: 'animated background to use',
+ enum: ['gradient', 'none']
+ },
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ }
+ }
+ },
+ tableOfContents: {
+ type: 'object',
+ properties: {
+ customTitle: {
+ type: 'string',
+ description: 'Custom title of the table of contents section'
+ },
+ displayPageNumber: {
+ type: 'boolean',
+ description: 'whether to display page number'
+ }
+ },
+ default: {
+ displayPageNumber: true
+ }
+ },
+ sections: {
+ type: 'object',
+ properties: {
+ customSummary: {
+ type: 'object',
+ uiType: 'customSummary',
+ properties: {
+ active: {
+ type: 'boolean'
+ },
+ summary: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ sectionId: {
+ type: 'string'
+ },
+ sectionLevel: {
+ type: 'number'
+ }
+ }
+ }
+ }
+ }
+ },
+ notesPosition: {
+ type: 'string',
+ enum: ['footnotes', 'sidenotes', 'endOfSections', 'endOfContents']
+ }
+ },
+ default: {
+ customSummary: {
+ active: false,
+ summary: []
+ },
+ notesPosition: 'footnotes'
+ }
+ },
+ customPage: {
+ type: 'object',
+ default: {
+ displayInTableOfContents: true,
+ displayPageNumber: true
+ },
+ properties: {
+ title: {
+ type: 'string'
+ },
+ markdownContents: {
+ type: 'string',
+ longString: true
+ },
+ customCssId: {
+ type: 'string',
+ description: 'custom id for this page'
+ },
+ displayInTableOfContents: {
+ type: 'boolean',
+ description: 'whether to display this content in table of contents'
+ },
+ displayPageNumber: {
+ type: 'boolean',
+ description: 'whether to display page number'
+ }
+ }
+ },
+ emptyPage: {
+ type: 'object',
+ properties: {}
+ },
+ references: {
+ type: 'object',
+ default: {
+ showUncitedReferences: false,
+ showMentions: false,
+ resourceTypes: ['bib'],
+ sortingKey: 'date',
+ sortingAscending: true
+ },
+ properties: {
+ resourceTypes: {
+ type: 'array',
+ items: {
+ type: 'string',
+ enum: ['bib', 'image', 'table', 'video', 'embed', 'webpage']
+ },
+ uiType: 'select',
+ description: 'which types of resources to show as references'
+ },
+ showUncitedReferences: {
+ type: 'boolean',
+ description: 'whether to show references which are not cited in the contents of the edition'
+ },
+ showMentions: {
+ type: 'boolean',
+ description: 'whether to show active mentions in the text for each reference'
+ },
+ sortingKey: {
+ type: 'string',
+ description: 'key to use for sorting references',
+ enum: ['authors', 'title', 'date']
+ },
+ sortingAscending: {
+ type: 'boolean',
+ description: 'whether to sort references in ascending order'
+ }
+ }
+ },
+ glossary: {
+ type: 'object',
+ default: {
+ showDescription: true,
+ showMentions: true,
+ showUncited: false,
+ glossaryTypes: ['person', 'place', 'event', 'notion', 'other']
+ },
+ properties: {
+ customTitle: {
+ type: 'string'
+ },
+ showDescriptions: {
+ type: 'boolean',
+ description: 'whether to show elements descriptions in the glossary'
+ },
+ showMentions: {
+ type: 'boolean',
+ description: 'whether to show active mentions in the text for each glossary element'
+ },
+ glossaryTypes: {
+ type: 'array',
+ items: {
+ type: 'string',
+ enum: ['person', 'place', 'event', 'notion', 'other']
+ },
+ uiType: 'select',
+ description: 'which types of glossary items to show'
+ },
+ showUncited: {
+ type: 'boolean',
+ description: 'whether to show uncited glossary items'
+ }
+ }
+ }
+ }
+};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..735ad93
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5136 @@
+{
+ "name": "peritext-template-pyrrah",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/cli": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.3.tgz",
+ "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^2.0.3",
+ "commander": "^2.8.1",
+ "convert-source-map": "^1.1.0",
+ "fs-readdir-recursive": "^1.1.0",
+ "glob": "^7.0.0",
+ "lodash": "^4.17.10",
+ "mkdirp": "^0.5.1",
+ "output-file-sync": "^2.0.0",
+ "slash": "^2.0.0",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz",
+ "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helpers": "^7.2.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/template": "^7.2.2",
+ "@babel/traverse": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
+ "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.2.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz",
+ "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0",
+ "esutils": "^2.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.3.tgz",
+ "integrity": "sha512-xO/3Gn+2C7/eOUeb0VRnSP1+yvWHNxlpAot1eMhtoKDCN7POsyQP5excuT5UsV5daHxMWBeIIOeI5cmB8vMRgQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.2.3"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
+ "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz",
+ "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.2.3",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz",
+ "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
+ "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.3.tgz",
+ "integrity": "sha512-FVuQngLoN2iDrpW7LmhPZ2sO4DJxf35FOcwidwB9Ru9tMvI5URthnkVHuG14IStV+TzkMTyLMoOUlSTtrdVwqw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.2.3",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.2.3.tgz",
+ "integrity": "sha512-jhCFm7ftmue02EWIYqbhzP0iConEPsgVQeDriOs/Qc2lgr6MDtHTTrv3hE2GOOQDFjQ9tjP7nWQq0ad0JhIsQg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.2.3",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-decorators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
+ "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz",
+ "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
+ "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
+ "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz",
+ "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz",
+ "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
+ "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
+ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
+ "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
+ "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
+ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
+ "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
+ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz",
+ "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-display-name": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
+ "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz",
+ "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz",
+ "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz",
+ "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
+ "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
+ "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz",
+ "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.2.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.2.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.2.0",
+ "@babel/plugin-transform-classes": "^7.2.0",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.2.0",
+ "@babel/plugin-transform-dotall-regex": "^7.2.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.2.0",
+ "@babel/plugin-transform-function-name": "^7.2.0",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.2.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.2.0",
+ "@babel/plugin-transform-parameters": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.2.0",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.2.0",
+ "browserslist": "^4.3.4",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/preset-react": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz",
+ "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-transform-react-display-name": "^7.0.0",
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.0.0",
+ "@babel/plugin-transform-react-jsx-source": "^7.0.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz",
+ "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.2.3",
+ "@babel/types": "^7.2.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.10"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
+ "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@robindemourat/eslint-config": {
+ "version": "git+https://github.com/robindemourat/eslint-config.git#7749111822597b7ec1a66e1630ee4d7c616590e1",
+ "from": "git+https://github.com/robindemourat/eslint-config.git",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "babel-eslint": {
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz",
+ "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/traverse": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+ "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.44"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.2.0",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+ "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.44",
+ "@babel/template": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+ "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.44"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+ "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+ "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "lodash": "^4.2.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+ "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.44",
+ "@babel/generator": "7.0.0-beta.44",
+ "@babel/helper-function-name": "7.0.0-beta.44",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.44",
+ "@babel/types": "7.0.0-beta.44",
+ "babylon": "7.0.0-beta.44",
+ "debug": "^3.1.0",
+ "globals": "^11.1.0",
+ "invariant": "^2.2.0",
+ "lodash": "^4.2.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.2.0",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-transform-decorators-legacy": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz",
+ "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-decorators": "^6.1.18",
+ "babel-runtime": "^6.2.0",
+ "babel-template": "^6.3.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz",
+ "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "bail": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz",
+ "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz",
+ "integrity": "sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30000928",
+ "electron-to-chromium": "^1.3.100",
+ "node-releases": "^1.1.3"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000928",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz",
+ "integrity": "sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "character-entities": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz",
+ "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ=="
+ },
+ "character-entities-legacy": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz",
+ "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA=="
+ },
+ "character-reference-invalid": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz",
+ "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ=="
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.0",
+ "braces": "^2.3.0",
+ "fsevents": "^1.2.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "lodash.debounce": "^4.0.8",
+ "normalize-path": "^2.1.1",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0",
+ "upath": "^1.0.5"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "citeproc": {
+ "version": "2.1.210",
+ "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.1.210.tgz",
+ "integrity": "sha512-6hBVPAee7lVv8iCXs+GYoKiX+AjH7BqYsoe7hFeoIQV1ZqnXEJIR1Ehdv9iQPAalfMyhHkHJDXRyd/UFaMTh6A=="
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "collapse-white-space": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
+ "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw=="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "create-react-class": {
+ "version": "15.6.3",
+ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
+ "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
+ "requires": {
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.102",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz",
+ "integrity": "sha512-2nzZuXw/KBPnI3QX3UOCSRvJiVy7o9+VHRDQ3D/EHCvVc89X6aj/GlNmEgiR2GBIhmSWXIi4W1M5okA5ScSlNg==",
+ "dev": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-mocha": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.2.1.tgz",
+ "integrity": "sha512-v95cxwpPiyt2Gb/Moog8KQtaT+KlGGMbqpOkcP/eIkvaovPEcTprOYywAOo1On+KDsfEbJ4mByfcfUEwrxH9Gw==",
+ "dev": true,
+ "requires": {
+ "ramda": "^0.26.1"
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.12.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.3.tgz",
+ "integrity": "sha512-WTIA3cS8OzkPeCi4KWuPmjR33lgG9r9Y/7RmnLTRw08MZKgAfnK/n3BO4X0S67MPkVLazdfCNT/XWqcDu4BLTA==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "object.fromentries": "^2.0.0",
+ "prop-types": "^15.6.2",
+ "resolve": "^1.9.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "exenv": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
+ "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fbjs": {
+ "version": "0.8.17",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+ "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+ "requires": {
+ "core-js": "^1.0.0",
+ "isomorphic-fetch": "^2.1.1",
+ "loose-envify": "^1.0.0",
+ "object-assign": "^4.1.0",
+ "promise": "^7.1.1",
+ "setimmediate": "^1.0.5",
+ "ua-parser-js": "^0.7.18"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formidable": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
+ "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz",
+ "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "html-to-react": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz",
+ "integrity": "sha512-/tWDdb/8Koi/QEP5YUY1653PcDpBnnMblXRhotnTuhFDjI1Fc6Wzox5d4sw73Xk5rM2OdM5np4AYjT/US/Wj7Q==",
+ "requires": {
+ "domhandler": "^2.4.2",
+ "escape-string-regexp": "^1.0.5",
+ "htmlparser2": "^3.10.0",
+ "lodash.camelcase": "^4.3.0",
+ "ramda": "^0.26"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.0.6"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz",
+ "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg=="
+ },
+ "is-alphanumerical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz",
+ "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==",
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-decimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz",
+ "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg=="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-hexadecimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz",
+ "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A=="
+ },
+ "is-integer": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz",
+ "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-whitespace-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz",
+ "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ=="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-word-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz",
+ "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "requires": {
+ "node-fetch": "^1.0.1",
+ "whatwg-fetch": ">=0.10.0"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true,
+ "optional": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-escapes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz",
+ "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA=="
+ },
+ "mdast-add-list-metadata": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz",
+ "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==",
+ "requires": {
+ "unist-util-visit-parents": "1.1.2"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.37.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+ "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
+ },
+ "mime-types": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "requires": {
+ "mime-db": "~1.37.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "requires": {
+ "encoding": "^0.1.11",
+ "is-stream": "^1.0.1"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz",
+ "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
+ "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.11.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "os-shim": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+ "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "output-file-sync": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz",
+ "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "is-plain-obj": "^1.1.0",
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "parse-entities": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz",
+ "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==",
+ "requires": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true,
+ "optional": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "peritext-schemas": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/peritext-schemas/-/peritext-schemas-0.1.1.tgz",
+ "integrity": "sha512-8Q8fuwdTKecNsLKj7ilxih3jAQlqEU13qRa52yk+AgnMn4hI5bX/Ia0EYEXidQ5y1Ez7qDx0hEJ7SycaKcW5Ww=="
+ },
+ "peritext-utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/peritext-utils/-/peritext-utils-0.1.0.tgz",
+ "integrity": "sha512-tyUnNTIe1abbJ/xBAVA/iKkc1cmbjPZhS0syR8kJQplPnft6je4bYc0mxTIWsGZpxER/uNhygU2OsUcNme+9xA==",
+ "requires": {
+ "react-citeproc": "^0.1.10",
+ "slugify": "^1.3.4",
+ "unicode-byte-truncate": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "pre-commit": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz",
+ "integrity": "sha1-287g7p3nI15X95xW186UZBpp7sY=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "spawn-sync": "^1.0.15",
+ "which": "1.2.x"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "requires": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz",
+ "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA=="
+ },
+ "ramda": {
+ "version": "0.26.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz",
+ "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ=="
+ },
+ "react": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz",
+ "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.12.0"
+ }
+ },
+ "react-citeproc": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/react-citeproc/-/react-citeproc-0.1.10.tgz",
+ "integrity": "sha512-BVauwAXOaIT3Us6G3M0ZcyizrjUks2zcZpzuL5fkvbHJRk0T5YONcym0VbIh3C+6Qz33AmrkegSza39I3kOKYg==",
+ "requires": {
+ "citeproc": "^2.1.204",
+ "html-to-react": "^1.2.8",
+ "lodash": "^4.17.10",
+ "react": "^15.3.2",
+ "storybook": "0.0.0",
+ "superagent": "^3.2.1",
+ "uuid": "^2.0.3"
+ },
+ "dependencies": {
+ "react": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
+ "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
+ "requires": {
+ "create-react-class": "^15.6.0",
+ "fbjs": "^0.8.9",
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.0",
+ "prop-types": "^15.5.10"
+ }
+ }
+ }
+ },
+ "react-dom": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz",
+ "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.12.0"
+ }
+ },
+ "react-helmet": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.0.tgz",
+ "integrity": "sha1-qBgR3yExOm1VxfBYxK66XW89l6c=",
+ "requires": {
+ "deep-equal": "^1.0.1",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.5.4",
+ "react-side-effect": "^1.1.0"
+ }
+ },
+ "react-markdown": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.6.tgz",
+ "integrity": "sha512-E1d/q+OBk5eumId42oYqVrJRB/+whrZdk+YHqUBCCNeWxqeV+Qzt+yLTsft9+4HRDj89Od7eAbUPQBYq8ZwShQ==",
+ "requires": {
+ "html-to-react": "^1.3.4",
+ "mdast-add-list-metadata": "1.0.1",
+ "prop-types": "^15.6.1",
+ "remark-parse": "^5.0.0",
+ "unified": "^6.1.5",
+ "unist-util-visit": "^1.3.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "react-side-effect": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz",
+ "integrity": "sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw==",
+ "requires": {
+ "exenv": "^1.2.1",
+ "shallowequal": "^1.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "redraft": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/redraft/-/redraft-0.10.2.tgz",
+ "integrity": "sha512-yy5EcJogY+2MlfBu6uwxQ0r5KzWra9lZRfHpG9czGoxOw8k8woHlVD1LlT1hp/n0zLNLvaIJ9EKE1NgcYgfI+A==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
+ "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remark-parse": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz",
+ "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==",
+ "requires": {
+ "collapse-white-space": "^1.0.2",
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "is-word-character": "^1.0.0",
+ "markdown-escapes": "^1.0.0",
+ "parse-entities": "^1.1.0",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "trim": "0.0.1",
+ "trim-trailing-lines": "^1.0.0",
+ "unherit": "^1.0.4",
+ "unist-util-remove-position": "^1.0.0",
+ "vfile-location": "^2.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ }
+ },
+ "resolve": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz",
+ "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "scheduler": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz",
+ "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "slugify": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz",
+ "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw=="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spawn-sync": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
+ "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.4.7",
+ "os-shim": "^0.1.2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "state-toggle": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz",
+ "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og=="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "storybook": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-0.0.0.tgz",
+ "integrity": "sha1-s7lQj7mf2DYVZ0kXWDz+nhUykx0="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+ "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "superagent": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
+ "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
+ "requires": {
+ "component-emitter": "^1.2.0",
+ "cookiejar": "^2.1.0",
+ "debug": "^3.1.0",
+ "extend": "^3.0.0",
+ "form-data": "^2.3.1",
+ "formidable": "^1.2.0",
+ "methods": "^1.1.1",
+ "mime": "^1.4.1",
+ "qs": "^6.5.1",
+ "readable-stream": "^2.3.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "trim-trailing-lines": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz",
+ "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg=="
+ },
+ "trough": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz",
+ "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw=="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.19",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz",
+ "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ=="
+ },
+ "unherit": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz",
+ "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unicode-byte-truncate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-byte-truncate/-/unicode-byte-truncate-1.0.0.tgz",
+ "integrity": "sha1-qm8PNHUZP+IMMgrJIT425i6HZKc=",
+ "requires": {
+ "is-integer": "^1.0.6",
+ "unicode-substring": "^0.1.0"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+ "dev": true
+ },
+ "unicode-substring": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-substring/-/unicode-substring-0.1.0.tgz",
+ "integrity": "sha1-YSDOPDkDhdvND2DDK5BlxBgdSzY="
+ },
+ "unified": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+ "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
+ "requires": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "trough": "^1.0.0",
+ "vfile": "^2.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unist-util-is": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz",
+ "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw=="
+ },
+ "unist-util-remove-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz",
+ "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==",
+ "requires": {
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ=="
+ },
+ "unist-util-visit": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz",
+ "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==",
+ "requires": {
+ "unist-util-visit-parents": "^2.0.0"
+ },
+ "dependencies": {
+ "unist-util-visit-parents": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz",
+ "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==",
+ "requires": {
+ "unist-util-is": "^2.1.2"
+ }
+ }
+ }
+ },
+ "unist-util-visit-parents": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz",
+ "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q=="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+ "dev": true,
+ "optional": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho="
+ },
+ "vfile": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
+ "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-message": "^1.0.0"
+ }
+ },
+ "vfile-location": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz",
+ "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w=="
+ },
+ "vfile-message": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
+ "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
+ "requires": {
+ "unist-util-stringify-position": "^1.1.1"
+ }
+ },
+ "whatwg-fetch": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+ "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
+ },
+ "which": {
+ "version": "1.2.14",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..bfd7364
--- /dev/null
+++ b/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "peritext-template-pyrrah",
+ "version": "0.1.0",
+ "description": " a web template designed dedicated to long reading experiences and context explorations, for the peritext ecosystem",
+ "main": "dist/index.js",
+ "scripts": {
+ "build": "rm -rf dist; mkdir dist; babel src -d dist",
+ "addbuild": "git add dist",
+ "lint": "eslint src",
+ "lint:fix": "eslint src --fix"
+ },
+ "pre-commit": [
+ "lint",
+ "build",
+ "addbuild"
+ ],
+ "author": "Robin de Mourat",
+ "license": "AGPL-3.0-or-later",
+ "bugs": {
+ "url": "https://github.com/peritext/peritext-template-pyrrah/issues"
+ },
+ "homepage": "https://github.com/peritext/peritext-template-pyrrah#readme",
+ "peerDependencies": {
+ "react": "^16.7.0-alpha",
+ "react-dom": "^16.7.0-alpha",
+ "lodash": "^4.17"
+ },
+ "dependencies": {
+ "peritext-schemas": "^0.1.1",
+ "peritext-utils": "^0.1.0",
+ "react-citeproc": "^0.1.10",
+ "react-helmet": "^5.2.0",
+ "react-markdown": "^4.0.6",
+ "redraft": "^0.10.2"
+ },
+ "devDependencies": {
+ "@babel/cli": "^7.2.3",
+ "@babel/core": "^7.0.0",
+ "@babel/plugin-proposal-class-properties": "^7.2.3",
+ "@babel/plugin-proposal-decorators": "^7.0.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
+ "@babel/preset-env": "^7.2.3",
+ "@babel/preset-react": "^7.0.0",
+ "babel-eslint": "^8.2.2",
+ "@robindemourat/eslint-config": "git+https://github.com/robindemourat/eslint-config.git",
+ "babel-plugin-transform-decorators-legacy": "^1.3.5",
+ "pre-commit": "^1.2.2",
+ "eslint": "^4.19.1",
+ "eslint-plugin-mocha": "^5.2.0",
+ "eslint-plugin-react": "^7.5.1",
+ "react": "^16.7.0-alpha",
+ "react-dom": "^16.7.0-alpha"
+ },
+ "babel": {
+ "plugins": [
+ "@babel/plugin-proposal-object-rest-spread",
+ "@babel/plugin-proposal-class-properties"
+ ],
+ "presets": [
+ [
+ "@babel/preset-env",
+ {
+ "targets": {
+ "node": "current"
+ }
+ }
+ ],
+ "@babel/preset-react"
+ ]
+ }
+}
diff --git a/src/components/Authors.js b/src/components/Authors.js
new file mode 100644
index 0000000..49997ca
--- /dev/null
+++ b/src/components/Authors.js
@@ -0,0 +1,29 @@
+import React from 'react';
+
+const Authors = ( {
+ authors,
+ displayRole = false,
+} ) =>
+ authors
+ .map( ( author, index ) =>
+ (
+
+ {author.given.trim()} {author.family.trim()}{
+ displayRole && author.role ?
+ ` (${author.role})`
+ : ''
+ }
+
+ )
+ )
+ .reduce( ( prev, curr, index ) => {
+ if ( index > 0 ) {
+ return [ prev, ', ', curr ];
+ }
+ return [ curr ];
+ }, [] );
+
+export default Authors;
diff --git a/src/components/BackCover.js b/src/components/BackCover.js
new file mode 100644
index 0000000..1b332e0
--- /dev/null
+++ b/src/components/BackCover.js
@@ -0,0 +1,65 @@
+import React from 'react';
+import MarkdownPlayer from './MarkdownPlayer';
+import Authors from './Authors';
+
+export default ( {
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ backgroundColor,
+ useAbstract = true,
+ customMarkdownContents,
+ animatedBackground,
+ customCoverFooter,
+ } = {},
+ id
+} ) => {
+ const {
+ data: editionData = {}
+ } = edition;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return (
+
+
+
{finalTitle}
+
+ {
+ finalSubtitle &&
+
+ {finalSubtitle}
+
+ }
+ {metadata.authors &&
+
+
+
+ }
+
+ {useAbstract && }
+ {customMarkdownContents && customMarkdownContents.trim().length ?
+
+ : null
+ }
+
+
+ {
+ customCoverFooter && customCoverFooter.length > 0 &&
+
+
+
+ }
+
+
+);
+};
diff --git a/src/components/BlockAssetWrapper.js b/src/components/BlockAssetWrapper.js
new file mode 100644
index 0000000..5075288
--- /dev/null
+++ b/src/components/BlockAssetWrapper.js
@@ -0,0 +1,127 @@
+/**
+ * This module exports a stateless reusable block asset wrapper component
+ * It handles the connection to context's data and builds proper data to render the asset
+ * ============
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+import MarkdownPlayer from './MarkdownPlayer';
+
+const BlockAssetWrapper = ( {
+ data
+}, context ) => {
+ const assetId = data.asset.id;
+ const contextualization = context.production && context.production.contextualizations && context.production.contextualizations[assetId];
+ if ( !contextualization ) {
+ return null;
+ }
+ const {
+ visibility = {
+ screened: true,
+ paged: true
+ }
+ } = contextualization;
+ const production = context.production || {};
+ const containerId = context.containerId;
+ const assets = context.productionAssets || {};
+ const contextualizer = production.contextualizers[contextualization.contextualizerId];
+ const resource = production.resources[contextualization.resourceId];
+ const dimensions = context.dimensions || {};
+ const fixedPresentationId = context.fixedPresentationId;
+ // const onPresentationExit = context.onPresentationExit;
+ const inNote = context.inNote;
+ const contextualizers = context.contextualizers;
+ const contextualizerModule = contextualizers[contextualizer.type];
+
+ const Component = contextualizerModule && contextualizerModule.Block;
+
+ if ( contextualization && Component ) {
+ const hide = !visibility.paged;
+ return hide ? null : (
+
+
+
+ {
+
+ {contextualization.title || resource.metadata.title}
+
+ }
+ {contextualization.legend &&
+
+
+
+ }
+
+
+
+ );
+ }
+ else {
+ return null;
+ }
+};
+
+/**
+ * Component's properties types
+ */
+BlockAssetWrapper.propTypes = {
+
+ /**
+ * Corresponds to the data initially embedded in a draft-js entity
+ */
+ data: PropTypes.shape( {
+ asset: PropTypes.shape( {
+ id: PropTypes.string
+ } )
+ } )
+};
+
+/**
+ * Component's context used properties
+ */
+BlockAssetWrapper.contextTypes = {
+
+ /**
+ * The active production data
+ */
+ production: PropTypes.object,
+
+ /**
+ * Dimensions of the wrapping element
+ */
+ dimensions: PropTypes.object,
+
+ /**
+ * Id of the presentation being displayed full screen if any
+ */
+ fixedPresentationId: PropTypes.string,
+
+ /**
+ * Whether the block asset is displayed in a note (and not in main content)
+ */
+ inNote: PropTypes.bool,
+
+ contextualizers: PropTypes.object,
+
+ productionAssets: PropTypes.object,
+
+ containerId: PropTypes.string,
+};
+
+export default BlockAssetWrapper;
diff --git a/src/components/Colophon.js b/src/components/Colophon.js
new file mode 100644
index 0000000..98b4061
--- /dev/null
+++ b/src/components/Colophon.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import MarkdownPlayer from './MarkdownPlayer';
+
+export default ( {
+ data: {
+ customText,
+ copyright,
+ issn,
+ isbn
+ } = {
+ },
+ id
+} ) => {
+
+ return (
+
+
+ {
+ customText && customText.length > 0 &&
+
+
+
+ }
+ {
+ copyright && copyright.length > 0 &&
+
+
+
+ }
+ {
+ isbn && isbn.length > 0 &&
+
+ ISBN {isbn}
+
+ }
+ {
+ issn && issn.length > 0 &&
+
+ ISSN {issn}
+
+ }
+
+
+
+
+ );
+};
diff --git a/src/components/DefaultLinkComponent.js b/src/components/DefaultLinkComponent.js
new file mode 100644
index 0000000..0a773c3
--- /dev/null
+++ b/src/components/DefaultLinkComponent.js
@@ -0,0 +1,20 @@
+import React from 'react';
+
+export default ( {
+ href,
+ target,
+ children,
+ className,
+ id,
+ style,
+} ) => (
+
+ {children}
+
+);
diff --git a/src/components/DefaultMentionComponent.js b/src/components/DefaultMentionComponent.js
new file mode 100644
index 0000000..34640be
--- /dev/null
+++ b/src/components/DefaultMentionComponent.js
@@ -0,0 +1,20 @@
+import React from 'react';
+
+export default ( {
+ href,
+ target,
+ // children,
+ className,
+ id,
+ style,
+} ) => (
+
+ p.
+
+);
diff --git a/src/components/DefaultSectionLinkComponent.js b/src/components/DefaultSectionLinkComponent.js
new file mode 100644
index 0000000..1e73e85
--- /dev/null
+++ b/src/components/DefaultSectionLinkComponent.js
@@ -0,0 +1,28 @@
+import React from 'react';
+
+export default ( {
+ sectionId,
+ target,
+ children,
+ className,
+ id,
+ style,
+} ) => (
+
+ {children}
+ (
+ p. {
+
+ }
+ )
+
+);
diff --git a/src/components/EndNotes.js b/src/components/EndNotes.js
new file mode 100644
index 0000000..26bc69f
--- /dev/null
+++ b/src/components/EndNotes.js
@@ -0,0 +1,59 @@
+import React from 'react';
+
+import Renderer from './Renderer';
+import { ReferencesManager } from 'react-citeproc';
+
+export default ( {
+ production: {
+ sections
+ },
+ sectionsIds: sectionsOrder,
+ translate,
+ title,
+ citations,
+ citationStyle,
+ citationLocale,
+ id,
+} ) => (
+
+
+ {title || translate( 'Notes' )}
+
+ {
+ sectionsOrder.reduce( ( results, sectionId ) =>
+ results.concat(
+ Object.keys( sections[sectionId].notes )
+ .map( ( thatId ) => sections[sectionId].notes[thatId] )
+ )
+ , [] )
+ .map( ( note, index ) => {
+ return (
+
+
+ {index + 1}
+
+
+
+ );
+ } )
+ }
+
+
+
+);
diff --git a/src/components/Footnote.js b/src/components/Footnote.js
new file mode 100644
index 0000000..f598ac7
--- /dev/null
+++ b/src/components/Footnote.js
@@ -0,0 +1,72 @@
+/**
+ * This module exports a stateless reusable note pointer component
+ * ============
+ * @module quinoa-production-player/components/NotePointer
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+
+import Renderer from './FootnoteRenderer';
+
+/**
+ * Renders a not pointer as a pure component
+ * @param {object} props
+ * @param {array} props.children - children elements of the component
+ * @param {array} props.noteId - the id of the note to point to
+ * @param {object} context - the context data of the component
+ * @return {ReactElement} component - the component
+ */
+const Footnote = ( {
+ // children,
+ noteId = '',
+ notesPosition
+}, context ) => {
+ const notes = context.notes;
+ if ( notes ) {
+ const note = notes[noteId];
+ if ( note ) {
+ return (
+
+
+
+
+
+ );
+ }
+ return null;
+ }
+ return null;
+};
+
+/**
+ * Component's properties types
+ */
+Footnote.propTypes = {
+
+ /**
+ * Children react components
+ */
+ children: PropTypes.array,
+
+ /**
+ * id of the note to render
+ */
+ noteId: PropTypes.string,
+};
+
+/**
+ * Component's context used properties
+ */
+Footnote.contextTypes = {
+
+ /**
+ * Map of available notes to look into
+ */
+ notes: PropTypes.object,
+};
+
+export default Footnote;
diff --git a/src/components/FootnoteRenderer.js b/src/components/FootnoteRenderer.js
new file mode 100644
index 0000000..ef651fa
--- /dev/null
+++ b/src/components/FootnoteRenderer.js
@@ -0,0 +1,279 @@
+/**
+ * This module exports a statefull reusable draft-js raw-to-react renderer component
+ * It wrapps around the redraft engine that converts draft-s raw to a react representation,
+ * providing it specific settings and callbacks.
+ */
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import redraft from 'redraft';
+import { constants } from 'peritext-schemas';
+
+import Link from './Link';
+import BlockAssetWrapper from './BlockAssetWrapper';
+import InlineAssetWrapper from './InlineAssetWrapper';
+import InternalLink from './InternalLink';
+
+/*
+ * import NotePointer from './NotePointer';
+ * import Footnote from './Footnote';
+ */
+const {
+ LINK,
+ BLOCK_ASSET,
+ INLINE_ASSET,
+ SECTION_POINTER,
+} = constants.draftEntitiesNames;
+
+// just a helper to add a after each block
+const addBreaklines = ( children ) => children.map( ( child, index ) => [ child, ] );
+
+/**
+ * Define the renderers
+ */
+const renderers = {
+
+ /**
+ * Those callbacks will be called recursively to render a nested structure
+ */
+ inline: {
+ // The key passed here is just an index based on rendering order inside a block
+ BOLD: ( children, { key } ) => {children} ,
+ ITALIC: ( children, { key } ) => {children} ,
+ UNDERLINE: ( children, { key } ) => {children} ,
+ CODE: ( children, { key } ) => {children} ,
+ },
+
+ /**
+ * Blocks receive children and depth
+ * Note that children are an array of blocks with same styling,
+ */
+ blocks: {
+ 'unstyled': ( children ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'blockquote': ( children ) => {addBreaklines( children )} ,
+ 'header-one': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-two': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-three': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-four': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-five': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-six': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+
+ // You can also access the original keys of the blocks
+ 'code-block': ( children, { keys } ) => (
+
+ {addBreaklines( children )}
+
+ ),
+ // or depth for nested lists
+ 'unordered-list-item': ( children, { depth, keys } ) => (
+
+ {
+ children.map( ( child, index ) => (
+
+ {child}
+
+ ) )
+ }
+ ),
+ 'ordered-list-item': ( children, { depth, keys } ) => (
+
+ {
+ children.map( ( child, index ) => (
+
+ {child}
+
+ ) )
+ }
+
+ ),
+
+ /*
+ * If your blocks use meta data it can also be accessed like keys
+ * atomic: (children, { keys, data }) => children.map((child, i) => {child} ),
+ */
+ },
+
+ /**
+ * Entities receive children and the entity data
+ */
+ entities: {
+ // // key is the entity key value from raw
+ [LINK]: ( children, data, { key } ) =>
+ (
+
+ {children}
+
+ ),
+ [BLOCK_ASSET]: ( children, data, { key } ) => {
+ return (
+
+ );
+ },
+ [INLINE_ASSET]: ( children, data, { key } ) => {
+ return (
+
+ {children}
+
+ );
+ },
+ [SECTION_POINTER]: ( children, data, { key } ) => {
+ return (
+
+ {children}
+
+ );
+ },
+ },
+};
+
+/**
+ * Renderer class for building raw-to-react rendering react component instances
+ */
+class Renderer extends Component {
+
+ /**
+ * constructor
+ * @param {object} props - properties given to instance at instanciation
+ */
+ constructor ( props ) {
+ super( props );
+ }
+
+ /**
+ * Determines whether to update the component or not
+ * @param {object} nextProps - the future properties of the component
+ * @return {boolean} shouldUpdate - yes or no
+ */
+ shouldComponentUpdate( ) {
+ return true;
+ // return this.props.raw !== nextProps.raw;
+ }
+
+ /**
+ * Displays something when no suitable content state is provided to the renderer
+ * @return {ReactElement} default message
+ */
+ renderWarning() {
+ return
;
+ }
+
+ /**
+ * Renders the component
+ * @return {ReactElement} component - the component
+ */
+ render() {
+ const {
+ raw,
+ } = this.props;
+ if ( !raw ) {
+ return this.renderWarning();
+ }
+ const rendered = redraft( raw, renderers );
+ // redraft can return a null if there's nothing to render
+ if ( !rendered ) {
+ return this.renderWarning();
+ }
+ return (
+
+ {rendered}
+
+ );
+ }
+}
+
+/**
+ * Component's properties types
+ */
+Renderer.propTypes = {
+
+ /**
+ * Draft-js raw representation of some contents
+ * see https://draftjs.org/docs/api-reference-data-conversion.html
+ */
+ raw: PropTypes.object
+};
+
+export default Renderer;
diff --git a/src/components/FrontCover.js b/src/components/FrontCover.js
new file mode 100644
index 0000000..ea86c36
--- /dev/null
+++ b/src/components/FrontCover.js
@@ -0,0 +1,56 @@
+import React from 'react';
+import MarkdownPlayer from './MarkdownPlayer';
+import Authors from './Authors';
+
+export default ( {
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ backgroundColor,
+ customCoverFooter,
+ animatedBackground,
+ } = {},
+ id
+} ) => {
+ const {
+ data: editionData = {}
+ } = edition;
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return (
+
+
+
+ {finalTitle}
+
+ {
+ finalSubtitle &&
+
{finalSubtitle}
+ }
+
+ {
+ metadata.authors &&
+
+ }
+
+
+ {
+ customCoverFooter && customCoverFooter.length > 0 &&
+
+
+
+ }
+
+ );
+};
diff --git a/src/components/Glossary.js b/src/components/Glossary.js
new file mode 100644
index 0000000..9ae9443
--- /dev/null
+++ b/src/components/Glossary.js
@@ -0,0 +1,205 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { ReferencesManager } from 'react-citeproc';
+
+import MarkdownPlayer from './MarkdownPlayer';
+
+import {
+ buildContextContent,
+ getContextualizationsFromEdition
+} from 'peritext-utils';
+
+const buildGlossary = ( {
+ production,
+ edition,
+ options
+} ) => {
+ const {
+ contextualizers,
+ resources
+ } = production;
+
+ const {
+ showUncited = false,
+ glossaryTypes = [ 'person', 'place', 'event', 'notion', 'other' ]
+ } = options;
+
+ let items;
+ const usedContextualizations = getContextualizationsFromEdition( production, edition );
+ if ( showUncited ) {
+ items = Object.keys( production.resources )
+ .filter( ( resourceId ) => production.resources[resourceId].metadata.type === 'glossary' )
+ .map( ( resourceId ) => production.resources[resourceId] )
+ .map( ( resource ) => {
+ return {
+ resource,
+ mentions: usedContextualizations.filter( ( c ) => c.contextualization.resourceId === resource.id )
+ };
+ } );
+ }
+ else {
+ items = usedContextualizations
+ .filter( ( element ) => {
+ const contextualization = element.contextualization;
+ const contextualizerId = contextualization.contextualizerId;
+ const contextualizer = contextualizers[contextualizerId];
+ return contextualizer && contextualizer.type === 'glossary';
+ } )
+ .map( ( element ) => {
+ const contextualization = element.contextualization;
+ return {
+ ...contextualization,
+ contextualizer: contextualizers[contextualization.contextualizerId],
+ resource: resources[contextualization.resourceId],
+ contextContent: buildContextContent( production, contextualization.id ),
+ containerId: element.containerId,
+ };
+ } )
+ .reduce( ( entries, contextualization ) => {
+ return {
+ ...entries,
+ [contextualization.resourceId]: {
+ resource: contextualization.resource,
+ mentions: entries[contextualization.resourceId] ?
+ entries[contextualization.resourceId].mentions.concat( contextualization )
+ : [ contextualization ]
+ }
+ };
+ }, {} );
+ items = Object.keys( items ).map( ( resourceId ) => ( {
+ resource: items[resourceId].resource,
+ mentions: items[resourceId].mentions
+ } ) );
+ }
+
+ const glossaryMentions = items
+ .filter( ( item ) => {
+ return glossaryTypes.includes( item.resource.data.entryType );
+ } )
+ .sort( ( a, b ) => {
+ if ( a.resource.data.name.toLowerCase() > b.resource.data.name.toLowerCase() ) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+ } );
+
+ return glossaryMentions;
+};
+
+const Glossary = ( {
+ production,
+ edition,
+ translate,
+ citations,
+ citationStyle,
+ citationLocale,
+ id,
+ data = {
+ showMentions: true,
+ showDescriptions: true,
+ },
+ // LinkComponent: propLinkComponent,
+ MentionComponent: propMentionComponent,
+}, {
+ // LinkComponent: contextLinkComponent,
+ MentionComponent: contextMentionComponent,
+} ) => {
+ // const LinkComponent = propLinkComponent || contextLinkComponent;
+ const MentionComponent = propMentionComponent || contextMentionComponent;
+ const {
+ showMentions,
+ customTitle,
+ showDescriptions,
+ } = data;
+ const glossary = buildGlossary( { options: data, production, edition } );
+ return (
+
+
+ {customTitle || translate( 'Glossary list' )}
+
+
+ {
+ glossary.map( ( entry, index ) => {
+ // const entryName = entry.title;
+ return (
+
+
+ {entry.resource.data.name}
+
+ {showDescriptions &&
+
+
+
+ }
+ {showMentions && entry.mentions.length > 0 &&
+
+ {
+ entry.mentions
+ .filter( ( mention ) => mention !== undefined && mention.contextContent )
+ .map( ( mention, count ) => {
+ const {
+ contextContent: {
+
+ /*
+ * targetContents,
+ * contents,
+ * sectionTitle,
+ */
+ sectionId,
+ },
+ id: thatId,
+ containerId,
+ } = mention;
+
+ return (
+
+ );
+ } )
+ .reduce( ( prev, curr, thatIndex ) => {
+ return thatIndex > 0 ? [ prev, ', ', curr ] : [ curr ];
+ }, [] )
+ }
+
+ }
+
+ );
+ } )
+ }
+
+
+
+ );
+};
+
+Glossary.contextTypes = {
+ LinkComponent: PropTypes.func,
+ MentionComponent: PropTypes.func,
+};
+
+export default Glossary;
diff --git a/src/components/Head.js b/src/components/Head.js
new file mode 100644
index 0000000..5ed630e
--- /dev/null
+++ b/src/components/Head.js
@@ -0,0 +1,111 @@
+import React from 'react';
+import { Helmet } from 'react-helmet';
+
+export default ( {
+ pageTitle,
+ authors = [],
+ tags = [],
+ description = '',
+ url = ''
+} ) => {
+ const authorsStr = authors.map( ( author ) => `${author.given } ${ author.family}` ).join( ', ' );
+ return (
+
+ {pageTitle}
+
+ {/**/}
+
+
+ {
+ // tags.map((thatTag, index) => )
+ }
+ {/**/}
+
+ {/**/}
+
+
+
+
+ {/**/}
+
+ {/**/}
+
+
+
+
+ {/**/}
+ {/* */}
+ {/**/}
+
+ {/**/}
+
+
+ {/* */}
+ {/**/}
+
+ {/**/}
+
+
+
+
+
+ {/*
+
+ */}
+ {/**/}
+
+ );
+};
diff --git a/src/components/InlineAssetWrapper.js b/src/components/InlineAssetWrapper.js
new file mode 100644
index 0000000..27752cd
--- /dev/null
+++ b/src/components/InlineAssetWrapper.js
@@ -0,0 +1,77 @@
+
+import React from 'react';
+import PropTypes from 'prop-types';
+
+const InlineAssetWrapper = ( {
+ data,
+ children
+}, context ) => {
+ const { production, containerId } = context;
+ const assetId = data.asset && data.asset.id;
+ if ( !assetId || !production ) {
+ return null;
+ }
+ const contextualization = production.contextualizations[assetId];
+ if ( !contextualization ) {
+ return null;
+ }
+
+ const contextualizer = production.contextualizers[contextualization.contextualizerId];
+ const resource = production.resources[contextualization.resourceId];
+
+ const contextualizers = context.contextualizers;
+ const contextualizerModule = contextualizers[contextualizer.type];
+
+ const Component = contextualizerModule && contextualizerModule.Inline;
+ if ( contextualizer && Component ) {
+
+ /**
+ * @todo this is a fix for a rendering bug
+ */
+ if ( contextualizer.type === 'glossary' ) {
+ return children;
+ }
+ return (
+
+
+ {children}
+
+
+ );
+ }
+ return null;
+};
+
+/**
+ * Component's properties types
+ */
+InlineAssetWrapper.propTypes = {
+
+ /**
+ * Corresponds to the data initially embedded in a draft-js entity
+ */
+ data: PropTypes.shape( {
+ asset: PropTypes.shape( {
+ id: PropTypes.string
+ } )
+ } )
+};
+
+/**
+ * Component's context used properties
+ */
+InlineAssetWrapper.contextTypes = {
+ production: PropTypes.object,
+ contextualizers: PropTypes.object,
+ containerId: PropTypes.string,
+};
+
+export default InlineAssetWrapper;
diff --git a/src/components/InternalLink.js b/src/components/InternalLink.js
new file mode 100644
index 0000000..9fc2d73
--- /dev/null
+++ b/src/components/InternalLink.js
@@ -0,0 +1,25 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+const InternalLink = ( { sectionId, children }, { containerId } ) => (
+
+ {children}
+ {'('}
+
+ {'p'}
+
+ {')'}
+
+);
+
+InternalLink.contextTypes = {
+ containerId: PropTypes.string
+};
+
+export default InternalLink;
diff --git a/src/components/Link.js b/src/components/Link.js
new file mode 100644
index 0000000..c9542fa
--- /dev/null
+++ b/src/components/Link.js
@@ -0,0 +1,45 @@
+/**
+ * This module exports a stateless reusable external link component
+ * ============
+ * @module perinext/components/Link
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+
+/**
+ * Renders a link as a pure component
+ * @param {object} props
+ * @param {string} props.to - the url to point to
+ * @param {array} props.children - children elements of the component
+ * @return {ReactElement} component - the component
+ */
+const Link = ( {
+ to,
+ children
+} ) => (
+
+ {children}
+
+);
+
+/**
+ * Component's properties types
+ */
+Link.propTypes = {
+
+ /**
+ * url to point to
+ */
+ children: PropTypes.array,
+
+ /**
+ * children react elements
+ */
+ to: PropTypes.string
+};
+
+export default Link;
diff --git a/src/components/MarkdownPlayer.js b/src/components/MarkdownPlayer.js
new file mode 100644
index 0000000..08c7095
--- /dev/null
+++ b/src/components/MarkdownPlayer.js
@@ -0,0 +1,4 @@
+import React from 'react';
+import Player from 'react-markdown';
+
+export default ( { src = '' } ) => ;
diff --git a/src/components/NotePointer.js b/src/components/NotePointer.js
new file mode 100644
index 0000000..0866bf2
--- /dev/null
+++ b/src/components/NotePointer.js
@@ -0,0 +1,84 @@
+/**
+ * This module exports a stateless reusable note pointer component
+ * ============
+ * @module quinoa-production-player/components/NotePointer
+ */
+import React from 'react';
+import PropTypes from 'prop-types';
+
+/**
+ * Renders a note pointer as a pure component
+ * @param {object} props
+ * @param {array} props.children - children elements of the component
+ * @param {array} props.noteId - the id of the note to point to
+ * @param {object} context - the context data of the component
+ * @return {ReactElement} component - the component
+ */
+const NotePointer = ( {
+ children,
+ noteId = ''
+}, context ) => {
+ const notes = context.notes;
+ const NoteLinkComponent = context.NoteLinkComponent;
+ if ( notes ) {
+ const note = notes[noteId];
+ if ( note ) {
+ return (
+
+ {NoteLinkComponent ?
+
+ {note.order}
+ {children}
+
+ :
+
+ {note.order}
+ {children}
+
+ }
+
+ );
+ }
+ return null;
+ }
+ return null;
+};
+
+/**
+ * Component's properties types
+ */
+NotePointer.propTypes = {
+
+ /**
+ * Children react components
+ */
+ children: PropTypes.array,
+
+ /**
+ * id of the note to render
+ */
+ noteId: PropTypes.string,
+};
+
+/**
+ * Component's context used properties
+ */
+NotePointer.contextTypes = {
+
+ /**
+ * Map of available notes to look into
+ */
+ notes: PropTypes.object,
+
+ /**
+ * Triggers a callback upstream when the pointer is clicked
+ */
+ onNoteContentPointerClick: PropTypes.func,
+
+ NoteLinkComponent: PropTypes.func,
+};
+
+export default NotePointer;
diff --git a/src/components/References.js b/src/components/References.js
new file mode 100644
index 0000000..4ad3899
--- /dev/null
+++ b/src/components/References.js
@@ -0,0 +1,314 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import uniq from 'lodash/uniq';
+import { ReferencesManager, makeBibliography } from 'react-citeproc';
+
+import {
+ buildContextContent,
+ getContextualizationsFromEdition,
+ resourceToCslJSON
+} from 'peritext-utils';
+
+/**
+ * Builds an interactive bibliography for a given edition
+ * @returns {ReactMarkup}
+ */
+function buildBibliography ( {
+ production,
+ edition,
+ citations,
+ contextualizations,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending,
+} ) {
+
+ const {
+
+ /*
+ * contextualizations,
+ * contextualizers,
+ */
+ resources
+ } = production;
+
+ /**
+ * Select relevant resources
+ */
+ // filter cited references only
+ let citedResourcesIds = showUncitedReferences ?
+ Object.keys( resources )
+ :
+ uniq(
+ contextualizations.map( ( element ) => {
+ const contextualization = element.contextualization;
+ return contextualization.resourceId;
+ } )
+ );
+ // filter by type of resource
+ citedResourcesIds = citedResourcesIds.filter( ( resourceId ) => {
+ const type = resources[resourceId].metadata.type;
+ return resourceTypes.includes( type );
+ } );
+
+ let items = citedResourcesIds.map( ( resourceId ) => {
+ const cit = resourceToCslJSON( resources[resourceId] );
+ const citationKey = cit && cit[0] && cit[0].id;
+ const mentions = contextualizations.map( ( element ) => {
+ if ( element.contextualization.resourceId === resourceId ) {
+ return {
+ ...element,
+ id: element.contextualization.id
+ };
+ }
+ } ).filter( ( s ) => s );
+
+ let biblio;
+ if ( citations.citationItems[citationKey] ) {
+ biblio = makeBibliography(
+ citations.citationItems,
+ edition.data.citationStyle.data,
+ edition.data.citationLocale.data,
+ {
+ select: [ {
+ field: 'id',
+ value: citationKey
+ } ]
+ }
+ );
+ }
+ else {
+ biblio = makeBibliography(
+ { [resourceId]: { ...cit[0], id: resourceId } },
+ edition.data.citationStyle.data,
+ edition.data.citationLocale.data,
+ {
+ select: [ {
+ field: 'id',
+ value: resourceId
+ } ]
+ }
+ );
+ }
+ const title = biblio && biblio[1] && biblio[1][0];
+ return {
+ citationKey,
+ title,
+ item: citations.citationItems[citationKey] || cit[0],
+ mentions: mentions.map( ( mention ) => ( {
+ ...mention,
+ contextContent: buildContextContent( production, mention.id )
+ } ) )
+ };
+ } );
+
+ items = items.sort( ( a, b ) => {
+ switch ( sortingKey ) {
+ case 'date':
+ const datePartsA = a.item.issued && a.item.issued['date-parts'];
+ const datePartsB = b.item.issued && b.item.issued['date-parts'];
+ if ( datePartsA && datePartsB && datePartsA.length && datePartsB.length ) {
+
+ if ( datePartsA[0] > datePartsB[0] ) {
+ return 1;
+ }
+ else if ( datePartsA[0] < datePartsB[0] ) {
+ return -1;
+ }
+ else if ( datePartsA.length > 1 && datePartsB.length > 1 ) {
+ if ( datePartsA[1] > datePartsB[1] ) {
+ return 1;
+ }
+ else if ( datePartsA[1] < datePartsB[1] ) {
+ return -1;
+ }
+ else return 0;
+ }
+ else {
+ return 0;
+ }
+
+ }
+ else if ( !datePartsB || ( datePartsB && !datePartsB.length ) ) {
+ return -1;
+ }
+ else if ( !datePartsA || ( datePartsA && !datePartsA.length ) ) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ case 'authors':
+ if ( a.item.author && b.item.author ) {
+ const authorsA = a.item.author && a.item.author.map( ( author ) => `${author.family}-${author.given}`.toLowerCase() ).join( '' );
+ const authorsB = b.item.author && b.item.author.map( ( author ) => `${author.family}-${author.given}`.toLowerCase() ).join( '' );
+ if ( authorsA > authorsB ) {
+ return 1;
+ }
+ else return -1;
+ }
+ else if ( !b.item.author ) {
+ return -1;
+ }
+ else if ( !a.item.author ) {
+ return 1;
+ }
+ else return 0;
+ case 'title':
+ if ( a.item.title.toLowerCase() > b.item.title.toLowerCase() ) {
+ return 1;
+ }
+ return -1;
+ default:
+ break;
+ }
+ } );
+ if ( !sortingAscending ) {
+ items = items.reverse();
+ }
+
+ return items;
+}
+
+const References = ( {
+ production,
+ edition,
+ translate,
+ data = {
+ showMentions: true,
+ showUncitedReferences: false,
+ resourceTypes: [ 'bib' ],
+ sortingKey: 'authors',
+ sortingAscending: true,
+ },
+
+ citations,
+ citationStyle,
+ citationLocale,
+
+ id,
+ // LinkComponent: propLinkComponent,
+ MentionComponent: propMentionComponent,
+}, {
+ // LinkComponent: contextLinkComponent,
+ MentionComponent: contextMentionComponent,
+} ) => {
+ const {
+ showMentions,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending,
+ customTitle,
+ } = data;
+ // const LinkComponent = propLinkComponent || contextLinkComponent;
+ const MentionComponent = propMentionComponent || contextMentionComponent;
+
+ /**
+ * @todo compute citations based on edition
+ */
+ const contextualizations = getContextualizationsFromEdition( production, edition );
+ const references = buildBibliography( {
+ production,
+ edition,
+ citations,
+ contextualizations,
+ showUncitedReferences,
+ resourceTypes,
+ sortingKey,
+ sortingAscending,
+ } );
+ return (
+
+
+
+ {customTitle || translate( 'References' )}
+
+
+ {
+ references.map( ( entry, index ) => {
+ const entryName = entry.title;
+ return (
+
+
+ {
+ showMentions &&
+ entry.mentions
+ .find( ( mention ) => mention && mention.contextContent )
+ &&
+
+
+ {
+ entry.mentions
+ .filter( ( mention ) => mention !== undefined && mention.contextContent )
+ .map( ( mention, count ) => {
+ const {
+ contextContent: {
+
+ /*
+ * targetContents,
+ * contents,
+ * sectionTitle,
+ */
+ sectionId,
+ },
+ id: thatId,
+ containerId,
+ } = mention;
+ return (
+
+ );
+ } )
+ .reduce( ( prev, curr, thatIndex ) => {
+ if ( thatIndex === 0 ) {
+ return [ curr ];
+ }
+ return [ prev, ', ', curr ];
+ }, [] )
+ }
+
+ }
+
+ );
+ } )
+ }
+
+
+
+ );
+};
+
+References.contextTypes = {
+ LinkComponent: PropTypes.func,
+ MentionComponent: PropTypes.func,
+};
+
+export default References;
diff --git a/src/components/Renderer.js b/src/components/Renderer.js
new file mode 100644
index 0000000..7194e21
--- /dev/null
+++ b/src/components/Renderer.js
@@ -0,0 +1,286 @@
+/**
+ * This module exports a statefull reusable draft-js raw-to-react renderer component
+ * It wrapps around the redraft engine that converts draft-s raw to a react representation,
+ * providing it specific settings and callbacks.
+ */
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import redraft from 'redraft';
+import { constants } from 'peritext-schemas';
+
+import Link from './Link';
+import BlockAssetWrapper from './BlockAssetWrapper';
+import InlineAssetWrapper from './InlineAssetWrapper';
+import NotePointer from './NotePointer';
+import Footnote from './Footnote';
+import InternalLink from './InternalLink';
+const {
+ LINK,
+ BLOCK_ASSET,
+ INLINE_ASSET,
+ SECTION_POINTER,
+ NOTE_POINTER,
+} = constants.draftEntitiesNames;
+
+// just a helper to add a after each block
+const addBreaklines = ( children ) => children.map( ( child, index ) => [ child, ] );
+
+/**
+ * Define the renderers
+ */
+const renderers = {
+
+ /**
+ * Those callbacks will be called recursively to render a nested structure
+ */
+ inline: {
+ // The key passed here is just an index based on rendering order inside a block
+ BOLD: ( children, { key } ) => {children} ,
+ ITALIC: ( children, { key } ) => {children} ,
+ UNDERLINE: ( children, { key } ) => {children} ,
+ CODE: ( children, { key } ) => {children} ,
+ },
+
+ /**
+ * Blocks receive children and depth
+ * Note that children are an array of blocks with same styling,
+ */
+ blocks: {
+ 'unstyled': ( children ) => children.map( ( child, index ) =>
+ (
+
+ {child}
+
+ ) ),
+ 'blockquote': ( children, index ) => {addBreaklines( children )} ,
+ 'header-one': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-two': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-three': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-four': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-five': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+ 'header-six': ( children, { keys } ) => children.map( ( child, index ) => (
+
+ {child}
+
+ ) ),
+
+ // You can also access the original keys of the blocks
+ 'code-block': ( children, { keys } ) =>
+ {addBreaklines( children )} ,
+ // or depth for nested lists
+ 'unordered-list-item': ( children, { depth, keys } ) => (
+
+ {
+ children.map(
+ ( child, index ) =>
+ {child}
+ )
+ }
+
+ ),
+ 'ordered-list-item': ( children, { depth, keys } ) => (
+
+ {
+ children.map(
+ ( child, index ) =>
+ {child}
+ )
+ }
+
+ ),
+
+ /*
+ * If your blocks use meta data it can also be accessed like keys
+ * atomic: (children, { keys, data }) => children.map((child, i) => {child} ),
+ */
+ },
+
+ /**
+ * Entities receive children and the entity data
+ */
+ entities: {
+ // // key is the entity key value from raw
+ [LINK]: ( children, data, { key } ) =>
+ (
+
+ {children}
+
+ ),
+ [BLOCK_ASSET]: ( children, data, { key } ) => {
+ return (
+
+ );
+ },
+ [INLINE_ASSET]: ( children, data, { key } ) => {
+ return (
+
+ {children}
+
+ );
+ },
+ [SECTION_POINTER]: ( children, data, { key } ) => {
+ return (
+
+ {children}
+
+ );
+ },
+ [NOTE_POINTER]: ( children, data, { key } ) => {
+ return (
+
+ );
+ }
+ },
+};
+
+/**
+ * Renderer class for building raw-to-react rendering react component instances
+ */
+class Renderer extends Component {
+
+ /**
+ * constructor
+ * @param {object} props - properties given to instance at instanciation
+ */
+ constructor ( props ) {
+ super( props );
+ }
+
+ getChildContext = () => ( {
+ containerId: this.props.containerId,
+ } )
+
+ /**
+ * Determines whether to update the component or not
+ * @param {object} nextProps - the future properties of the component
+ * @return {boolean} shouldUpdate - yes or no
+ */
+ shouldComponentUpdate( ) {
+ return true;
+ }
+
+ /**
+ * Displays something when no suitable content state is provided to the renderer
+ * @return {ReactElement} default message
+ */
+ renderWarning() {
+ return
;
+ }
+
+ /**
+ * Renders the component
+ * @return {ReactElement} component - the component
+ */
+ render() {
+ const {
+ raw,
+ notesPosition,
+ } = this.props;
+ if ( !raw ) {
+ return this.renderWarning();
+ }
+ if ( notesPosition === 'footnotes' || notesPosition === 'sidenotes' ) {
+ renderers.entities.NOTE_POINTER = ( children, data, { key } ) => {
+ return (
+
+ );
+ };
+ }
+ const rendered = redraft( raw, renderers );
+ // redraft can return a null if there's nothing to render
+ if ( !rendered ) {
+ return this.renderWarning();
+ }
+ return (
+
+ {rendered}
+
+ );
+ }
+}
+
+/**
+ * Component's properties types
+ */
+Renderer.propTypes = {
+
+ /**
+ * Draft-js raw representation of some contents
+ * see https://draftjs.org/docs/api-reference-data-conversion.html
+ */
+ raw: PropTypes.object
+};
+
+Renderer.childContextTypes = {
+ containerId: PropTypes.string,
+};
+
+export default Renderer;
diff --git a/src/components/Section.js b/src/components/Section.js
new file mode 100644
index 0000000..4d23c1b
--- /dev/null
+++ b/src/components/Section.js
@@ -0,0 +1,93 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { ReferencesManager } from 'react-citeproc';
+
+import Renderer from './Renderer';
+import EndNotes from './EndNotes';
+import Authors from './Authors';
+
+class Section extends Component {
+ constructor( props ) {
+ super( props );
+
+ }
+
+ getChildContext = () => ( {
+ notes: this.props.section.notes
+ } )
+
+ render = () => {
+ const {
+ citations,
+ citationStyle,
+ citationLocale,
+ section: {
+ id,
+ metadata: {
+ title,
+ subtitle,
+ authors = [],
+ },
+ contents,
+ },
+ containerId,
+ notesPosition,
+ production,
+ translate,
+ publicationTitle,
+ publicationSubtitle,
+ } = this.props;
+ return (
+
+
+ {title}
+ {title}
+ {publicationTitle}
+
+ {subtitle && {subtitle} }
+ {
+ authors.length > 0 &&
+
+
+
+ }
+
+ {
+ notesPosition === 'endOfSections' &&
+
+ }
+
+
+ );
+ }
+}
+
+export default Section;
+
+Section.childContextTypes = {
+ notes: PropTypes.object,
+};
diff --git a/src/components/TableOfContents.js b/src/components/TableOfContents.js
new file mode 100644
index 0000000..58cfeb6
--- /dev/null
+++ b/src/components/TableOfContents.js
@@ -0,0 +1,56 @@
+import React from 'react';
+
+const TocElement = ( {
+ title,
+ href,
+ level = 0,
+} ) => (
+
+
+ {title}
+
+
+ p.
+
+
+);
+
+export default ( {
+ tableOfContents,
+ data: {
+ customTitle,
+ displayPageNumber
+ } = {},
+ translate
+} ) => (
+
+ {
+ customTitle && customTitle.trim().length ?
+ customTitle
+ :
+ translate( 'Table of contents' )
+ }
+
+
+ {
+ tableOfContents.map( ( item, index ) => {
+ return (
+
+ );
+ } )
+ }
+
+
+);
diff --git a/src/components/TitlePage.js b/src/components/TitlePage.js
new file mode 100644
index 0000000..2dd592a
--- /dev/null
+++ b/src/components/TitlePage.js
@@ -0,0 +1,52 @@
+import React from 'react';
+import MarkdownPlayer from './MarkdownPlayer';
+import Authors from './Authors';
+
+export default ( {
+ production: {
+ metadata
+ },
+ edition,
+ data: {
+ customCoverFooter
+ } = {
+ },
+ id
+} ) => {
+ const {
+ data: editionData = {}
+ } = edition;
+
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+ return (
+
+
+
+ {finalTitle}
+
+ {
+ finalSubtitle &&
+
{finalSubtitle}
+ }
+
+ {
+ metadata.authors &&
+
+ }
+
+
+ {
+ customCoverFooter && customCoverFooter.length > 0 &&
+
+
+
+ }
+
+ );
+};
diff --git a/src/components/Wrapper.js b/src/components/Wrapper.js
new file mode 100644
index 0000000..b4bbe16
--- /dev/null
+++ b/src/components/Wrapper.js
@@ -0,0 +1,447 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+import { buildCitations } from 'peritext-utils';
+
+import FrontCover from './FrontCover';
+import TitlePage from './TitlePage';
+import BackCover from './BackCover';
+import Colophon from './Colophon';
+import References from './References';
+import Glossary from './Glossary';
+import EndNotes from './EndNotes';
+import DefaultLinkComponent from './DefaultLinkComponent';
+import DefaultMentionComponent from './DefaultMentionComponent';
+import DefaultSectionLinkComponent from './DefaultSectionLinkComponent';
+import MarkdownPlayer from './MarkdownPlayer';
+import TableOfContents from './TableOfContents';
+
+import Section from './Section';
+
+import templateStyle from '../defaultStyle';
+
+const EmptyPage = () => (
+
+);
+
+const updateStyles = ( props ) => {
+ const {
+ edition: {
+ data = {}
+ },
+ contextualizers = {},
+ } = props;
+
+ const {
+ style: {
+ css = '',
+ mode = 'merge',
+ } = { css: '' }
+ } = data;
+
+ const contextualizersStyles = Object.keys( contextualizers )
+ .map( ( type ) => contextualizers[type] && contextualizers[type].defaultCss || '' )
+ .join( '\n' );
+ if ( mode === 'merge' ) {
+
+ return [
+ templateStyle,
+ // templateStylesheet,
+ contextualizersStyles,
+ css
+ ]
+ .join( '\n' );
+ }
+ else { // styleMode === 'replace'
+ return [
+ // templateStylesheet,
+ contextualizersStyles,
+ css
+ ]
+ .join( '\n' );
+ }
+
+ };
+
+/**
+ * @todo externalize
+ */
+const buildToc = ( production, edition, translate ) => {
+ const summary = edition.data.plan.summary;
+ // returns [{level, title, href}]
+ return summary.reduce( ( res, element ) => {
+ const {
+ data = {}
+ } = element;
+ switch ( element.type ) {
+ case 'customPage':
+ const { title, displayInTableOfContents } = data;
+ if ( displayInTableOfContents ) {
+ return [
+ ...res,
+ {
+ title,
+ level: 0,
+ href: `custom-block-${element.id}`
+ }
+ ];
+ }
+ return res;
+ case 'sections':
+ const { id } = element;
+ const { customSummary = { active: false } } = data;
+ if ( customSummary.active ) {
+ const { summary: thatCustomSummary } = customSummary;
+ return [
+ ...res,
+ ...thatCustomSummary.map( ( el ) => {
+ const thatSection = production.sections[el.id];
+ return {
+ title: thatSection && thatSection.metadata.title,
+ level: el.level,
+ href: `section-${id}-${el.id}`
+ };
+ } )
+ .filter( ( s ) => s )
+ ];
+ }
+ return [
+ ...res,
+ ...production.sectionsOrder.map( ( sectionId ) => {
+ const thatSection = production.sections[sectionId];
+ return {
+ title: thatSection && thatSection.metadata.title,
+ level: thatSection && thatSection.metadata.level || 0,
+ href: `section-${id}-${sectionId}`
+ };
+ } )
+ ];
+ case 'glossary':
+ return [
+ ...res,
+ {
+ title: data.customTitle || translate( 'Glossary list' ),
+ level: 0,
+ href: `glossary-block-${element.id}`
+ }
+ ];
+ case 'references':
+ return [
+ ...res,
+ {
+ level: 0,
+ title: data.customTitle || translate( 'References' ),
+ href: `reference-block-${element.id}`
+ }
+ ];
+ default:
+ return res;
+ }
+ }, [] );
+};
+
+const buildSectionBlockSummary = ( sectionBlock, production ) => {
+ if ( sectionBlock.customSummary && sectionBlock.customSummary.active ) {
+ return sectionBlock.customSummary.summary.map( ( el ) => el.id );
+ }
+ return production.sectionsOrder;
+};
+
+const Sections = ( {
+ production,
+ edition,
+ translate,
+ data = {},
+ citations,
+ citationStyle,
+ citationLocale,
+ publicationTitle,
+ publicationSubtitle,
+ id,
+} ) => {
+ const summary = edition.data.plan.summary;
+ const notesPosition = data.notesPosition || 'footnotes';
+
+ const sectionsBlocks = summary.filter( ( s ) => s.type === 'sections' );
+
+ const sectionsIds = sectionsBlocks.reduce( ( res, sectionBlock ) => {
+ // @todo handle custom sections order
+ return [
+ ...res,
+ ...buildSectionBlockSummary( sectionBlock, production )
+ ];
+ }, [] );
+
+ return [
+ ...sectionsIds.map( ( sectionId, index ) => {
+ const section = production.sections[sectionId];
+ return (
+
+ );
+ } ),
+ // @todo endnotes relative to sections and not to production sectionsOrder
+ notesPosition === 'endOfContents' ?
+ : null
+ ];
+};
+
+const renderSummary = ( {
+ production,
+ edition,
+ translate,
+ citations,
+} ) => {
+ const summary = edition.data.plan.summary;
+ const citationStyle = edition.data.citationStyle.data;
+ const citationLocale = edition.data.citationLocale.data;
+
+ const {
+ data: editionData = {}
+ } = edition;
+ const {
+ metadata
+ } = production;
+
+ const finalTitle = editionData.publicationTitle || metadata.title;
+ const finalSubtitle = editionData.publicationSubtitle || metadata.subtitle;
+
+ return summary.map( ( element, index ) => {
+ switch ( element.type ) {
+ case 'frontCover':
+ return (
+
+ );
+ case 'titlePage':
+ return (
+
+ );
+ case 'colophon':
+ return (
+
+ );
+ case 'backCover':
+ return (
+
+ );
+ case 'emptyPage':
+ return ;
+ case 'tableOfContents':
+ const toc = buildToc( production, edition, translate );
+ return (
+
+ );
+
+ case 'customPage':
+ return (
+
+ {element.data.title &&
+
+ {element.data.title}
+
+ }
+ {element.data.markdownContents &&
+
+ }
+
+ );
+ case 'sections':
+ return (
+
+ );
+ case 'glossary':
+ return (
+
+ );
+ case 'references':
+ return (
+
+ );
+
+ default:
+ return (
+
+ {element.type}
+
+ );
+ }
+ } );
+};
+
+export default class Template extends Component {
+ constructor( props ) {
+ super( props );
+ }
+
+ getChildContext() {
+ return {
+ LinkComponent: this.props.LinkComponent || DefaultLinkComponent,
+ MentionComponent: this.props.MentionComponent || DefaultMentionComponent,
+ SectionLinkComponent: this.props.SectionLinkComponent || DefaultSectionLinkComponent,
+ production: this.props.production,
+ productionAssets: this.props.production.assets,
+
+ contextualizers: this.props.contextualizers,
+ translate: this.translate,
+ };
+ }
+
+ shouldComponentUpdate = () => true;
+
+ translate = ( key ) => {
+ const { locale = {} } = this.props;
+ return locale[key] || key;
+ }
+
+ render () {
+ const {
+ props: {
+ production,
+ edition,
+ contextualizers,
+ renderAdditionalHTML = false,
+ },
+ translate,
+ } = this;
+
+ const {
+ data = {},
+ } = edition;
+ const {
+ additionalHTML = '',
+ } = data;
+
+ const citations = buildCitations( production );
+ const finalStyles = updateStyles( { edition, contextualizers } );
+
+ /**
+ * We render an array
+ * to have our sections as a flat collection
+ * which facilitates @paged rules about pages breaks
+ */
+ return [
+ ...renderSummary( {
+ production,
+ edition,
+ translate,
+ citations,
+ } ),
+ ,
+ renderAdditionalHTML ?
+
: null
+ ].filter( ( s ) => s );
+
+ }
+}
+
+Template.childContextTypes = {
+ LinkComponent: PropTypes.func,
+ MentionComponent: PropTypes.func,
+ SectionLinkComponent: PropTypes.func,
+ translate: PropTypes.func,
+ production: PropTypes.object,
+ productionAssets: PropTypes.object,
+ contextualizers: PropTypes.object,
+};
diff --git a/src/defaultStyle.js b/src/defaultStyle.js
new file mode 100644
index 0000000..f129e4b
--- /dev/null
+++ b/src/defaultStyle.js
@@ -0,0 +1,666 @@
+
+const style = `
+
+/* variable used for the template */
+:root {
+ --color-link-default: #99B6BD;/* bleu délavé */
+ --color-link-active:#D4613E;/* rouille */
+ --color-text: #4d4c4c;
+
+ font-family:'Source serif pro', serif;
+ --gutter-medium: .5cm;
+}
+
+/**
+ *
+ * PAGES LAYOUTS
+ *
+ */
+@page{
+ format: A4 portrait;
+}
+
+/* front cover */
+
+@page front-cover {
+ margin: 0e-6cm;
+}
+@page back-cover {
+ margin: 0e-6cm;
+}
+@page front-cover{
+}
+@page colophon:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+
+ @top-left{
+ }
+ @top-left-corner {
+
+ }
+}
+
+@page colophon:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ }
+ @top-right {
+ }
+}
+@page empty-page {
+}
+@page table-of-contents {
+}
+@page table-of-contents-wpnumber:left {
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page table-of-contents-wpnumber:right {
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page custom-page {
+}
+@page custom-page-wpnumber:left {
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+@page custom-page-wpnumber:right {
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page section{
+
+}
+
+@page section:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+ @top-left{
+ content: element(publicationTitle);
+ }
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page section:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+ @top-right {
+ content: element(sectionTitle);
+ }
+}
+
+@page peritext{
+
+}
+
+@page peritext:left {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-left: 45.8mm;
+ margin-right: 23.3mm;
+ @top-left{
+ content: element(publicationTitle);
+ }
+ @top-left-corner {
+ content: counter(page);
+ text-align: center;
+ }
+}
+
+@page peritext:right {
+ margin-top: 33mm;
+ margin-bottom: 64.8mm;
+ margin-right: 45.8mm;
+ margin-left: 23.3mm;
+ @top-right-corner {
+ content: counter(page);
+ text-align: center;
+ }
+ @top-right {
+ }
+}
+@page section:first{
+ @top-right {
+ content: none;
+ }
+}
+
+
+.front-cover{
+ page: front-cover;
+ page-break-before: right;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.title-page{
+ page: title-page;
+ page-break-before: right;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+
+.colophon{
+ page: colophon;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.back-cover{
+ page: back-cover;
+ page-break-before: left;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+.empty-page{
+ page: empty-page;
+}
+
+.table-of-contents{
+ page: table-of-contents;
+ page-break-before: right;
+}
+.table-of-contents.has-page-number{
+ page: table-of-contents-wpnumber;
+ page-break-before: right;
+}
+
+.custom-page{
+ page: custom-page;
+}
+.section{
+ page: section;
+ page-break-before: right;
+}
+
+.glossary{
+ page: peritext;
+}
+.reference{
+ page: peritext;
+}
+
+.custom-page.has-page-number{
+ page: custom-page-wpnumber;
+}
+
+/**
+ *
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ * REUSED COMPONENTS
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ *
+ */
+body{
+ text-rendering: optimizeLebility;
+ color: var(--color-text);
+}
+a,
+.page-link{
+ text-decoration: none;
+ color: var(--color-link-default);
+}
+.page-link::after{
+ content: target-counter(attr(href), page);
+}
+.publication-title-running{
+ position: running(publicationTitle);
+}
+.section-title-running{
+ position: running(sectionTitle);
+}
+
+.composition-block-title{
+ font-weight: 800;
+ font-size: 50px;
+}
+
+/**
+ * Prevent overflow bugs
+ */
+.csl-entry,
+a{
+ word-break: break-all;
+}
+
+/* lists */
+.mentions-container{
+ padding: 0;
+}
+.mention-item{
+ list-style-type: none;
+ padding: 0;
+ margin-bottom: var(--gutter-medium);
+}
+.mention-item .title{
+
+}
+.glossary .mention-item .title{
+ font-weight: 800;
+}
+.mention-item .description {
+
+}
+.mention-item .mentions-list{
+ opacity: .8;
+ font-size: 80%;
+}
+
+.mention-item .mentions-list::before{
+ content: "◉";
+ font-style: normal;
+ padding-right: calc(.5 * var(--gutter-medium));
+}
+
+/* rendered content */
+.rendered-content .unstyled{
+ text-indent: var(--gutter-medium);
+ margin-bottom: calc(.4 * var(--gutter-medium));
+}
+.rendered-content > .unstyled {
+ text-indent: none;
+}
+
+ul + .unstyled,
+blockquote + .unstyled,
+figure + .unstyled,
+.csl-entry{
+ text-indent: none;
+}
+
+.rendered-content sup{
+ line-height: 0;
+ vertical-align: super;
+ position: relative;
+ top: .2em;
+}
+.footnote-area .footnote{
+}
+.footnote-area .footnote sup{
+ vertical-align: baseline;
+ font-size: 100%;
+}
+.footnote-area .footnote sup::after{
+ content: ".";
+ padding-right: .5em;
+}
+
+/**
+ * Figures (general)
+ */
+.block-contextualization-container,
+.block-contextualization-container figure
+{
+ padding: 0;
+ margin: 0;
+}
+.block-contextualization-container .figure-caption{
+ padding-top: calc(.5 * var(--gutter-medium));
+ font-style: italic;
+}
+.block-contextualization-container .figure-title{
+ margin: 0;
+}
+.block-contextualization-container .figure-title .mention-context-pointer{
+ font-size: 1.2rem;
+ padding: 0;
+}
+.block-contextualization-container .figure-legend{
+ font-size: 1em;
+ margin-top: 0;
+}
+.block-contextualization-container .figure-legend p{
+ margin-top: 0;
+}
+.block-contextualization-container figure{
+ display: flex;
+ flex-flow: column nowrap;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+}
+.block-contextualization-container img
+{
+ max-width: 100%;
+ max-height: 4cm;
+}
+.block-contextualization-container iframe
+{
+ min-height: 30%;
+ outline: none;
+ border: none;
+ width: 100%;
+ max-height: 4cm;
+ min-height: 3cm;
+}
+/**
+ * Figures (specific)
+ */
+/* tables */
+.block-contextualization-container.table{
+ page-break-before: always;
+ max-width: 100%;
+ overflow: hidden;
+}
+
+.block-contextualization-container.table table th,
+.block-contextualization-container.table table tr
+ {
+ border-right: 1px solid black;
+ border-bottom: 1px solid black;
+ font-size: 8px;
+}
+
+.block-contextualization-container.bib .figure-caption{
+ display: none;
+}
+/* images */
+.block-contextualization-container.image .static-images-container{
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: flex-start;
+}
+.block-contextualization-container.image .static-images-container img{
+ display: block;
+}
+.block-contextualization-container.image .image-specific-caption {
+ font-style: italic;
+ font-size: 70%;
+ opacity: .8;
+ padding: calc(.5 * var(--gutter-medium));
+ padding-left: 0;
+}
+/* vegaLite visualizations */
+.block-contextualization-container.vegaLite .vegaLite > div {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: var(--gutter-medium);
+ page-break-inside: avoid;
+}
+/**
+ *
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ * VIEW SPECIFIC COMPONENTS
+ * =================
+ * =================
+ * =================
+ * =================
+ * =================
+ *
+ */
+/* front cover components */
+.front-cover .front-cover-title {
+ font-size: 50px;
+ margin-bottom: 0;
+}
+.front-cover .front-cover-subtitle {
+ font-size: 30px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.front-cover .front-cover-authors{
+ color: var(--color-link-active);
+ font-size: 20px;
+}
+.front-cover .front-cover-footer{
+ font-style: italic;
+}
+/* title-page */
+.title-page{
+ text-align: center;
+}
+.title-page .title-page-title {
+ font-size: 50px;
+ margin-bottom: 0;
+}
+.title-page .title-page-subtitle {
+ font-size: 30px;
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+.title-page .title-page-authors{
+ font-size: 22px;
+}
+.title-page .title-page-footer{
+ font-style: italic;
+}
+/* colophon components */
+.colophon-content{
+ position: absolute;
+ bottom: 0;
+}
+
+/* back cover components */
+.back-cover .back-cover-title {
+ font-size: 30px;
+ margin-bottom: 0;
+}
+.back-cover .back-cover-subtitle {
+ font-size: 20px;
+ margin-top: 5px;
+ margin-bottom: 15px;
+}
+.back-cover .back-cover-authors{
+ color: var(--color-link-active);
+ font-size: 16px;
+}
+.back-cover .back-cover-text{
+ max-height: 60%;
+}
+.back-cover .back-cover-footer{
+ font-style: italic;
+}
+
+/* toc views components */
+.table-of-contents .table-of-contents-elements-container{
+ padding: 0;
+}
+.table-of-contents .table-of-contents-element{
+ list-style-type: none;
+ margin: 0;
+ font-size: 20px;
+}
+.table-of-contents .table-of-contents-element {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: stretch;
+
+}
+.table-of-contents .table-of-contents-element .element-leading{
+ flex: 1;
+ content: " ";
+ border-bottom: 1px dashed var(--color-text);
+}
+.table-of-contents .table-of-contents-element .element-title,
+.table-of-contents .table-of-contents-element .page-link
+{
+ position: relative;
+ top: .25em;
+ min-width: 20px;
+}
+.table-of-contents .table-of-contents-element.level-0{
+}
+.table-of-contents .table-of-contents-element.level-1{
+ margin-left: calc(.3 * var(--gutter-medium));
+}
+.table-of-contents .table-of-contents-element.level-2{
+ margin-left: calc(.6 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-3{
+ margin-left: calc(.9 * var(--gutter-medium));
+}
+.table-of-contents .table-of-contents-element.level-4{
+ margin-left: calc(1.2 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-5{
+ margin-left: calc(1.5 * var(--gutter-medium));
+
+}
+.table-of-contents .table-of-contents-element.level-6{
+ margin-left: calc(1.8 * var(--gutter-medium));
+
+}
+/* sections views */
+.section.has-notes-position-sidenotes .sidenote {
+ color: var(--color-link-default);
+ border-left: 3px solid var(--color-link-default);
+ margin-left: .5em;
+ padding-left: .5em;
+ font-size: .8em;
+ vertical-align: baseline;
+}
+
+.footnote{
+ font-size: 80%;
+ vertical-align: baseline;
+ opacity: .8;
+}
+
+
+.section-title{
+ margin-top: 50%;
+}
+
+/* front cover and back cover */
+.front-cover{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+}
+.title-page{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+}
+.back-cover{
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: center;
+ align-items: center;
+}
+.front-cover .front-cover-footer,
+.back-cover .back-cover-footer,
+.title-page .title-page-footer
+{
+ position : absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.front-cover .front-cover-content,
+.back-cover .back-cover-content
+{
+ background: white;
+ color: var(--color-text);
+ padding: 2cm;
+}
+.back-cover-content {
+ margin: 2cm;
+}
+.front-cover.with-animated-background-gradient,
+.back-cover.with-animated-background-gradient
+{
+ background: linear-gradient(-45deg, #EE7752, #E73C7E, #23A6D5, #23D5AB);
+ background-size: 400% 400%;
+ -webkit-animation: Gradient 15s ease infinite;
+ -moz-animation: Gradient 15s ease infinite;
+ animation: Gradient 15s ease infinite;
+}
+
+@-webkit-keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+@-moz-keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+@keyframes Gradient {
+ 0% {
+ background-position: 0% 50%
+ }
+ 50% {
+ background-position: 100% 50%
+ }
+ 100% {
+ background-position: 0% 50%
+ }
+}
+
+`;
+
+module.exports = style;
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..4548523
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,22 @@
+import Wrapper from './components/Wrapper';
+
+import References from './components/References';
+import Glossary from './components/Glossary';
+import EndNotes from './components/EndNotes';
+
+import style from './defaultStyle';
+
+import meta from './meta';
+
+const components = {
+ Edition: Wrapper,
+ EndNotes,
+ References,
+ Glossary,
+};
+
+export default {
+ meta,
+ components,
+ css: style
+};
diff --git a/src/meta.js b/src/meta.js
new file mode 100644
index 0000000..7eb5fb1
--- /dev/null
+++ b/src/meta.js
@@ -0,0 +1,301 @@
+module.exports = {
+ id: 'pyrrah',
+ type: 'peritext-template',
+ name: 'Pyrrah template',
+ renderingTypes: [ 'paged' ],
+ generatorsTypes: [ 'pdf', 'epub' ],
+ summaryType: 'linear',
+ options: {
+ referencesScope: {
+ type: 'string',
+ enum: [ 'sections', 'edition' ],
+ default: 'edition'
+ }
+ },
+ defaultBibType: 'book',
+ defaultAdditionalHTML: ' ',
+ defaultPlan: {
+ type: 'linear',
+ summary: [
+ {
+ type: 'frontCover',
+ data: {
+ animatedBackground: 'none',
+ backgroundColor: '#466CA6'
+ },
+ },
+ {
+ type: 'titlePage'
+ },
+ {
+ type: 'tableOfContents',
+ data: {
+ displayPageNumber: true,
+ }
+ },
+ {
+ type: 'sections',
+ data: {
+ notesPosition: 'footnotes'
+ }
+ },
+ {
+ type: 'backCover',
+ data: {
+ backgroundColor: '#D6CFC4',
+ useAbstract: true
+ },
+ }
+
+ ]
+ },
+ summaryBlockDataTypes: {
+ frontCover: {
+ type: 'object',
+ default: {
+ animatedBackground: 'none',
+ backgroundColor: '#466CA6'
+ },
+ properties: {
+ backgroundColor: {
+ type: 'string',
+ uiType: 'color'
+ },
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ },
+ animatedBackground: {
+ type: 'string',
+ description: 'animated background to use',
+ enum: [ 'gradient', 'none' ]
+ }
+ }
+ },
+ titlePage: {
+ type: 'object',
+ default: {
+ },
+ properties: {
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ },
+ }
+ },
+ colophon: {
+ type: 'object',
+ default: {
+ },
+ properties: {
+ customText: {
+ type: 'string',
+ longString: true
+ },
+ copyright: {
+ type: 'string'
+ },
+ issn: {
+ type: 'string'
+ },
+ isbn: {
+ type: 'string'
+ }
+ }
+ },
+ backCover: {
+ type: 'object',
+ default: {
+ backgroundColor: '#D6CFC4',
+ useAbstract: true
+ },
+ properties: {
+ backgroundColor: {
+ type: 'string'
+ },
+ useAbstract: {
+ type: 'boolean'
+ },
+ customMarkdownContents: {
+ type: 'string',
+ description: 'custom content to put on this page',
+ longString: true
+ },
+ animatedBackground: {
+ type: 'string',
+ description: 'animated background to use',
+ enum: [ 'gradient', 'none' ]
+ },
+ customCoverFooter: {
+ type: 'string',
+ longString: true
+ },
+ },
+
+ },
+ tableOfContents: {
+ type: 'object',
+ properties: {
+ customTitle: {
+ type: 'string',
+ description: 'Custom title of the table of contents section'
+ },
+ displayPageNumber: {
+ type: 'boolean',
+ description: 'whether to display page number'
+ }
+ },
+ default: {
+ displayPageNumber: true
+ }
+
+ },
+ sections: {
+ type: 'object',
+ properties: {
+ customSummary: {
+ type: 'object',
+ uiType: 'customSummary',
+ properties: {
+ active: {
+ type: 'boolean'
+ },
+ summary: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ sectionId: {
+ type: 'string',
+ },
+ sectionLevel: {
+ type: 'number'
+ }
+ }
+ }
+ }
+ }
+ },
+ notesPosition: {
+ type: 'string',
+ enum: [ 'footnotes', 'sidenotes', 'endOfSections', 'endOfContents' ]
+ },
+
+ },
+ default: {
+ customSummary: {
+ active: false,
+ summary: []
+ },
+ notesPosition: 'footnotes'
+ }
+ },
+ customPage: {
+ type: 'object',
+ default: {
+ displayInTableOfContents: true,
+ displayPageNumber: true
+ },
+ properties: {
+ title: {
+ type: 'string'
+ },
+ markdownContents: {
+ type: 'string',
+ longString: true
+ },
+ customCssId: {
+ type: 'string',
+ description: 'custom id for this page'
+ },
+ displayInTableOfContents: {
+ type: 'boolean',
+ description: 'whether to display this content in table of contents'
+ },
+ displayPageNumber: {
+ type: 'boolean',
+ description: 'whether to display page number'
+ }
+ }
+ },
+ emptyPage: {
+ type: 'object',
+ properties: {
+ }
+ },
+
+ references: {
+ type: 'object',
+ default: {
+ showUncitedReferences: false,
+ showMentions: false,
+ resourceTypes: [ 'bib' ],
+ sortingKey: 'date',
+ sortingAscending: true
+ },
+ properties: {
+ resourceTypes: {
+ type: 'array',
+ items: {
+ type: 'string',
+ enum: [ 'bib', 'image', 'table', 'video', 'embed', 'webpage' ]
+ },
+ uiType: 'select',
+ description: 'which types of resources to show as references'
+ },
+ showUncitedReferences: {
+ type: 'boolean',
+ description: 'whether to show references which are not cited in the contents of the edition',
+ },
+ showMentions: {
+ type: 'boolean',
+ description: 'whether to show active mentions in the text for each reference',
+ },
+ sortingKey: {
+ type: 'string',
+ description: 'key to use for sorting references',
+ enum: [ 'authors', 'title', 'date' ]
+ },
+ sortingAscending: {
+ type: 'boolean',
+ description: 'whether to sort references in ascending order'
+ }
+ }
+ },
+ glossary: {
+ type: 'object',
+ default: {
+ showDescription: true,
+ showMentions: true,
+ showUncited: false,
+ glossaryTypes: [ 'person', 'place', 'event', 'notion', 'other' ]
+ },
+ properties: {
+ customTitle: {
+ type: 'string',
+ },
+ showDescriptions: {
+ type: 'boolean',
+ description: 'whether to show elements descriptions in the glossary',
+ },
+ showMentions: {
+ type: 'boolean',
+ description: 'whether to show active mentions in the text for each glossary element',
+ },
+ glossaryTypes: {
+ type: 'array',
+ items: {
+ type: 'string',
+ enum: [ 'person', 'place', 'event', 'notion', 'other' ]
+ },
+ uiType: 'select',
+ description: 'which types of glossary items to show'
+ },
+ showUncited: {
+ type: 'boolean',
+ description: 'whether to show uncited glossary items',
+ }
+ }
+ }
+ },
+};