├── .github └── FUNDING.yml ├── .gitignore ├── .vscode ├── settings.json └── tasks.json ├── LICENSE ├── README.md ├── dist ├── react-trix.js └── react-trix.js.map ├── lib ├── react-trix.d.ts ├── react-trix.js └── react-trix.js.map ├── main.js ├── package-lock.json ├── package.json ├── src └── react-trix.tsx ├── test.sh ├── tests ├── react-trix_test.tsx ├── setup.ts ├── src │ └── react-trix.js ├── tests │ ├── react-trix_test.js │ └── setup.js └── tsconfig.json └── tsconfig.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: rob-race 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # npm testing package 2 | react-trix*.tgz 3 | 4 | # Mac OSX Files 5 | .DS_Store 6 | .Trashes 7 | .Spotlight-V100 8 | .AppleDouble 9 | .LSOverride 10 | 11 | # Bower & Node Modules 12 | node_modules 13 | npm-debug.log 14 | bower_components 15 | 16 | # General Files 17 | .sass-cache 18 | .hg 19 | .idea 20 | .svn 21 | .cache 22 | .project 23 | .tmp -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "editor.detectIndentation": false, 4 | "editor.tabSize": 2, 5 | "editor.insertSpaces": true, 6 | "editor.formatOnType": true, 7 | "files.exclude": { 8 | "**/Godeps": true, 9 | "**/vendor": true, 10 | "**/node_modules": true, 11 | "**/.git": true, 12 | "**/.DS_Store": true, 13 | "**/.tmp": true, 14 | "tests/tests": true, 15 | "tests/src": true, 16 | "**/*.js": { 17 | "when": "$(basename).ts" 18 | } 19 | }, 20 | "search.exclude": { 21 | "**/Godeps": true, 22 | "**/vendor": true, 23 | "**/node_modules": true, 24 | "**/bower_components": true 25 | }, 26 | "files.watcherExclude": { 27 | "**/.git/objects/**": true, 28 | "**/node_modules/**": true 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | /*{ 2 | "version": "0.1.0", 3 | "command": "webpack", 4 | "isShellCommand": true 5 | } 6 | */ 7 | { 8 | "version": "2.0.0", 9 | "name": "npmTask", 10 | "command": "npm", 11 | "args": [ 12 | "run" 13 | ], 14 | "tasks": [ 15 | { 16 | "label": "build", 17 | "type": "shell", 18 | "args": [ 19 | "run", 20 | "pack" 21 | ], 22 | "problemMatcher": [], 23 | "group": "build" 24 | }, 25 | { 26 | "label": "mocha", 27 | "type": "shell", 28 | "args": [ 29 | "run", 30 | "test" 31 | ], 32 | "problemMatcher": [], 33 | "group": "test" 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017, Dominic St-Pierre 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React Trix 0.10.2 2 | 3 | React wrapper around [Trix](https://github.com/basecamp/trix) editor from Basecamp. With additional features that I 4 | needed when I was CTO at Roadmap when sending emails and collaborating with comments. 5 | 6 | ## Getting started 7 | 8 | ### Install via npm 9 | 10 | ```bash 11 | npm install react-trix --save 12 | ``` 13 | 14 | Trix will be included as dependency. You should already have [React](https://facebook.github.io/react) installed. 15 | 16 | ### Usage 17 | 18 | Make sure you have the latest Trix JavaScript and optionally their CSS on pages where you are using react-trix. 19 | 20 | #### Classic script tag 21 | 22 | ```html 23 | 24 | ``` 25 | 26 | #### Or via npm 27 | 28 | ```bash 29 | npm i trix 30 | ``` 31 | 32 | ```jsx 33 | import "trix/dist/trix"; 34 | ``` 35 | 36 | If you're using npm version with SSR make sure to import trix on page level. 37 | 38 | ```jsx 39 | import * as React from "react"; 40 | import { TrixEditor } from "react-trix"; 41 | 42 | export class Test extends React.Component { 43 | handleEditorReady(editor) { 44 | // this is a reference back to the editor if you want to 45 | // do editing programatically 46 | editor.insertString("editor is ready"); 47 | } 48 | handleChange(html, text) { 49 | // html is the new html content 50 | // text is the new text content 51 | } 52 | render() { 53 | return ( 54 | 55 | ); 56 | } 57 | } 58 | ``` 59 | 60 | ### Properties 61 | 62 | Those are the optional properties you can use on the ``. 63 | 64 | **New in v0.7.0** 65 | 66 | The default name for the file upload is `file`. You may use the `fileParamName` 67 | to change its name, for instance `blob` to work with Ruby on Rails. 68 | 69 | ```jsx 70 | let mergeTags = [{ 71 | trigger: "@", 72 | tags: [ 73 | {name: "Dominic St-Pierre", tag: "@dominic"}, 74 | {name: "John Doe", tag: "@john"} 75 | ] 76 | }, { 77 | trigger: "{", 78 | tags: [ 79 | {name: "First name", tag: "{{ .FirstName }}"}, 80 | {name: "Last name", tag: "{{ .LastName }}"} 81 | ] 82 | }] 83 | 95 | ``` 96 | 97 | ### Merge tags 98 | 99 | You give a trigger character, for example "@" and when the user type this character a small popup suggestions 100 | will be displayed where user can click and the `tag` will be added. 101 | 102 | You may customize the suggestion box via the CSS class `react-trix-suggestions` like this: 103 | 104 | ```css 105 | .react-trix-suggestions { 106 | /* for the container */ 107 | } 108 | 109 | .react-trix-suggestions a { 110 | /* for each suggestion */ 111 | } 112 | ``` 113 | 114 | ## Running the tests 115 | 116 | Still having some issues testing Trix with enzyme/jsdom. 117 | 118 | ## Contributions 119 | 120 | Contributions are welcome and appreciated. 121 | -------------------------------------------------------------------------------- /dist/react-trix.js: -------------------------------------------------------------------------------- 1 | parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;cO.length&&O.push(e)}function q(e,r,o,u){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var i=!1;if(null===e)i=!0;else switch(l){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case t:case n:i=!0}}if(i)return o(u,e,""===r?"."+I(e,0):r),1;if(i=0,r=""===r?".":r+":",Array.isArray(e))for(var f=0;f=0&&i=200&&n.status<300)return r=e=n.responseText,t.setAttributes({url:r,href:e})},n.send(r)},n.prototype.handleTagSelected=function(t,e){e.preventDefault();var r=this.state;r.showMergeTags=!1,this.setState(r),this.editor.expandSelectionInDirection("backward"),this.editor.insertString(t.tag)},n.prototype.renderTagSelector=function(t){var e=this;if(!t||!this.editor)return null;var n=document.getElementById("trix-editor-top-level-"+this.id).getBoundingClientRect(),o=this.editor.getClientRectAtPosition(this.editor.getSelectedRange()[0]),i={position:"absolute",top:o.top+25-n.top,left:o.left+25-n.left,width:"250px",boxSizing:"border-box",padding:0,margin:".2em 0 0",backgroundColor:"hsla(0,0%,100%,.9)",borderRadius:".3em",background:"linear-gradient(to bottom right, white, hsla(0,0%,100%,.8))",border:"1px solid rgba(0,0,0,.3)",boxShadow:".05em .2em .6em rgba(0,0,0,.2)",textShadow:"none"},a={display:"block",padding:".2em .5em",cursor:"pointer"};return r.createElement("div",{style:i,className:"react-trix-suggestions"},t.map(function(t){return r.createElement("a",{key:t.name,style:a,href:"#",onClick:e.handleTagSelected.bind(e,t)},t.name)}))},n.prototype.render=function(){var t=this,e=this.state,n=this.props,o={id:"editor-"+this.id,input:"input-"+this.id};n.className&&(o.class=n.className),n.autoFocus&&(o.autofocus=n.autoFocus.toString()),n.placeholder&&(o.placeholder=n.placeholder),n.toolbar&&(o.toolbar=n.toolbar);var i=null;return e.showMergeTags&&(i=this.renderTagSelector(e.tags)),r.createElement("div",{id:"trix-editor-top-level-"+this.id,ref:function(e){return t.d=e},style:{position:"relative"}},r.createElement("trix-editor",o),r.createElement("input",{type:"hidden",id:"input-"+this.id,value:this.props.value}),i)},n}(r.Component);exports.TrixEditor=n; 9 | },{"react":"n8MK"}]},{},["kdL1"], null) 10 | //# sourceMappingURL=/react-trix.js.map -------------------------------------------------------------------------------- /dist/react-trix.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../node_modules/object-assign/index.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","react-trix.tsx"],"names":["getOwnPropertySymbols","Object","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","toObject","val","TypeError","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","order2","map","n","join","test3","split","forEach","letter","keys","err","module","exports","target","source","from","symbols","to","s","arguments","length","key","call","k","require","Symbol","for","p","q","r","t","u","v","w","x","y","z","A","B","C","iterator","aa","a","b","e","c","d","g","h","f","Error","l","m","replace","name","framesToPop","D","encodeURIComponent","E","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","F","G","props","context","refs","updater","H","I","isReactComponent","setState","forceUpdate","J","constructor","isPureReactComponent","K","current","currentDispatcher","L","M","ref","__self","__source","N","children","Array","defaultProps","$$typeof","type","_owner","ba","O","escape","P","Q","R","pop","result","keyPrefix","func","count","S","push","T","U","isArray","next","done","value","V","toString","ca","da","W","X","Children","toArray","only","createRef","Component","PureComponent","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","forwardRef","render","lazy","_ctor","_status","_result","memo","compare","Fragment","StrictMode","Suspense","createElement","cloneElement","createFactory","bind","isValidElement","version","unstable_ConcurrentMode","unstable_Profiler","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","Y","default","Z"],"mappings":"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","file":"react-trix.js","sourceRoot":"../src","sourcesContent":["/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v16.7.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.concurrent_mode\"):60111,y=n?Symbol.for(\"react.forward_ref\"):60112,z=n?Symbol.for(\"react.suspense\"):60113,A=n?Symbol.for(\"react.memo\"):\n60115,B=n?Symbol.for(\"react.lazy\"):60116,C=\"function\"===typeof Symbol&&Symbol.iterator;function aa(a,b,e,c,d,g,h,f){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[e,c,d,g,h,f],m=0;a=Error(b.replace(/%s/g,function(){return l[m++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction D(a){for(var b=arguments.length-1,e=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;cQ.length&&Q.push(a)}\nfunction T(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;h;\n}\n\nexport interface TrixEditorProps {\n className?: string;\n autoFocus?: boolean;\n placeholder?: string;\n toolbar?: string;\n value?: string;\n uploadURL?: string;\n uploadData?: { [key: string]: string };\n fileParamName?: string;\n\n /* list of available merge tag */\n mergeTags: Array;\n\n onEditorReady?: (editor: any) => void;\n onChange: (html: string, text: string) => void;\n}\n\nexport interface TrixEditorState {\n showMergeTags: boolean;\n tags: Array;\n}\n\nexport interface Editor {\n getSelectedRange: () => Array;\n setSelectedRange: (range: Array) => void;\n getClientRectAtPosition: (pos: number) => Rect;\n expandSelectionInDirection: (direction: \"forward\" | \"backward\") => void;\n insertString: (s: string) => void;\n}\n\nexport interface Rect {\n top: number;\n left: number;\n right: number;\n bottom: number;\n width: number;\n height: number;\n}\n\nexport class TrixEditor extends React.Component {\n private id: string;\n private container: any = null;\n private editor: Editor = null;\n private d: HTMLDivElement = null;\n constructor(props: TrixEditorProps) {\n super(props);\n\n this.id = this.generateId();\n\n this.state = {\n showMergeTags: false,\n tags: []\n }\n }\n private generateId(): string {\n let dt = new Date().getTime();\n let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = (dt + Math.random()*16)%16 | 0;\n dt = Math.floor(dt/16);\n return (c=='x' ? r :(r&0x3|0x8)).toString(16);\n });\n return \"T\" + uuid;\n }\n componentDidMount() {\n let props = this.props;\n\n this.container = document.getElementById(`editor-${this.id}`);\n //this.container = this.d && this.d.children && this.d.children.length >= 2 ? this.d.children[1] : null;\n //this.editor = this.d;\n if (this.container) {\n this.container.addEventListener(\"trix-initialize\", () => {\n this.editor = this.container.editor;\n if (!this.editor) {\n console.error(\"cannot find trix editor\");\n }\n\n if (props.onEditorReady && typeof props.onEditorReady == \"function\") {\n props.onEditorReady(this.editor);\n }\n }, false);\n this.container.addEventListener('trix-change', this.handleChange.bind(this), false);\n\n if (props.uploadURL) {\n this.container.addEventListener(\"trix-attachment-add\", this.handleUpload.bind(this));\n }\n } else {\n console.error(\"editor not found\");\n }\n }\n componentWillUnmount() {\n this.container.removeEventListener(\"trix-initialize\", this.handleChange);\n this.container.removeEventListener(\"trix-change\", this.handleChange);\n\n if (this.props.uploadURL) {\n this.container.removeEventListener(\"trix-attachment-add\", this.handleUpload);\n }\n }\n private handleChange(e) {\n const props = this.props;\n let state: TrixEditorState = this.state;\n const text: string = e.target.innerText;\n\n if (props.onChange) {\n props.onChange(e.target.innerHTML, text);\n }\n\n const range = this.editor.getSelectedRange();\n\n // if we have a collapse selection\n if (text && range[0] == range[1]) {\n // if we have a merge tag mergeTagTrigger\n if (props.mergeTags) {\n // get the cursor position and compare the last character with our mergeTagTrigger\n const lastChar = range[0] - 1;\n if (lastChar >= 0 && lastChar < text.length) {\n const trigger = text[lastChar];\n for (let i = 0; i < props.mergeTags.length; i++) {\n if (trigger == props.mergeTags[i].trigger) {\n state.showMergeTags = true;\n state.tags = props.mergeTags[i].tags;\n this.setState(state);\n break;\n }\n }\n }\n }\n }\n }\n private handleUpload(e: any) {\n var attachment = e.attachment;\n if (attachment.file) {\n return this.uploadAttachment(attachment);\n }\n }\n private uploadAttachment(attachment: any) {\n var file, form, xhr;\n file = attachment.file;\n form = new FormData();\n // add any custom data that were passed\n if (this.props.uploadData) {\n for (var k in this.props.uploadData) {\n form.append(k, this.props.uploadData[k]);\n }\n }\n \n //form.append(\"Content-Type\", \"multipart/form-data\");\n form.append((this.props.fileParamName || \"file\"), file);\n xhr = new XMLHttpRequest();\n xhr.open(\"POST\", this.props.uploadURL, true);\n xhr.upload.onprogress = (event) => {\n var progress = event.loaded / event.total * 100;\n return attachment.setUploadProgress(progress);\n };\n xhr.onload = () => {\n var href, url;\n if (xhr.status >= 200 && xhr.status < 300) {\n url = href = xhr.responseText;\n return attachment.setAttributes({\n url: url,\n href: href\n });\n }\n };\n return xhr.send(form);\n }\n private handleTagSelected(t: MergeTag, e: React.MouseEvent): void {\n e.preventDefault();\n\n let state: TrixEditorState = this.state;\n state.showMergeTags = false;\n this.setState(state);\n\n this.editor.expandSelectionInDirection(\"backward\");\n this.editor.insertString(t.tag);\n }\n private renderTagSelector(tags: Array): React.ReactNode {\n if (!tags || !this.editor) {\n return null;\n }\n\n const editorPosition = document.getElementById(\"trix-editor-top-level-\" + this.id).getBoundingClientRect();\n\n // current cursor position\n const rect = this.editor.getClientRectAtPosition(this.editor.getSelectedRange()[0]);\n const boxStyle = {\n \"position\": \"absolute\" as \"absolute\",\n \"top\": rect.top + 25 - editorPosition.top,\n \"left\": rect.left + 25 - editorPosition.left,\n \"width\": \"250px\",\n \"boxSizing\": \"border-box\" as BoxSizingProperty,\n \"padding\": 0,\n \"margin\": \".2em 0 0\",\n \"backgroundColor\": \"hsla(0,0%,100%,.9)\",\n \"borderRadius\": \".3em\",\n \"background\": \"linear-gradient(to bottom right, white, hsla(0,0%,100%,.8))\",\n \"border\": \"1px solid rgba(0,0,0,.3)\",\n \"boxShadow\": \".05em .2em .6em rgba(0,0,0,.2)\",\n\t \"textShadow\": \"none\"\n };\n const tagStyle = {\n \"display\": \"block\",\n \"padding\": \".2em .5em\",\n \"cursor\": \"pointer\"\n }\n return (\n
\n {tags.map((t) => {\n return {t.name}\n })}\n
\n );\n }\n render() {\n let state: TrixEditorState = this.state;\n let props = this.props;\n\n var attributes: { [key: string]: string } = {\n \"id\": `editor-${this.id}`,\n \"input\": `input-${this.id}`\n };\n\n if (props.className) {\n attributes[\"class\"] = props.className;\n }\n\n if (props.autoFocus) {\n attributes[\"autofocus\"] = props.autoFocus.toString();\n }\n\n if (props.placeholder) {\n attributes[\"placeholder\"] = props.placeholder;\n }\n\n if (props.toolbar) {\n attributes[\"toolbar\"] = props.toolbar;\n }\n\n let mergetags: React.ReactNode = null;\n if (state.showMergeTags) {\n mergetags = this.renderTagSelector(state.tags);\n }\n return (\n
this.d = d} style={{ \"position\": \"relative\" }}>\n {React.createElement(\"trix-editor\", attributes)}\n \n {mergetags}\n
\n );\n }\n}\n"]} -------------------------------------------------------------------------------- /lib/react-trix.d.ts: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | export interface MergeTag { 3 | tag: string; 4 | name: string; 5 | } 6 | export interface MergeTags { 7 | trigger: string; 8 | tags: Array; 9 | } 10 | export interface TrixEditorProps { 11 | className?: string; 12 | autoFocus?: boolean; 13 | placeholder?: string; 14 | toolbar?: string; 15 | value?: string; 16 | uploadURL?: string; 17 | uploadData?: { 18 | [key: string]: string; 19 | }; 20 | fileParamName?: string; 21 | mergeTags: Array; 22 | onEditorReady?: (editor: any) => void; 23 | onChange: (html: string, text: string) => void; 24 | } 25 | export interface TrixEditorState { 26 | showMergeTags: boolean; 27 | tags: Array; 28 | } 29 | export interface Editor { 30 | getSelectedRange: () => Array; 31 | setSelectedRange: (range: Array) => void; 32 | getClientRectAtPosition: (pos: number) => Rect; 33 | expandSelectionInDirection: (direction: "forward" | "backward") => void; 34 | insertString: (s: string) => void; 35 | } 36 | export interface Rect { 37 | top: number; 38 | left: number; 39 | right: number; 40 | bottom: number; 41 | width: number; 42 | height: number; 43 | } 44 | export declare class TrixEditor extends React.Component { 45 | private id; 46 | private container; 47 | private editor; 48 | private d; 49 | constructor(props: TrixEditorProps); 50 | private generateId; 51 | componentDidMount(): void; 52 | componentWillUnmount(): void; 53 | private handleChange; 54 | private handleUpload; 55 | private uploadAttachment; 56 | private handleTagSelected; 57 | private renderTagSelector; 58 | render(): JSX.Element; 59 | } 60 | -------------------------------------------------------------------------------- /lib/react-trix.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __extends = (this && this.__extends) || (function () { 3 | var extendStatics = function (d, b) { 4 | extendStatics = Object.setPrototypeOf || 5 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 6 | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 7 | return extendStatics(d, b); 8 | }; 9 | return function (d, b) { 10 | extendStatics(d, b); 11 | function __() { this.constructor = d; } 12 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 13 | }; 14 | })(); 15 | Object.defineProperty(exports, "__esModule", { value: true }); 16 | var React = require("react"); 17 | var TrixEditor = (function (_super) { 18 | __extends(TrixEditor, _super); 19 | function TrixEditor(props) { 20 | var _this = _super.call(this, props) || this; 21 | _this.container = null; 22 | _this.editor = null; 23 | _this.d = null; 24 | _this.id = _this.generateId(); 25 | _this.state = { 26 | showMergeTags: false, 27 | tags: [] 28 | }; 29 | return _this; 30 | } 31 | TrixEditor.prototype.generateId = function () { 32 | var dt = new Date().getTime(); 33 | var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { 34 | var r = (dt + Math.random() * 16) % 16 | 0; 35 | dt = Math.floor(dt / 16); 36 | return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); 37 | }); 38 | return "T" + uuid; 39 | }; 40 | TrixEditor.prototype.componentDidMount = function () { 41 | var _this = this; 42 | var props = this.props; 43 | this.container = document.getElementById("editor-" + this.id); 44 | if (this.container) { 45 | this.container.addEventListener("trix-initialize", function () { 46 | _this.editor = _this.container.editor; 47 | if (!_this.editor) { 48 | console.error("cannot find trix editor"); 49 | } 50 | if (props.onEditorReady && typeof props.onEditorReady == "function") { 51 | props.onEditorReady(_this.editor); 52 | } 53 | }, false); 54 | this.container.addEventListener('trix-change', this.handleChange.bind(this), false); 55 | if (props.uploadURL) { 56 | this.container.addEventListener("trix-attachment-add", this.handleUpload.bind(this)); 57 | } 58 | } 59 | else { 60 | console.error("editor not found"); 61 | } 62 | }; 63 | TrixEditor.prototype.componentWillUnmount = function () { 64 | this.container.removeEventListener("trix-initialize", this.handleChange); 65 | this.container.removeEventListener("trix-change", this.handleChange); 66 | if (this.props.uploadURL) { 67 | this.container.removeEventListener("trix-attachment-add", this.handleUpload); 68 | } 69 | }; 70 | TrixEditor.prototype.handleChange = function (e) { 71 | var props = this.props; 72 | var state = this.state; 73 | var text = e.target.innerText; 74 | if (props.onChange) { 75 | props.onChange(e.target.innerHTML, text); 76 | } 77 | var range = this.editor.getSelectedRange(); 78 | if (text && range[0] == range[1]) { 79 | if (props.mergeTags) { 80 | var lastChar = range[0] - 1; 81 | if (lastChar >= 0 && lastChar < text.length) { 82 | var trigger = text[lastChar]; 83 | for (var i = 0; i < props.mergeTags.length; i++) { 84 | if (trigger == props.mergeTags[i].trigger) { 85 | state.showMergeTags = true; 86 | state.tags = props.mergeTags[i].tags; 87 | this.setState(state); 88 | break; 89 | } 90 | } 91 | } 92 | } 93 | } 94 | }; 95 | TrixEditor.prototype.handleUpload = function (e) { 96 | var attachment = e.attachment; 97 | if (attachment.file) { 98 | return this.uploadAttachment(attachment); 99 | } 100 | }; 101 | TrixEditor.prototype.uploadAttachment = function (attachment) { 102 | var file, form, xhr; 103 | file = attachment.file; 104 | form = new FormData(); 105 | if (this.props.uploadData) { 106 | for (var k in this.props.uploadData) { 107 | form.append(k, this.props.uploadData[k]); 108 | } 109 | } 110 | form.append((this.props.fileParamName || "file"), file); 111 | xhr = new XMLHttpRequest(); 112 | xhr.open("POST", this.props.uploadURL, true); 113 | xhr.upload.onprogress = function (event) { 114 | var progress = event.loaded / event.total * 100; 115 | return attachment.setUploadProgress(progress); 116 | }; 117 | xhr.onload = function () { 118 | var href, url; 119 | if (xhr.status >= 200 && xhr.status < 300) { 120 | url = href = xhr.responseText; 121 | return attachment.setAttributes({ 122 | url: url, 123 | href: href 124 | }); 125 | } 126 | }; 127 | return xhr.send(form); 128 | }; 129 | TrixEditor.prototype.handleTagSelected = function (t, e) { 130 | e.preventDefault(); 131 | var state = this.state; 132 | state.showMergeTags = false; 133 | this.setState(state); 134 | this.editor.expandSelectionInDirection("backward"); 135 | this.editor.insertString(t.tag); 136 | }; 137 | TrixEditor.prototype.renderTagSelector = function (tags) { 138 | var _this = this; 139 | if (!tags || !this.editor) { 140 | return null; 141 | } 142 | var editorPosition = document.getElementById("trix-editor-top-level-" + this.id).getBoundingClientRect(); 143 | var rect = this.editor.getClientRectAtPosition(this.editor.getSelectedRange()[0]); 144 | var boxStyle = { 145 | "position": "absolute", 146 | "top": rect.top + 25 - editorPosition.top, 147 | "left": rect.left + 25 - editorPosition.left, 148 | "width": "250px", 149 | "boxSizing": "border-box", 150 | "padding": 0, 151 | "margin": ".2em 0 0", 152 | "backgroundColor": "hsla(0,0%,100%,.9)", 153 | "borderRadius": ".3em", 154 | "background": "linear-gradient(to bottom right, white, hsla(0,0%,100%,.8))", 155 | "border": "1px solid rgba(0,0,0,.3)", 156 | "boxShadow": ".05em .2em .6em rgba(0,0,0,.2)", 157 | "textShadow": "none" 158 | }; 159 | var tagStyle = { 160 | "display": "block", 161 | "padding": ".2em .5em", 162 | "cursor": "pointer" 163 | }; 164 | return (React.createElement("div", { style: boxStyle, className: "react-trix-suggestions" }, tags.map(function (t) { 165 | return React.createElement("a", { key: t.name, style: tagStyle, href: "#", onClick: _this.handleTagSelected.bind(_this, t) }, t.name); 166 | }))); 167 | }; 168 | TrixEditor.prototype.render = function () { 169 | var _this = this; 170 | var state = this.state; 171 | var props = this.props; 172 | var attributes = { 173 | "id": "editor-" + this.id, 174 | "input": "input-" + this.id 175 | }; 176 | if (props.className) { 177 | attributes["class"] = props.className; 178 | } 179 | if (props.autoFocus) { 180 | attributes["autofocus"] = props.autoFocus.toString(); 181 | } 182 | if (props.placeholder) { 183 | attributes["placeholder"] = props.placeholder; 184 | } 185 | if (props.toolbar) { 186 | attributes["toolbar"] = props.toolbar; 187 | } 188 | var mergetags = null; 189 | if (state.showMergeTags) { 190 | mergetags = this.renderTagSelector(state.tags); 191 | } 192 | return (React.createElement("div", { id: "trix-editor-top-level-" + this.id, ref: function (d) { return _this.d = d; }, style: { "position": "relative" } }, 193 | React.createElement("trix-editor", attributes), 194 | React.createElement("input", { type: "hidden", id: "input-" + this.id, value: this.props.value }), 195 | mergetags)); 196 | }; 197 | return TrixEditor; 198 | }(React.Component)); 199 | exports.TrixEditor = TrixEditor; 200 | //# sourceMappingURL=react-trix.js.map -------------------------------------------------------------------------------- /lib/react-trix.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"react-trix.js","sourceRoot":"","sources":["../src/react-trix.tsx"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | exports.TrixEditor = require("./lib/react-trix").TrixEditor; 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-trix", 3 | "version": "0.10.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.21.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", 10 | "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.18.6" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.19.1", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 19 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.18.6", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 25 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.18.6", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "js-tokens": { 34 | "version": "4.0.0", 35 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 36 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 37 | "dev": true 38 | } 39 | } 40 | }, 41 | "@lezer/common": { 42 | "version": "0.15.12", 43 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", 44 | "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", 45 | "dev": true 46 | }, 47 | "@lezer/lr": { 48 | "version": "0.15.8", 49 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", 50 | "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", 51 | "dev": true, 52 | "requires": { 53 | "@lezer/common": "^0.15.0" 54 | } 55 | }, 56 | "@lmdb/lmdb-darwin-arm64": { 57 | "version": "2.7.11", 58 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.7.11.tgz", 59 | "integrity": "sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw==", 60 | "dev": true, 61 | "optional": true 62 | }, 63 | "@lmdb/lmdb-darwin-x64": { 64 | "version": "2.7.11", 65 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.7.11.tgz", 66 | "integrity": "sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q==", 67 | "dev": true, 68 | "optional": true 69 | }, 70 | "@lmdb/lmdb-linux-arm": { 71 | "version": "2.7.11", 72 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.7.11.tgz", 73 | "integrity": "sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw==", 74 | "dev": true, 75 | "optional": true 76 | }, 77 | "@lmdb/lmdb-linux-arm64": { 78 | "version": "2.7.11", 79 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.7.11.tgz", 80 | "integrity": "sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A==", 81 | "dev": true, 82 | "optional": true 83 | }, 84 | "@lmdb/lmdb-linux-x64": { 85 | "version": "2.7.11", 86 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz", 87 | "integrity": "sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==", 88 | "dev": true, 89 | "optional": true 90 | }, 91 | "@lmdb/lmdb-win32-x64": { 92 | "version": "2.7.11", 93 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.7.11.tgz", 94 | "integrity": "sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng==", 95 | "dev": true, 96 | "optional": true 97 | }, 98 | "@mischnic/json-sourcemap": { 99 | "version": "0.1.0", 100 | "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", 101 | "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", 102 | "dev": true, 103 | "requires": { 104 | "@lezer/common": "^0.15.7", 105 | "@lezer/lr": "^0.15.4", 106 | "json5": "^2.2.1" 107 | }, 108 | "dependencies": { 109 | "json5": { 110 | "version": "2.2.3", 111 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 112 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 113 | "dev": true 114 | } 115 | } 116 | }, 117 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": { 118 | "version": "3.0.2", 119 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", 120 | "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", 121 | "dev": true, 122 | "optional": true 123 | }, 124 | "@msgpackr-extract/msgpackr-extract-darwin-x64": { 125 | "version": "3.0.2", 126 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", 127 | "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", 128 | "dev": true, 129 | "optional": true 130 | }, 131 | "@msgpackr-extract/msgpackr-extract-linux-arm": { 132 | "version": "3.0.2", 133 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", 134 | "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", 135 | "dev": true, 136 | "optional": true 137 | }, 138 | "@msgpackr-extract/msgpackr-extract-linux-arm64": { 139 | "version": "3.0.2", 140 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", 141 | "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", 142 | "dev": true, 143 | "optional": true 144 | }, 145 | "@msgpackr-extract/msgpackr-extract-linux-x64": { 146 | "version": "3.0.2", 147 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", 148 | "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", 149 | "dev": true, 150 | "optional": true 151 | }, 152 | "@msgpackr-extract/msgpackr-extract-win32-x64": { 153 | "version": "3.0.2", 154 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", 155 | "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", 156 | "dev": true, 157 | "optional": true 158 | }, 159 | "@parcel/bundler-default": { 160 | "version": "2.9.1", 161 | "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.9.1.tgz", 162 | "integrity": "sha512-gNTaSQpp7jiFvkQ/P/KfAiVLT3UOEs5bBivQm4OMdgSi2DTIsjGMQVQ7JDzvzEzrHiFlDmdXKxUagex54pOtJg==", 163 | "dev": true, 164 | "requires": { 165 | "@parcel/diagnostic": "2.9.1", 166 | "@parcel/graph": "2.9.1", 167 | "@parcel/hash": "2.9.1", 168 | "@parcel/plugin": "2.9.1", 169 | "@parcel/utils": "2.9.1", 170 | "nullthrows": "^1.1.1" 171 | } 172 | }, 173 | "@parcel/cache": { 174 | "version": "2.9.1", 175 | "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.9.1.tgz", 176 | "integrity": "sha512-2aFWUAi7vkcnIdfOw3oW/vhgvwv9MPb+LjmJSkE59nNUuSJe83jJFAPAhqQTHd9L3kX/Xk+xJBNYNubUq/Cieg==", 177 | "dev": true, 178 | "requires": { 179 | "@parcel/fs": "2.9.1", 180 | "@parcel/logger": "2.9.1", 181 | "@parcel/utils": "2.9.1", 182 | "lmdb": "2.7.11" 183 | } 184 | }, 185 | "@parcel/codeframe": { 186 | "version": "2.9.1", 187 | "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.9.1.tgz", 188 | "integrity": "sha512-qLVIyEHuZq8wWYaXVAwxMzlK3QqWlaB5fUSe1n+kITEa9EEwb2WPmysYAsWiVaFdD62A0+1klJ8Sq9gapOMIng==", 189 | "dev": true, 190 | "requires": { 191 | "chalk": "^4.1.0" 192 | }, 193 | "dependencies": { 194 | "ansi-styles": { 195 | "version": "4.3.0", 196 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 197 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 198 | "dev": true, 199 | "requires": { 200 | "color-convert": "^2.0.1" 201 | } 202 | }, 203 | "chalk": { 204 | "version": "4.1.2", 205 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 206 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 207 | "dev": true, 208 | "requires": { 209 | "ansi-styles": "^4.1.0", 210 | "supports-color": "^7.1.0" 211 | } 212 | }, 213 | "color-convert": { 214 | "version": "2.0.1", 215 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 216 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 217 | "dev": true, 218 | "requires": { 219 | "color-name": "~1.1.4" 220 | } 221 | }, 222 | "color-name": { 223 | "version": "1.1.4", 224 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 225 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 226 | "dev": true 227 | } 228 | } 229 | }, 230 | "@parcel/compressor-raw": { 231 | "version": "2.9.1", 232 | "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.9.1.tgz", 233 | "integrity": "sha512-aUkZ0pOzGjQ9kyaUQ/suDVmU5lR4mT9fU5HXlp3hGD7MWh2HFJUOfQ3gp5g3P9x+MeVZKU+ht6UcIMhrzelLGQ==", 234 | "dev": true, 235 | "requires": { 236 | "@parcel/plugin": "2.9.1" 237 | } 238 | }, 239 | "@parcel/config-default": { 240 | "version": "2.9.1", 241 | "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.9.1.tgz", 242 | "integrity": "sha512-oH6NHKaKp2YBHOcQJxwHGPbgGCZZZH1I4eef+KRBFiabgiDQxHLni+vg+c+mErd8lFrNn2gcGIdKzQwWqavT+w==", 243 | "dev": true, 244 | "requires": { 245 | "@parcel/bundler-default": "2.9.1", 246 | "@parcel/compressor-raw": "2.9.1", 247 | "@parcel/namer-default": "2.9.1", 248 | "@parcel/optimizer-css": "2.9.1", 249 | "@parcel/optimizer-htmlnano": "2.9.1", 250 | "@parcel/optimizer-image": "2.9.1", 251 | "@parcel/optimizer-svgo": "2.9.1", 252 | "@parcel/optimizer-swc": "2.9.1", 253 | "@parcel/packager-css": "2.9.1", 254 | "@parcel/packager-html": "2.9.1", 255 | "@parcel/packager-js": "2.9.1", 256 | "@parcel/packager-raw": "2.9.1", 257 | "@parcel/packager-svg": "2.9.1", 258 | "@parcel/reporter-dev-server": "2.9.1", 259 | "@parcel/resolver-default": "2.9.1", 260 | "@parcel/runtime-browser-hmr": "2.9.1", 261 | "@parcel/runtime-js": "2.9.1", 262 | "@parcel/runtime-react-refresh": "2.9.1", 263 | "@parcel/runtime-service-worker": "2.9.1", 264 | "@parcel/transformer-babel": "2.9.1", 265 | "@parcel/transformer-css": "2.9.1", 266 | "@parcel/transformer-html": "2.9.1", 267 | "@parcel/transformer-image": "2.9.1", 268 | "@parcel/transformer-js": "2.9.1", 269 | "@parcel/transformer-json": "2.9.1", 270 | "@parcel/transformer-postcss": "2.9.1", 271 | "@parcel/transformer-posthtml": "2.9.1", 272 | "@parcel/transformer-raw": "2.9.1", 273 | "@parcel/transformer-react-refresh-wrap": "2.9.1", 274 | "@parcel/transformer-svg": "2.9.1" 275 | } 276 | }, 277 | "@parcel/core": { 278 | "version": "2.9.1", 279 | "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.9.1.tgz", 280 | "integrity": "sha512-D/7iyRV5c8kYMV1JGkokktxh3ON5CMvNAllaBucl4SMatAyLo5aLjGG5ey6FD/4Tv+JJ6NsldLtkvciDVJdgFQ==", 281 | "dev": true, 282 | "requires": { 283 | "@mischnic/json-sourcemap": "^0.1.0", 284 | "@parcel/cache": "2.9.1", 285 | "@parcel/diagnostic": "2.9.1", 286 | "@parcel/events": "2.9.1", 287 | "@parcel/fs": "2.9.1", 288 | "@parcel/graph": "2.9.1", 289 | "@parcel/hash": "2.9.1", 290 | "@parcel/logger": "2.9.1", 291 | "@parcel/package-manager": "2.9.1", 292 | "@parcel/plugin": "2.9.1", 293 | "@parcel/profiler": "2.9.1", 294 | "@parcel/source-map": "^2.1.1", 295 | "@parcel/types": "2.9.1", 296 | "@parcel/utils": "2.9.1", 297 | "@parcel/workers": "2.9.1", 298 | "abortcontroller-polyfill": "^1.1.9", 299 | "base-x": "^3.0.8", 300 | "browserslist": "^4.6.6", 301 | "clone": "^2.1.1", 302 | "dotenv": "^7.0.0", 303 | "dotenv-expand": "^5.1.0", 304 | "json5": "^2.2.0", 305 | "msgpackr": "^1.5.4", 306 | "nullthrows": "^1.1.1", 307 | "semver": "^5.7.1" 308 | }, 309 | "dependencies": { 310 | "json5": { 311 | "version": "2.2.3", 312 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 313 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 314 | "dev": true 315 | } 316 | } 317 | }, 318 | "@parcel/diagnostic": { 319 | "version": "2.9.1", 320 | "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.9.1.tgz", 321 | "integrity": "sha512-LM+w4maoAsjcL+javaHw9B9oEQoLdg/fMCNbuTmAKpQWi16hfNkr4+xz7AxxwL3dCcL7uuvVgoUOUubwxWNLAA==", 322 | "dev": true, 323 | "requires": { 324 | "@mischnic/json-sourcemap": "^0.1.0", 325 | "nullthrows": "^1.1.1" 326 | } 327 | }, 328 | "@parcel/events": { 329 | "version": "2.9.1", 330 | "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.9.1.tgz", 331 | "integrity": "sha512-tga4FiJB1TC4iOKBK66e9zXpcDFXvJhXmsgOMsgSTM6uCZMXeGaYEixHNlPDs3HTfg17qAmHHlhfgPBbku/aOg==", 332 | "dev": true 333 | }, 334 | "@parcel/fs": { 335 | "version": "2.9.1", 336 | "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.9.1.tgz", 337 | "integrity": "sha512-F/GRHtHN4AuTauadsq/UQ1OSpLBLAS/96Sv1x09/AKZxNlZ2UzWExoYEhSkVM5smKVzSnx8XP9OqABcHcZwOLQ==", 338 | "dev": true, 339 | "requires": { 340 | "@parcel/fs-search": "2.9.1", 341 | "@parcel/types": "2.9.1", 342 | "@parcel/utils": "2.9.1", 343 | "@parcel/watcher": "^2.0.7", 344 | "@parcel/workers": "2.9.1" 345 | } 346 | }, 347 | "@parcel/fs-search": { 348 | "version": "2.9.1", 349 | "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.9.1.tgz", 350 | "integrity": "sha512-F7SkVsMb5XYcWmeptLz5D3g76Raed3dmNulJMrWIECP8lJ1LUcCExQId7NsdeCfRbNRwaf84gdsjc/1GKM/QYg==", 351 | "dev": true 352 | }, 353 | "@parcel/graph": { 354 | "version": "2.9.1", 355 | "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.9.1.tgz", 356 | "integrity": "sha512-fc/Yk1XPzo3ZHhKS7l5aETAEBpnF0nK+0TawkNrQ2rcL21MG1kHNYSR8uBwOqyXmBSMEItals5Ixgd8fWa+9PQ==", 357 | "dev": true, 358 | "requires": { 359 | "nullthrows": "^1.1.1" 360 | } 361 | }, 362 | "@parcel/hash": { 363 | "version": "2.9.1", 364 | "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.9.1.tgz", 365 | "integrity": "sha512-fiqAIi/23h5tnH5W7DRTwOhfRPhadHvI7hYoG8YFGvnFxSQ/XCnOID0B0/vNhaluICSPeFcedjAmDVdqY6/X7w==", 366 | "dev": true, 367 | "requires": { 368 | "xxhash-wasm": "^0.4.2" 369 | } 370 | }, 371 | "@parcel/logger": { 372 | "version": "2.9.1", 373 | "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.9.1.tgz", 374 | "integrity": "sha512-wUH9ShrRr3RwNa75ymegDIAdJiY3dGB7HCgIP6VOOc2CGyGA2DJKbbYGfw5mkl3DV8lUV+dYsWYMGXZhInAQCQ==", 375 | "dev": true, 376 | "requires": { 377 | "@parcel/diagnostic": "2.9.1", 378 | "@parcel/events": "2.9.1" 379 | } 380 | }, 381 | "@parcel/markdown-ansi": { 382 | "version": "2.9.1", 383 | "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.9.1.tgz", 384 | "integrity": "sha512-FpOz2ltnKnm6QaQCdcpuAEwGuScVUq0ixT/QAmU7A3/cwlsoxqMkB2XeWYIVTjs7p7Bsu0Ctdid/6pdtP7ghpg==", 385 | "dev": true, 386 | "requires": { 387 | "chalk": "^4.1.0" 388 | }, 389 | "dependencies": { 390 | "ansi-styles": { 391 | "version": "4.3.0", 392 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 393 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 394 | "dev": true, 395 | "requires": { 396 | "color-convert": "^2.0.1" 397 | } 398 | }, 399 | "chalk": { 400 | "version": "4.1.2", 401 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 402 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 403 | "dev": true, 404 | "requires": { 405 | "ansi-styles": "^4.1.0", 406 | "supports-color": "^7.1.0" 407 | } 408 | }, 409 | "color-convert": { 410 | "version": "2.0.1", 411 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 412 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 413 | "dev": true, 414 | "requires": { 415 | "color-name": "~1.1.4" 416 | } 417 | }, 418 | "color-name": { 419 | "version": "1.1.4", 420 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 421 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 422 | "dev": true 423 | } 424 | } 425 | }, 426 | "@parcel/namer-default": { 427 | "version": "2.9.1", 428 | "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.9.1.tgz", 429 | "integrity": "sha512-XHpAc5JLQchUqRrYqnUvinReR2nCyiD+DhIedMW5hURwlCPBlfcTVf6M5kSSpjzqRDVKezx3TFF6dzZNv0fBJQ==", 430 | "dev": true, 431 | "requires": { 432 | "@parcel/diagnostic": "2.9.1", 433 | "@parcel/plugin": "2.9.1", 434 | "nullthrows": "^1.1.1" 435 | } 436 | }, 437 | "@parcel/node-resolver-core": { 438 | "version": "3.0.1", 439 | "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.0.1.tgz", 440 | "integrity": "sha512-4owokOoHCONeazQGndB4PkIaUhZfyWuCT7Sx4UJc2UhR1V82MlahHrT2ItT0pkQyKWwCSNgHdBgdKUgKRdIiAw==", 441 | "dev": true, 442 | "requires": { 443 | "@mischnic/json-sourcemap": "^0.1.0", 444 | "@parcel/diagnostic": "2.9.1", 445 | "@parcel/fs": "2.9.1", 446 | "@parcel/utils": "2.9.1", 447 | "nullthrows": "^1.1.1", 448 | "semver": "^5.7.1" 449 | } 450 | }, 451 | "@parcel/optimizer-css": { 452 | "version": "2.9.1", 453 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.9.1.tgz", 454 | "integrity": "sha512-IYQpV0kc0KN/aqRAWQsZ8b2pbI4ha4T5HAi27lTGIhQNvEixUtf0gJvCJVSlBxpdMiXVJq9pp97UamoNuB6oig==", 455 | "dev": true, 456 | "requires": { 457 | "@parcel/diagnostic": "2.9.1", 458 | "@parcel/plugin": "2.9.1", 459 | "@parcel/source-map": "^2.1.1", 460 | "@parcel/utils": "2.9.1", 461 | "browserslist": "^4.6.6", 462 | "lightningcss": "^1.16.1", 463 | "nullthrows": "^1.1.1" 464 | } 465 | }, 466 | "@parcel/optimizer-htmlnano": { 467 | "version": "2.9.1", 468 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.9.1.tgz", 469 | "integrity": "sha512-t/e9XsoXZViqOFWcz3LlEClCOYNCjP6MIo+p+WmAuc5+QFF0/9viNqgRbhVe8V1tbtRofxsm4BossFOjOBSjmg==", 470 | "dev": true, 471 | "requires": { 472 | "@parcel/plugin": "2.9.1", 473 | "htmlnano": "^2.0.0", 474 | "nullthrows": "^1.1.1", 475 | "posthtml": "^0.16.5", 476 | "svgo": "^2.4.0" 477 | } 478 | }, 479 | "@parcel/optimizer-image": { 480 | "version": "2.9.1", 481 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.9.1.tgz", 482 | "integrity": "sha512-Ml51RUGbQXyoHZ9yhyal8J/khZeWZX5J8NPOEvkCmmOkxo/qM4CMPIvJStzzn5K7mOPRKUheDkM/QoNGO5gTwA==", 483 | "dev": true, 484 | "requires": { 485 | "@parcel/diagnostic": "2.9.1", 486 | "@parcel/plugin": "2.9.1", 487 | "@parcel/utils": "2.9.1", 488 | "@parcel/workers": "2.9.1" 489 | } 490 | }, 491 | "@parcel/optimizer-svgo": { 492 | "version": "2.9.1", 493 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.9.1.tgz", 494 | "integrity": "sha512-8XHSEIjJfdTFtUQzRiy0K+fbvdcheYc+azdyuJPnIV5AX04k4heKwp7uH328Ylk2k0JkfDyQmjFEyPj9qWDadQ==", 495 | "dev": true, 496 | "requires": { 497 | "@parcel/diagnostic": "2.9.1", 498 | "@parcel/plugin": "2.9.1", 499 | "@parcel/utils": "2.9.1", 500 | "svgo": "^2.4.0" 501 | } 502 | }, 503 | "@parcel/optimizer-swc": { 504 | "version": "2.9.1", 505 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.9.1.tgz", 506 | "integrity": "sha512-bLDkAwkmFE8YZNHcfJNj22haSLXrqjZkGXbPgGDkanCUS52yWv1+OFZ+6frX2q4EdXaTX8nFZSJL4VPHZZiUGQ==", 507 | "dev": true, 508 | "requires": { 509 | "@parcel/diagnostic": "2.9.1", 510 | "@parcel/plugin": "2.9.1", 511 | "@parcel/source-map": "^2.1.1", 512 | "@parcel/utils": "2.9.1", 513 | "@swc/core": "^1.3.36", 514 | "nullthrows": "^1.1.1" 515 | } 516 | }, 517 | "@parcel/package-manager": { 518 | "version": "2.9.1", 519 | "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.9.1.tgz", 520 | "integrity": "sha512-cTUBUPRm62770Vw4YG5WGlkFxJII320nSobbP0TMggE/CGXg3ru2pvvX6WqXTFAHeM/z78xTPDq0NP97DBp5Ow==", 521 | "dev": true, 522 | "requires": { 523 | "@parcel/diagnostic": "2.9.1", 524 | "@parcel/fs": "2.9.1", 525 | "@parcel/logger": "2.9.1", 526 | "@parcel/node-resolver-core": "3.0.1", 527 | "@parcel/types": "2.9.1", 528 | "@parcel/utils": "2.9.1", 529 | "@parcel/workers": "2.9.1", 530 | "semver": "^5.7.1" 531 | } 532 | }, 533 | "@parcel/packager-css": { 534 | "version": "2.9.1", 535 | "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.9.1.tgz", 536 | "integrity": "sha512-efMShrIwVBY9twZTGQ5QFwl9H3xJg8nSjl/xgOGq9rrbkmcrVlfSgPL9ExNx75EvmOwOKxZjFiMsNYNICPNfgg==", 537 | "dev": true, 538 | "requires": { 539 | "@parcel/diagnostic": "2.9.1", 540 | "@parcel/plugin": "2.9.1", 541 | "@parcel/source-map": "^2.1.1", 542 | "@parcel/utils": "2.9.1", 543 | "nullthrows": "^1.1.1" 544 | } 545 | }, 546 | "@parcel/packager-html": { 547 | "version": "2.9.1", 548 | "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.9.1.tgz", 549 | "integrity": "sha512-mP7iIwyFDZ21XwD2SlwZoSrvKpS5Amlpi/ywd0dLdwQb5TL+Q2f05IcRNfFbWdVd1AJycDQ85ERokNKN3QPMkg==", 550 | "dev": true, 551 | "requires": { 552 | "@parcel/plugin": "2.9.1", 553 | "@parcel/types": "2.9.1", 554 | "@parcel/utils": "2.9.1", 555 | "nullthrows": "^1.1.1", 556 | "posthtml": "^0.16.5" 557 | } 558 | }, 559 | "@parcel/packager-js": { 560 | "version": "2.9.1", 561 | "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.9.1.tgz", 562 | "integrity": "sha512-MmeKdp/obO36M8Y9yYAFiFkdhRFbQtYGSxbMwm2JVtRKMcFmlR5KzqLUg67OX6qgKw5lZZ1TkYhSI0hQQ6+Vqw==", 563 | "dev": true, 564 | "requires": { 565 | "@parcel/diagnostic": "2.9.1", 566 | "@parcel/hash": "2.9.1", 567 | "@parcel/plugin": "2.9.1", 568 | "@parcel/source-map": "^2.1.1", 569 | "@parcel/utils": "2.9.1", 570 | "globals": "^13.2.0", 571 | "nullthrows": "^1.1.1" 572 | } 573 | }, 574 | "@parcel/packager-raw": { 575 | "version": "2.9.1", 576 | "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.9.1.tgz", 577 | "integrity": "sha512-qHJ389R5cLgR2PcJt8sOrNBcAY0qpZRMTOMgkc9zYkKy1tdUMgCUuDfO1kShfv4E7rr084mtlu9tK8MXChyF6w==", 578 | "dev": true, 579 | "requires": { 580 | "@parcel/plugin": "2.9.1" 581 | } 582 | }, 583 | "@parcel/packager-svg": { 584 | "version": "2.9.1", 585 | "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.9.1.tgz", 586 | "integrity": "sha512-aRzuiwcUlNATfSIbeYpDkJXvwdiAAbiQlxSz6cI53NqWwZn+Dn79WyiKPBST14ij4/P3ZjkcwXevqHpvXP/ArQ==", 587 | "dev": true, 588 | "requires": { 589 | "@parcel/plugin": "2.9.1", 590 | "@parcel/types": "2.9.1", 591 | "@parcel/utils": "2.9.1", 592 | "posthtml": "^0.16.4" 593 | } 594 | }, 595 | "@parcel/plugin": { 596 | "version": "2.9.1", 597 | "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.9.1.tgz", 598 | "integrity": "sha512-kD+BNkPGRcxZZUKhAXqF/bilUMhXUlf/ZixVlBS5rEsUB1yx/Ze8c4ypaKr5WsEwv34C+X4p4WFYdZVJEr3Y+g==", 599 | "dev": true, 600 | "requires": { 601 | "@parcel/types": "2.9.1" 602 | } 603 | }, 604 | "@parcel/profiler": { 605 | "version": "2.9.1", 606 | "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.9.1.tgz", 607 | "integrity": "sha512-hrptwbh9uUxnWHAAXiZ6BtpM74cU+VfrOWgnmUA8pkYWBmrb2wSLeqRKl8FiSt+nfRTTbNAIlmn9vk2x+wRNOA==", 608 | "dev": true, 609 | "requires": { 610 | "@parcel/diagnostic": "2.9.1", 611 | "@parcel/events": "2.9.1", 612 | "chrome-trace-event": "^1.0.2" 613 | } 614 | }, 615 | "@parcel/reporter-cli": { 616 | "version": "2.9.1", 617 | "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.9.1.tgz", 618 | "integrity": "sha512-xzJaaHQwcsmHijlCl7gOAdqU0n6AnW7c7rN8AXDH8BvnOx2v8NC8nCIEmDTOfpQYepcuER2+ilTQ7jpDx/iDhg==", 619 | "dev": true, 620 | "requires": { 621 | "@parcel/plugin": "2.9.1", 622 | "@parcel/types": "2.9.1", 623 | "@parcel/utils": "2.9.1", 624 | "chalk": "^4.1.0", 625 | "term-size": "^2.2.1" 626 | }, 627 | "dependencies": { 628 | "ansi-styles": { 629 | "version": "4.3.0", 630 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 631 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 632 | "dev": true, 633 | "requires": { 634 | "color-convert": "^2.0.1" 635 | } 636 | }, 637 | "chalk": { 638 | "version": "4.1.2", 639 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 640 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 641 | "dev": true, 642 | "requires": { 643 | "ansi-styles": "^4.1.0", 644 | "supports-color": "^7.1.0" 645 | } 646 | }, 647 | "color-convert": { 648 | "version": "2.0.1", 649 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 650 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 651 | "dev": true, 652 | "requires": { 653 | "color-name": "~1.1.4" 654 | } 655 | }, 656 | "color-name": { 657 | "version": "1.1.4", 658 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 659 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 660 | "dev": true 661 | } 662 | } 663 | }, 664 | "@parcel/reporter-dev-server": { 665 | "version": "2.9.1", 666 | "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.9.1.tgz", 667 | "integrity": "sha512-Wa9kmtnuYTqEsKakhrSLvZmWxM4TB+Dg2jl1vC3gYfvlsgt/d/Hp/y2giPH1EeCm4wEEQfdAY3WmSUx9p1x07w==", 668 | "dev": true, 669 | "requires": { 670 | "@parcel/plugin": "2.9.1", 671 | "@parcel/utils": "2.9.1" 672 | } 673 | }, 674 | "@parcel/reporter-tracer": { 675 | "version": "2.9.1", 676 | "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.9.1.tgz", 677 | "integrity": "sha512-LgZKx9qwBAChWHBcpHW8GJXz45IGtiPmzs6HIDavZOiGqjGVzmbHUKxHnFaRZqR6WznJ+0ay/2o+BrJ8cyXUcg==", 678 | "dev": true, 679 | "requires": { 680 | "@parcel/plugin": "2.9.1", 681 | "@parcel/utils": "2.9.1", 682 | "chrome-trace-event": "^1.0.3", 683 | "nullthrows": "^1.1.1" 684 | } 685 | }, 686 | "@parcel/resolver-default": { 687 | "version": "2.9.1", 688 | "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.9.1.tgz", 689 | "integrity": "sha512-Q+knNaRDTbGIGqUnddtWEgpYduVBkDyi/CpxKpi7dP7sVYNJsXwEf82hpjX6/XqotA5dehT63yJkvJ/wxJF1Nw==", 690 | "dev": true, 691 | "requires": { 692 | "@parcel/node-resolver-core": "3.0.1", 693 | "@parcel/plugin": "2.9.1" 694 | } 695 | }, 696 | "@parcel/runtime-browser-hmr": { 697 | "version": "2.9.1", 698 | "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.9.1.tgz", 699 | "integrity": "sha512-C+023FOsrycpBHUgUf7Nv4uN0NrLN3UkeymsAHQlgZD5QQD7+nhG6p9PQ7+HbbEAaGaeO7c/86s2qRUglufNig==", 700 | "dev": true, 701 | "requires": { 702 | "@parcel/plugin": "2.9.1", 703 | "@parcel/utils": "2.9.1" 704 | } 705 | }, 706 | "@parcel/runtime-js": { 707 | "version": "2.9.1", 708 | "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.9.1.tgz", 709 | "integrity": "sha512-caT1s1BqYNFGFAz9ul7uwDf+ZXzipiYYoHphhmT2JFweQmRA1CrMeFCuCQa2exsdu+UQpRbuKd+v5UUS2n0poQ==", 710 | "dev": true, 711 | "requires": { 712 | "@parcel/diagnostic": "2.9.1", 713 | "@parcel/plugin": "2.9.1", 714 | "@parcel/utils": "2.9.1", 715 | "nullthrows": "^1.1.1" 716 | } 717 | }, 718 | "@parcel/runtime-react-refresh": { 719 | "version": "2.9.1", 720 | "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.9.1.tgz", 721 | "integrity": "sha512-opDW9p3f4gVc1aVdFAyLWTL+2S8rhsPdBQRBHEi4WE2DRe/9lpA12NN5KUUHy88dlIr3wyzmaO2Fts0r/x80zg==", 722 | "dev": true, 723 | "requires": { 724 | "@parcel/plugin": "2.9.1", 725 | "@parcel/utils": "2.9.1", 726 | "react-error-overlay": "6.0.9", 727 | "react-refresh": "^0.9.0" 728 | } 729 | }, 730 | "@parcel/runtime-service-worker": { 731 | "version": "2.9.1", 732 | "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.9.1.tgz", 733 | "integrity": "sha512-TED4MouYjP7xbU9V7/3rjnmuWbCefrP+OC+eQJG6j3HwKiL92QTZ6trWqdLuxFhtZMXKjwbWaBBbIcELB/PbtQ==", 734 | "dev": true, 735 | "requires": { 736 | "@parcel/plugin": "2.9.1", 737 | "@parcel/utils": "2.9.1", 738 | "nullthrows": "^1.1.1" 739 | } 740 | }, 741 | "@parcel/source-map": { 742 | "version": "2.1.1", 743 | "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", 744 | "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", 745 | "dev": true, 746 | "requires": { 747 | "detect-libc": "^1.0.3" 748 | } 749 | }, 750 | "@parcel/transformer-babel": { 751 | "version": "2.9.1", 752 | "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.9.1.tgz", 753 | "integrity": "sha512-HEU3bavD9Cu0RP5T1ioGLbsOQDqND/SQWal8L2f9HsgwTs2kzmTxYylNccqNjAMj3NnoyXzKMKbZyG8qEuLlpw==", 754 | "dev": true, 755 | "requires": { 756 | "@parcel/diagnostic": "2.9.1", 757 | "@parcel/plugin": "2.9.1", 758 | "@parcel/source-map": "^2.1.1", 759 | "@parcel/utils": "2.9.1", 760 | "browserslist": "^4.6.6", 761 | "json5": "^2.2.0", 762 | "nullthrows": "^1.1.1", 763 | "semver": "^5.7.0" 764 | }, 765 | "dependencies": { 766 | "json5": { 767 | "version": "2.2.3", 768 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 769 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 770 | "dev": true 771 | } 772 | } 773 | }, 774 | "@parcel/transformer-css": { 775 | "version": "2.9.1", 776 | "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.9.1.tgz", 777 | "integrity": "sha512-nT+xOfyveX6qSb088dOh59HWJ1gm7DAIQZPbjTa1wLzRQul8ysdQRf/loulBmtUheol7YwQtVvUHN2XgoMDCAw==", 778 | "dev": true, 779 | "requires": { 780 | "@parcel/diagnostic": "2.9.1", 781 | "@parcel/plugin": "2.9.1", 782 | "@parcel/source-map": "^2.1.1", 783 | "@parcel/utils": "2.9.1", 784 | "browserslist": "^4.6.6", 785 | "lightningcss": "^1.16.1", 786 | "nullthrows": "^1.1.1" 787 | } 788 | }, 789 | "@parcel/transformer-html": { 790 | "version": "2.9.1", 791 | "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.9.1.tgz", 792 | "integrity": "sha512-pIkJbcB91Dl2RyZmVd9neGkf7XJeYXwgx0et5hktw+3m0S2QB399OjVWwi5Q6ZdtTrWkQnHLmbeHT3NOmNWlaw==", 793 | "dev": true, 794 | "requires": { 795 | "@parcel/diagnostic": "2.9.1", 796 | "@parcel/hash": "2.9.1", 797 | "@parcel/plugin": "2.9.1", 798 | "nullthrows": "^1.1.1", 799 | "posthtml": "^0.16.5", 800 | "posthtml-parser": "^0.10.1", 801 | "posthtml-render": "^3.0.0", 802 | "semver": "^5.7.1", 803 | "srcset": "4" 804 | }, 805 | "dependencies": { 806 | "posthtml-parser": { 807 | "version": "0.10.2", 808 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", 809 | "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", 810 | "dev": true, 811 | "requires": { 812 | "htmlparser2": "^7.1.1" 813 | } 814 | } 815 | } 816 | }, 817 | "@parcel/transformer-image": { 818 | "version": "2.9.1", 819 | "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.9.1.tgz", 820 | "integrity": "sha512-3D4zEavCM1i354ZgJWg7RBNgASA7Q2iHN374lH5hT6I7VAJzNT+PTNrPNQ4vKhi69r+i1sQQzsPdgEUXOExmbQ==", 821 | "dev": true, 822 | "requires": { 823 | "@parcel/plugin": "2.9.1", 824 | "@parcel/utils": "2.9.1", 825 | "@parcel/workers": "2.9.1", 826 | "nullthrows": "^1.1.1" 827 | } 828 | }, 829 | "@parcel/transformer-js": { 830 | "version": "2.9.1", 831 | "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.9.1.tgz", 832 | "integrity": "sha512-7hlbAIufIvx6iPspfZ3v1g2cmtpaNEaC04RzRv8HVVru8TE868yplFI840ZBnF5ylOfmxwFTUjlphVtVcPs13A==", 833 | "dev": true, 834 | "requires": { 835 | "@parcel/diagnostic": "2.9.1", 836 | "@parcel/plugin": "2.9.1", 837 | "@parcel/source-map": "^2.1.1", 838 | "@parcel/utils": "2.9.1", 839 | "@parcel/workers": "2.9.1", 840 | "@swc/helpers": "^0.5.0", 841 | "browserslist": "^4.6.6", 842 | "nullthrows": "^1.1.1", 843 | "regenerator-runtime": "^0.13.7", 844 | "semver": "^5.7.1" 845 | } 846 | }, 847 | "@parcel/transformer-json": { 848 | "version": "2.9.1", 849 | "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.9.1.tgz", 850 | "integrity": "sha512-yFRSz1qVbdCssC65D37Ru3diQk7GQl5ZOOyQ7MeMYlhvl8mcFKGRC3wUAyqBZrh70VOWuWR7WS2XLdqTdE9WqQ==", 851 | "dev": true, 852 | "requires": { 853 | "@parcel/plugin": "2.9.1", 854 | "json5": "^2.2.0" 855 | }, 856 | "dependencies": { 857 | "json5": { 858 | "version": "2.2.3", 859 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 860 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 861 | "dev": true 862 | } 863 | } 864 | }, 865 | "@parcel/transformer-postcss": { 866 | "version": "2.9.1", 867 | "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.9.1.tgz", 868 | "integrity": "sha512-sNSJbdT4Z8H+/cZ/vCmos44SfbB9O5gNgMEgGa6WqU7MV7cVlnE8zuNJkxR97ZZTpIXNrfVerOY3lOrUrFCxdA==", 869 | "dev": true, 870 | "requires": { 871 | "@parcel/diagnostic": "2.9.1", 872 | "@parcel/hash": "2.9.1", 873 | "@parcel/plugin": "2.9.1", 874 | "@parcel/utils": "2.9.1", 875 | "clone": "^2.1.1", 876 | "nullthrows": "^1.1.1", 877 | "postcss-value-parser": "^4.2.0", 878 | "semver": "^5.7.1" 879 | } 880 | }, 881 | "@parcel/transformer-posthtml": { 882 | "version": "2.9.1", 883 | "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.9.1.tgz", 884 | "integrity": "sha512-I6fr6lVAqjDxdkOwxelx7FibMWP55JPf3ZTXKCWpoIGkOuT2i2tYZMdXEHVshZWJmByelbYSC96w8P8rSY+6XQ==", 885 | "dev": true, 886 | "requires": { 887 | "@parcel/plugin": "2.9.1", 888 | "@parcel/utils": "2.9.1", 889 | "nullthrows": "^1.1.1", 890 | "posthtml": "^0.16.5", 891 | "posthtml-parser": "^0.10.1", 892 | "posthtml-render": "^3.0.0", 893 | "semver": "^5.7.1" 894 | }, 895 | "dependencies": { 896 | "posthtml-parser": { 897 | "version": "0.10.2", 898 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", 899 | "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", 900 | "dev": true, 901 | "requires": { 902 | "htmlparser2": "^7.1.1" 903 | } 904 | } 905 | } 906 | }, 907 | "@parcel/transformer-raw": { 908 | "version": "2.9.1", 909 | "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.9.1.tgz", 910 | "integrity": "sha512-Wr0Y9fETiyF5ntL3yhn/ZXjcnswcn1T9YLXa+yAxpAxKW+/D7A1jKVS0tyDOZsdakWA9gzlLP6w1O4Nl8pVmEg==", 911 | "dev": true, 912 | "requires": { 913 | "@parcel/plugin": "2.9.1" 914 | } 915 | }, 916 | "@parcel/transformer-react-refresh-wrap": { 917 | "version": "2.9.1", 918 | "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.9.1.tgz", 919 | "integrity": "sha512-ML+KDvLoZ6O+9r3/yf8DeVtobhYc9DPXYHZ75aXoFyou97I9WDf4EqlY4/MSkbZV79FUXxC68dyLJj3Q9ILqeA==", 920 | "dev": true, 921 | "requires": { 922 | "@parcel/plugin": "2.9.1", 923 | "@parcel/utils": "2.9.1", 924 | "react-refresh": "^0.9.0" 925 | } 926 | }, 927 | "@parcel/transformer-svg": { 928 | "version": "2.9.1", 929 | "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.9.1.tgz", 930 | "integrity": "sha512-DYcUfutjtghPXMVybFygncIKJl/4rrpQMxv8yTVeDtplUTvFzbI+3hIoYfYm8z9CXaSBzsCw2Kud6PD8Ob2AzQ==", 931 | "dev": true, 932 | "requires": { 933 | "@parcel/diagnostic": "2.9.1", 934 | "@parcel/hash": "2.9.1", 935 | "@parcel/plugin": "2.9.1", 936 | "nullthrows": "^1.1.1", 937 | "posthtml": "^0.16.5", 938 | "posthtml-parser": "^0.10.1", 939 | "posthtml-render": "^3.0.0", 940 | "semver": "^5.7.1" 941 | }, 942 | "dependencies": { 943 | "posthtml-parser": { 944 | "version": "0.10.2", 945 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", 946 | "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", 947 | "dev": true, 948 | "requires": { 949 | "htmlparser2": "^7.1.1" 950 | } 951 | } 952 | } 953 | }, 954 | "@parcel/types": { 955 | "version": "2.9.1", 956 | "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.9.1.tgz", 957 | "integrity": "sha512-LBx4Tvr1sK9t+FmPjS4jPvcmUcJo6co22sn0pBuz2oXISs/YK2N+3ZHXL+KsozKvLn2wXysgaWFIARN9xFoORw==", 958 | "dev": true, 959 | "requires": { 960 | "@parcel/cache": "2.9.1", 961 | "@parcel/diagnostic": "2.9.1", 962 | "@parcel/fs": "2.9.1", 963 | "@parcel/package-manager": "2.9.1", 964 | "@parcel/source-map": "^2.1.1", 965 | "@parcel/workers": "2.9.1", 966 | "utility-types": "^3.10.0" 967 | } 968 | }, 969 | "@parcel/utils": { 970 | "version": "2.9.1", 971 | "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.9.1.tgz", 972 | "integrity": "sha512-0P/zIvtvLyuzQA4VFMzA8F22lrUyGR+phve/NlBUH+4Tn+Rt/evh9fP9vG1YTVMXWd90tesLdrtqatm1hqrJSA==", 973 | "dev": true, 974 | "requires": { 975 | "@parcel/codeframe": "2.9.1", 976 | "@parcel/diagnostic": "2.9.1", 977 | "@parcel/hash": "2.9.1", 978 | "@parcel/logger": "2.9.1", 979 | "@parcel/markdown-ansi": "2.9.1", 980 | "@parcel/source-map": "^2.1.1", 981 | "chalk": "^4.1.0", 982 | "nullthrows": "^1.1.1" 983 | }, 984 | "dependencies": { 985 | "ansi-styles": { 986 | "version": "4.3.0", 987 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 988 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 989 | "dev": true, 990 | "requires": { 991 | "color-convert": "^2.0.1" 992 | } 993 | }, 994 | "chalk": { 995 | "version": "4.1.2", 996 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 997 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 998 | "dev": true, 999 | "requires": { 1000 | "ansi-styles": "^4.1.0", 1001 | "supports-color": "^7.1.0" 1002 | } 1003 | }, 1004 | "color-convert": { 1005 | "version": "2.0.1", 1006 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1007 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1008 | "dev": true, 1009 | "requires": { 1010 | "color-name": "~1.1.4" 1011 | } 1012 | }, 1013 | "color-name": { 1014 | "version": "1.1.4", 1015 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1016 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1017 | "dev": true 1018 | } 1019 | } 1020 | }, 1021 | "@parcel/watcher": { 1022 | "version": "2.1.0", 1023 | "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", 1024 | "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", 1025 | "dev": true, 1026 | "requires": { 1027 | "is-glob": "^4.0.3", 1028 | "micromatch": "^4.0.5", 1029 | "node-addon-api": "^3.2.1", 1030 | "node-gyp-build": "^4.3.0" 1031 | } 1032 | }, 1033 | "@parcel/workers": { 1034 | "version": "2.9.1", 1035 | "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.9.1.tgz", 1036 | "integrity": "sha512-24R4IRMX8TBghak6pDCzM5B8NB4LTt0pI4dwNqSENyZA/Q5s/xMbG5gdn4aTwkAyIQ5lHrgDsHzoHbjOT0HLYQ==", 1037 | "dev": true, 1038 | "requires": { 1039 | "@parcel/diagnostic": "2.9.1", 1040 | "@parcel/logger": "2.9.1", 1041 | "@parcel/profiler": "2.9.1", 1042 | "@parcel/types": "2.9.1", 1043 | "@parcel/utils": "2.9.1", 1044 | "nullthrows": "^1.1.1" 1045 | } 1046 | }, 1047 | "@swc/core": { 1048 | "version": "1.3.61", 1049 | "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.61.tgz", 1050 | "integrity": "sha512-p58Ltdjo7Yy8CU3zK0cp4/eAgy5qkHs35znGedqVGPiA67cuYZM63DuTfmyrOntMRwQnaFkMLklDAPCizDdDng==", 1051 | "dev": true, 1052 | "requires": { 1053 | "@swc/core-darwin-arm64": "1.3.61", 1054 | "@swc/core-darwin-x64": "1.3.61", 1055 | "@swc/core-linux-arm-gnueabihf": "1.3.61", 1056 | "@swc/core-linux-arm64-gnu": "1.3.61", 1057 | "@swc/core-linux-arm64-musl": "1.3.61", 1058 | "@swc/core-linux-x64-gnu": "1.3.61", 1059 | "@swc/core-linux-x64-musl": "1.3.61", 1060 | "@swc/core-win32-arm64-msvc": "1.3.61", 1061 | "@swc/core-win32-ia32-msvc": "1.3.61", 1062 | "@swc/core-win32-x64-msvc": "1.3.61" 1063 | } 1064 | }, 1065 | "@swc/core-darwin-arm64": { 1066 | "version": "1.3.61", 1067 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.61.tgz", 1068 | "integrity": "sha512-Ra1CZIYYyIp/Y64VcKyaLjIPUwT83JmGduvHu8vhUZOvWV4dWL4s5DrcxQVaQJjjb7Z2N/IUYYS55US1TGnxZw==", 1069 | "dev": true, 1070 | "optional": true 1071 | }, 1072 | "@swc/core-darwin-x64": { 1073 | "version": "1.3.61", 1074 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.61.tgz", 1075 | "integrity": "sha512-LUia75UByUFkYH1Ddw7IE0X9usNVGJ7aL6+cgOTju7P0dsU0f8h/OGc/GDfp1E4qnKxDCJE+GwDRLoi4SjIxpg==", 1076 | "dev": true, 1077 | "optional": true 1078 | }, 1079 | "@swc/core-linux-arm-gnueabihf": { 1080 | "version": "1.3.61", 1081 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.61.tgz", 1082 | "integrity": "sha512-aalPlicYxHAn2PxNlo3JFEZkMXzCtUwjP27AgMqnfV4cSz7Omo56OtC+413e/kGyCH86Er9gJRQQsxNKP8Qbsg==", 1083 | "dev": true, 1084 | "optional": true 1085 | }, 1086 | "@swc/core-linux-arm64-gnu": { 1087 | "version": "1.3.61", 1088 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.61.tgz", 1089 | "integrity": "sha512-9hGdsbQrYNPo1c7YzWF57yl17bsIuuEQi3I1fOFSv3puL3l5M/C/oCD0Bz6IdKh6mEDC5UNJE4LWtV1gFA995A==", 1090 | "dev": true, 1091 | "optional": true 1092 | }, 1093 | "@swc/core-linux-arm64-musl": { 1094 | "version": "1.3.61", 1095 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.61.tgz", 1096 | "integrity": "sha512-mVmcNfFQRP4SYbGC08IPB3B9Xox+VpGIQqA3Qg7LMCcejLAQLi4Lfe8CDvvBPlQzXHso0Cv+BicJnQVKs8JLOA==", 1097 | "dev": true, 1098 | "optional": true 1099 | }, 1100 | "@swc/core-linux-x64-gnu": { 1101 | "version": "1.3.61", 1102 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.61.tgz", 1103 | "integrity": "sha512-ZkRHs7GEikN6JiVL1/stvq9BVHKrSKoRn9ulVK2hMr+mAGNOKm3Y06NSzOO+BWwMaFOgnO2dWlszCUICsQ0kpg==", 1104 | "dev": true, 1105 | "optional": true 1106 | }, 1107 | "@swc/core-linux-x64-musl": { 1108 | "version": "1.3.61", 1109 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.61.tgz", 1110 | "integrity": "sha512-zK7VqQ5JlK20+7fxI4AgvIUckeZyX0XIbliGXNMR3i+39SJq1vs9scYEmq8VnAfvNdMU5BG+DewbFJlMfCtkxQ==", 1111 | "dev": true, 1112 | "optional": true 1113 | }, 1114 | "@swc/core-win32-arm64-msvc": { 1115 | "version": "1.3.61", 1116 | "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.61.tgz", 1117 | "integrity": "sha512-e9kVVPk5iVNhO41TvLvcExDHn5iATQ5/M4U7/CdcC7s0fK19TKSEUqkdoTLIJvHBFhgR7w3JJSErfnauO0xXoA==", 1118 | "dev": true, 1119 | "optional": true 1120 | }, 1121 | "@swc/core-win32-ia32-msvc": { 1122 | "version": "1.3.61", 1123 | "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.61.tgz", 1124 | "integrity": "sha512-7cJULfa6HvKqvFh6M/f7mKiNRhE2AjgFUCZfdOuy5r8vbtpk+qBK94TXwaDjJYDUGKzDVZw/tJ1eN4Y9n9Ls/Q==", 1125 | "dev": true, 1126 | "optional": true 1127 | }, 1128 | "@swc/core-win32-x64-msvc": { 1129 | "version": "1.3.61", 1130 | "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.61.tgz", 1131 | "integrity": "sha512-Jx8S+21WcKF/wlhW+sYpystWUyymDTEsbBpOgBRpXZelakVcNBCIIYSZOKW/A9PwWTpu6S8yvbs9nUOzKiVPqA==", 1132 | "dev": true, 1133 | "optional": true 1134 | }, 1135 | "@swc/helpers": { 1136 | "version": "0.5.1", 1137 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", 1138 | "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", 1139 | "dev": true, 1140 | "requires": { 1141 | "tslib": "^2.4.0" 1142 | } 1143 | }, 1144 | "@trysound/sax": { 1145 | "version": "0.2.0", 1146 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", 1147 | "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", 1148 | "dev": true 1149 | }, 1150 | "@types/prop-types": { 1151 | "version": "15.5.8", 1152 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz", 1153 | "integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==", 1154 | "dev": true 1155 | }, 1156 | "@types/react": { 1157 | "version": "16.7.22", 1158 | "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.22.tgz", 1159 | "integrity": "sha512-j/3tVoY09kHcTfbia4l67ofQn9xvktUvlC/4QN0KuBHAXlbU/wuGKMb8WfEb/vIcWxsOxHv559uYprkFDFfP8Q==", 1160 | "dev": true, 1161 | "requires": { 1162 | "@types/prop-types": "*", 1163 | "csstype": "^2.2.0" 1164 | } 1165 | }, 1166 | "@types/react-dom": { 1167 | "version": "16.0.11", 1168 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.11.tgz", 1169 | "integrity": "sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==", 1170 | "dev": true, 1171 | "requires": { 1172 | "@types/react": "*" 1173 | } 1174 | }, 1175 | "abortcontroller-polyfill": { 1176 | "version": "1.7.5", 1177 | "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", 1178 | "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", 1179 | "dev": true 1180 | }, 1181 | "ansi-styles": { 1182 | "version": "3.2.1", 1183 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1184 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1185 | "dev": true, 1186 | "requires": { 1187 | "color-convert": "^1.9.0" 1188 | } 1189 | }, 1190 | "argparse": { 1191 | "version": "2.0.1", 1192 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1193 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1194 | "dev": true 1195 | }, 1196 | "async": { 1197 | "version": "2.6.4", 1198 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", 1199 | "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", 1200 | "dev": true, 1201 | "requires": { 1202 | "lodash": "^4.17.14" 1203 | } 1204 | }, 1205 | "base-x": { 1206 | "version": "3.0.9", 1207 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1208 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1209 | "dev": true, 1210 | "requires": { 1211 | "safe-buffer": "^5.0.1" 1212 | } 1213 | }, 1214 | "big.js": { 1215 | "version": "5.2.2", 1216 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 1217 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 1218 | "dev": true 1219 | }, 1220 | "boolbase": { 1221 | "version": "1.0.0", 1222 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1223 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 1224 | "dev": true 1225 | }, 1226 | "braces": { 1227 | "version": "3.0.3", 1228 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1229 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1230 | "dev": true, 1231 | "requires": { 1232 | "fill-range": "^7.1.1" 1233 | }, 1234 | "dependencies": { 1235 | "fill-range": { 1236 | "version": "7.1.1", 1237 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1238 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1239 | "dev": true, 1240 | "requires": { 1241 | "to-regex-range": "^5.0.1" 1242 | } 1243 | } 1244 | } 1245 | }, 1246 | "browserslist": { 1247 | "version": "4.21.7", 1248 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", 1249 | "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", 1250 | "dev": true, 1251 | "requires": { 1252 | "caniuse-lite": "^1.0.30001489", 1253 | "electron-to-chromium": "^1.4.411", 1254 | "node-releases": "^2.0.12", 1255 | "update-browserslist-db": "^1.0.11" 1256 | } 1257 | }, 1258 | "callsites": { 1259 | "version": "3.1.0", 1260 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1261 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1262 | "dev": true 1263 | }, 1264 | "caniuse-lite": { 1265 | "version": "1.0.30001491", 1266 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz", 1267 | "integrity": "sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA==", 1268 | "dev": true 1269 | }, 1270 | "chalk": { 1271 | "version": "2.4.1", 1272 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 1273 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 1274 | "dev": true, 1275 | "requires": { 1276 | "ansi-styles": "^3.2.1", 1277 | "escape-string-regexp": "^1.0.5", 1278 | "supports-color": "^5.3.0" 1279 | }, 1280 | "dependencies": { 1281 | "has-flag": { 1282 | "version": "3.0.0", 1283 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1284 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1285 | "dev": true 1286 | }, 1287 | "supports-color": { 1288 | "version": "5.4.0", 1289 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 1290 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 1291 | "dev": true, 1292 | "requires": { 1293 | "has-flag": "^3.0.0" 1294 | } 1295 | } 1296 | } 1297 | }, 1298 | "chrome-trace-event": { 1299 | "version": "1.0.3", 1300 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 1301 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 1302 | "dev": true 1303 | }, 1304 | "clone": { 1305 | "version": "2.1.2", 1306 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 1307 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", 1308 | "dev": true 1309 | }, 1310 | "color-convert": { 1311 | "version": "1.9.2", 1312 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 1313 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 1314 | "dev": true, 1315 | "requires": { 1316 | "color-name": "1.1.1" 1317 | } 1318 | }, 1319 | "color-name": { 1320 | "version": "1.1.1", 1321 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 1322 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", 1323 | "dev": true 1324 | }, 1325 | "commander": { 1326 | "version": "7.2.0", 1327 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 1328 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 1329 | "dev": true 1330 | }, 1331 | "core-util-is": { 1332 | "version": "1.0.2", 1333 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1334 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1335 | "dev": true 1336 | }, 1337 | "cosmiconfig": { 1338 | "version": "8.1.3", 1339 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", 1340 | "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", 1341 | "dev": true, 1342 | "requires": { 1343 | "import-fresh": "^3.2.1", 1344 | "js-yaml": "^4.1.0", 1345 | "parse-json": "^5.0.0", 1346 | "path-type": "^4.0.0" 1347 | } 1348 | }, 1349 | "css-select": { 1350 | "version": "4.3.0", 1351 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 1352 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 1353 | "dev": true, 1354 | "requires": { 1355 | "boolbase": "^1.0.0", 1356 | "css-what": "^6.0.1", 1357 | "domhandler": "^4.3.1", 1358 | "domutils": "^2.8.0", 1359 | "nth-check": "^2.0.1" 1360 | } 1361 | }, 1362 | "css-tree": { 1363 | "version": "1.1.3", 1364 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 1365 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 1366 | "dev": true, 1367 | "requires": { 1368 | "mdn-data": "2.0.14", 1369 | "source-map": "^0.6.1" 1370 | } 1371 | }, 1372 | "css-what": { 1373 | "version": "6.1.0", 1374 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 1375 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 1376 | "dev": true 1377 | }, 1378 | "csso": { 1379 | "version": "4.2.0", 1380 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 1381 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 1382 | "dev": true, 1383 | "requires": { 1384 | "css-tree": "^1.1.2" 1385 | } 1386 | }, 1387 | "csstype": { 1388 | "version": "2.6.2", 1389 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.2.tgz", 1390 | "integrity": "sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow==", 1391 | "dev": true 1392 | }, 1393 | "detect-libc": { 1394 | "version": "1.0.3", 1395 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 1396 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 1397 | "dev": true 1398 | }, 1399 | "dom-serializer": { 1400 | "version": "1.4.1", 1401 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 1402 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 1403 | "dev": true, 1404 | "requires": { 1405 | "domelementtype": "^2.0.1", 1406 | "domhandler": "^4.2.0", 1407 | "entities": "^2.0.0" 1408 | }, 1409 | "dependencies": { 1410 | "entities": { 1411 | "version": "2.2.0", 1412 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1413 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 1414 | "dev": true 1415 | } 1416 | } 1417 | }, 1418 | "domelementtype": { 1419 | "version": "2.3.0", 1420 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 1421 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 1422 | "dev": true 1423 | }, 1424 | "domhandler": { 1425 | "version": "4.3.1", 1426 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 1427 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 1428 | "dev": true, 1429 | "requires": { 1430 | "domelementtype": "^2.2.0" 1431 | } 1432 | }, 1433 | "domutils": { 1434 | "version": "2.8.0", 1435 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 1436 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 1437 | "dev": true, 1438 | "requires": { 1439 | "dom-serializer": "^1.0.1", 1440 | "domelementtype": "^2.2.0", 1441 | "domhandler": "^4.2.0" 1442 | } 1443 | }, 1444 | "dotenv": { 1445 | "version": "7.0.0", 1446 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", 1447 | "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", 1448 | "dev": true 1449 | }, 1450 | "dotenv-expand": { 1451 | "version": "5.1.0", 1452 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", 1453 | "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", 1454 | "dev": true 1455 | }, 1456 | "electron-to-chromium": { 1457 | "version": "1.4.414", 1458 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz", 1459 | "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==", 1460 | "dev": true 1461 | }, 1462 | "enhanced-resolve": { 1463 | "version": "4.1.1", 1464 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", 1465 | "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", 1466 | "dev": true, 1467 | "requires": { 1468 | "graceful-fs": "^4.1.2", 1469 | "memory-fs": "^0.5.0", 1470 | "tapable": "^1.0.0" 1471 | } 1472 | }, 1473 | "entities": { 1474 | "version": "3.0.1", 1475 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", 1476 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", 1477 | "dev": true 1478 | }, 1479 | "errno": { 1480 | "version": "0.1.7", 1481 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", 1482 | "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", 1483 | "dev": true, 1484 | "requires": { 1485 | "prr": "~1.0.1" 1486 | } 1487 | }, 1488 | "error-ex": { 1489 | "version": "1.3.2", 1490 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1491 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1492 | "dev": true, 1493 | "requires": { 1494 | "is-arrayish": "^0.2.1" 1495 | } 1496 | }, 1497 | "escalade": { 1498 | "version": "3.1.1", 1499 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1500 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1501 | "dev": true 1502 | }, 1503 | "escape-string-regexp": { 1504 | "version": "1.0.5", 1505 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1506 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1507 | "dev": true 1508 | }, 1509 | "get-port": { 1510 | "version": "4.2.0", 1511 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", 1512 | "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", 1513 | "dev": true 1514 | }, 1515 | "globals": { 1516 | "version": "13.20.0", 1517 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 1518 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 1519 | "dev": true, 1520 | "requires": { 1521 | "type-fest": "^0.20.2" 1522 | } 1523 | }, 1524 | "graceful-fs": { 1525 | "version": "4.1.11", 1526 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1527 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1528 | "dev": true 1529 | }, 1530 | "has-flag": { 1531 | "version": "4.0.0", 1532 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1533 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1534 | "dev": true 1535 | }, 1536 | "htmlnano": { 1537 | "version": "2.0.4", 1538 | "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz", 1539 | "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==", 1540 | "dev": true, 1541 | "requires": { 1542 | "cosmiconfig": "^8.0.0", 1543 | "posthtml": "^0.16.5", 1544 | "timsort": "^0.3.0" 1545 | } 1546 | }, 1547 | "htmlparser2": { 1548 | "version": "7.2.0", 1549 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", 1550 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", 1551 | "dev": true, 1552 | "requires": { 1553 | "domelementtype": "^2.0.1", 1554 | "domhandler": "^4.2.2", 1555 | "domutils": "^2.8.0", 1556 | "entities": "^3.0.1" 1557 | } 1558 | }, 1559 | "import-fresh": { 1560 | "version": "3.3.0", 1561 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1562 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1563 | "dev": true, 1564 | "requires": { 1565 | "parent-module": "^1.0.0", 1566 | "resolve-from": "^4.0.0" 1567 | } 1568 | }, 1569 | "inherits": { 1570 | "version": "2.0.3", 1571 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1572 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1573 | "dev": true 1574 | }, 1575 | "is-arrayish": { 1576 | "version": "0.2.1", 1577 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1578 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1579 | "dev": true 1580 | }, 1581 | "is-extglob": { 1582 | "version": "2.1.1", 1583 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1584 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1585 | "dev": true 1586 | }, 1587 | "is-glob": { 1588 | "version": "4.0.3", 1589 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1590 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1591 | "dev": true, 1592 | "requires": { 1593 | "is-extglob": "^2.1.1" 1594 | } 1595 | }, 1596 | "is-json": { 1597 | "version": "2.0.1", 1598 | "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", 1599 | "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", 1600 | "dev": true 1601 | }, 1602 | "is-number": { 1603 | "version": "7.0.0", 1604 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1605 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1606 | "dev": true 1607 | }, 1608 | "isarray": { 1609 | "version": "1.0.0", 1610 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1611 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1612 | "dev": true 1613 | }, 1614 | "js-tokens": { 1615 | "version": "3.0.2", 1616 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 1617 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 1618 | "dev": true 1619 | }, 1620 | "js-yaml": { 1621 | "version": "4.1.0", 1622 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1623 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1624 | "dev": true, 1625 | "requires": { 1626 | "argparse": "^2.0.1" 1627 | } 1628 | }, 1629 | "json-parse-even-better-errors": { 1630 | "version": "2.3.1", 1631 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1632 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1633 | "dev": true 1634 | }, 1635 | "json5": { 1636 | "version": "1.0.2", 1637 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 1638 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 1639 | "dev": true, 1640 | "requires": { 1641 | "minimist": "^1.2.0" 1642 | } 1643 | }, 1644 | "lightningcss": { 1645 | "version": "1.20.0", 1646 | "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.20.0.tgz", 1647 | "integrity": "sha512-4bj8aP+Vi+or8Gwq/hknmicr4PmA8D9uL/3qY0N0daX5vYBMYERGI6Y93nzoeRgQMULq+gtrN/FvJYtH0xNN8g==", 1648 | "dev": true, 1649 | "requires": { 1650 | "detect-libc": "^1.0.3", 1651 | "lightningcss-darwin-arm64": "1.20.0", 1652 | "lightningcss-darwin-x64": "1.20.0", 1653 | "lightningcss-linux-arm-gnueabihf": "1.20.0", 1654 | "lightningcss-linux-arm64-gnu": "1.20.0", 1655 | "lightningcss-linux-arm64-musl": "1.20.0", 1656 | "lightningcss-linux-x64-gnu": "1.20.0", 1657 | "lightningcss-linux-x64-musl": "1.20.0", 1658 | "lightningcss-win32-x64-msvc": "1.20.0" 1659 | } 1660 | }, 1661 | "lightningcss-darwin-arm64": { 1662 | "version": "1.20.0", 1663 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.20.0.tgz", 1664 | "integrity": "sha512-aYEohJTlzwB8URJaNiS57tMbjyLub0mYvxlxKQk8SZv+irXx6MoBWpDNQKKTS9gg1pGf/eAwjpa3BLAoCBsh1A==", 1665 | "dev": true, 1666 | "optional": true 1667 | }, 1668 | "lightningcss-darwin-x64": { 1669 | "version": "1.20.0", 1670 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.20.0.tgz", 1671 | "integrity": "sha512-cmMgY8FFWVaGgtift7eKKkHMqlz9O09/yTdlCXEDOeDP9yeo6vHOBTRP7ojb368kjw8Ew3l0L2uT1Gtx56eNkg==", 1672 | "dev": true, 1673 | "optional": true 1674 | }, 1675 | "lightningcss-linux-arm-gnueabihf": { 1676 | "version": "1.20.0", 1677 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.20.0.tgz", 1678 | "integrity": "sha512-/m+NDO1O6JCv7R9F0XWlXcintQHx4MPNU+kt8jZJO07LLdGwCfvjN31GVcwVPlStnnx/cU8uTTmax6g/Qu/whg==", 1679 | "dev": true, 1680 | "optional": true 1681 | }, 1682 | "lightningcss-linux-arm64-gnu": { 1683 | "version": "1.20.0", 1684 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.20.0.tgz", 1685 | "integrity": "sha512-gtXoa6v0HvMRLbev6Hsef0+Q5He7NslB+Rs7G49Y5LUSdJeGIATEN+j8JzHC0DnxCsOGbEgGRmvtJzzYDkkluw==", 1686 | "dev": true, 1687 | "optional": true 1688 | }, 1689 | "lightningcss-linux-arm64-musl": { 1690 | "version": "1.20.0", 1691 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.20.0.tgz", 1692 | "integrity": "sha512-Po7XpucM1kZnkiyd2BNwTExSDcZ8jm8uB9u+Sq44qjpkf5f75jreQwn3DQm9I1t5C6tB9HGt30HExMju9umJBQ==", 1693 | "dev": true, 1694 | "optional": true 1695 | }, 1696 | "lightningcss-linux-x64-gnu": { 1697 | "version": "1.20.0", 1698 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.20.0.tgz", 1699 | "integrity": "sha512-8yR/fGNn/P0I+Lc3PK+VWPET/zdSpBfHFIG0DJ38TywMbItVKvnFvoTBwnIm4LqBz7g2G2dDexnNP95za2Ll8g==", 1700 | "dev": true, 1701 | "optional": true 1702 | }, 1703 | "lightningcss-linux-x64-musl": { 1704 | "version": "1.20.0", 1705 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.20.0.tgz", 1706 | "integrity": "sha512-EmpJ+VkPZ8RACiB4m+l8TmapmE1W2UvJKDHE+ML/3Ihr9tRKUs3CibfnQTFZC8aSsrxgXagDAN+PgCDDhIyriA==", 1707 | "dev": true, 1708 | "optional": true 1709 | }, 1710 | "lightningcss-win32-x64-msvc": { 1711 | "version": "1.20.0", 1712 | "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.20.0.tgz", 1713 | "integrity": "sha512-BRdPvbq7Cc1qxAzp2emqWJHrqsEkf4ggxS29VOnxT7jhkdHKU+a26OVMjvm/OL0NH0ToNOZNAPvHMSexiEgBeA==", 1714 | "dev": true, 1715 | "optional": true 1716 | }, 1717 | "lines-and-columns": { 1718 | "version": "1.2.4", 1719 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1720 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1721 | "dev": true 1722 | }, 1723 | "lmdb": { 1724 | "version": "2.7.11", 1725 | "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.7.11.tgz", 1726 | "integrity": "sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==", 1727 | "dev": true, 1728 | "requires": { 1729 | "@lmdb/lmdb-darwin-arm64": "2.7.11", 1730 | "@lmdb/lmdb-darwin-x64": "2.7.11", 1731 | "@lmdb/lmdb-linux-arm": "2.7.11", 1732 | "@lmdb/lmdb-linux-arm64": "2.7.11", 1733 | "@lmdb/lmdb-linux-x64": "2.7.11", 1734 | "@lmdb/lmdb-win32-x64": "2.7.11", 1735 | "msgpackr": "1.8.5", 1736 | "node-addon-api": "^4.3.0", 1737 | "node-gyp-build-optional-packages": "5.0.6", 1738 | "ordered-binary": "^1.4.0", 1739 | "weak-lru-cache": "^1.2.2" 1740 | }, 1741 | "dependencies": { 1742 | "node-addon-api": { 1743 | "version": "4.3.0", 1744 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", 1745 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", 1746 | "dev": true 1747 | } 1748 | } 1749 | }, 1750 | "loader-utils": { 1751 | "version": "1.4.2", 1752 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", 1753 | "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", 1754 | "dev": true, 1755 | "requires": { 1756 | "big.js": "^5.2.2", 1757 | "emojis-list": "^3.0.0", 1758 | "json5": "^1.0.1" 1759 | }, 1760 | "dependencies": { 1761 | "emojis-list": { 1762 | "version": "3.0.0", 1763 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", 1764 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", 1765 | "dev": true 1766 | } 1767 | } 1768 | }, 1769 | "lodash": { 1770 | "version": "4.17.21", 1771 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1772 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1773 | "dev": true 1774 | }, 1775 | "loose-envify": { 1776 | "version": "1.3.1", 1777 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", 1778 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", 1779 | "dev": true, 1780 | "requires": { 1781 | "js-tokens": "^3.0.0" 1782 | } 1783 | }, 1784 | "mdn-data": { 1785 | "version": "2.0.14", 1786 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 1787 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", 1788 | "dev": true 1789 | }, 1790 | "memory-fs": { 1791 | "version": "0.5.0", 1792 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", 1793 | "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", 1794 | "dev": true, 1795 | "requires": { 1796 | "errno": "^0.1.3", 1797 | "readable-stream": "^2.0.1" 1798 | } 1799 | }, 1800 | "micromatch": { 1801 | "version": "4.0.5", 1802 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1803 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1804 | "dev": true, 1805 | "requires": { 1806 | "braces": "^3.0.2", 1807 | "picomatch": "^2.3.1" 1808 | }, 1809 | "dependencies": { 1810 | "picomatch": { 1811 | "version": "2.3.1", 1812 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1813 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1814 | "dev": true 1815 | } 1816 | } 1817 | }, 1818 | "minimist": { 1819 | "version": "1.2.8", 1820 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1821 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1822 | "dev": true 1823 | }, 1824 | "msgpackr": { 1825 | "version": "1.8.5", 1826 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", 1827 | "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", 1828 | "dev": true, 1829 | "requires": { 1830 | "msgpackr-extract": "^3.0.1" 1831 | } 1832 | }, 1833 | "msgpackr-extract": { 1834 | "version": "3.0.2", 1835 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", 1836 | "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", 1837 | "dev": true, 1838 | "optional": true, 1839 | "requires": { 1840 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", 1841 | "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", 1842 | "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", 1843 | "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", 1844 | "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", 1845 | "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2", 1846 | "node-gyp-build-optional-packages": "5.0.7" 1847 | }, 1848 | "dependencies": { 1849 | "node-gyp-build-optional-packages": { 1850 | "version": "5.0.7", 1851 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", 1852 | "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", 1853 | "dev": true, 1854 | "optional": true 1855 | } 1856 | } 1857 | }, 1858 | "node-addon-api": { 1859 | "version": "3.2.1", 1860 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 1861 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", 1862 | "dev": true 1863 | }, 1864 | "node-gyp-build": { 1865 | "version": "4.6.0", 1866 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", 1867 | "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", 1868 | "dev": true 1869 | }, 1870 | "node-gyp-build-optional-packages": { 1871 | "version": "5.0.6", 1872 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz", 1873 | "integrity": "sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==", 1874 | "dev": true 1875 | }, 1876 | "node-releases": { 1877 | "version": "2.0.12", 1878 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", 1879 | "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", 1880 | "dev": true 1881 | }, 1882 | "nth-check": { 1883 | "version": "2.1.1", 1884 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1885 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1886 | "dev": true, 1887 | "requires": { 1888 | "boolbase": "^1.0.0" 1889 | } 1890 | }, 1891 | "nullthrows": { 1892 | "version": "1.1.1", 1893 | "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", 1894 | "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", 1895 | "dev": true 1896 | }, 1897 | "object-assign": { 1898 | "version": "4.1.1", 1899 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1900 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1901 | "dev": true 1902 | }, 1903 | "ordered-binary": { 1904 | "version": "1.4.0", 1905 | "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", 1906 | "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", 1907 | "dev": true 1908 | }, 1909 | "parcel": { 1910 | "version": "2.9.1", 1911 | "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.9.1.tgz", 1912 | "integrity": "sha512-LBD+jeCpvnDJ8MeE0ciEns4EZw+WH01qLEKT2O1tW2uHM1njhcWvuc9bx19f8iyE2+8Xwwr2GsGTQgPXKiA/yQ==", 1913 | "dev": true, 1914 | "requires": { 1915 | "@parcel/config-default": "2.9.1", 1916 | "@parcel/core": "2.9.1", 1917 | "@parcel/diagnostic": "2.9.1", 1918 | "@parcel/events": "2.9.1", 1919 | "@parcel/fs": "2.9.1", 1920 | "@parcel/logger": "2.9.1", 1921 | "@parcel/package-manager": "2.9.1", 1922 | "@parcel/reporter-cli": "2.9.1", 1923 | "@parcel/reporter-dev-server": "2.9.1", 1924 | "@parcel/reporter-tracer": "2.9.1", 1925 | "@parcel/utils": "2.9.1", 1926 | "chalk": "^4.1.0", 1927 | "commander": "^7.0.0", 1928 | "get-port": "^4.2.0" 1929 | }, 1930 | "dependencies": { 1931 | "ansi-styles": { 1932 | "version": "4.3.0", 1933 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1934 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1935 | "dev": true, 1936 | "requires": { 1937 | "color-convert": "^2.0.1" 1938 | } 1939 | }, 1940 | "chalk": { 1941 | "version": "4.1.2", 1942 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1943 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1944 | "dev": true, 1945 | "requires": { 1946 | "ansi-styles": "^4.1.0", 1947 | "supports-color": "^7.1.0" 1948 | } 1949 | }, 1950 | "color-convert": { 1951 | "version": "2.0.1", 1952 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1953 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1954 | "dev": true, 1955 | "requires": { 1956 | "color-name": "~1.1.4" 1957 | } 1958 | }, 1959 | "color-name": { 1960 | "version": "1.1.4", 1961 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1962 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1963 | "dev": true 1964 | } 1965 | } 1966 | }, 1967 | "parent-module": { 1968 | "version": "1.0.1", 1969 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1970 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1971 | "dev": true, 1972 | "requires": { 1973 | "callsites": "^3.0.0" 1974 | } 1975 | }, 1976 | "parse-json": { 1977 | "version": "5.2.0", 1978 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1979 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1980 | "dev": true, 1981 | "requires": { 1982 | "@babel/code-frame": "^7.0.0", 1983 | "error-ex": "^1.3.1", 1984 | "json-parse-even-better-errors": "^2.3.0", 1985 | "lines-and-columns": "^1.1.6" 1986 | } 1987 | }, 1988 | "path-type": { 1989 | "version": "4.0.0", 1990 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1991 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1992 | "dev": true 1993 | }, 1994 | "picocolors": { 1995 | "version": "1.0.0", 1996 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1997 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1998 | "dev": true 1999 | }, 2000 | "picomatch": { 2001 | "version": "2.0.7", 2002 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", 2003 | "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", 2004 | "dev": true 2005 | }, 2006 | "postcss-value-parser": { 2007 | "version": "4.2.0", 2008 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2009 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2010 | "dev": true 2011 | }, 2012 | "posthtml": { 2013 | "version": "0.16.6", 2014 | "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", 2015 | "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", 2016 | "dev": true, 2017 | "requires": { 2018 | "posthtml-parser": "^0.11.0", 2019 | "posthtml-render": "^3.0.0" 2020 | } 2021 | }, 2022 | "posthtml-parser": { 2023 | "version": "0.11.0", 2024 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", 2025 | "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", 2026 | "dev": true, 2027 | "requires": { 2028 | "htmlparser2": "^7.1.1" 2029 | } 2030 | }, 2031 | "posthtml-render": { 2032 | "version": "3.0.0", 2033 | "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", 2034 | "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", 2035 | "dev": true, 2036 | "requires": { 2037 | "is-json": "^2.0.1" 2038 | } 2039 | }, 2040 | "process-nextick-args": { 2041 | "version": "2.0.0", 2042 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2043 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 2044 | "dev": true 2045 | }, 2046 | "prop-types": { 2047 | "version": "15.6.2", 2048 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", 2049 | "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", 2050 | "dev": true, 2051 | "requires": { 2052 | "loose-envify": "^1.3.1", 2053 | "object-assign": "^4.1.1" 2054 | } 2055 | }, 2056 | "prr": { 2057 | "version": "1.0.1", 2058 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", 2059 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", 2060 | "dev": true 2061 | }, 2062 | "react": { 2063 | "version": "16.7.0", 2064 | "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", 2065 | "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", 2066 | "dev": true, 2067 | "requires": { 2068 | "loose-envify": "^1.1.0", 2069 | "object-assign": "^4.1.1", 2070 | "prop-types": "^15.6.2", 2071 | "scheduler": "^0.12.0" 2072 | } 2073 | }, 2074 | "react-dom": { 2075 | "version": "16.7.0", 2076 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", 2077 | "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", 2078 | "dev": true, 2079 | "requires": { 2080 | "loose-envify": "^1.1.0", 2081 | "object-assign": "^4.1.1", 2082 | "prop-types": "^15.6.2", 2083 | "scheduler": "^0.12.0" 2084 | } 2085 | }, 2086 | "react-error-overlay": { 2087 | "version": "6.0.9", 2088 | "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", 2089 | "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", 2090 | "dev": true 2091 | }, 2092 | "react-refresh": { 2093 | "version": "0.9.0", 2094 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", 2095 | "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", 2096 | "dev": true 2097 | }, 2098 | "readable-stream": { 2099 | "version": "2.3.6", 2100 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2101 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2102 | "dev": true, 2103 | "requires": { 2104 | "core-util-is": "~1.0.0", 2105 | "inherits": "~2.0.3", 2106 | "isarray": "~1.0.0", 2107 | "process-nextick-args": "~2.0.0", 2108 | "safe-buffer": "~5.1.1", 2109 | "string_decoder": "~1.1.1", 2110 | "util-deprecate": "~1.0.1" 2111 | }, 2112 | "dependencies": { 2113 | "safe-buffer": { 2114 | "version": "5.1.2", 2115 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2116 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2117 | "dev": true 2118 | } 2119 | } 2120 | }, 2121 | "regenerator-runtime": { 2122 | "version": "0.13.11", 2123 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 2124 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", 2125 | "dev": true 2126 | }, 2127 | "resolve-from": { 2128 | "version": "4.0.0", 2129 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2130 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2131 | "dev": true 2132 | }, 2133 | "safe-buffer": { 2134 | "version": "5.2.1", 2135 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2136 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2137 | "dev": true 2138 | }, 2139 | "scheduler": { 2140 | "version": "0.12.0", 2141 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", 2142 | "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", 2143 | "dev": true, 2144 | "requires": { 2145 | "loose-envify": "^1.1.0", 2146 | "object-assign": "^4.1.1" 2147 | } 2148 | }, 2149 | "semver": { 2150 | "version": "5.7.1", 2151 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2152 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2153 | "dev": true 2154 | }, 2155 | "source-map": { 2156 | "version": "0.6.1", 2157 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2158 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2159 | "dev": true 2160 | }, 2161 | "source-map-loader": { 2162 | "version": "0.2.4", 2163 | "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", 2164 | "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", 2165 | "dev": true, 2166 | "requires": { 2167 | "async": "^2.5.0", 2168 | "loader-utils": "^1.1.0" 2169 | } 2170 | }, 2171 | "srcset": { 2172 | "version": "4.0.0", 2173 | "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", 2174 | "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", 2175 | "dev": true 2176 | }, 2177 | "stable": { 2178 | "version": "0.1.8", 2179 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 2180 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 2181 | "dev": true 2182 | }, 2183 | "string_decoder": { 2184 | "version": "1.1.1", 2185 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2186 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2187 | "dev": true, 2188 | "requires": { 2189 | "safe-buffer": "~5.1.0" 2190 | }, 2191 | "dependencies": { 2192 | "safe-buffer": { 2193 | "version": "5.1.2", 2194 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2195 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2196 | "dev": true 2197 | } 2198 | } 2199 | }, 2200 | "supports-color": { 2201 | "version": "7.2.0", 2202 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2203 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2204 | "dev": true, 2205 | "requires": { 2206 | "has-flag": "^4.0.0" 2207 | } 2208 | }, 2209 | "svgo": { 2210 | "version": "2.8.0", 2211 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", 2212 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", 2213 | "dev": true, 2214 | "requires": { 2215 | "@trysound/sax": "0.2.0", 2216 | "commander": "^7.2.0", 2217 | "css-select": "^4.1.3", 2218 | "css-tree": "^1.1.3", 2219 | "csso": "^4.2.0", 2220 | "picocolors": "^1.0.0", 2221 | "stable": "^0.1.8" 2222 | } 2223 | }, 2224 | "tapable": { 2225 | "version": "1.1.3", 2226 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", 2227 | "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", 2228 | "dev": true 2229 | }, 2230 | "term-size": { 2231 | "version": "2.2.1", 2232 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", 2233 | "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", 2234 | "dev": true 2235 | }, 2236 | "timsort": { 2237 | "version": "0.3.0", 2238 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", 2239 | "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", 2240 | "dev": true 2241 | }, 2242 | "to-regex-range": { 2243 | "version": "5.0.1", 2244 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2245 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2246 | "dev": true, 2247 | "requires": { 2248 | "is-number": "^7.0.0" 2249 | } 2250 | }, 2251 | "trix": { 2252 | "version": "1.3.1", 2253 | "resolved": "https://registry.npmjs.org/trix/-/trix-1.3.1.tgz", 2254 | "integrity": "sha512-BbH6mb6gk+AV4f2as38mP6Ucc1LE3OD6XxkZnAgPIduWXYtvg2mI3cZhIZSLqmMh9OITEpOBCCk88IVmyjU7bA==" 2255 | }, 2256 | "ts-loader": { 2257 | "version": "6.2.0", 2258 | "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.0.tgz", 2259 | "integrity": "sha512-Da8h3fD+HiZ9GvZJydqzk3mTC9nuOKYlJcpuk+Zv6Y1DPaMvBL+56GRzZFypx2cWrZFMsQr869+Ua2slGoLxvQ==", 2260 | "dev": true, 2261 | "requires": { 2262 | "chalk": "^2.3.0", 2263 | "enhanced-resolve": "^4.0.0", 2264 | "loader-utils": "^1.0.2", 2265 | "micromatch": "^4.0.0", 2266 | "semver": "^6.0.0" 2267 | }, 2268 | "dependencies": { 2269 | "fill-range": { 2270 | "version": "7.0.1", 2271 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2272 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2273 | "requires": { 2274 | "to-regex-range": "^5.0.1" 2275 | } 2276 | }, 2277 | "is-number": { 2278 | "version": "7.0.0", 2279 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2280 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2281 | }, 2282 | "micromatch": { 2283 | "version": "4.0.2", 2284 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 2285 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 2286 | "dev": true, 2287 | "requires": { 2288 | "braces": "^3.0.1", 2289 | "picomatch": "^2.0.5" 2290 | } 2291 | }, 2292 | "semver": { 2293 | "version": "6.3.0", 2294 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2295 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2296 | "dev": true 2297 | }, 2298 | "to-regex-range": { 2299 | "version": "5.0.1", 2300 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2301 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2302 | "requires": { 2303 | "is-number": "^7.0.0" 2304 | } 2305 | } 2306 | } 2307 | }, 2308 | "tslib": { 2309 | "version": "2.5.2", 2310 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", 2311 | "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", 2312 | "dev": true 2313 | }, 2314 | "type-fest": { 2315 | "version": "0.20.2", 2316 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2317 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2318 | "dev": true 2319 | }, 2320 | "typescript": { 2321 | "version": "3.6.4", 2322 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", 2323 | "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", 2324 | "dev": true 2325 | }, 2326 | "update-browserslist-db": { 2327 | "version": "1.0.11", 2328 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 2329 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 2330 | "dev": true, 2331 | "requires": { 2332 | "escalade": "^3.1.1", 2333 | "picocolors": "^1.0.0" 2334 | } 2335 | }, 2336 | "util-deprecate": { 2337 | "version": "1.0.2", 2338 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2339 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2340 | "dev": true 2341 | }, 2342 | "utility-types": { 2343 | "version": "3.10.0", 2344 | "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", 2345 | "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", 2346 | "dev": true 2347 | }, 2348 | "weak-lru-cache": { 2349 | "version": "1.2.2", 2350 | "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", 2351 | "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", 2352 | "dev": true 2353 | }, 2354 | "xxhash-wasm": { 2355 | "version": "0.4.2", 2356 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", 2357 | "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", 2358 | "dev": true 2359 | } 2360 | } 2361 | } 2362 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-trix", 3 | "version": "0.10.1", 4 | "description": "React wrapper around Basecamp's Trix editor.", 5 | "main": "main.js", 6 | "scripts": { 7 | "build": "npm run build:lib && parcel build src/react-trix.tsx", 8 | "build:lib": "rm -rf ./lib/* && tsc", 9 | "prebuild": "rm -rf dist && mkdir dist", 10 | "prepublish": "npm run build", 11 | "postbuild": "parcel build src/react-trix.tsx", 12 | "test": "./test.sh" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/dstpierre/react-trix" 17 | }, 18 | "keywords": [ 19 | "react", 20 | "component", 21 | "edit", 22 | "editable", 23 | "wysiwyg", 24 | "trix", 25 | "editor", 26 | "trix-editor" 27 | ], 28 | "author": { 29 | "name": "Rob Race", 30 | "email": "rob@succinctsoftwarellc.com" 31 | }, 32 | "license": "MIT", 33 | "bugs": { 34 | "url": "https://github.com/dstpierre/react-trix/issues" 35 | }, 36 | "homepage": "https://github.com/dstpierre/react-trix", 37 | "dependencies": { 38 | "trix": "^1.3.1" 39 | }, 40 | "devDependencies": { 41 | "@types/react": "^16.7.22", 42 | "@types/react-dom": "^16.0.11", 43 | "parcel": "^2.9.1", 44 | "react": "^16.7.0", 45 | "react-dom": "^16.7.0", 46 | "source-map-loader": "^0.2.4", 47 | "ts-loader": "^6.2.0", 48 | "typescript": "^3.6.4" 49 | }, 50 | "peerDependencies": { 51 | "react": ">=17.0", 52 | "react-dom": ">=17.0" 53 | }, 54 | "files": [ 55 | "dist", 56 | "lib", 57 | "src/react-trix.tsx", 58 | "src/main.js.map", 59 | "README.md", 60 | "LICENSE", 61 | "main.js" 62 | ], 63 | "types": "lib/react-trix.d.ts" 64 | } 65 | -------------------------------------------------------------------------------- /src/react-trix.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { BoxSizingProperty } from "csstype"; 3 | 4 | export interface MergeTag { 5 | tag: string; 6 | name: string; 7 | } 8 | 9 | export interface MergeTags { 10 | trigger: string; 11 | tags: Array; 12 | } 13 | 14 | export interface TrixEditorProps { 15 | className?: string; 16 | autoFocus?: boolean; 17 | placeholder?: string; 18 | toolbar?: string; 19 | value?: string; 20 | uploadURL?: string; 21 | uploadData?: { [key: string]: string }; 22 | fileParamName?: string; 23 | 24 | /* list of available merge tag */ 25 | mergeTags?: Array; 26 | 27 | onEditorReady?: (editor: any) => void; 28 | onChange: (html: string, text: string) => void; 29 | } 30 | 31 | export interface TrixEditorState { 32 | showMergeTags: boolean; 33 | tags: Array; 34 | } 35 | 36 | export interface Editor { 37 | getSelectedRange: () => Array; 38 | setSelectedRange: (range: Array) => void; 39 | getClientRectAtPosition: (pos: number) => Rect; 40 | expandSelectionInDirection: (direction: "forward" | "backward") => void; 41 | insertString: (s: string) => void; 42 | } 43 | 44 | export interface Rect { 45 | top: number; 46 | left: number; 47 | right: number; 48 | bottom: number; 49 | width: number; 50 | height: number; 51 | } 52 | 53 | export class TrixEditor extends React.Component { 54 | private id: string; 55 | private container: any = null; 56 | private editor: Editor = null; 57 | private d: HTMLDivElement = null; 58 | constructor(props: TrixEditorProps) { 59 | super(props); 60 | 61 | this.id = this.generateId(); 62 | 63 | this.state = { 64 | showMergeTags: false, 65 | tags: [] 66 | } 67 | } 68 | private generateId(): string { 69 | let dt = new Date().getTime(); 70 | let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 71 | let r = (dt + Math.random()*16)%16 | 0; 72 | dt = Math.floor(dt/16); 73 | return (c=='x' ? r :(r&0x3|0x8)).toString(16); 74 | }); 75 | return "T" + uuid; 76 | } 77 | componentDidMount() { 78 | let props = this.props; 79 | 80 | this.container = document.getElementById(`editor-${this.id}`); 81 | //this.container = this.d && this.d.children && this.d.children.length >= 2 ? this.d.children[1] : null; 82 | //this.editor = this.d; 83 | if (this.container) { 84 | this.container.addEventListener("trix-initialize", () => { 85 | this.editor = this.container.editor; 86 | if (!this.editor) { 87 | console.error("cannot find trix editor"); 88 | } 89 | 90 | if (props.onEditorReady && typeof props.onEditorReady == "function") { 91 | props.onEditorReady(this.editor); 92 | } 93 | }, false); 94 | this.container.addEventListener('trix-change', this.handleChange.bind(this), false); 95 | 96 | if (props.uploadURL) { 97 | this.container.addEventListener("trix-attachment-add", this.handleUpload.bind(this)); 98 | } 99 | } else { 100 | console.error("editor not found"); 101 | } 102 | } 103 | componentWillUnmount() { 104 | this.container.removeEventListener("trix-initialize", this.handleChange); 105 | this.container.removeEventListener("trix-change", this.handleChange); 106 | 107 | if (this.props.uploadURL) { 108 | this.container.removeEventListener("trix-attachment-add", this.handleUpload); 109 | } 110 | } 111 | private handleChange(e) { 112 | const props = this.props; 113 | let state: TrixEditorState = this.state; 114 | const text: string = e.target.innerText; 115 | 116 | if (props.onChange) { 117 | props.onChange(e.target.innerHTML, text); 118 | } 119 | 120 | const range = this.editor.getSelectedRange(); 121 | 122 | // if we have a collapse selection 123 | if (text && range[0] == range[1]) { 124 | // if we have a merge tag mergeTagTrigger 125 | if (props.mergeTags) { 126 | // get the cursor position and compare the last character with our mergeTagTrigger 127 | const lastChar = range[0] - 1; 128 | if (lastChar >= 0 && lastChar < text.length) { 129 | const trigger = text[lastChar]; 130 | for (let i = 0; i < props.mergeTags.length; i++) { 131 | if (trigger == props.mergeTags[i].trigger) { 132 | state.showMergeTags = true; 133 | state.tags = props.mergeTags[i].tags; 134 | this.setState(state); 135 | break; 136 | } 137 | } 138 | } 139 | } 140 | } 141 | } 142 | private handleUpload(e: any) { 143 | var attachment = e.attachment; 144 | if (attachment.file) { 145 | return this.uploadAttachment(attachment); 146 | } 147 | } 148 | private uploadAttachment(attachment: any) { 149 | var file, form, xhr; 150 | file = attachment.file; 151 | form = new FormData(); 152 | // add any custom data that were passed 153 | if (this.props.uploadData) { 154 | for (var k in this.props.uploadData) { 155 | form.append(k, this.props.uploadData[k]); 156 | } 157 | } 158 | 159 | //form.append("Content-Type", "multipart/form-data"); 160 | form.append((this.props.fileParamName || "file"), file); 161 | xhr = new XMLHttpRequest(); 162 | xhr.open("POST", this.props.uploadURL, true); 163 | xhr.upload.onprogress = (event) => { 164 | var progress = event.loaded / event.total * 100; 165 | return attachment.setUploadProgress(progress); 166 | }; 167 | xhr.onload = () => { 168 | var href, url; 169 | if (xhr.status >= 200 && xhr.status < 300) { 170 | url = href = xhr.responseText; 171 | return attachment.setAttributes({ 172 | url: url, 173 | href: href 174 | }); 175 | } 176 | }; 177 | return xhr.send(form); 178 | } 179 | private handleTagSelected(t: MergeTag, e: React.MouseEvent): void { 180 | e.preventDefault(); 181 | 182 | let state: TrixEditorState = this.state; 183 | state.showMergeTags = false; 184 | this.setState(state); 185 | 186 | this.editor.expandSelectionInDirection("backward"); 187 | this.editor.insertString(t.tag); 188 | } 189 | private renderTagSelector(tags: Array): React.ReactNode { 190 | if (!tags || !this.editor) { 191 | return null; 192 | } 193 | 194 | const editorPosition = document.getElementById("trix-editor-top-level-" + this.id).getBoundingClientRect(); 195 | 196 | // current cursor position 197 | const rect = this.editor.getClientRectAtPosition(this.editor.getSelectedRange()[0]); 198 | const boxStyle = { 199 | "position": "absolute" as "absolute", 200 | "top": rect.top + 25 - editorPosition.top, 201 | "left": rect.left + 25 - editorPosition.left, 202 | "width": "250px", 203 | "boxSizing": "border-box" as BoxSizingProperty, 204 | "padding": 0, 205 | "margin": ".2em 0 0", 206 | "backgroundColor": "hsla(0,0%,100%,.9)", 207 | "borderRadius": ".3em", 208 | "background": "linear-gradient(to bottom right, white, hsla(0,0%,100%,.8))", 209 | "border": "1px solid rgba(0,0,0,.3)", 210 | "boxShadow": ".05em .2em .6em rgba(0,0,0,.2)", 211 | "textShadow": "none" 212 | }; 213 | const tagStyle = { 214 | "display": "block", 215 | "padding": ".2em .5em", 216 | "cursor": "pointer" 217 | } 218 | return ( 219 |
220 | {tags.map((t) => { 221 | return {t.name} 222 | })} 223 |
224 | ); 225 | } 226 | render() { 227 | let state: TrixEditorState = this.state; 228 | let props = this.props; 229 | 230 | var attributes: { [key: string]: string } = { 231 | "id": `editor-${this.id}`, 232 | "input": `input-${this.id}` 233 | }; 234 | 235 | if (props.className) { 236 | attributes["class"] = props.className; 237 | } 238 | 239 | if (props.autoFocus) { 240 | attributes["autofocus"] = props.autoFocus.toString(); 241 | } 242 | 243 | if (props.placeholder) { 244 | attributes["placeholder"] = props.placeholder; 245 | } 246 | 247 | if (props.toolbar) { 248 | attributes["toolbar"] = props.toolbar; 249 | } 250 | 251 | let mergetags: React.ReactNode = null; 252 | if (state.showMergeTags) { 253 | mergetags = this.renderTagSelector(state.tags); 254 | } 255 | return ( 256 |
this.d = d} style={{ "position": "relative" }}> 257 | {React.createElement("trix-editor", attributes)} 258 | 263 | {mergetags} 264 |
265 | ); 266 | } 267 | } 268 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd tests 4 | tsc 5 | cd .. 6 | # --require tests/tests/setup.js 7 | ./node_modules/.bin/mocha tests/tests/*_test.js 8 | exit 0 -------------------------------------------------------------------------------- /tests/react-trix_test.tsx: -------------------------------------------------------------------------------- 1 | declare var global: any; 2 | 3 | import * as React from "react"; 4 | import { expect } from "chai"; 5 | import { shallow, mount, render } from "enzyme"; 6 | import { spy } from "sinon"; 7 | 8 | import { TrixEditor } from "../src/react-trix"; 9 | 10 | import * as jsdom from "jsdom"; 11 | const virtualConsole = jsdom.createVirtualConsole(); 12 | virtualConsole.on('log', console.log); 13 | 14 | const html = ` 15 | 16 |
17 | 18 | `; 19 | 20 | describe("", () => { 21 | beforeEach((done: MochaDone) => { 22 | jsdom.env({ 23 | virtualConsole, 24 | html: html, 25 | scripts: [ 26 | "https://rawgit.com/basecamp/trix/master/dist/trix.js" 27 | ], 28 | features: { 29 | FetchExternalResources: ['script'], 30 | ProcessExternalResources: ['script'], 31 | SkipExternalResources: false, 32 | }, 33 | created(error, window) { // eslint no-unused-vars: 0 34 | }, 35 | done(err, win) { 36 | if (err) { 37 | console.log("errors"); 38 | console.log(err); 39 | } else { 40 | global.window = win; 41 | global.document = win.document; 42 | global.Trix = win.Trix; 43 | 44 | Object.keys(win).forEach((property) => { 45 | if (typeof global[property] == "undefined") { 46 | global[property] = win[property]; 47 | } 48 | }); 49 | 50 | //setTimeout(() => { 51 | done(); 52 | //}, 500); 53 | 54 | } 55 | }, 56 | }); 57 | }) 58 | it("renders the Trix editor", () => { 59 | const handleReady = spy(); 60 | const handleChange = spy(); 61 | const wrapper = mount(); 62 | expect(handleReady.callCount).to.be.greaterThan(0); 63 | //expect(handleChange).to.have.property('callCount', 1); 64 | }); 65 | it("fires the onChange event", (done: MochaDone) => { 66 | const handleReady = (editor: any) => { 67 | console.log("inside handleReady"); 68 | console.log(editor); 69 | 70 | // get the editor and fake a selection + bold 71 | /*var elm: any = handleReady.getCall(0).args[0]; 72 | elm.editor.setSelectedRange([0, 1]); 73 | elm.editor.activateAttribute("bold"); 74 | */ 75 | 76 | expect(handleChange.callCount).to.be.greaterThan(0); 77 | 78 | done(); 79 | } 80 | const handleChange = spy(); 81 | const wrapper = mount(); 85 | }); 86 | }); -------------------------------------------------------------------------------- /tests/setup.ts: -------------------------------------------------------------------------------- 1 | declare var global: any; 2 | 3 | import { jsdom } from "jsdom"; 4 | 5 | const html = ` 6 | 7 |
8 | 9 | `; 10 | 11 | global.document = jsdom(html); 12 | global.window = document.defaultView; 13 | 14 | console.log("trix", global.window.Trix); 15 | 16 | global.navigator = { 17 | userAgent: 'node.js' 18 | }; 19 | 20 | Object.keys(document.defaultView).forEach((property) => { 21 | if (typeof global[property] == "undefined") { 22 | global[property] = document.defaultView[property]; 23 | } 24 | }); -------------------------------------------------------------------------------- /tests/src/react-trix.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __extends = (this && this.__extends) || (function () { 3 | var extendStatics = Object.setPrototypeOf || 4 | ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 5 | function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; 6 | return function (d, b) { 7 | extendStatics(d, b); 8 | function __() { this.constructor = d; } 9 | d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 10 | }; 11 | })(); 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | var React = require("react"); 14 | var TrixEditor = (function (_super) { 15 | __extends(TrixEditor, _super); 16 | function TrixEditor(props) { 17 | var _this = _super.call(this, props) || this; 18 | _this.editor = null; 19 | _this.d = null; 20 | _this.id = _this.generateId(); 21 | return _this; 22 | } 23 | TrixEditor.prototype.generateId = function () { 24 | var timestamp = Date.now(); 25 | var uniqueNumber = 0; 26 | (function () { 27 | if (timestamp <= uniqueNumber) { 28 | timestamp = ++uniqueNumber; 29 | } 30 | else { 31 | uniqueNumber = timestamp; 32 | } 33 | })(); 34 | return "T" + timestamp.toString(); 35 | }; 36 | TrixEditor.prototype.componentDidMount = function () { 37 | var _this = this; 38 | var props = this.props; 39 | var x = window; 40 | console.log(x.Trix); 41 | this.editor = this.d && this.d.children && this.d.children.length >= 1 ? this.d.children[0] : null; 42 | if (this.editor) { 43 | console.log("id", this.editor.id); 44 | this.editor.addEventListener('trix-initialize', function (a, b, c, d, e, f) { 45 | console.log("trix-initrialize fired"); 46 | console.log(a, b, c, d, e, f); 47 | if (props.onEditorReady && typeof props.onEditorReady == "function") { 48 | console.log("colisse"); 49 | console.log(_this.editor); 50 | props.onEditorReady(_this.editor.editor); 51 | } 52 | }, false); 53 | this.editor.addEventListener('trix-change', this.handleChange.bind(this), false); 54 | if (props.uploadURL) { 55 | this.editor.addEventListener("trix-attachment-add", this.handleUpload.bind(this)); 56 | } 57 | } 58 | else { 59 | console.error("editor not found"); 60 | } 61 | }; 62 | TrixEditor.prototype.componentWillUnmount = function () { 63 | this.editor.removeEventListener("trix-initialize", this.handleChange); 64 | this.editor.removeEventListener("trix-change", this.handleChange); 65 | if (this.props.uploadURL) { 66 | this.editor.removeEventListener("trix-attachment-add", this.handleUpload); 67 | } 68 | }; 69 | TrixEditor.prototype.handleChange = function (e) { 70 | if (this.props.onChange) { 71 | this.props.onChange(e.target.innerHTML, e.target.innerText); 72 | } 73 | }; 74 | TrixEditor.prototype.handleUpload = function (e) { 75 | var attachment = e.attachment; 76 | if (attachment.file) { 77 | return this.uploadAttachment(attachment); 78 | } 79 | }; 80 | TrixEditor.prototype.uploadAttachment = function (attachment) { 81 | var file, form, xhr; 82 | file = attachment.file; 83 | form = new FormData(); 84 | if (this.props.uploadData) { 85 | for (var k in this.props.uploadData) { 86 | form[k] = this.props.uploadData[k]; 87 | } 88 | } 89 | form.append("Content-Type", file.type); 90 | form.append("file", file); 91 | xhr = new XMLHttpRequest(); 92 | xhr.open("POST", this.props.uploadURL, true); 93 | xhr.upload.onprogress = function (event) { 94 | var progress = event.loaded / event.total * 100; 95 | return attachment.setUploadProgress(progress); 96 | }; 97 | xhr.onload = function () { 98 | var href, url; 99 | if (xhr.status == 204) { 100 | url = href = xhr.responseText; 101 | return attachment.setAttributes({ 102 | url: url, 103 | href: href 104 | }); 105 | } 106 | }; 107 | return xhr.send(form); 108 | }; 109 | TrixEditor.prototype.render = function () { 110 | var _this = this; 111 | var state = this.state; 112 | var props = this.props; 113 | var attributes = { 114 | "id": "editor-" + this.id, 115 | "input": "input-" + this.id 116 | }; 117 | if (props.autoFocus) { 118 | attributes["autofocus"] = props.autoFocus.toString(); 119 | } 120 | if (props.placeholder) { 121 | attributes["placeholder"] = props.placeholder; 122 | } 123 | return (React.createElement("div", { ref: function (d) { return _this.d = d; } }, 124 | React.createElement("trix-editor", attributes), 125 | React.createElement("input", { type: "hidden", id: "input-" + this.id, value: this.props.value }))); 126 | }; 127 | return TrixEditor; 128 | }(React.Component)); 129 | exports.TrixEditor = TrixEditor; 130 | -------------------------------------------------------------------------------- /tests/tests/react-trix_test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var React = require("react"); 4 | var chai_1 = require("chai"); 5 | var enzyme_1 = require("enzyme"); 6 | var sinon_1 = require("sinon"); 7 | var react_trix_1 = require("../src/react-trix"); 8 | var jsdom = require("jsdom"); 9 | var virtualConsole = jsdom.createVirtualConsole(); 10 | virtualConsole.on('log', console.log); 11 | var html = "\n\n
\n\n"; 12 | describe("", function () { 13 | beforeEach(function (done) { 14 | jsdom.env({ 15 | virtualConsole: virtualConsole, 16 | html: html, 17 | scripts: [ 18 | "https://rawgit.com/basecamp/trix/master/dist/trix.js" 19 | ], 20 | features: { 21 | FetchExternalResources: ['script'], 22 | ProcessExternalResources: ['script'], 23 | SkipExternalResources: false, 24 | }, 25 | created: function (error, window) { 26 | }, 27 | done: function (err, win) { 28 | if (err) { 29 | console.log("errors"); 30 | console.log(err); 31 | } 32 | else { 33 | global.window = win; 34 | global.document = win.document; 35 | global.Trix = win.Trix; 36 | Object.keys(win).forEach(function (property) { 37 | if (typeof global[property] == "undefined") { 38 | global[property] = win[property]; 39 | } 40 | }); 41 | done(); 42 | } 43 | }, 44 | }); 45 | }); 46 | it("renders the Trix editor", function () { 47 | var handleReady = sinon_1.spy(); 48 | var handleChange = sinon_1.spy(); 49 | var wrapper = enzyme_1.mount(React.createElement(react_trix_1.TrixEditor, { onChange: handleChange, onEditorReady: handleReady, value: "testing 1234" })); 50 | chai_1.expect(handleReady.callCount).to.be.greaterThan(0); 51 | }); 52 | it("fires the onChange event", function (done) { 53 | var handleReady = function (editor) { 54 | console.log("inside handleReady"); 55 | console.log(editor); 56 | chai_1.expect(handleChange.callCount).to.be.greaterThan(0); 57 | done(); 58 | }; 59 | var handleChange = sinon_1.spy(); 60 | var wrapper = enzyme_1.mount(React.createElement(react_trix_1.TrixEditor, { onChange: handleChange, onEditorReady: handleReady, value: "testing 1234" })); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /tests/tests/setup.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | var jsdom_1 = require("jsdom"); 4 | var html = "\n\n
\n\n"; 5 | global.document = jsdom_1.jsdom(html); 6 | global.window = document.defaultView; 7 | console.log("trix", global.window.Trix); 8 | global.navigator = { 9 | userAgent: 'node.js' 10 | }; 11 | Object.keys(document.defaultView).forEach(function (property) { 12 | if (typeof global[property] == "undefined") { 13 | global[property] = document.defaultView[property]; 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /tests/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./", 4 | "target": "es5", 5 | "module": "commonjs", 6 | "noImplicitAny": false, 7 | "removeComments": true, 8 | "sourceMap": false, 9 | "jsx": "react" 10 | }, 11 | "include": [ 12 | "./*.tsx", 13 | "./*.ts" 14 | ], 15 | "exclude": [ 16 | "node_modules" 17 | ] 18 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./lib", 4 | "target": "es5", 5 | "module": "commonjs", 6 | "noImplicitAny": false, 7 | "removeComments": true, 8 | "declaration": true, 9 | "sourceMap": true, 10 | "jsx": "react" 11 | }, 12 | "include": [ 13 | "./src/**/*.tsx", 14 | "./src/**/*.ts" 15 | ], 16 | "exclude": [ 17 | "node_modules" 18 | ] 19 | } --------------------------------------------------------------------------------