diff --git a/.gitignore b/.gitignore index b28e6e6..7fbc96d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ npm-debug.log # Testing e2e src/__coverage__ -src/__tests__/__cache__ \ No newline at end of file +src/__tests__/__cache__ +src/__mocks__/**/*.ts diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f81383f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +sudo: false +language: node_js +cache: + directories: + - node_modules +notifications: + email: false +node_js: + - '4' + - '5.11' + - '6.1' +before_install: + - npm i -g npm@latest + - npm i -g jest +before_script: + - npm prune +after_success: + - 'curl -Lo travis_after_all.py https://git.io/travis_after_all' + - python travis_after_all.py + - export $(cat .to_export_back) &> /dev/null + - npm run semantic-release +branches: + except: + - /^v\d+\.\d+\.\d+$/ diff --git a/README.md b/README.md index bf0d935..b424dd3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +[](https://travis-ci.org/coderoad/core-coderoad) +[](https://registry.npmjs.org/core-coderoad) +[](http://commitizen.github.io/cz-cli/) + # Atom CodeRoad plugin Interactive coding tutorials inside of the Atom editor. diff --git a/lib/__mocks__/editor.js b/lib/__mocks__/editor.js new file mode 100644 index 0000000..2a2c501 --- /dev/null +++ b/lib/__mocks__/editor.js @@ -0,0 +1,5 @@ +"use strict"; +exports.editor = { + directory: function () { return 'something'; } +}; +//# sourceMappingURL=editor.js.map \ No newline at end of file diff --git a/lib/__mocks__/editor.js.map b/lib/__mocks__/editor.js.map new file mode 100644 index 0000000..9a4ae59 --- /dev/null +++ b/lib/__mocks__/editor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/__mocks__/editor.ts"],"names":[],"mappings":";AAAa,cAAM,GAAG;IACpB,SAAS,EAAE,cAAM,OAAA,WAAW,EAAX,CAAW;CAC7B,CAAC"} \ No newline at end of file diff --git a/lib/__mocks__/editor/index.js b/lib/__mocks__/editor/index.js new file mode 100644 index 0000000..f3fe684 --- /dev/null +++ b/lib/__mocks__/editor/index.js @@ -0,0 +1,16 @@ +"use strict"; +exports.editor = { + name: 'editorName', + directory: function () { return './path/to/dir'; }, + action: { + toggleDevTools: function () { return true; }, + save: function () { return true; }, + open: function (file) { return true; }, + insert: function (text) { return true; }, + set: function (text) { return true; }, + scroll: function (text) { return true; }, + writeFileFromFile: function (options) { return true; }, + writeFileFromContent: function (options) { return true; }, + } +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/__mocks__/editor/index.js.map b/lib/__mocks__/editor/index.js.map new file mode 100644 index 0000000..2dc6919 --- /dev/null +++ b/lib/__mocks__/editor/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/__mocks__/editor/index.ts"],"names":[],"mappings":";AAGa,cAAM,GAAG;IACpB,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,cAAM,OAAA,eAAe,EAAf,CAAe;IAChC,MAAM,EAAE;QACN,cAAc,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QAC1B,IAAI,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QAChB,IAAI,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC5B,MAAM,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC9B,GAAG,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC3B,MAAM,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC9B,iBAAiB,EAAE,UAAC,OAAe,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC5C,oBAAoB,EAAE,UAAC,OAAe,IAAK,OAAA,IAAI,EAAJ,CAAI;KAChD;CACF,CAAC"} \ No newline at end of file diff --git a/lib/components/AppMenu/common/ContentCard.js b/lib/components/AppMenu/common/ContentCard.js new file mode 100644 index 0000000..13d4fc1 --- /dev/null +++ b/lib/components/AppMenu/common/ContentCard.js @@ -0,0 +1,19 @@ +"use strict"; +var React = require("react"); +var index_1 = require("../../index"); +var Card_1 = require("material-ui/Card"); +var styles = { + card: { + margin: '5px', + }, +}; +var ContentCard = function (_a) { + var title = _a.title, content = _a.content; + return (React.createElement(Card_1.Card, { style: styles.card }, + title ? React.createElement(Card_1.CardHeader, { title: title }) : null, + React.createElement(Card_1.CardText, null, + React.createElement(index_1.Markdown, { children: content || '' })))); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = ContentCard; +//# sourceMappingURL=ContentCard.js.map \ No newline at end of file diff --git a/lib/components/AppMenu/common/ContentCard.js.map b/lib/components/AppMenu/common/ContentCard.js.map new file mode 100644 index 0000000..5863d02 --- /dev/null +++ b/lib/components/AppMenu/common/ContentCard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ContentCard.js","sourceRoot":"","sources":["../../../../src/components/AppMenu/common/ContentCard.tsx"],"names":[],"mappings":";AAAA,6BAA+B;AAE/B,qCAAqC;AACrC,yCAA4D;AAE5D,IAAM,MAAM,GAAG;IACb,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;KACd;CACF,CAAC;AAEF,IAAM,WAAW,GAEZ,UAAC,EAAgB;QAAf,gBAAK,EAAE,oBAAO;IAAM,OAAA,CACzB,oBAAC,WAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI;QACrB,KAAK,GAAG,oBAAC,iBAAU,IAAC,KAAK,EAAE,KAAK,GAAI,GAAG,IAAI;QAC5C,oBAAC,eAAQ;YACP,oBAAC,gBAAQ,IAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,GAAI,CAC5B,CACN,CACR;AAP0B,CAO1B,CAAC;;AACF,kBAAe,WAAW,CAAC"} \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/CodeBlock.js b/lib/components/AppMenu/common/Markdown/CodeBlock.js new file mode 100644 index 0000000..a77be65 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/CodeBlock.js @@ -0,0 +1,11 @@ +"use strict"; +var React = require("react"); +var syntax_highlighter_1 = require("./syntax-highlighter"); +var CodeBlock = function (_a) { + var style = _a.style, children = _a.children, lang = _a.lang; + return (React.createElement("pre", null, + React.createElement("code", { style: style ? style : {}, dangerouslySetInnerHTML: { __html: syntax_highlighter_1.default(children, lang) } }))); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = CodeBlock; +//# sourceMappingURL=CodeBlock.js.map \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/CodeBlock.js.map b/lib/components/AppMenu/common/Markdown/CodeBlock.js.map new file mode 100644 index 0000000..7e9cc48 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/CodeBlock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CodeBlock.js","sourceRoot":"","sources":["../../../../../src/components/AppMenu/common/Markdown/CodeBlock.tsx"],"names":[],"mappings":";AAAA,6BAA+B;AAE/B,2DAA6C;AAE7C,IAAM,SAAS,GAEV,UAAC,EAAuB;QAAtB,gBAAK,EAAE,sBAAQ,EAAE,cAAI;IAAM,OAAA,CAChC;QACE,8BACE,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE,EACzB,uBAAuB,EAAE,EAAC,MAAM,EAAE,4BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAC,GAC5D,CACE,CACP;AAPiC,CAOjC,CAAC;;AACF,kBAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/formatText.js b/lib/components/AppMenu/common/Markdown/formatText.js new file mode 100644 index 0000000..96e5fe4 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/formatText.js @@ -0,0 +1,17 @@ +"use strict"; +var marked = require("marked"); +var syntax_highlighter_1 = require("./syntax-highlighter"); +var options = { + breaks: true, + gfm: true, + highlight: syntax_highlighter_1.default, + tables: true, + sanitize: true, + smartLists: true, +}; +function default_1(text) { + return typeof text !== 'string' ? '' : marked(text.toString(), options); +} +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = default_1; +//# sourceMappingURL=formatText.js.map \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/formatText.js.map b/lib/components/AppMenu/common/Markdown/formatText.js.map new file mode 100644 index 0000000..a98e395 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/formatText.js.map @@ -0,0 +1 @@ +{"version":3,"file":"formatText.js","sourceRoot":"","sources":["../../../../../src/components/AppMenu/common/Markdown/formatText.ts"],"names":[],"mappings":";AAAA,+BAAiC;AAEjC,2DAA6C;AAE7C,IAAM,OAAO,GAAG;IACd,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;IACT,SAAS,8BAAA;IACT,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,mBAAyB,IAAY;IACnC,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;;AAFD,4BAEC"} \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/index.js b/lib/components/AppMenu/common/Markdown/index.js new file mode 100644 index 0000000..d238688 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/index.js @@ -0,0 +1,10 @@ +"use strict"; +var React = require("react"); +var formatText_1 = require("./formatText"); +var Markdown = function (_a) { + var style = _a.style, children = _a.children; + return (React.createElement("span", { className: 'cr-markdown', style: style ? style : {}, dangerouslySetInnerHTML: { __html: formatText_1.default(children) } })); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Markdown; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/index.js.map b/lib/components/AppMenu/common/Markdown/index.js.map new file mode 100644 index 0000000..6b7c972 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/AppMenu/common/Markdown/index.tsx"],"names":[],"mappings":";AAAA,6BAA+B;AAE/B,2CAAsC;AAEtC,IAAM,QAAQ,GAET,UAAC,EAAiB;QAAhB,gBAAK,EAAE,sBAAQ;IAAM,OAAA,CAC1B,8BACE,SAAS,EAAC,aAAa,EACvB,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE,EACzB,uBAAuB,EAAE,EAAC,MAAM,EAAE,oBAAU,CAAC,QAAQ,CAAC,EAAC,GACvD,CACH;AAN2B,CAM3B,CAAC;;AACF,kBAAe,QAAQ,CAAC"} \ No newline at end of file diff --git a/lib/components/AppMenu/common/Markdown/syntax-highlighter.js b/lib/components/AppMenu/common/Markdown/syntax-highlighter.js new file mode 100644 index 0000000..2112945 --- /dev/null +++ b/lib/components/AppMenu/common/Markdown/syntax-highlighter.js @@ -0,0 +1,38 @@ +"use strict"; +var index_1 = require("../../../../index"); +function highlight(text, lang) { + var scopeName = "source." + lang; + var grammar = index_1.editor.grammar.getFromScope(scopeName); + if (!grammar) { + return text; + } + var lineTokens = index_1.editor.grammar.tokenizeLines(grammar, text); + if (lineTokens.length > 0) { + var lastLineTokens = lineTokens[lineTokens.length - 1]; + if (lastLineTokens.length === 1 && lastLineTokens[0].value === '') { + lineTokens.pop(); + } + } + var html = '
';
+ lineTokens.forEach(function (line) {
+ html += '';
+ line.forEach(function (_a) {
+ var value = _a.value, scopes = _a.scopes;
+ if (!value) {
+ value = ' ';
+ }
+ scopes.forEach(function (scope) {
+ html += "";
+ });
+ html += "" + value;
+ scopes.forEach(function (scope) {
+ html += '';
+ });
+ });
+ });
+ html += '';
+ return html;
+}
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = highlight;
+//# sourceMappingURL=syntax-highlighter.js.map
\ No newline at end of file
diff --git a/lib/components/AppMenu/common/Markdown/syntax-highlighter.js.map b/lib/components/AppMenu/common/Markdown/syntax-highlighter.js.map
new file mode 100644
index 0000000..f01a09c
--- /dev/null
+++ b/lib/components/AppMenu/common/Markdown/syntax-highlighter.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"syntax-highlighter.js","sourceRoot":"","sources":["../../../../../src/components/AppMenu/common/Markdown/syntax-highlighter.ts"],"names":[],"mappings":";AAAA,2CAAyC;AAEzC,mBAAkC,IAAY,EAAE,IAAY;IAC1D,IAAM,SAAS,GAAG,YAAU,IAAM,CAAC;IAEnC,IAAM,OAAO,GAAG,cAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEvD,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IAED,IAAM,UAAU,GAAG,cAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/D,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,UAAU,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,oCAAoC,CAAC;IAEhD,UAAU,CAAC,OAAO,CAAC,UAAA,IAAI;QACrB,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,gBAAK,EAAE,kBAAM;YAE1B,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACX,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,mBAAgB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,QAAI,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,KAAG,KAAO,CAAC;YAEnB,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,SAAS,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,cAAc,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC;AACd,CAAC;;AAvCD,4BAuCC"}
\ No newline at end of file
diff --git a/lib/components/AppMenu/common/RouteButton.js b/lib/components/AppMenu/common/RouteButton.js
new file mode 100644
index 0000000..f32bea5
--- /dev/null
+++ b/lib/components/AppMenu/common/RouteButton.js
@@ -0,0 +1,30 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var React = require("react");
+var react_redux_1 = require("react-redux");
+var actions_1 = require("../../../actions");
+var RaisedButton_1 = require("material-ui/RaisedButton");
+var RouteButton = (function (_super) {
+ __extends(RouteButton, _super);
+ function RouteButton() {
+ return _super.apply(this, arguments) || this;
+ }
+ RouteButton.prototype.render = function () {
+ var _a = this.props, label = _a.label, route = _a.route, style = _a.style, routeSet = _a.routeSet;
+ return (React.createElement(RaisedButton_1.default, { label: label, style: style || {}, onTouchTap: routeSet.bind(this, route), secondary: true }));
+ };
+ return RouteButton;
+}(React.Component));
+var mapStateToProps = function (state, props) { return ({
+ label: props.label,
+ route: props.route,
+ style: props.style || {}
+}); };
+var mapDispatchToProps = { routeSet: actions_1.routeSet };
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(RouteButton);
+//# sourceMappingURL=RouteButton.js.map
\ No newline at end of file
diff --git a/lib/components/AppMenu/common/RouteButton.js.map b/lib/components/AppMenu/common/RouteButton.js.map
new file mode 100644
index 0000000..4ae367a
--- /dev/null
+++ b/lib/components/AppMenu/common/RouteButton.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"RouteButton.js","sourceRoot":"","sources":["../../../../src/components/AppMenu/common/RouteButton.tsx"],"names":[],"mappings":";;;;;;AAAA,6BAA+B;AAC/B,2CAAoC;AAEpC,4CAA0C;AAC1C,yDAAoD;AAEpD;IAA0B,+BAEpB;IAFN;;IAcA,CAAC;IAXQ,4BAAM,GAAb;QACQ,IAAA,eAA4C,EAA3C,gBAAK,EAAE,gBAAK,EAAE,gBAAK,EAAE,sBAAQ,CAAe;QACnD,MAAM,CAAC,CACH,oBAAC,sBAAY,IACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EACtC,SAAS,EAAE,IAAI,GACf,CACL,CAAC;IACJ,CAAC;IACH,kBAAC;AAAD,CAAC,AAdD,CAA0B,KAAK,CAAC,SAAS,GAcxC;AASD,IAAM,eAAe,GAAG,UAAC,KAAK,EAAE,KAAK,IAAK,OAAA,CAAC;IACzC,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;CACzB,CAAC,EAJwC,CAIxC,CAAC;AACH,IAAM,kBAAkB,GAAG,EAAC,QAAQ,oBAAA,EAAC,CAAC;;AAEtC,kBAAe,qBAAO,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,WAAW,CAAC,CAAC"}
\ No newline at end of file
diff --git a/lib/components/AppMenu/common/TextEditor/index.js b/lib/components/AppMenu/common/TextEditor/index.js
new file mode 100644
index 0000000..c09a087
--- /dev/null
+++ b/lib/components/AppMenu/common/TextEditor/index.js
@@ -0,0 +1,42 @@
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var React = require("react");
+;
+var styles = {
+ editor: {
+ textAlign: 'left',
+ },
+};
+var TextEditor = (function (_super) {
+ __extends(TextEditor, _super);
+ function TextEditor() {
+ var _this = _super.apply(this, arguments) || this;
+ _this.ed = atom.workspace.buildTextEditor();
+ return _this;
+ }
+ TextEditor.prototype.get = function () {
+ return this.ed.getText();
+ };
+ TextEditor.prototype.render = function () {
+ return React.createElement("div", { id: this.props.name, style: styles.editor });
+ };
+ TextEditor.prototype.componentDidMount = function () {
+ var _a = this.props, name = _a.name, text = _a.text, lang = _a.lang, placeholder = _a.placeholder;
+ this.ed.setGrammar(atom.grammars.grammarForScopeName("source." + lang));
+ if (text) {
+ this.ed.setText(text || '');
+ }
+ if (placeholder) {
+ this.ed.setPlaceholderText(placeholder);
+ }
+ document.querySelector("#" + name).appendChild(this.ed.getElement());
+ };
+ return TextEditor;
+}(React.Component));
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = TextEditor;
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/components/AppMenu/common/TextEditor/index.js.map b/lib/components/AppMenu/common/TextEditor/index.js.map
new file mode 100644
index 0000000..9722fa0
--- /dev/null
+++ b/lib/components/AppMenu/common/TextEditor/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/AppMenu/common/TextEditor/index.tsx"],"names":[],"mappings":";;;;;;AAAA,6BAA+B;AAI9B,CAAC;AAEF,IAAM,MAAM,GAAY;IACtB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM;KAClB;CACF,CAAC;AAEF;IAAwC,8BAGlC;IAHN;QAAA,kDA4BC;QAtBQ,QAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;;IAsB/C,CAAC;IArBQ,wBAAG,GAAV;QACE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACM,2BAAM,GAAb;QACE,MAAM,CAAC,6BAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAI,CAAC;IAC5D,CAAC;IACO,sCAAiB,GAAzB;QACQ,IAAA,eAA4C,EAA3C,cAAI,EAAE,cAAI,EAAE,cAAI,EAAE,4BAAW,CAAe;QAEnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAChB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAU,IAAM,CAAC,CACpD,CAAC;QACF,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,QAAQ,CAAC,aAAa,CAAC,MAAI,IAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IACH,iBAAC;AAAD,CAAC,AA5BD,CAAwC,KAAK,CAAC,SAAS,GA4BtD;;AA5BD,6BA4BC"}
\ No newline at end of file
diff --git a/lib/components/common/Markdown/CodeBlock.js.map b/lib/components/common/Markdown/CodeBlock.js.map
index 9d8ff58..aae6e06 100644
--- a/lib/components/common/Markdown/CodeBlock.js.map
+++ b/lib/components/common/Markdown/CodeBlock.js.map
@@ -1 +1 @@
-{"version":3,"file":"CodeBlock.js","sourceRoot":"","sources":["../../../../src/components/Common/Markdown/CodeBlock.tsx"],"names":[],"mappings":";AAAA,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAE/B,mCAAsB,sBAAsB,CAAC,CAAA;AAE7C,IAAM,SAAS,GAEV,UAAC,EAAuB;QAAtB,gBAAK,EAAE,sBAAQ,EAAE,cAAI;IAAM,OAAA,CAChC,qBAAC,GAAG;QACF,qBAAC,IAAI,IACH,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,EAAG,EAC1B,uBAAuB,EAAE,EAAC,MAAM,EAAE,4BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAC7D;KACE,CACP;AAPiC,CAOjC,CAAC;AACF;kBAAe,SAAS,CAAC"}
\ No newline at end of file
+{"version":3,"file":"CodeBlock.js","sourceRoot":"","sources":["../../../../src/components/common/Markdown/CodeBlock.tsx"],"names":[],"mappings":";AAAA,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAE/B,mCAAsB,sBAAsB,CAAC,CAAA;AAE7C,IAAM,SAAS,GAEV,UAAC,EAAuB;QAAtB,gBAAK,EAAE,sBAAQ,EAAE,cAAI;IAAM,OAAA,CAChC,qBAAC,GAAG;QACF,qBAAC,IAAI,IACH,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,EAAG,EAC1B,uBAAuB,EAAE,EAAC,MAAM,EAAE,4BAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAC7D;KACE,CACP;AAPiC,CAOjC,CAAC;AACF;kBAAe,SAAS,CAAC"}
\ No newline at end of file
diff --git a/lib/components/common/Markdown/formatText.js.map b/lib/components/common/Markdown/formatText.js.map
index 543a379..70eb91b 100644
--- a/lib/components/common/Markdown/formatText.js.map
+++ b/lib/components/common/Markdown/formatText.js.map
@@ -1 +1 @@
-{"version":3,"file":"formatText.js","sourceRoot":"","sources":["../../../../src/components/Common/Markdown/formatText.ts"],"names":[],"mappings":";AAAA,IAAY,MAAM,WAAM,QAAQ,CAAC,CAAA;AAEjC,mCAAsB,sBAAsB,CAAC,CAAA;AAE7C,IAAM,OAAO,GAAG;IACd,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;IACT,uCAAS;IACT,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,mBAAyB,IAAY;IACnC,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAFD;2BAEC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"formatText.js","sourceRoot":"","sources":["../../../../src/components/common/Markdown/formatText.ts"],"names":[],"mappings":";AAAA,IAAY,MAAM,WAAM,QAAQ,CAAC,CAAA;AAEjC,mCAAsB,sBAAsB,CAAC,CAAA;AAE7C,IAAM,OAAO,GAAG;IACd,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,IAAI;IACT,uCAAS;IACT,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,mBAAyB,IAAY;IACnC,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAFD;2BAEC,CAAA"}
\ No newline at end of file
diff --git a/lib/components/common/Markdown/syntax-highlighter.js.map b/lib/components/common/Markdown/syntax-highlighter.js.map
index 2625a50..d2ed974 100644
--- a/lib/components/common/Markdown/syntax-highlighter.js.map
+++ b/lib/components/common/Markdown/syntax-highlighter.js.map
@@ -1 +1 @@
-{"version":3,"file":"syntax-highlighter.js","sourceRoot":"","sources":["../../../../src/components/Common/Markdown/syntax-highlighter.ts"],"names":[],"mappings":";AAAA,sBAAqB,gBAAgB,CAAC,CAAA;AAEtC,mBAAkC,IAAY,EAAE,IAAY;IAC1D,IAAM,SAAS,GAAG,YAAU,IAAM,CAAC;IAEnC,IAAM,OAAO,GAAG,cAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEvD,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IAED,IAAM,UAAU,GAAG,cAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/D,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,UAAU,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,oCAAoC,CAAC;IAEhD,UAAU,CAAC,OAAO,CAAC,UAAA,IAAI;QACrB,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,gBAAK,EAAE,kBAAM;YAE1B,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACX,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,mBAAgB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,QAAI,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,KAAG,KAAO,CAAC;YAEnB,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,SAAS,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,cAAc,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC;AACd,CAAC;AAvCD;2BAuCC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"syntax-highlighter.js","sourceRoot":"","sources":["../../../../src/components/common/Markdown/syntax-highlighter.ts"],"names":[],"mappings":";AAAA,sBAAqB,gBAAgB,CAAC,CAAA;AAEtC,mBAAkC,IAAY,EAAE,IAAY;IAC1D,IAAM,SAAS,GAAG,YAAU,IAAM,CAAC;IAEnC,IAAM,OAAO,GAAG,cAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEvD,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IAED,IAAM,UAAU,GAAG,cAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/D,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,UAAU,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,oCAAoC,CAAC;IAEhD,UAAU,CAAC,OAAO,CAAC,UAAA,IAAI;QACrB,IAAI,IAAI,oBAAoB,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAC,EAAe;gBAAd,gBAAK,EAAE,kBAAM;YAE1B,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACX,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,mBAAgB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,QAAI,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,KAAG,KAAO,CAAC;YAEnB,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;gBAClB,IAAI,IAAI,SAAS,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,cAAc,CAAC;IACvB,MAAM,CAAC,IAAI,CAAC;AACd,CAAC;AAvCD;2BAuCC,CAAA"}
\ No newline at end of file
diff --git a/lib/components/common/TextEditor/index.js b/lib/components/common/TextEditor/index.js
index e30575a..7f4fed6 100644
--- a/lib/components/common/TextEditor/index.js
+++ b/lib/components/common/TextEditor/index.js
@@ -32,7 +32,10 @@ var TextEditor = (function (_super) {
if (placeholder) {
this.ed.setPlaceholderText(placeholder);
}
- document.querySelector("#" + name).appendChild(this.ed.getElement());
+ var div = document.querySelector("#" + name);
+ if (div) {
+ div.appendChild(this.ed.getElement());
+ }
};
return TextEditor;
}(React.Component));
diff --git a/lib/components/common/TextEditor/index.js.map b/lib/components/common/TextEditor/index.js.map
index 40a7a59..63ed913 100644
--- a/lib/components/common/TextEditor/index.js.map
+++ b/lib/components/common/TextEditor/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Common/TextEditor/index.tsx"],"names":[],"mappings":";;;;;;AAAA,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAI9B,CAAC;AAEF,IAAM,MAAM,GAAY;IACtB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM;KAClB;CACF,CAAC;AAEF;IAAwC,8BAGlC;IAHN;QAAwC,8BAGlC;QAGG,OAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;IAsB/C,CAAC;IArBQ,wBAAG,GAAV;QACE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACM,2BAAM,GAAb;QACE,MAAM,CAAC,qBAAC,GAAG,IAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK,EAAC,KAAK,EAAE,MAAM,CAAC,MAAO,EAAG,CAAC;IAC5D,CAAC;IACO,sCAAiB,GAAzB;QACE,IAAA,eAAkD,EAA3C,cAAI,EAAE,cAAI,EAAE,cAAI,EAAE,4BAAW,CAAe;QAEnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAChB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAU,IAAM,CAAC,CACpD,CAAC;QACF,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,QAAQ,CAAC,aAAa,CAAC,MAAI,IAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IACH,iBAAC;AAAD,CAAC,AA5BD,CAAwC,KAAK,CAAC,SAAS,GA4BtD;AA5BD;4BA4BC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/common/TextEditor/index.tsx"],"names":[],"mappings":";;;;;;AAAA,IAAY,KAAK,WAAM,OAAO,CAAC,CAAA;AAI9B,CAAC;AAEF,IAAM,MAAM,GAAY;IACtB,MAAM,EAAE;QACN,SAAS,EAAE,MAAM;KAClB;CACF,CAAC;AAEF;IAAwC,8BAGlC;IAHN;QAAwC,8BAGlC;QAGG,OAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;IAyB/C,CAAC;IAxBQ,wBAAG,GAAV;QACE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACM,2BAAM,GAAb;QACE,MAAM,CAAC,qBAAC,GAAG,IAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK,EAAC,KAAK,EAAE,MAAM,CAAC,MAAO,EAAG,CAAC;IAC5D,CAAC;IACO,sCAAiB,GAAzB;QACE,IAAA,eAAkD,EAA3C,cAAI,EAAE,cAAI,EAAE,cAAI,EAAE,4BAAW,CAAe;QAEnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAChB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAU,IAAM,CAAC,CACpD,CAAC;QACF,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACT,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAI,IAAM,CAAC,CAAC;QAC/C,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACR,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AA/BD,CAAwC,KAAK,CAAC,SAAS,GA+BtD;AA/BD;4BA+BC,CAAA"}
\ No newline at end of file
diff --git a/lib/modules/alert/index.js.map b/lib/modules/alert/index.js.map
index e91dbbe..6950df7 100644
--- a/lib/modules/alert/index.js.map
+++ b/lib/modules/alert/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/alert/index.ts"],"names":[],"mappings":";AAAA,sBAAqD,SAAS,CAAC,CAAA;AAGlD,cAAM,GAAG;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CAChB,CAAC;AAGW,cAAM,GAAa;IAC9B,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,cAAM,CAAC,IAAI;CACnB,CAAC;AAEF,IAAM,IAAI,GAAG;IACX,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,IAAI,OAAO,GAAa,cAAM,CAAC;AAM/B,kBAAkB,CAAW;IAC3B,CAAC,CAAC,KAAK,GAAG,cAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,cAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,cAAc,GAAgB,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACrC,OAAO,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAQD,eACE,KAAc,EAAE,MAAc;IAA9B,qBAAc,GAAd,sBAAc;IAEd,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpB,KAAK,oBAAY;YACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,kBAAU;YACb,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAExC,KAAK,mBAAW;YACd,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD;YACE,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAjBD;uBAiBC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/alert/index.ts"],"names":[],"mappings":";AAAA,sBAAoD,SAAS,CAAC,CAAA;AAGjD,cAAM,GAAG;IACpB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;CAChB,CAAC;AAGW,cAAM,GAAa;IAC9B,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,cAAM,CAAC,IAAI;CACnB,CAAC;AAEF,IAAM,IAAI,GAAG;IACX,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,IAAI,OAAO,GAAa,cAAM,CAAC;AAM/B,kBAAkB,CAAW;IAC3B,CAAC,CAAC,KAAK,GAAG,cAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,cAAM,CAAC,IAAI,CAAC;IAC1C,IAAI,cAAc,GAAgB,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACrC,OAAO,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAQD,eACE,KAAc,EAAE,MAAc;IAA9B,qBAAc,GAAd,sBAAc;IAEd,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpB,KAAK,oBAAY;YACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,kBAAU;YACb,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAExC,KAAK,mBAAW;YACd,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD;YACE,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAjBD;uBAiBC,CAAA"}
\ No newline at end of file
diff --git a/lib/modules/editor/actions.js b/lib/modules/editor/actions.js
index ef79a45..3199041 100644
--- a/lib/modules/editor/actions.js
+++ b/lib/modules/editor/actions.js
@@ -1,4 +1,5 @@
"use strict";
+var actions_1 = require('../../actions');
var types_1 = require('./types');
var path_1 = require('path');
function editorDevToolsToggle() {
@@ -17,7 +18,10 @@ function editorOpen(file, options) {
}
exports.editorOpen = editorOpen;
function editorSave() {
- return { type: types_1.EDITOR_SAVE };
+ return function (dispatch) {
+ dispatch({ type: types_1.EDITOR_SAVE });
+ dispatch(actions_1.testRun());
+ };
}
exports.editorSave = editorSave;
function editorSet(content) {
diff --git a/lib/modules/editor/actions.js.map b/lib/modules/editor/actions.js.map
index ee7a38e..8cfad8e 100644
--- a/lib/modules/editor/actions.js.map
+++ b/lib/modules/editor/actions.js.map
@@ -1 +1 @@
-{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/modules/editor/actions.ts"],"names":[],"mappings":";AAAA,sBAIO,SAAS,CAAC,CAAA;AACjB,qBAAmB,MAAM,CAAC,CAAA;AAE1B;IACE,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAsB,EAAE,CAAC;AAC1C,CAAC;AAFe,4BAAoB,uBAEnC,CAAA;AAED,sBAA6B,OAAe;IAC1C,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAa,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACvD,CAAC;AAFe,oBAAY,eAE3B,CAAA;AAGD,oBAA2B,IAAY,EAAE,OAAe;IAEtD,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QACxB,IAAI,GAAG,WAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,OAAO,EAAE,EAAE,UAAI,EAAE,gBAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AANe,kBAAU,aAMzB,CAAA;AAED;IACE,MAAM,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,CAAC;AAC/B,CAAC;AAFe,kBAAU,aAEzB,CAAA;AAED,mBAA0B,OAAe;IACvC,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAU,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACpD,CAAC;AAFe,iBAAS,YAExB,CAAA;AAED,sBAA6B,OAAe;IAC1C,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAa,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACvD,CAAC;AAFe,oBAAY,eAE3B,CAAA;AAED,oCAA2C,EAAU,EAAE,OAAe;IAEpE,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QAChB,wBAAG,CAAgB;QAC3B,QAAQ,CAAC;YACP,IAAI,EAAE,sCAA8B;YACpC,OAAO,EAAE,EAAE,MAAE,EAAE,gBAAO,EAAE,QAAG,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AATe,kCAA0B,6BASzC,CAAA;AAED,iCAAwC,EAAU,EAAE,IAAY;IAE9D,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QACxB,IAAA,eAAoC,EAA5B,YAAG,EAAE,sBAAQ,CAAgB;QACrC,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC,QAAQ,CAAC;YACP,IAAI,EAAE,mCAA2B;YACjC,OAAO,EAAE,EAAE,MAAE,EAAE,UAAI,EAAE,QAAG,EAAE,wBAAW,EAAE;SACxC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAVe,+BAAuB,0BAUtC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/modules/editor/actions.ts"],"names":[],"mappings":";AAAA,wBAAsB,eAAe,CAAC,CAAA;AACtC,sBAIO,SAAS,CAAC,CAAA;AACjB,qBAAmB,MAAM,CAAC,CAAA;AAE1B;IACE,MAAM,CAAC,EAAE,IAAI,EAAE,8BAAsB,EAAE,CAAC;AAC1C,CAAC;AAFe,4BAAoB,uBAEnC,CAAA;AAED,sBAA6B,OAAe;IAC1C,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAa,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACvD,CAAC;AAFe,oBAAY,eAE3B,CAAA;AAGD,oBAA2B,IAAY,EAAE,OAAe;IAEtD,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QACxB,IAAI,GAAG,WAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,OAAO,EAAE,EAAE,UAAI,EAAE,gBAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AANe,kBAAU,aAMzB,CAAA;AAED;IACE,MAAM,CAAC,UAAC,QAAQ;QACd,QAAQ,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,CAAC,CAAC;QAChC,QAAQ,CAAC,iBAAO,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC;AALe,kBAAU,aAKzB,CAAA;AAED,mBAA0B,OAAe;IACvC,MAAM,CAAC,EAAE,IAAI,EAAE,kBAAU,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACpD,CAAC;AAFe,iBAAS,YAExB,CAAA;AAED,sBAA6B,OAAe;IAC1C,MAAM,CAAC,EAAE,IAAI,EAAE,qBAAa,EAAE,OAAO,EAAE,EAAE,gBAAO,EAAE,EAAE,CAAC;AACvD,CAAC;AAFe,oBAAY,eAE3B,CAAA;AAED,oCAA2C,EAAU,EAAE,OAAe;IAEpE,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QAChB,wBAAG,CAAgB;QAC3B,QAAQ,CAAC;YACP,IAAI,EAAE,sCAA8B;YACpC,OAAO,EAAE,EAAE,MAAE,EAAE,gBAAO,EAAE,QAAG,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AATe,kCAA0B,6BASzC,CAAA;AAED,iCAAwC,EAAU,EAAE,IAAY;IAE9D,MAAM,CAAC,UAAC,QAAQ,EAAE,QAAQ;QACxB,IAAA,eAAoC,EAA5B,YAAG,EAAE,sBAAQ,CAAgB;QACrC,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC,QAAQ,CAAC;YACP,IAAI,EAAE,mCAA2B;YACjC,OAAO,EAAE,EAAE,MAAE,EAAE,UAAI,EAAE,QAAG,EAAE,wBAAW,EAAE;SACxC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAVe,+BAAuB,0BAUtC,CAAA"}
\ No newline at end of file
diff --git a/lib/modules/setup/utils/check-system.js.map b/lib/modules/setup/utils/check-system.js.map
index 0610179..9a0d7eb 100644
--- a/lib/modules/setup/utils/check-system.js.map
+++ b/lib/modules/setup/utils/check-system.js.map
@@ -1 +1 @@
-{"version":3,"file":"check-system.js","sourceRoot":"","sources":["../../../../src/modules/setup/utils/check-system.ts"],"names":[],"mappings":";AAAA,gCAA6B,gCAAgC,CAAC,CAAA;AAC9D,uBAAoB,uBAAuB,CAAC,CAAA;AAC5C,yCAAwB,0BAA0B,CAAC,CAAA;AAEnD,IAAM,QAAQ,GAAG;IACf,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,OAAO;CACb,CAAC;AASF,oBAA2B,OAAe;IACxC,IAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAI,UAAU,GAAqB,kCAAW,CAAC,OAAO,EAAE,IAAI,CAAC;aAC1D,IAAI,CAAC,UAAC,GAAW,IAAK,OAAA,gCAAc,CAAC,GAAG,EAAE,UAAU,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAC1D,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO,CAAE,KAAK,CAAC,CAAC;QAClB,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAXe,kBAAU,aAWzB,CAAA;AAUD;IACE,EAAE,CAAC,CAAC,CAAC,cAAK,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,kCAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,GAAW;QACxD,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAVe,gCAAwB,2BAUvC,CAAA"}
\ No newline at end of file
+{"version":3,"file":"check-system.js","sourceRoot":"","sources":["../../../../src/modules/setup/utils/check-system.ts"],"names":[],"mappings":";AAAA,gCAA6B,gCAAgC,CAAC,CAAA;AAC9D,uBAAoB,uBAAuB,CAAC,CAAA;AAC5C,yCAAwB,0BAA0B,CAAC,CAAA;AAEnD,IAAM,QAAQ,GAAG;IACf,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,OAAO;CACb,CAAC;AASF,oBAA2B,OAAe;IACxC,IAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAI,UAAU,GAAqB,kCAAW,CAAC,OAAO,EAAE,IAAI,CAAC;aAC1D,IAAI,CAAC,UAAC,GAAW,IAAK,OAAA,gCAAc,CAAC,GAAG,EAAE,UAAU,CAAC,EAA/B,CAA+B,CAAC,CAAC;QAC1D,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,IAAI,CAAC,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAXe,kBAAU,aAWzB,CAAA;AAUD;IACE,EAAE,CAAC,CAAC,CAAC,cAAK,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,kCAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,GAAW;QACxD,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAVe,gCAAwB,2BAUvC,CAAA"}
\ No newline at end of file
diff --git a/lib/options/configureStore.js b/lib/options/configureStore.js
index 84cb003..5d83c51 100644
--- a/lib/options/configureStore.js
+++ b/lib/options/configureStore.js
@@ -6,7 +6,7 @@ var configureStore = function (_a) {
var reducer = _a.reducer, devMode = _a.devMode;
var middlewares = [redux_thunk_1.default];
if (devMode) {
- var logger = createLogger();
+ var logger = createLogger({ diff: true });
middlewares.push(logger);
}
else {
diff --git a/lib/options/configureStore.js.map b/lib/options/configureStore.js.map
index 96cd00e..f443c70 100644
--- a/lib/options/configureStore.js.map
+++ b/lib/options/configureStore.js.map
@@ -1 +1 @@
-{"version":3,"file":"configureStore.js","sourceRoot":"","sources":["../../src/options/configureStore.ts"],"names":[],"mappings":";AAAA,sBAA6C,OAAO,CAAC,CAAA;AACrD,IAAY,YAAY,WAAM,cAAc,CAAC,CAAA;AAC7C,4BAAkB,aAAa,CAAC,CAAA;AAEhC,IAAM,cAAc,GAAG,UAAC,EAAkB;QAAjB,oBAAO,EAAE,oBAAO;IAEvC,IAAI,WAAW,GAAG,CAAC,qBAAK,CAAC,CAAC;IAG1B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACZ,IAAM,MAAM,GAAI,YAAoB,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;IACtC,CAAC;IAGD,IAAM,KAAK,GAAqB,mBAAW,CACzC,OAAO,EACP,uBAAe,eAAI,WAAW,CAAC,CAChC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;kBAAe,cAAc,CAAC"}
\ No newline at end of file
+{"version":3,"file":"configureStore.js","sourceRoot":"","sources":["../../src/options/configureStore.ts"],"names":[],"mappings":";AAAA,sBAA6C,OAAO,CAAC,CAAA;AACrD,IAAY,YAAY,WAAM,cAAc,CAAC,CAAA;AAC7C,4BAAkB,aAAa,CAAC,CAAA;AAEhC,IAAM,cAAc,GAAG,UAAC,EAAkB;QAAjB,oBAAO,EAAE,oBAAO;IAEvC,IAAI,WAAW,GAAG,CAAC,qBAAK,CAAC,CAAC;IAG1B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACZ,IAAM,MAAM,GAAI,YAAoB,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;IACtC,CAAC;IAGD,IAAM,KAAK,GAAqB,mBAAW,CACzC,OAAO,EACP,uBAAe,eAAI,WAAW,CAAC,CAChC,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;kBAAe,cAAc,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index dac0fca..264091b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,5 @@
{
"name": "core-coderoad",
- "version": "1.0.0",
"description": "Interactive tutorial platform",
"keywords": [
"coderoad",
@@ -22,16 +21,22 @@
"*.md"
],
"main": "./lib/index.js",
- "repository": "https://github.com/coderoad/core-coderoad",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/coderoad/core-coderoad.git"
+ },
"scripts": {
"compile": "tsc",
- "test": "jest"
+ "commit": "git-cz",
+ "test": "jest",
+ "mocks": "tsc -p ./src/__mocks__",
+ "semantic-release": "semantic-release pre && npm publish && semantic-release post"
},
"dependencies": {
"atom-plugin-command-line": "1.0.2",
"coderoad-cli": "0.10.0",
"marked": "0.3.6",
- "material-ui": "0.15.4",
+ "material-ui": "0.16.0",
"node-file-exists": "1.1.0",
"react": "15.3.2",
"react-dom": "15.3.2",
@@ -39,25 +44,33 @@
"react-router-sans-urls": "0.1.2",
"react-tap-event-plugin": "1.0.0",
"redux": "3.6.0",
- "redux-logger": "2.6.1",
+ "redux-logger": "2.7.0",
"redux-thunk": "2.1.0",
"reselect": "2.5.4"
},
"devDependencies": {
"coderoad-cli": "^0.10.0",
+ "commitizen": "^2.8.6",
+ "cz-conventional-changelog": "^1.2.0",
"electron-chromedriver": "^1.4.0",
- "eslint": "^3.6.0",
- "eslint-plugin-react": "^6.3.0",
- "jest": "^15.1.1",
- "jest-cli": "^15.1.1",
+ "eslint": "^3.8.1",
+ "eslint-plugin-react": "^6.4.1",
+ "jest": "^16.0.1",
+ "jest-cli": "^16.0.1",
"react-addons-test-utils": "15.3.2",
"react-test-renderer": "15.3.2",
"redux-mock-store": "^1.2.1",
"selenium-webdriver": "^3.0.0-beta-3",
+ "semantic-release": "^4.3.5",
"spectron": "^3.4.0",
"tslint": "^3.15.1",
- "tslint-react": "^1.0.0",
+ "tslint-react": "^1.1.0",
"typescript": "^2.0.3"
+ },
+ "config": {
+ "commitizen": {
+ "path": "node_modules/cz-conventional-changelog"
+ }
},
"jest": {
"verbose": true,
@@ -70,7 +83,7 @@
],
"testRegex": "src/*/.*\\.test\\.(ts|tsx|js)$",
"coverageDirectory": "src/__coverage__",
- "collectCoverage": false,
+ "collectCoverage": true,
"coveragePathIgnorePatterns": [
"/node_modules/",
"src/typings/",
diff --git a/src/__mocks__/editor/index.js b/src/__mocks__/editor/index.js
new file mode 100644
index 0000000..f3fe684
--- /dev/null
+++ b/src/__mocks__/editor/index.js
@@ -0,0 +1,16 @@
+"use strict";
+exports.editor = {
+ name: 'editorName',
+ directory: function () { return './path/to/dir'; },
+ action: {
+ toggleDevTools: function () { return true; },
+ save: function () { return true; },
+ open: function (file) { return true; },
+ insert: function (text) { return true; },
+ set: function (text) { return true; },
+ scroll: function (text) { return true; },
+ writeFileFromFile: function (options) { return true; },
+ writeFileFromContent: function (options) { return true; },
+ }
+};
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/src/__mocks__/editor/index.js.map b/src/__mocks__/editor/index.js.map
new file mode 100644
index 0000000..3ff0a0e
--- /dev/null
+++ b/src/__mocks__/editor/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAGa,cAAM,GAAG;IACpB,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,cAAM,OAAA,eAAe,EAAf,CAAe;IAChC,MAAM,EAAE;QACN,cAAc,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QAC1B,IAAI,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QAChB,IAAI,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC5B,MAAM,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC9B,GAAG,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC3B,MAAM,EAAE,UAAC,IAAY,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC9B,iBAAiB,EAAE,UAAC,OAAe,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC5C,oBAAoB,EAAE,UAAC,OAAe,IAAK,OAAA,IAAI,EAAJ,CAAI;KAChD;CACF,CAAC"}
\ No newline at end of file
diff --git a/src/__mocks__/editor/index.ts b/src/__mocks__/editor/index.ts
new file mode 100644
index 0000000..e754e51
--- /dev/null
+++ b/src/__mocks__/editor/index.ts
@@ -0,0 +1,17 @@
+/**
+ * Pass in a configuration object to the mock
+ */
+export const editor = {
+ name: 'editorName',
+ directory: () => './path/to/dir',
+ action: {
+ toggleDevTools: () => true,
+ save: () => true,
+ open: (file: string) => true,
+ insert: (text: string) => true,
+ set: (text: string) => true,
+ scroll: (text: string) => true,
+ writeFileFromFile: (options: Object) => true,
+ writeFileFromContent: (options: Object) => true,
+ }
+};
diff --git a/src/__mocks__/tsconfig.json b/src/__mocks__/tsconfig.json
new file mode 100644
index 0000000..6918e6e
--- /dev/null
+++ b/src/__mocks__/tsconfig.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES5",
+ "module": "commonjs",
+ "declaration": false,
+ "noImplicitAny": false,
+ "removeComments": true,
+ "jsx": "react",
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ "sourceMap": true,
+ "moduleResolution": "node",
+ "strictNullChecks": true
+ },
+ "filesGlob": [
+ "*.ts",
+ "**/*.ts",
+ "*.tsx",
+ "**/*.tsx"
+ ],
+ "files": [
+ "editor/index.ts"
+ ]
+}
diff --git a/src/components/Start/Start.test.tsx b/src/components/Start/Start.test.tsx
index 1024381..ab89b47 100644
--- a/src/components/Start/Start.test.tsx
+++ b/src/components/Start/Start.test.tsx
@@ -1,29 +1,32 @@
///